/** * This method helps to create a per task instance of translator context * * @return the cloned instance of {@link TranslatorContext} */ @Override public TranslatorContext clone() { return new TranslatorContext(this); } }
SamzaSqlRemoteTableJoinFunction(SamzaRelConverter msgConverter, SamzaRelTableKeyConverter tableKeyConverter, JoinInputNode streamNode, JoinInputNode tableNode, JoinRelType joinRelType, int queryId) { super(streamNode, tableNode, joinRelType); this.msgConverter = msgConverter; this.relTableKeyConverter = tableKeyConverter; this.tableName = tableNode.getSourceName(); this.queryId = queryId; }
@Override public SamzaSqlRelRecord getMessageKey(SamzaSqlRelMessage message) { return getMessageKeyRelRecord(message); }
void translate(final LogicalFilter filter, final String logicalOpId, final TranslatorContext context) { MessageStream<SamzaSqlRelMessage> inputStream = context.getMessageStream(filter.getInput().getId()); final int filterId = filter.getId(); MessageStream<SamzaSqlRelMessage> outputStream = inputStream.filter(new FilterTranslatorFunction(filterId, queryId, logicalOpId)); context.registerMessageStream(filterId, outputStream); context.registerRelNode(filterId, filter); } }
@Override public RelNode visit(LogicalFilter filter) { RelNode node = visitChild(filter, 0, filter.getInput()); new FilterTranslator(queryId).translate(filter, translatorContext); return node; }
@Override public RelNode visit(LogicalFilter filter) { RelNode node = visitChild(filter, 0, filter.getInput()); String logicalOpId = String.format(TranslatorConstants.LOGOPID_TEMPLATE, queryId, "filter", opId++); new FilterTranslator(queryId).translate(filter, logicalOpId, translatorContext); return node; }
@Override public RelNode visit(LogicalProject project) { RelNode node = super.visit(project); new ProjectTranslator(queryId).translate(project, translatorContext); return node; }
@Override public RelNode visit(LogicalJoin join) { RelNode node = super.visit(join); joinId++; new JoinTranslator(joinId, ioResolver).translate(join, translatorContext); return node; }
/** * Create the instance of TranslatorContext * @param streamAppDesc Samza's streamAppDesc that is populated during the translation. * @param relRoot Root of the relational graph from calcite. * @param executionContext the execution context * @param converters the map of schema to RelData converters */ public TranslatorContext(StreamApplicationDescriptor streamAppDesc, RelRoot relRoot, SamzaSqlExecutionContext executionContext, Map<String, SamzaRelConverter> converters) { this.streamAppDesc = streamAppDesc; this.compiler = createExpressionCompiler(relRoot); this.executionContext = executionContext; this.dataContext = new DataContextImpl(); this.relSamzaConverters = converters; this.messageStreams = new HashMap<>(); this.relNodes = new HashMap<>(); this.systemDescriptors = new HashMap<>(); }
@Override public RelNode visit(LogicalAggregate aggregate) { RelNode node = super.visit(aggregate); windowId++; new LogicalAggregateTranslator(windowId).translate(aggregate, translatorContext); return node; } });
JoinTranslator(String logicalOpId, String intermediateStreamPrefix, int queryId) { this.logicalOpId = logicalOpId; this.intermediateStreamPrefix = intermediateStreamPrefix + (intermediateStreamPrefix.isEmpty() ? "" : "_"); this.queryId = queryId; this.inputMetricsMF = new TranslatorInputMetricsMapFunction(logicalOpId); this.outputMetricsMF = new TranslatorOutputMetricsMapFunction(logicalOpId); }
@Override public RelNode visit(TableScan scan) { RelNode node = super.visit(scan); scanTranslator.translate(scan, translatorContext, systemDescriptors, inputMsgStreams); return node; }
/** * Private constructor to make a clone of {@link TranslatorContext} object * * @param other the original object to copy from */ private TranslatorContext(TranslatorContext other) { this.streamAppDesc = other.streamAppDesc; this.compiler = other.compiler; this.relSamzaConverters = other.relSamzaConverters; this.relTableKeyConverters = other.relTableKeyConverters; this.messageStreams = other.messageStreams; this.relNodes = other.relNodes; this.executionContext = other.executionContext.clone(); this.dataContext = new DataContextImpl(); this.systemDescriptors = other.systemDescriptors; }
@Test public void testTranslateStreamToLocalTableJoin() throws IOException, ClassNotFoundException { testTranslateStreamToTableJoin(false); }
protected SamzaSqlRelRecord getMessageKeyRelRecord(SamzaSqlRelMessage message) { return getMessageKeyRelRecord(message, streamFieldIds, tableFieldNames, tableKeyIds); }
@Override public RelNode visit(RelNode relNode) { if (relNode instanceof TableModify) { return visit((TableModify) relNode); } return super.visit(relNode); }
void translate(final LogicalFilter filter, final TranslatorContext context) { MessageStream<SamzaSqlRelMessage> inputStream = context.getMessageStream(filter.getInput().getId()); final int filterId = filter.getId(); MessageStream<SamzaSqlRelMessage> outputStream = inputStream.filter(new FilterTranslatorFunction(filterId, queryId)); context.registerMessageStream(filterId, outputStream); context.registerRelNode(filterId, filter); } }
@Override public RelNode visit(LogicalProject project) { RelNode node = super.visit(project); String logicalOpId = String.format(TranslatorConstants.LOGOPID_TEMPLATE, queryId, "project", opId++); new ProjectTranslator(queryId).translate(project, logicalOpId, translatorContext); return node; }
/** * This method helps to create a per task instance of translator context * * @return the cloned instance of {@link TranslatorContext} */ @Override public TranslatorContext clone() { return new TranslatorContext(this); } }
@Test public void testTranslateStreamToRemoteTableJoin() throws IOException, ClassNotFoundException { testTranslateStreamToTableJoin(true); }