public static PlannerSettings getSettings(final RelOptCluster cluster) { return getPlannerSettings(cluster); }
public ElasticsearchSample(RelOptCluster cluster, RelTraitSet traits, RelNode input, StoragePluginId pluginId) { super(cluster, traits, input); this.pluginId = pluginId; final PlannerSettings plannerSettings = PrelUtil.getPlannerSettings(cluster.getPlanner()); fetchSize = (int) SampleCrel.getSampleSizeAndSetMinSampleSize(plannerSettings, SAMPLE_SIZE_DENOMINATOR); }
@Override public boolean matches(RelOptRuleCall call) { PlannerSettings settings = PrelUtil.getPlannerSettings(call.getPlanner()); return settings.isHashJoinEnabled(); }
public static RelTraitSet fixTraits(RelOptPlanner cluster, RelTraitSet set) { if (getPlannerSettings(cluster).isSingleMode()) { return set.replace(DistributionTrait.ANY); } else { return set; } }
@Override public boolean matches(RelOptRuleCall call) { PlannerSettings settings = PrelUtil.getPlannerSettings(call.getPlanner()); return settings.isHashAggEnabled(); }
@Override public boolean matches(RelOptRuleCall call) { return PrelUtil.getPlannerSettings(call.getPlanner()).isMergeJoinEnabled(); }
@Override public boolean matches(RelOptRuleCall call) { return PrelUtil.getPlannerSettings(call.getPlanner()).isStreamAggEnabled(); }
@Override public boolean matches(RelOptRuleCall call) { return PrelUtil.getPlannerSettings(call.getPlanner()).isNestedLoopJoinEnabled(); }
public static boolean isSingleMode(RelOptRuleCall call){ return PrelUtil.getPlannerSettings(call.getPlanner()).isSingleMode(); }
protected double getFilterReduction(){ if(filter != null){ double selectivity = 0.15d; double max = PrelUtil.getPlannerSettings(getCluster()).getFilterMaxSelectivityEstimateFactor(); double min = PrelUtil.getPlannerSettings(getCluster()).getFilterMinSelectivityEstimateFactor(); if(selectivity < min) { selectivity = min; } if(selectivity > max) { selectivity = max; } return selectivity; }else { return 1d; } }
@Override protected double getFilterReduction(){ if(filter != null){ double selectivity = 0.15d; double max = PrelUtil.getPlannerSettings(getCluster()).getFilterMaxSelectivityEstimateFactor(); double min = PrelUtil.getPlannerSettings(getCluster()).getFilterMinSelectivityEstimateFactor(); if(selectivity < min) { selectivity = min; } if(selectivity > max) { selectivity = max; } return selectivity; }else { return 1d; } }
@VisibleForTesting public SystemScanPrel( RelOptCluster cluster, RelTraitSet traitSet, RelOptTable table, TableMetadata dataset, List<SchemaPath> projectedColumns, double observedRowcountAdjustment, RelDataType rowType ) { super(cluster, traitSet, table, dataset.getStoragePluginId(), dataset, projectedColumns, observedRowcountAdjustment); this.systemTable = Preconditions.checkNotNull(SystemStoragePlugin.TABLE_MAP.get(dataset.getName().getName().toLowerCase()), "Unexpected system table."); this.executorCount = PrelUtil.getPlannerSettings(cluster).getExecutorCount(); this.rowType = rowType; this.pluginId = dataset.getStoragePluginId(); }
public boolean isTrivial(){ Integer last = getLast(); if(last != null && last <= PrelUtil.getPlannerSettings(getCluster()).getSliceTarget() ){ return true; } else { return false; } }
@Override public double estimateRowCount(RelMetadataQuery mq) { // We expect for flattens output to be expanding. Use a constant to expand the data. return mq.getRowCount(input) * toFlatten.size() * PrelUtil.getPlannerSettings(getCluster().getPlanner()).getFlattenExpansionAmount(); }
@Override public double estimateRowCount(RelMetadataQuery mq) { // We expect for flattens output to be expanding. Use a constant to expand the data. return mq.getRowCount(input) * PrelUtil.getPlannerSettings(getCluster().getPlanner()).getFlattenExpansionAmount(); }
protected static boolean create2PhasePlan(RelOptRuleCall call, AggregateRel aggregate) { PlannerSettings settings = PrelUtil.getPlannerSettings(call.getPlanner()); if (! settings.isMultiPhaseAggEnabled() || isSingleton(call)) { return false; } for (AggregateCall aggCall : aggregate.getAggCallList()) { String name = aggCall.getAggregation().getName(); if (!twoPhaseFunctions.contains(name)) { return false; } } return true; }
protected static boolean isSingleton(RelOptRuleCall call) { PlannerSettings settings = PrelUtil.getPlannerSettings(call.getPlanner()); if (settings.isSingleMode()) { return true; } RelNode child = call.rel(0).getInputs().get(0); // if small input, then singleton return call.getMetadataQuery().getRowCount(child) < settings.getSliceTarget(); }
private static RelTraitSet traits( RelOptCluster cluster, double rowCount, int splitCount, RelTraitSet traitSet) { PlannerSettings settings = PrelUtil.getPlannerSettings(cluster.getPlanner()); boolean smallInput = rowCount < (double)settings.getSliceTarget(); DistributionTrait distribution; if(settings.isMultiPhaseAggEnabled() && !settings.isSingleMode() && !smallInput && splitCount > 1) { distribution = DistributionTrait.ANY; } else { distribution = DistributionTrait.SINGLETON; } return traitSet.plus(distribution); }
protected void applyEdgeProjection(SearchRequestBuilder searchRequest, ElasticIntermediateScanPrel scan) { boolean edgeProject = PrelUtil.getPlannerSettings(scan.getCluster()).getOptions().getOption(ExecConstants.ELASTIC_RULES_EDGE_PROJECT); if(!edgeProject){ return; } final String[] includesOrderedByOriginalTable; if (scan.getProjectedColumns().isEmpty()) { includesOrderedByOriginalTable = new String[0]; } else { includesOrderedByOriginalTable = scan.getBatchSchema().mask(scan.getProjectedColumns(), false) .toCalciteRecordType(scan.getCluster().getTypeFactory()).getFieldNames().toArray(new String[0]); } // canonicalize includes order so we don't get test variability. Arrays.sort(includesOrderedByOriginalTable); searchRequest.setFetchSource(includesOrderedByOriginalTable, null); }
@Override public void onMatch(RelOptRuleCall call) { final SamplePrel sample = (SamplePrel) call.rel(0); final RelNode input = sample.getInput(); final RelNode convertedInput = convert(input, input.getTraitSet().plus(Prel.PHYSICAL)); final RexBuilder rexBuilder = input.getCluster().getRexBuilder(); final PlannerSettings plannerSettings = PrelUtil.getPlannerSettings(call.getPlanner()); final RexNode offset = rexBuilder.makeBigintLiteral(BigDecimal.ZERO); final RexNode limit = rexBuilder.makeBigintLiteral(BigDecimal.valueOf(SampleCrel.getSampleSizeAndSetMinSampleSize(plannerSettings, 1))); final LimitPrel sampleAsLimit = new LimitPrel(sample.getCluster(), sample.getTraitSet().plus(Prel.PHYSICAL), convertedInput, offset, limit); call.transformTo(sampleAsLimit); } }