public abstract class PushWatermarkIntoTableSourceScanRuleBase
extends org.apache.calcite.plan.RelOptRule
SupportsWatermarkPushDown
and SupportsSourceWatermark
. It
offers a util to push the FlinkLogicalWatermarkAssigner
into the FlinkLogicalTableSourceScan
.Constructor and Description |
---|
PushWatermarkIntoTableSourceScanRuleBase(org.apache.calcite.plan.RelOptRuleOperand operand,
String description) |
Modifier and Type | Method and Description |
---|---|
protected org.apache.flink.table.planner.plan.nodes.logical.FlinkLogicalTableSourceScan |
getNewScan(org.apache.flink.table.planner.plan.nodes.logical.FlinkLogicalWatermarkAssigner watermarkAssigner,
org.apache.calcite.rex.RexNode watermarkExpr,
org.apache.flink.table.planner.plan.nodes.logical.FlinkLogicalTableSourceScan scan,
TableConfig tableConfig,
boolean useWatermarkAssignerRowType)
It uses the input watermark expression to generate the
WatermarkGeneratorSupplier . |
protected boolean |
supportsWatermarkPushDown(org.apache.flink.table.planner.plan.nodes.logical.FlinkLogicalTableSourceScan scan) |
any, convert, convert, convertList, convertOperand, convertOperand, equals, equals, getOperand, getOperands, getOutConvention, getOutTrait, hashCode, matches, none, onMatch, operand, operand, operand, operand, operand, operandJ, operandJ, some, toString, unordered
public PushWatermarkIntoTableSourceScanRuleBase(org.apache.calcite.plan.RelOptRuleOperand operand, String description)
protected org.apache.flink.table.planner.plan.nodes.logical.FlinkLogicalTableSourceScan getNewScan(org.apache.flink.table.planner.plan.nodes.logical.FlinkLogicalWatermarkAssigner watermarkAssigner, org.apache.calcite.rex.RexNode watermarkExpr, org.apache.flink.table.planner.plan.nodes.logical.FlinkLogicalTableSourceScan scan, TableConfig tableConfig, boolean useWatermarkAssignerRowType)
WatermarkGeneratorSupplier
.
After the WatermarkStrategy
is pushed into the scan, it will build a new scan.
However, when FlinkLogicalWatermarkAssigner
is the parent of the FlinkLogicalTableSourceScan
it should modify the rowtime type to keep the type of plan is
consistent. In other cases, it just keep the data type of the scan as same as before and
leave the work when rewriting the projection.
NOTES: the row type of the scan is not always as same as the watermark assigner. Because the scan will not add the rowtime column into the row when pushing the watermark assigner into the scan. In some cases, query may have computed columns defined on rowtime column. If modifying the type of the rowtime(with time attribute), it will also influence the type of the computed column. Therefore, if the watermark assigner is not the parent of the scan, set the type of the scan as before and leave the work to projection.
protected boolean supportsWatermarkPushDown(org.apache.flink.table.planner.plan.nodes.logical.FlinkLogicalTableSourceScan scan)
Copyright © 2014–2022 The Apache Software Foundation. All rights reserved.