@Override public Prel visitWriter(WriterPrel prel, Void value) throws RuntimeException { RelNode child = ((Prel) prel.getInput(0)).accept(this, null); if (prefixedForStar) { prefixedForWriter = true; // return insertProjUnderScreenOrWriter(prel, prel.getInput().getRowType(), child); return (Prel) prel.copy(prel.getTraitSet(), Collections.singletonList(child)); } else { return prel; } }
@Override public WriterPrel copy(RelTraitSet traitSet, List<RelNode> inputs) { return new WriterPrel(getCluster(), traitSet, sole(inputs), getCreateTableEntry(), expectedInboundRowType); }
@Override public Prel visitWriter(WriterPrel initialPrel, Void value) throws RuntimeException { final WriterOptions options = initialPrel.getCreateTableEntry().getOptions(); final Prel initialInput = ((Prel) initialPrel.getInput()).accept(this, null); final Prel input = renameAsNecessary(initialPrel.getExpectedInboundRowType(), initialInput); final WriterPrel prel = (WriterPrel) initialPrel.copy(initialPrel.getTraitSet(), ImmutableList.<RelNode>of(input)); final RelCollation collation = getCollation(prel.getTraitSet(), sortKeys); final WriterPrel writer = new WriterPrel(prel.getCluster(), prel.getTraitSet(), changeDetection, prel.getCreateTableEntry(), prel.getExpectedInboundRowType()); return writer; final RelCollation collation = getCollation(prel.getTraitSet(), sortKeys); final Prel sort = new SortPrel(input.getCluster(), input.getTraitSet().plus(collation), input, collation); final WriterPrel writer = new WriterPrel(prel.getCluster(), prel.getTraitSet(), changeDetectionPrel, prel.getCreateTableEntry(), prel.getExpectedInboundRowType()); return writer; final RelCollation collation = getCollation(prel.getTraitSet(), getFieldIndices(options.getSortColumns(), input.getRowType())); final Prel sort = new SortPrel(input.getCluster(), input.getTraitSet().plus(collation), input, collation); final WriterPrel writer = new WriterPrel(prel.getCluster(), prel.getTraitSet(), sort, prel.getCreateTableEntry(), prel.getExpectedInboundRowType()); return writer;
final WriterPrel child = new WriterPrel(writer.getCluster(), writer.getTraitSet() .plus(writer.getCreateTableEntry().getOptions().isSingleWriter() ? DistributionTrait.SINGLETON : childDist) rel, writer.getCreateTableEntry(), writer.getExpectedInboundRowType()); if (!(child.getCreateTableEntry() instanceof FileSystemCreateTableEntry)) { final FileSystemCreateTableEntry fileEntry = (FileSystemCreateTableEntry) child.getCreateTableEntry(); final WriterPrel childWithTempPath = new WriterPrel(child.getCluster(), child.getTraitSet(), rel, ((FileSystemCreateTableEntry) child.getCreateTableEntry()).cloneWithNewLocation(tempPath), writer.getExpectedInboundRowType() );
@Override public PhysicalOperator getPhysicalOperator(PhysicalPlanCreator creator) throws IOException { Prel child = (Prel) this.getInput(); PhysicalOperator g = getCreateTableEntry().getWriter(child.getPhysicalOperator(creator)); return creator.addMetadata(this, g); }
@Override public Iterator<Prel> iterator() { return PrelUtil.iter(getInput()); }
@Override public RelNode visit(final RelNode other) { if (other instanceof WriterPrel) { for (RelTrait trait : other.getTraitSet()) { if (trait instanceof DistributionTrait) { List<DistributionField> distributionFieldList = ((DistributionTrait) trait).getFields(); if (distributionFieldList.size() != 1) { continue; } int fieldId = distributionFieldList.get(0).getFieldId(); String fieldName = ((WriterPrel) other).getInput().getRowType().getFieldNames().get(fieldId); if ("position".equals(fieldName)) { hashDistributedWriter.set(true); } } } } return super.visit(other); } });
@Override public Prel visitWriter(WriterPrel prel, Void value) throws RuntimeException { Prel newChild = ((Prel) prel.getInput()).accept(this, null); return prel.copy(prel.getTraitSet(), Collections.singletonList( (RelNode) addTrivialOrderedProjectPrel(newChild, true))); }