private boolean canPushCrossJoin(QueryMetadataInterface metadata, PlanNode accessNode1, PlanNode accessNode2) throws QueryMetadataException, TeiidComponentException { float cost1 = NewCalculateCostUtil.computeCostForTree(accessNode1, metadata); float cost2 = NewCalculateCostUtil.computeCostForTree(accessNode2, metadata); float acceptableCost = 64; return !((cost1 == NewCalculateCostUtil.UNKNOWN_VALUE || cost2 == NewCalculateCostUtil.UNKNOWN_VALUE || (cost1 > acceptableCost && cost2 > acceptableCost))); }
private boolean canPushCrossJoin(QueryMetadataInterface metadata, PlanNode accessNode1, PlanNode accessNode2) throws QueryMetadataException, TeiidComponentException { float cost1 = NewCalculateCostUtil.computeCostForTree(accessNode1, metadata); float cost2 = NewCalculateCostUtil.computeCostForTree(accessNode2, metadata); float acceptableCost = 64; return !((cost1 == NewCalculateCostUtil.UNKNOWN_VALUE || cost2 == NewCalculateCostUtil.UNKNOWN_VALUE || (cost1 > acceptableCost && cost2 > acceptableCost))); }
private boolean canPushCrossJoin(QueryMetadataInterface metadata, PlanNode accessNode1, PlanNode accessNode2) throws QueryMetadataException, TeiidComponentException { float cost1 = NewCalculateCostUtil.computeCostForTree(accessNode1, metadata); float cost2 = NewCalculateCostUtil.computeCostForTree(accessNode2, metadata); float acceptableCost = 64; return !((cost1 == NewCalculateCostUtil.UNKNOWN_VALUE || cost2 == NewCalculateCostUtil.UNKNOWN_VALUE || (cost1 > acceptableCost && cost2 > acceptableCost))); }
/** * @see org.teiid.query.optimizer.relational.OptimizerRule#execute(org.teiid.query.optimizer.relational.plantree.PlanNode, org.teiid.query.metadata.QueryMetadataInterface, org.teiid.query.optimizer.capabilities.CapabilitiesFinder, org.teiid.query.optimizer.relational.RuleStack, org.teiid.query.analysis.AnalysisRecord, org.teiid.query.util.CommandContext) */ public PlanNode execute(PlanNode plan, QueryMetadataInterface metadata, CapabilitiesFinder capabilitiesFinder, RuleStack rules, AnalysisRecord analysisRecord, CommandContext context) throws QueryPlannerException, QueryMetadataException, TeiidComponentException { NewCalculateCostUtil.computeCostForTree(plan, metadata); return plan; }
/** * @see org.teiid.query.optimizer.relational.OptimizerRule#execute(org.teiid.query.optimizer.relational.plantree.PlanNode, org.teiid.query.metadata.QueryMetadataInterface, org.teiid.query.optimizer.capabilities.CapabilitiesFinder, org.teiid.query.optimizer.relational.RuleStack, org.teiid.query.analysis.AnalysisRecord, org.teiid.query.util.CommandContext) */ public PlanNode execute(PlanNode plan, QueryMetadataInterface metadata, CapabilitiesFinder capabilitiesFinder, RuleStack rules, AnalysisRecord analysisRecord, CommandContext context) throws QueryPlannerException, QueryMetadataException, TeiidComponentException { NewCalculateCostUtil.computeCostForTree(plan, metadata); return plan; }
/** * @see org.teiid.query.optimizer.relational.OptimizerRule#execute(org.teiid.query.optimizer.relational.plantree.PlanNode, org.teiid.query.metadata.QueryMetadataInterface, org.teiid.query.optimizer.capabilities.CapabilitiesFinder, org.teiid.query.optimizer.relational.RuleStack, org.teiid.query.analysis.AnalysisRecord, org.teiid.query.util.CommandContext) */ public PlanNode execute(PlanNode plan, QueryMetadataInterface metadata, CapabilitiesFinder capabilitiesFinder, RuleStack rules, AnalysisRecord analysisRecord, CommandContext context) throws QueryPlannerException, QueryMetadataException, TeiidComponentException { NewCalculateCostUtil.computeCostForTree(plan, metadata); return plan; }
public void initializeCostingInformation(QueryMetadataInterface metadata) throws QueryMetadataException, TeiidComponentException { for (PlanNode node : joinSourceNodes.values()) { NewCalculateCostUtil.computeCostForTree(node, metadata); } estimateCriteriaSelectivity(metadata); }
public void initializeCostingInformation(QueryMetadataInterface metadata) throws QueryMetadataException, TeiidComponentException { for (PlanNode node : joinSourceNodes.values()) { NewCalculateCostUtil.computeCostForTree(node, metadata); } estimateCriteriaSelectivity(metadata); }
public void initializeCostingInformation(QueryMetadataInterface metadata) throws QueryMetadataException, TeiidComponentException { for (PlanNode node : joinSourceNodes.values()) { NewCalculateCostUtil.computeCostForTree(node, metadata); } estimateCriteriaSelectivity(metadata); }
Collection<ElementSymbol> elems = ElementCollectorVisitor.getElements(indExpr, true); if (cardinality == null) { cardinality = NewCalculateCostUtil.computeCostForTree(indNode, metadata);
Collection<ElementSymbol> elems = ElementCollectorVisitor.getElements(indExpr, true); if (cardinality == null) { cardinality = NewCalculateCostUtil.computeCostForTree(indNode, metadata);
Collection<ElementSymbol> elems = ElementCollectorVisitor.getElements(indExpr, true); if (cardinality == null) { cardinality = NewCalculateCostUtil.computeCostForTree(indNode, metadata);
float cardinality = NewCalculateCostUtil.computeCostForTree(planNode, metadata); float ndv = NewCalculateCostUtil.getNDVEstimate(planNode, metadata, cardinality, stagedGroupingSymbols, false); if (ndv != NewCalculateCostUtil.UNKNOWN_VALUE && cardinality / ndv < 4) {
@Test public void testEstimateJoinNodeCost() throws Exception { QueryMetadataInterface metadata = RealMetadataFactory.example4(); PlanNode joinNode = helpGetJoinNode(NewCalculateCostUtil.UNKNOWN_VALUE, NewCalculateCostUtil.UNKNOWN_VALUE, JoinType.JOIN_CROSS); float cost = NewCalculateCostUtil.computeCostForTree(joinNode, metadata); assertTrue(cost == NewCalculateCostUtil.UNKNOWN_VALUE); }
@Ignore("this logic needs to be refined to work better") @Test public void testEstimateJoinNodeCostOneUnknown() throws Exception { QueryMetadataInterface metadata = RealMetadataFactory.example4(); PlanNode joinNode = helpGetJoinNode(NewCalculateCostUtil.UNKNOWN_VALUE, 500, JoinType.JOIN_INNER); joinNode.setProperty(NodeConstants.Info.JOIN_CRITERIA, Arrays.asList(helpGetCriteria("pm1.g1.e1 = pm1.g2.e1", metadata))); float cost = NewCalculateCostUtil.computeCostForTree(joinNode, metadata); assertEquals(10000, cost, 0); }
@Test public void testProjectLiteral1() throws Exception { PlanNode project = NodeFactory.getNewNode(NodeConstants.Types.PROJECT); project.setProperty(Info.PROJECT_COLS, Arrays.asList(new Constant(1))); PlanNode access = NodeFactory.getNewNode(NodeConstants.Types.ACCESS); project.addFirstChild(access); access.setProperty(NodeConstants.Info.EST_CARDINALITY, 5f); float cost = NewCalculateCostUtil.computeCostForTree(project, RealMetadataFactory.example1Cached()); assertEquals(5f, cost, 0); ColStats colStats = (ColStats)project.getProperty(Info.EST_COL_STATS); assertEquals("{1=[1.0, 1.0, 0.0]}", colStats.toString()); }
@Test public void testProjectLiteral() throws Exception { PlanNode project = NodeFactory.getNewNode(NodeConstants.Types.PROJECT); project.setProperty(Info.PROJECT_COLS, Arrays.asList(new Constant(1))); PlanNode access = NodeFactory.getNewNode(NodeConstants.Types.ACCESS); project.addFirstChild(access); access.setProperty(NodeConstants.Info.EST_CARDINALITY, NewCalculateCostUtil.UNKNOWN_VALUE); float cost = NewCalculateCostUtil.computeCostForTree(project, RealMetadataFactory.example1Cached()); assertTrue(cost == NewCalculateCostUtil.UNKNOWN_VALUE); ColStats colStats = (ColStats)project.getProperty(Info.EST_COL_STATS); assertEquals("{1=[1.0, 1.0, 0.0]}", colStats.toString()); access.setProperty(NodeConstants.Info.EST_CARDINALITY, 5f); NewCalculateCostUtil.updateCardinality(project, RealMetadataFactory.example1Cached()); cost = NewCalculateCostUtil.computeCostForTree(project, RealMetadataFactory.example1Cached()); assertTrue(cost == NewCalculateCostUtil.UNKNOWN_VALUE); colStats = (ColStats)project.getProperty(Info.EST_COL_STATS); assertEquals("{1=[1.0, 1.0, 0.0]}", colStats.toString()); }
@Test public void testProjectLiteral4() throws Exception { PlanNode project = NodeFactory.getNewNode(NodeConstants.Types.PROJECT); project.setProperty(Info.PROJECT_COLS, Arrays.asList(new Constant(1))); PlanNode access = NodeFactory.getNewNode(NodeConstants.Types.ACCESS); project.addFirstChild(access); access.setProperty(NodeConstants.Info.EST_CARDINALITY, NewCalculateCostUtil.UNKNOWN_VALUE); PlanNode dup = NodeFactory.getNewNode(NodeConstants.Types.DUP_REMOVE); dup.addFirstChild(project); float cost = NewCalculateCostUtil.computeCostForTree(dup, RealMetadataFactory.example1Cached()); assertEquals(NewCalculateCostUtil.UNKNOWN_VALUE, cost, 0); ColStats colStats = (ColStats)dup.getProperty(Info.EST_COL_STATS); assertEquals("{1=[1.0, 1.0, 0.0]}", colStats.toString()); }
@Test public void testProjectLiteral3() throws Exception { PlanNode project = NodeFactory.getNewNode(NodeConstants.Types.PROJECT); project.setProperty(Info.PROJECT_COLS, Arrays.asList(new Constant(1))); PlanNode access = NodeFactory.getNewNode(NodeConstants.Types.ACCESS); project.addFirstChild(access); access.setProperty(NodeConstants.Info.EST_CARDINALITY, 5f); PlanNode dup = NodeFactory.getNewNode(NodeConstants.Types.DUP_REMOVE); dup.addFirstChild(project); float cost = NewCalculateCostUtil.computeCostForTree(dup, RealMetadataFactory.example1Cached()); assertEquals(1f, cost, 0); ColStats colStats = (ColStats)project.getProperty(Info.EST_COL_STATS); assertEquals("{1=[1.0, 1.0, 0.0]}", colStats.toString()); }
@Test public void testProjectLiteral2() throws Exception { PlanNode project = NodeFactory.getNewNode(NodeConstants.Types.PROJECT); project.setProperty(Info.PROJECT_COLS, Arrays.asList(new Constant(1))); PlanNode access = NodeFactory.getNewNode(NodeConstants.Types.ACCESS); project.addFirstChild(access); access.setProperty(NodeConstants.Info.EST_CARDINALITY, 5f); PlanNode source = NodeFactory.getNewNode(NodeConstants.Types.SOURCE); source.setProperty(Info.OUTPUT_COLS, Arrays.asList(new ElementSymbol("x"))); source.addFirstChild(project); SymbolMap sm = new SymbolMap(); sm.addMapping(new ElementSymbol("x"), new Constant(1)); source.setProperty(Info.SYMBOL_MAP, sm); float cost = NewCalculateCostUtil.computeCostForTree(source, RealMetadataFactory.example1Cached()); assertEquals(5f, cost, 0); ColStats colStats = (ColStats)source.getProperty(Info.EST_COL_STATS); assertEquals("{x=[1.0, 1.0, 0.0]}", colStats.toString()); }