private RelDataType getFieldType(RelNode relNode, int i) { final RelDataTypeField inputField = relNode.getRowType().getFieldList().get(i); return inputField.getType(); }
public static List<RexNode> getProjsFromBelowAsInputRef(final RelNode rel) { List<RexNode> projectList = Lists.transform(rel.getRowType().getFieldList(), new Function<RelDataTypeField, RexNode>() { @Override public RexNode apply(RelDataTypeField field) { return rel.getCluster().getRexBuilder().makeInputRef(field.getType(), field.getIndex()); } }); return projectList; }
@Override public RexNode visitInputRef(RexInputRef inputRef) { RelDataTypeField f = rType.getFieldList().get(inputRef.getIndex()); if (partCols.contains(f.getName())) { return inputRef; } else { return null; } }
private ImmutableList<RexNode> getValidPreds(RelOptCluster cluster, RelNode child, Set<String> predicatesToExclude, List<RexNode> rexs, RelDataType rType) { InputRefValidator validator = new InputRefValidator(rType.getFieldList()); List<RexNode> valids = new ArrayList<RexNode>(rexs.size()); for (RexNode rex : rexs) { try { rex.accept(validator); valids.add(rex); } catch (Util.FoundOne e) { Util.swallow(e, null); } } // We need to filter i) those that have been pushed already as stored in the join, // and ii) those that were already in the subtree rooted at child ImmutableList<RexNode> toPush = HiveCalciteUtil.getPredsNotPushedAlready(predicatesToExclude, child, valids); return toPush; }
.getRowColNameIndxMap(relOptHtRowtype.getFieldList()); List<String> colNamesInScanRowType = scanRowType.getFieldNames(); int partColStartPosInrelOptHtRowtype = relOptHTable.getNonPartColumns().size(); int virtualColStartPosInrelOptHtRowtype = relOptHTable.getNonPartColumns().size() + relOptHTable.getPartColumns().size(); int tmp; for (int i = 0; i < colNamesInScanRowType.size(); i++) { tmp = colNameToPosInReloptHT.get(colNamesInScanRowType.get(i)); neededColIndxsFrmReloptHTBldr.add(tmp); if (tmp >= partColStartPosInrelOptHtRowtype) {
/** * Projects all {@code input} output fields plus the additional expressions. * * @param input Input relational expression * @param additionalExprs Additional expressions and names * @return the new Project */ private RelNode createProjectWithAdditionalExprs( RelNode input, List<Pair<RexNode, String>> additionalExprs) { final List<RelDataTypeField> fieldList = input.getRowType().getFieldList(); List<Pair<RexNode, String>> projects = Lists.newArrayList(); for (Ord<RelDataTypeField> field : Ord.zip(fieldList)) { projects.add( Pair.of( (RexNode) rexBuilder.makeInputRef( field.e.getType(), field.i), field.e.getName())); } projects.addAll(additionalExprs); return RelOptUtil.createProject(input, Pair.left(projects), Pair.right(projects), false, relBuilder); }
private RexNode inputRef(final String columnName) { final int columnNumber = rowSignature.getRowOrder().indexOf(columnName); return rexBuilder.makeInputRef(relDataType.getFieldList().get(columnNumber).getType(), columnNumber); }
private List<RexNode> projects(RelDataType inputRowType) { final List<RexNode> exprList = new ArrayList<>(); for (RelDataTypeField field : inputRowType.getFieldList()) { final RexBuilder rexBuilder = cluster.getRexBuilder(); exprList.add(rexBuilder.makeInputRef(field.getType(), field.getIndex())); } return exprList; }
this.joinRel = joinRel; this.isSemiJoin = isSemiJoin; nFieldsLeft = joinRel.getLeft().getRowType().getFieldList().size(); nFieldsRight = joinRel.getRight().getRowType().getFieldList().size(); nSysFields = joinRel.getSystemFieldList().size(); leftFieldsBitSet = ImmutableBitSet.range(nSysFields, nSysFields + nFieldsLeft);
@Override public RelDataType deriveRowType() { final List<RelDataTypeField> fieldList = table.getRowType().getFieldList(); final RelDataTypeFactory.FieldInfoBuilder builder = getCluster().getTypeFactory().builder(); for (int field : fields) { builder.add(fieldList.get(field)); } return builder.build(); }
public static ImmutableList<RexNode> getInputRef(List<Integer> inputRefs, RelNode inputRel) { ImmutableList.Builder<RexNode> bldr = ImmutableList.<RexNode> builder(); for (int i : inputRefs) { bldr.add(new RexInputRef(i, inputRel.getRowType().getFieldList().get(i).getType())); } return bldr.build(); }
private ImmutableList<RexNode> getValidPreds(RelOptCluster cluster, RelNode child, Set<String> predicatesToExclude, List<RexNode> rexs, RelDataType rType) { InputRefValidator validator = new InputRefValidator(rType.getFieldList()); List<RexNode> valids = new ArrayList<RexNode>(rexs.size()); for (RexNode rex : rexs) { try { rex.accept(validator); valids.add(rex); } catch (Util.FoundOne e) { Util.swallow(e, null); } } // We need to filter i) those that have been pushed already as stored in the join, // and ii) those that were already in the subtree rooted at child ImmutableList<RexNode> toPush = HiveCalciteUtil.getPredsNotPushedAlready(predicatesToExclude, child, valids); return toPush; }
private static Pair<ImmutableList<Integer>, ImmutableSet<Integer>> buildColIndxsFrmReloptHT( RelOptHiveTable relOptHTable, RelDataType scanRowType) { RelDataType relOptHtRowtype = relOptHTable.getRowType(); ImmutableList<Integer> neededColIndxsFrmReloptHT; Builder<Integer> neededColIndxsFrmReloptHTBldr = new ImmutableList.Builder<Integer>(); ImmutableSet<Integer> viurtualOrPartColIndxsInTS; ImmutableSet.Builder<Integer> viurtualOrPartColIndxsInTSBldr = new ImmutableSet.Builder<Integer>(); Map<String, Integer> colNameToPosInReloptHT = HiveCalciteUtil .getRowColNameIndxMap(relOptHtRowtype.getFieldList()); List<String> colNamesInScanRowType = scanRowType.getFieldNames(); int partOrVirtualColStartPosInrelOptHtRowtype = relOptHTable.getNonPartColumns().size(); int tmp; for (int i = 0; i < colNamesInScanRowType.size(); i++) { tmp = colNameToPosInReloptHT.get(colNamesInScanRowType.get(i)); neededColIndxsFrmReloptHTBldr.add(tmp); if (tmp >= partOrVirtualColStartPosInrelOptHtRowtype) { viurtualOrPartColIndxsInTSBldr.add(i); } } neededColIndxsFrmReloptHT = neededColIndxsFrmReloptHTBldr.build(); viurtualOrPartColIndxsInTS = viurtualOrPartColIndxsInTSBldr.build(); return new Pair<ImmutableList<Integer>, ImmutableSet<Integer>>(neededColIndxsFrmReloptHT, viurtualOrPartColIndxsInTS); }
/** * Projects all {@code input} output fields plus the additional expressions. * * @param input Input relational expression * @param additionalExprs Additional expressions and names * @return the new LogicalProject */ private RelNode createProjectWithAdditionalExprs( RelNode input, List<Pair<RexNode, String>> additionalExprs) { final List<RelDataTypeField> fieldList = input.getRowType().getFieldList(); List<Pair<RexNode, String>> projects = Lists.newArrayList(); for (Ord<RelDataTypeField> field : Ord.zip(fieldList)) { projects.add( Pair.of( (RexNode) rexBuilder.makeInputRef( field.e.getType(), field.i), field.e.getName())); } projects.addAll(additionalExprs); return RelOptUtil.createProject(input, projects, false); }
public List<Double> averageColumnSizes(HiveTableScan scan, RelMetadataQuery mq) { List<Integer> neededcolsLst = scan.getNeededColIndxsFrmReloptHT(); List<ColStatistics> columnStatistics = ((RelOptHiveTable) scan.getTable()) .getColStat(neededcolsLst, true); // Obtain list of col stats, or use default if they are not available final ImmutableList.Builder<Double> list = ImmutableList.builder(); int indxRqdCol = 0; int nFields = scan.getRowType().getFieldCount(); for (int i = 0; i < nFields; i++) { if (neededcolsLst.contains(i)) { ColStatistics columnStatistic = columnStatistics.get(indxRqdCol); indxRqdCol++; if (columnStatistic == null) { RelDataTypeField field = scan.getRowType().getFieldList().get(i); list.add(averageTypeValueSize(field.getType())); } else { list.add(columnStatistic.getAvgColLen()); } } else { list.add(new Double(0)); } } return list.build(); }
private List<RexNode> projects(RelDataType inputRowType) { final List<RexNode> exprList = new ArrayList<>(); for (RelDataTypeField field : inputRowType.getFieldList()) { final RexBuilder rexBuilder = cluster.getRexBuilder(); exprList.add(rexBuilder.makeInputRef(field.getType(), field.getIndex())); } return exprList; }
@Override public RexNode visitInputRef(RexInputRef inputRef) { RelDataTypeField f = rType.getFieldList().get(inputRef.getIndex()); if (partCols.contains(f.getName())) { return inputRef; } else { return null; } }
@Override public RelDataType deriveRowType() { final List<RelDataTypeField> fieldList = table.getRowType().getFieldList(); final RelDataTypeFactory.FieldInfoBuilder builder = getCluster().getTypeFactory().builder(); for (int field : fields) { builder.add(fieldList.get(field)); } return getCluster().getTypeFactory().createStructType(builder); }
public static List<RexNode> getProjsFromBelowAsInputRef(final RelNode rel) { List<RexNode> projectList = Lists.transform(rel.getRowType().getFieldList(), new Function<RelDataTypeField, RexNode>() { @Override public RexNode apply(RelDataTypeField field) { return rel.getCluster().getRexBuilder().makeInputRef(field.getType(), field.getIndex()); } }); return projectList; }
public static HiveProject createProjectWithoutColumn(RelNode input, Set<Integer> positions) throws CalciteSemanticException { List<RexNode> originalInputRefs = Lists.transform(input.getRowType().getFieldList(), new Function<RelDataTypeField, RexNode>() { @Override public RexNode apply(RelDataTypeField input) { return new RexInputRef(input.getIndex(), input.getType()); } }); List<RexNode> copyInputRefs = new ArrayList<>(); for (int i = 0; i < originalInputRefs.size(); i++) { if (!positions.contains(i)) { copyInputRefs.add(originalInputRefs.get(i)); } } return HiveProject.create(input, copyInputRefs, null); }