Hi. 我记得 Jdbc Connector 实现了 ProjectionPushDown。你可以参考着实现。
xuyang 老师说的对,getScanRuntimeProvider 发生在 push down 之后。应该不会有你说的问题。另外,可以考虑贡献到社区[1],我们也可以帮忙一起 review 下,帮忙解决你的问题? Best, Shengkai [1] https://issues.apache.org/jira/browse/FLINK-19651 Xuyang <[email protected]> 于2022年6月1日周三 23:47写道: > > Hi,在SQL优化的末尾,StreamPhysicalTableSourceScan转化为StreamExecTableSourceScan的过程中[1],会执行一次getScanRuntimeProvider,此时的getScanRuntimeProvider一定是在applyFilters方法之后触发的。 > > > > > 你可以尝试将filterFields记录在JdbcDynamicTableSource > 这个类中,如果该值为空,则getScanRuntimeProvider > 时无需拼接(在applyFilters执行之前一定是空的);当该值不为空的时候,在getScanRuntimeProvider > 进行拼接(最后一次physical node转exec node时,一定执行过applyFilters方法)。 > > > > > [1] > https://github.com/apache/flink/blob/98997ea37ba08eae0f9aa6dd34823238097d8e0d/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/nodes/exec/common/CommonExecTableSourceScan.java#L83 > > > > > -- > > Best! > Xuyang > > > > > > 在 2022-06-01 20:03:58,"朱育锋" <[email protected]> 写道: > > Hi,在SQL优化的末尾,StreamPhysicalTableSourceScan转化为StreamExecTableSourceScan的过程中[1],会执行一次getScanRuntimeProvider,此时的getScanRuntimeProvider一定是在applyFilters方法之后触发的。<br/><br/>你可以尝试将filterFields记录在JdbcDynamicTableSource > 这个类中,如果该值为空,则getScanRuntimeProvider > 时无需拼接(在applyFilters执行之前一定是空的);当该值不为空的时候,在getScanRuntimeProvider > 进行拼接(最后一次physical node转exec node时,一定执行过applyFilters方法)。<br/><br/>[1] > https://github.com/apache/flink/blob/98997ea37ba08eae0f9aa6dd34823238097d8e0d/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/nodes/exec/common/CommonExecTableSourceScan.java#L83
