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

回复