Thanks Jane for further explanation.

These two configurations correspond to different levels. 
"scan.filter-push-down.enabled" does not make 
"table.optimizer.source.predicate" invalid. 
The planner will still push down predicates to all sources. 
Whether filter pushdown is allowed or not is determined by the specific 
source's "scan.filter-push-down.enabled" configuration.

However, "table.optimizer.source.predicate" does directly affect 
"scan.filter-push-down.enabled”. 
When the planner disables predicate pushdown, the source-level filter pushdown 
will also not be executed, even if the source allows filter pushdown.

Whatever, in point 1 and 2, our expectation is consistent.
For the 3rd point, I still think that the planner-level configuration takes 
precedence over the source-level configuration.
It may seem counterintuitive when we globally disable predicate pushdown but 
allow filter pushdown at the source level.

Best,
Jiabao



> 2023年10月25日 14:35,Jane Chan <qingyue....@gmail.com> 写道:
> 
> Hi Jiabao,
> 
> Thanks for clarifying this. While by "scan.filter-push-down.enabled takes a
> higher priority" I meant that this value should be respected whenever it is
> set explicitly.
> 
> The conclusion that
> 
> 2. "table.optimizer.source.predicate" = "true" and
>> "scan.filter-push-down.enabled" = "false"
>> Allow the planner to perform predicate pushdown, but individual sources do
>> not enable filter pushdown.
>> 
> 
> This indicates that the option "scan.filter-push-down.enabled = false" for
> an individual source connector does indeed override the global-level
> planner settings to make a difference. And thus "has a higher priority".
> 
> While for
> 
> 3. "table.optimizer.source.predicate" = "false"
>> Predicate pushdown is not allowed for the planner.
>> Regardless of the value of the "scan.filter-push-down.enabled"
>> configuration, filter pushdown is disabled.
>> In this scenario, the behavior remains consistent with the old version as
>> well.
>> 
> 
> I still think "scan.filter-push-down.enabled" should also be respected if
> it is enabled for individual connectors. WDYT?
> 
> Best,
> Jane
> 
> On Wed, Oct 25, 2023 at 1:27 PM Jiabao Sun <jiabao....@xtransfer.cn.invalid>
> wrote:
> 
>> Thanks Benchao for the feedback.
>> 
>> For the current proposal, we recommend keeping the default value of
>> "table.optimizer.source.predicate" as true,
>> and setting the the default value of newly introduced option
>> "scan.filter-push-down.enabled" to true as well.
>> 
>> The main purpose of doing this is to maintain consistency with previous
>> versions, as whether to perform
>> filter pushdown in the old version solely depends on the
>> "table.optimizer.source.predicate" option.
>> That means by default, as long as a TableSource implements the
>> SupportsFilterPushDown interface, filter pushdown is allowed.
>> And it seems that we don't have much benefit in changing the default value
>> of "table.optimizer.source.predicate" to false.
>> 
>> Regarding the priority of these two configurations, I believe that
>> "table.optimizer.source.predicate"
>> takes precedence over "scan.filter-push-down.enabled" and it exhibits the
>> following behavior.
>> 
>> 1. "table.optimizer.source.predicate" = "true" and
>> "scan.filter-push-down.enabled" = "true"
>> This is the default behavior, allowing filter pushdown for sources.
>> 
>> 2. "table.optimizer.source.predicate" = "true" and
>> "scan.filter-push-down.enabled" = "false"
>> Allow the planner to perform predicate pushdown, but individual sources do
>> not enable filter pushdown.
>> 
>> 3. "table.optimizer.source.predicate" = "false"
>> Predicate pushdown is not allowed for the planner.
>> Regardless of the value of the "scan.filter-push-down.enabled"
>> configuration, filter pushdown is disabled.
>> In this scenario, the behavior remains consistent with the old version as
>> well.
>> 
>> 
>> From an implementation perspective, setting the priority of
>> "scan.filter-push-down.enabled" higher than
>> "table.optimizer.source.predicate" is difficult to achieve now.
>> Because the PushFilterIntoSourceScanRuleBase at the planner level takes
>> precedence over the source-level FilterPushDownSpec.
>> Only when the PushFilterIntoSourceScanRuleBase is enabled, will the
>> Source-level filter pushdown be performed.
>> 
>> Additionally, in my opinion, there doesn't seem to be much benefit in
>> setting a higher priority for "scan.filter-push-down.enabled".
>> It may instead affect compatibility and increase implementation complexity.
>> 
>> WDYT?
>> 
>> Best,
>> Jiabao
>> 
>> 
>>> 2023年10月25日 11:56,Benchao Li <libenc...@apache.org> 写道:
>>> 
>>> I agree with Jane that fine-grained configurations should have higher
>>> priority than job level configurations.
>>> 
>>> For current proposal, we can achieve that:
>>> - Set "table.optimizer.source.predicate" = "true" to enable by
>>> default, and set ""scan.filter-push-down.enabled" = "false" to disable
>>> it per table source
>>> - Set "table.optimizer.source.predicate" = "false" to disable by
>>> default, and set ""scan.filter-push-down.enabled" = "true" to enable
>>> it per table source
>>> 
>>> Jane Chan <qingyue....@gmail.com> 于2023年10月24日周二 23:55写道:
>>>> 
>>>>> 
>>>>> I believe that the configuration "table.optimizer.source.predicate"
>> has a
>>>>> higher priority at the planner level than the configuration at the
>> source
>>>>> level,
>>>>> and it seems easy to implement now.
>>>>> 
>>>> 
>>>> Correct me if I'm wrong, but I think the fine-grained configuration
>>>> "scan.filter-push-down.enabled" should have a higher priority because
>> the
>>>> default value of "table.optimizer.source.predicate" is true. As a
>> result,
>>>> turning off filter push-down for a specific source will not take effect
>>>> unless the default value of "table.optimizer.source.predicate" is
>> changed
>>>> to false, or, alternatively, let users manually set
>>>> "table.optimizer.source.predicate" to false first and then selectively
>>>> enable filter push-down for the desired sources, which is less
>> intuitive.
>>>> WDYT?
>>>> 
>>>> Best,
>>>> Jane
>>>> 
>>>> On Tue, Oct 24, 2023 at 6:05 PM Jiabao Sun <jiabao....@xtransfer.cn
>> .invalid>
>>>> wrote:
>>>> 
>>>>> Thanks Jane,
>>>>> 
>>>>> I believe that the configuration "table.optimizer.source.predicate"
>> has a
>>>>> higher priority at the planner level than the configuration at the
>> source
>>>>> level,
>>>>> and it seems easy to implement now.
>>>>> 
>>>>> Best,
>>>>> Jiabao
>>>>> 
>>>>> 
>>>>>> 2023年10月24日 17:36,Jane Chan <qingyue....@gmail.com> 写道:
>>>>>> 
>>>>>> Hi Jiabao,
>>>>>> 
>>>>>> Thanks for driving this discussion. I have a small question that will
>>>>>> "scan.filter-push-down.enabled" take precedence over
>>>>>> "table.optimizer.source.predicate" when the two parameters might
>> conflict
>>>>>> each other?
>>>>>> 
>>>>>> Best,
>>>>>> Jane
>>>>>> 
>>>>>> On Tue, Oct 24, 2023 at 5:05 PM Jiabao Sun <jiabao....@xtransfer.cn
>>>>> .invalid>
>>>>>> wrote:
>>>>>> 
>>>>>>> Thanks Jark,
>>>>>>> 
>>>>>>> If we only add configuration without adding the enableFilterPushDown
>>>>>>> method in the SupportsFilterPushDown interface,
>>>>>>> each connector would have to handle the same logic in the
>> applyFilters
>>>>>>> method to determine whether filter pushdown is needed.
>>>>>>> This would increase complexity and violate the original behavior of
>> the
>>>>>>> applyFilters method.
>>>>>>> 
>>>>>>> On the contrary, we only need to pass the configuration parameter in
>> the
>>>>>>> newly added enableFilterPushDown method
>>>>>>> to decide whether to perform predicate pushdown.
>>>>>>> 
>>>>>>> I think this approach would be clearer and simpler.
>>>>>>> WDYT?
>>>>>>> 
>>>>>>> Best,
>>>>>>> Jiabao
>>>>>>> 
>>>>>>> 
>>>>>>>> 2023年10月24日 16:58,Jark Wu <imj...@gmail.com> 写道:
>>>>>>>> 
>>>>>>>> Hi JIabao,
>>>>>>>> 
>>>>>>>> I think the current interface can already satisfy your requirements.
>>>>>>>> The connector can reject all the filters by returning the input
>> filters
>>>>>>>> as `Result#remainingFilters`.
>>>>>>>> 
>>>>>>>> So maybe we don't need to introduce a new method to disable
>>>>>>>> pushdown, but just introduce an option for the specific connector.
>>>>>>>> 
>>>>>>>> Best,
>>>>>>>> Jark
>>>>>>>> 
>>>>>>>> On Tue, 24 Oct 2023 at 16:38, Leonard Xu <xbjt...@gmail.com> wrote:
>>>>>>>> 
>>>>>>>>> Thanks @Jiabao for kicking off this discussion.
>>>>>>>>> 
>>>>>>>>> Could you add a section to explain the difference between proposed
>>>>>>>>> connector level config `scan.filter-push-down.enabled` and existing
>>>>>>> query
>>>>>>>>> level config `table.optimizer.source.predicate-pushdown-enabled` ?
>>>>>>>>> 
>>>>>>>>> Best,
>>>>>>>>> Leonard
>>>>>>>>> 
>>>>>>>>>> 2023年10月24日 下午4:18,Jiabao Sun <jiabao....@xtransfer.cn.INVALID>
>> 写道:
>>>>>>>>>> 
>>>>>>>>>> Hi Devs,
>>>>>>>>>> 
>>>>>>>>>> I would like to start a discussion on FLIP-377: support
>> configuration
>>>>>>> to
>>>>>>>>> disable filter pushdown for Table/SQL Sources[1].
>>>>>>>>>> 
>>>>>>>>>> Currently, Flink Table/SQL does not expose fine-grained control
>> for
>>>>>>>>> users to enable or disable filter pushdown.
>>>>>>>>>> However, filter pushdown has some side effects, such as additional
>>>>>>>>> computational pressure on external systems.
>>>>>>>>>> Moreover, Improper queries can lead to issues such as full table
>>>>> scans,
>>>>>>>>> which in turn can impact the stability of external systems.
>>>>>>>>>> 
>>>>>>>>>> Suppose we have an SQL query with two sources: Kafka and a
>> database.
>>>>>>>>>> The database is sensitive to pressure, and we want to configure
>> it to
>>>>>>>>> not perform filter pushdown to the database source.
>>>>>>>>>> However, we still want to perform filter pushdown to the Kafka
>> source
>>>>>>> to
>>>>>>>>> decrease network IO.
>>>>>>>>>> 
>>>>>>>>>> I propose to support configuration to disable filter push down for
>>>>>>>>> Table/SQL sources to let user decide whether to perform filter
>>>>> pushdown.
>>>>>>>>>> 
>>>>>>>>>> Looking forward to your feedback.
>>>>>>>>>> 
>>>>>>>>>> [1]
>>>>>>>>> 
>>>>>>> 
>>>>> 
>> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=276105768
>>>>>>>>>> 
>>>>>>>>>> Best,
>>>>>>>>>> Jiabao
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>> 
>>>>> 
>>> 
>>> 
>>> 
>>> --
>>> 
>>> Best,
>>> Benchao Li
>> 
>> 

Reply via email to