use of org.apache.flink.table.connector.source.abilities.SupportsWatermarkPushDown in project flink by apache.
the class WatermarkPushDownSpec method apply.
@Override
public void apply(DynamicTableSource tableSource, SourceAbilityContext context) {
if (tableSource instanceof SupportsWatermarkPushDown) {
GeneratedWatermarkGenerator generatedWatermarkGenerator = WatermarkGeneratorCodeGenerator.generateWatermarkGenerator(context.getTableConfig(), context.getSourceRowType(), watermarkExpr, Option.apply("context"));
Configuration configuration = context.getTableConfig().getConfiguration();
WatermarkGeneratorSupplier<RowData> supplier = new GeneratedWatermarkGeneratorSupplier(configuration, generatedWatermarkGenerator);
WatermarkStrategy<RowData> watermarkStrategy = WatermarkStrategy.forGenerator(supplier);
if (idleTimeoutMillis > 0) {
watermarkStrategy = watermarkStrategy.withIdleness(Duration.ofMillis(idleTimeoutMillis));
}
((SupportsWatermarkPushDown) tableSource).applyWatermark(watermarkStrategy);
} else {
throw new TableException(String.format("%s does not support SupportsWatermarkPushDown.", tableSource.getClass().getName()));
}
}
use of org.apache.flink.table.connector.source.abilities.SupportsWatermarkPushDown in project flink by apache.
the class PushWatermarkIntoTableSourceScanRuleBase method supportsWatermarkPushDown.
protected boolean supportsWatermarkPushDown(FlinkLogicalTableSourceScan scan) {
TableSourceTable tableSourceTable = scan.getTable().unwrap(TableSourceTable.class);
if (tableSourceTable == null) {
return false;
}
final DynamicTableSource tableSource = tableSourceTable.tableSource();
return (tableSource instanceof SupportsWatermarkPushDown) || (tableSource instanceof SupportsSourceWatermark && hasSourceWatermarkDeclaration(tableSourceTable));
}
Aggregations