本文整理汇总了C++中IStatistics类的典型用法代码示例。如果您正苦于以下问题:C++ IStatistics类的具体用法?C++ IStatistics怎么用?C++ IStatistics使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了IStatistics类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GPOS_ASSERT
//---------------------------------------------------------------------------
// @function:
// CLogicalUnion::PstatsDerive
//
// @doc:
// Derive statistics
//
//---------------------------------------------------------------------------
IStatistics *
CLogicalUnion::PstatsDerive
(
IMemoryPool *pmp,
CExpressionHandle &exprhdl,
DrgPstat * // not used
)
const
{
GPOS_ASSERT(Esp(exprhdl) > EspNone);
// union is transformed into a group by over an union all
// we follow the same route to compute statistics
IStatistics *pstatsUnionAll = CLogicalUnionAll::PstatsDeriveUnionAll(pmp, exprhdl);
// computed columns
DrgPul *pdrgpulComputedCols = GPOS_NEW(pmp) DrgPul(pmp);
IStatistics *pstats = CLogicalGbAgg::PstatsDerive
(
pmp,
pstatsUnionAll,
m_pdrgpcrOutput, // we group by the output columns
pdrgpulComputedCols, // no computed columns for set ops
NULL // no keys, use all grouping cols
);
// clean up
pdrgpulComputedCols->Release();
pstatsUnionAll->Release();
return pstats;
}
示例2: GPOS_ASSERT
//---------------------------------------------------------------------------
// @function:
// CLogicalInnerIndexApply::PstatsDerive
//
// @doc:
// Derive statistics
//
//---------------------------------------------------------------------------
IStatistics *
CLogicalInnerIndexApply::PstatsDerive
(
IMemoryPool *pmp,
CExpressionHandle &exprhdl,
DrgPstat* // pdrgpstatCtxt
)
const
{
GPOS_ASSERT(EspNone < Esp(exprhdl));
IStatistics *pstatsOuter = exprhdl.Pstats(0);
IStatistics *pstatsInner = exprhdl.Pstats(1);
CExpression *pexprScalar = exprhdl.PexprScalarChild(2 /*ulChildIndex*/);
// join stats of the children
DrgPstat *pdrgpstat = GPOS_NEW(pmp) DrgPstat(pmp);
pstatsOuter->AddRef();
pdrgpstat->Append(pstatsOuter);
pstatsInner->AddRef();
pdrgpstat->Append(pstatsInner);
IStatistics *pstats = CStatisticsUtils::PstatsJoinArray(pmp, false /*fOuterJoin*/, pdrgpstat, pexprScalar);
pdrgpstat->Release();
return pstats;
}
示例3: GPOS_ASSERT
//---------------------------------------------------------------------------
// @function:
// CGroupExpression::PstatsRecursiveDerive
//
// @doc:
// Derive stats recursively on group expression
//
//---------------------------------------------------------------------------
IStatistics *
CGroupExpression::PstatsRecursiveDerive
(
IMemoryPool *, // pmpLocal
IMemoryPool *pmpGlobal,
CReqdPropRelational *prprel,
DrgPstat *pdrgpstatCtxt,
BOOL fComputeRootStats
)
{
GPOS_ASSERT(!Pgroup()->FScalar());
GPOS_ASSERT(!Pgroup()->FImplemented());
GPOS_ASSERT(NULL != pdrgpstatCtxt);
GPOS_CHECK_ABORT;
// trigger recursive property derivation
CExpressionHandle exprhdl(pmpGlobal);
exprhdl.Attach(this);
exprhdl.DeriveProps(NULL /*pdpctxt*/);
// compute required relational properties on child groups
exprhdl.ComputeReqdProps(prprel, 0 /*ulOptReq*/);
// trigger recursive stat derivation
exprhdl.DeriveStats(pdrgpstatCtxt, fComputeRootStats);
IStatistics *pstats = exprhdl.Pstats();
if (NULL != pstats)
{
pstats->AddRef();
}
return pstats;
}
示例4: GPOS_ASSERT
//---------------------------------------------------------------------------
// @function:
// CExpressionHandle::DeriveRootStats
//
// @doc:
// Stat derivation at root operator where handle is attached
//
//---------------------------------------------------------------------------
void
CExpressionHandle::DeriveRootStats
(
DrgPstat *pdrgpstatCtxt
)
{
GPOS_ASSERT(NULL == m_pstats);
CLogical *popLogical = CLogical::PopConvert(Pop());
IStatistics *pstatsRoot = NULL;
if (FAttachedToLeafPattern())
{
// for leaf patterns extracted from memo, trigger state derivation on origin group
GPOS_ASSERT(NULL != m_pexpr);
GPOS_ASSERT(NULL != m_pexpr->Pgexpr());
pstatsRoot = m_pexpr->Pgexpr()->Pgroup()->PstatsRecursiveDerive(m_pmp, m_pmp, CReqdPropRelational::Prprel(m_prp), pdrgpstatCtxt);
pstatsRoot->AddRef();
}
else
{
// otherwise, derive stats using root operator
pstatsRoot = popLogical->PstatsDerive(m_pmp, *this, pdrgpstatCtxt);
}
GPOS_ASSERT(NULL != pstatsRoot);
m_pstats = pstatsRoot;
}
示例5: rtree_get_utilization
size_t rtree_get_utilization(ISpatialIndex *rtree) {
if(rtree == NULL) {
return 0;
}
IStatistics *statistic;
rtree->getStatistics(&statistic);
size_t nodes_num = statistic->getNumberOfData();
delete statistic;
return nodes_num;
}
示例6: GPOS_ASSERT
//---------------------------------------------------------------------------
// @function:
// CLogicalDifferenceAll::PstatsDerive
//
// @doc:
// Derive statistics
//
//---------------------------------------------------------------------------
IStatistics *
CLogicalDifferenceAll::PstatsDerive
(
IMemoryPool *pmp,
CExpressionHandle &exprhdl,
DrgPstat * // not used
)
const
{
GPOS_ASSERT(Esp(exprhdl) > EspNone);
// difference all is transformed into a LASJ,
// we follow the same route to compute statistics
DrgPcrs *pdrgpcrsOutput = GPOS_NEW(pmp) DrgPcrs(pmp);
const ULONG ulSize = m_pdrgpdrgpcrInput->UlLength();
for (ULONG ul = 0; ul < ulSize; ul++)
{
CColRefSet *pcrs = GPOS_NEW(pmp) CColRefSet(pmp, (*m_pdrgpdrgpcrInput)[ul]);
pdrgpcrsOutput->Append(pcrs);
}
IStatistics *pstatsOuter = exprhdl.Pstats(0);
IStatistics *pstatsInner = exprhdl.Pstats(1);
// construct the scalar condition for the LASJ
CExpression *pexprScCond = CUtils::PexprConjINDFCond(pmp, m_pdrgpdrgpcrInput);
// compute the statistics for LASJ
CColRefSet *pcrsOuterRefs = exprhdl.Pdprel()->PcrsOuter();
DrgPstatsjoin *pdrgpstatsjoin = CStatsPredUtils::Pdrgpstatsjoin
(
pmp,
exprhdl,
pexprScCond,
pdrgpcrsOutput,
pcrsOuterRefs
);
IStatistics *pstatsLASJ = pstatsOuter->PstatsLASJoin
(
pmp,
pstatsInner,
pdrgpstatsjoin,
true /* fIgnoreLasjHistComputation*/
);
// clean up
pexprScCond->Release();
pdrgpstatsjoin->Release();
pdrgpcrsOutput->Release();
return pstatsLASJ;
}
示例7:
//---------------------------------------------------------------------------
// @function:
// CLogical::PstatsPassThruOuter
//
// @doc:
// Helper for common case of passing through derived stats
//
//---------------------------------------------------------------------------
IStatistics *
CLogical::PstatsPassThruOuter
(
CExpressionHandle &exprhdl
)
{
GPOS_CHECK_ABORT;
IStatistics *pstats = exprhdl.Pstats(0);
pstats->AddRef();
return pstats;
}
示例8: PstatsBaseTable
//---------------------------------------------------------------------------
// @function:
// CLogicalGet::PstatsDerive
//
// @doc:
// Load up statistics from metadata
//
//---------------------------------------------------------------------------
IStatistics *
CLogicalGet::PstatsDerive
(
IMemoryPool *mp,
CExpressionHandle &exprhdl,
IStatisticsArray * // not used
)
const
{
// requesting stats on distribution columns to estimate data skew
IStatistics *pstatsTable = PstatsBaseTable(mp, exprhdl, m_ptabdesc, m_pcrsDist);
CColRefSet *pcrs = GPOS_NEW(mp) CColRefSet(mp, m_pdrgpcrOutput);
CUpperBoundNDVs *upper_bound_NDVs = GPOS_NEW(mp) CUpperBoundNDVs(pcrs, pstatsTable->Rows());
CStatistics::CastStats(pstatsTable)->AddCardUpperBound(upper_bound_NDVs);
return pstatsTable;
}
示例9: PstatsBaseTable
//---------------------------------------------------------------------------
// @function:
// CLogicalGet::PstatsDerive
//
// @doc:
// Load up statistics from metadata
//
//---------------------------------------------------------------------------
IStatistics *
CLogicalGet::PstatsDerive
(
IMemoryPool *pmp,
CExpressionHandle &exprhdl,
DrgPstat * // not used
)
const
{
// requesting stats on distribution columns to estimate data skew
IStatistics *pstatsTable = PstatsBaseTable(pmp, exprhdl, m_ptabdesc, m_pcrsDist);
CColRefSet *pcrs = GPOS_NEW(pmp) CColRefSet(pmp, m_pdrgpcrOutput);
CUpperBoundNDVs *pubndv = GPOS_NEW(pmp) CUpperBoundNDVs(pcrs, pstatsTable->DRows());
CStatistics::PstatsConvert(pstatsTable)->AddCardUpperBound(pubndv);
return pstatsTable;
}
示例10: PstatsPassThruOuter
//---------------------------------------------------------------------------
// @function:
// CLogicalAssert::PstatsDerive
//
// @doc:
// Derive statistics based on filter predicates
//
//---------------------------------------------------------------------------
IStatistics *
CLogicalAssert::PstatsDerive
(
IMemoryPool *pmp,
CExpressionHandle &exprhdl,
DrgPstat * // not used
)
const
{
CMaxCard maxcard = CLogicalAssert::PopConvert(exprhdl.Pop())->Maxcard(pmp, exprhdl);
if (1 == maxcard.Ull())
{
// a max card of one requires re-scaling stats
IStatistics *pstats = exprhdl.Pstats(0);
return pstats->PstatsScale(pmp, CDouble(1.0 / pstats->DRows()));
}
return PstatsPassThruOuter(exprhdl);
}
示例11: GPOS_NEW
//---------------------------------------------------------------------------
// @function:
// CLogical::PstatsBaseTable
//
// @doc:
// Helper for deriving statistics on a base table
//
//---------------------------------------------------------------------------
IStatistics *
CLogical::PstatsBaseTable
(
IMemoryPool *pmp,
CExpressionHandle &exprhdl,
CTableDescriptor *ptabdesc,
CColRefSet *pcrsStatExtra // additional columns required for stats, not required by parent
)
{
// extract colids and attribute for which detailed stats are necessary
CReqdPropRelational *prprel = CReqdPropRelational::Prprel(exprhdl.Prp());
CColRefSet *pcrsStat = GPOS_NEW(pmp) CColRefSet(pmp);
pcrsStat->Include(prprel->PcrsStat());
if (NULL != pcrsStatExtra)
{
pcrsStat->Include(pcrsStatExtra);
}
DrgPul *pdrgpulHistColIds = GPOS_NEW(pmp) DrgPul(pmp);
DrgPul *pdrgpulHistPos = GPOS_NEW(pmp) DrgPul(pmp);
CUtils::ExtractColIdsAttno(pmp, ptabdesc, pcrsStat, pdrgpulHistColIds, pdrgpulHistPos);
// extract colids and attribute for which widths are necessary
CDrvdPropRelational *pdprel = exprhdl.Pdprel();
CColRefSet *pcrsWidth = pdprel->PcrsOutput();
DrgPul *pdrgpulWidthColIds = GPOS_NEW(pmp) DrgPul(pmp);
DrgPul *pdrgpulWidthPos = GPOS_NEW(pmp) DrgPul(pmp);
CUtils::ExtractColIdsAttno(pmp, ptabdesc, pcrsWidth, pdrgpulWidthColIds, pdrgpulWidthPos);
CMDAccessor *pmda = COptCtxt::PoctxtFromTLS()->Pmda();
IStatistics *pstats = pmda->Pstats(pmp, ptabdesc->Pmdid(), pdrgpulHistPos, pdrgpulHistColIds, pdrgpulWidthPos, pdrgpulWidthColIds);
if (!GPOS_FTRACE(EopttraceDonotCollectMissingStatsCols) && !pstats->FEmpty())
{
CStatisticsUtils::RecordMissingStatisticsColumns(pmp, ptabdesc, pcrsStat, pstats);
}
pcrsStat->Release();
return pstats;
}
示例12: PpfmPassThruOuter
//---------------------------------------------------------------------------
// @function:
// CPhysicalPartitionSelector::PpfmDerive
//
// @doc:
// Derive partition filter map
//
//---------------------------------------------------------------------------
CPartFilterMap *
CPhysicalPartitionSelector::PpfmDerive
(
IMemoryPool *mp,
CExpressionHandle &exprhdl
)
const
{
if (!FHasFilter())
{
return PpfmPassThruOuter(exprhdl);
}
CPartFilterMap *ppfm = PpfmDeriveCombineRelational(mp, exprhdl);
IStatistics *stats = exprhdl.Pstats();
GPOS_ASSERT(NULL != stats);
m_pexprCombinedPredicate->AddRef();
stats->AddRef();
ppfm->AddPartFilter(mp, m_scan_id, m_pexprCombinedPredicate, stats);
return ppfm;
}
示例13: GPOS_ASSERT
//---------------------------------------------------------------------------
// @function:
// CLogicalSelect::PstatsDerive
//
// @doc:
// Derive statistics based on filter predicates
//
//---------------------------------------------------------------------------
IStatistics *
CLogicalSelect::PstatsDerive
(
IMemoryPool *pmp,
CExpressionHandle &exprhdl,
DrgPstat *pdrgpstatCtxt
)
const
{
GPOS_ASSERT(Esp(exprhdl) > EspNone);
IStatistics *pstatsChild = exprhdl.Pstats(0);
if (exprhdl.Pdpscalar(1 /*ulChildIndex*/)->FHasSubquery())
{
// in case of subquery in select predicate, we return child stats
pstatsChild->AddRef();
return pstatsChild;
}
// remove implied predicates from selection condition to avoid cardinality under-estimation
CExpression *pexprScalar = exprhdl.PexprScalarChild(1 /*ulChildIndex*/);
CExpression *pexprPredicate = CPredicateUtils::PexprRemoveImpliedConjuncts(pmp, pexprScalar, exprhdl);
// split selection predicate into local predicate and predicate involving outer references
CExpression *pexprLocal = NULL;
CExpression *pexprOuterRefs = NULL;
// get outer references from expression handle
CColRefSet *pcrsOuter = exprhdl.Pdprel()->PcrsOuter();
CPredicateUtils::SeparateOuterRefs(pmp, pexprPredicate, pcrsOuter, &pexprLocal, &pexprOuterRefs);
pexprPredicate->Release();
IStatistics *pstats = CStatisticsUtils::PstatsFilter(pmp, exprhdl, pstatsChild, pexprLocal, pexprOuterRefs, pdrgpstatCtxt);
pexprLocal->Release();
pexprOuterRefs->Release();
return pstats;
}
示例14: GPOS_ASSERT
//---------------------------------------------------------------------------
// @function:
// CLogicalLimit::PstatsDerive
//
// @doc:
// Derive statistics based on limit
//
//---------------------------------------------------------------------------
IStatistics *
CLogicalLimit::PstatsDerive
(
IMemoryPool *pmp,
CExpressionHandle &exprhdl,
DrgPstat * // not used
)
const
{
GPOS_ASSERT(Esp(exprhdl) > EspNone);
IStatistics *pstatsChild = exprhdl.Pstats(0);
CMaxCard maxcard = this->Maxcard(pmp, exprhdl);
CDouble dRowsMax = CDouble(maxcard.Ull());
if (pstatsChild->DRows() <= dRowsMax)
{
pstatsChild->AddRef();
return pstatsChild;
}
return pstatsChild->PstatsLimit(pmp, dRowsMax);
}
示例15: DeriveStats
//---------------------------------------------------------------------------
// @function:
// CCostContext::ComputeCost
//
// @doc:
// Compute cost of current context,
//
// the function extracts cardinality and row width of owner operator
// and child operators, and then adjusts row estimate obtained from
// statistics based on data distribution obtained from plan properties,
//
// statistics row estimate is computed on logical expressions by
// estimating the size of the whole relation regardless data
// distribution, on the other hand, optimizer's cost model computes
// the cost of a plan instance on some segment,
//
// when a plan produces tuples distributed to multiple segments, we
// need to divide statistics row estimate by the number segments to
// provide a per-segment row estimate for cost computation,
//
// Note that this scaling of row estimate cannot happen during
// statistics derivation since plans are not created yet at this point
//
// this function also extracts number of rebinds of owner operator child
// operators, if statistics are computed using predicates with external
// parameters (outer references), number of rebinds is the total number
// of external parameters' values
//
//---------------------------------------------------------------------------
CCost
CCostContext::CostCompute
(
IMemoryPool *pmp,
DrgPcost *pdrgpcostChildren
)
{
// derive context stats
DeriveStats();
ULONG ulArity = 0;
if (NULL != m_pdrgpoc)
{
ulArity = Pdrgpoc()->UlLength();
}
m_pstats->AddRef();
ICostModel::SCostingInfo ci(pmp, ulArity, GPOS_NEW(pmp) ICostModel::CCostingStats(m_pstats));
ICostModel *pcm = COptCtxt::PoctxtFromTLS()->Pcm();
CExpressionHandle exprhdl(pmp);
exprhdl.Attach(this);
// extract local costing info
DOUBLE dRows = m_pstats->DRows().DVal();
if (CDistributionSpec::EdptPartitioned == Pdpplan()->Pds()->Edpt())
{
// scale statistics row estimate by number of segments
dRows = DRowsPerHost().DVal();
}
ci.SetRows(dRows);
DOUBLE dWidth = m_pstats->DWidth(pmp, m_poc->Prpp()->PcrsRequired()).DVal();
ci.SetWidth(dWidth);
DOUBLE dRebinds = m_pstats->DRebinds().DVal();
ci.SetRebinds(dRebinds);
GPOS_ASSERT_IMP(!exprhdl.FHasOuterRefs(), GPOPT_DEFAULT_REBINDS == (ULONG) (dRebinds) && "invalid number of rebinds when there are no outer references");
// extract children costing info
for (ULONG ul = 0; ul < ulArity; ul++)
{
COptimizationContext *pocChild = (*m_pdrgpoc)[ul];
CCostContext *pccChild = pocChild->PccBest();
GPOS_ASSERT(NULL != pccChild);
IStatistics *pstatsChild = pccChild->Pstats();
DOUBLE dRowsChild = pstatsChild->DRows().DVal();
if (CDistributionSpec::EdptPartitioned == pccChild->Pdpplan()->Pds()->Edpt())
{
// scale statistics row estimate by number of segments
dRowsChild = pccChild->DRowsPerHost().DVal();
}
ci.SetChildRows(ul, dRowsChild);
DOUBLE dWidthChild = pstatsChild->DWidth(pmp, pocChild->Prpp()->PcrsRequired()).DVal();
ci.SetChildWidth(ul, dWidthChild);
DOUBLE dRebindsChild = pstatsChild->DRebinds().DVal();
ci.SetChildRebinds(ul, dRebindsChild);
GPOS_ASSERT_IMP(!exprhdl.FHasOuterRefs(ul), GPOPT_DEFAULT_REBINDS == (ULONG) (dRebindsChild) && "invalid number of rebinds when there are no outer references");
DOUBLE dCostChild = (*pdrgpcostChildren)[ul]->DVal();
ci.SetChildCost(ul, dCostChild);
}
// compute cost using the underlying cost model
return pcm->Cost(exprhdl, &ci);
}