Hi, Thank you to everyone for the discussion on this FLIP, especially Becket for providing guidance that made it more reasonable.
The FLIP document[1] has been updated with the recent discussed content. Please take a look to double-check it when you have time. If we can reach a consensus on this, I will open the voting thread in recent days. Best, Jiabao [1] https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=276105768 > 2023年12月20日 11:38,Jiabao Sun <jiabao....@xtransfer.cn.INVALID> 写道: > > Thanks Becket, > > The behavior description has been added to the Public Interfaces section. > > Best, > Jiabao > > >> 2023年12月20日 08:17,Becket Qin <becket....@gmail.com> 写道: >> >> Hi Jiabao, >> >> Thanks for updating the FLIP. >> Can you add the behavior of the policies that are only applicable to some >> but not all of the databases? This is a part of the intended behavior of >> the proposed configuration. So, we should include that in the FLIP. >> Otherwise, the FLIP looks good to me. >> >> Cheers, >> >> Jiangjie (Becket) Qin >> >> On Tue, Dec 19, 2023 at 11:00 PM Jiabao Sun <jiabao....@xtransfer.cn.invalid> >> wrote: >> >>> Hi Becket, >>> >>> I share the same view as you regarding the prefix for this configuration >>> option. >>> >>> For the JDBC connector, I prefer setting 'filter.handling.policy' = 'FOO' >>> and throwing an exception when the database do not support that specific >>> policy. >>> >>> Not using a prefix can reduce the learning curve for users and avoid >>> introducing a new set of configuration options for every supported JDBC >>> database. >>> I think the policies we provide can be compatible with most databases that >>> follow the JDBC protocol. >>> However, there may be cases where certain databases cannot support some >>> policies. >>> Nevertheless, we can ensure fast failure and allow users to choose a >>> suitable policy in such situations. >>> >>> I have removed the contents about the configuration prefix. >>> Please help review it again. >>> >>> Thanks, >>> Jiabao >>> >>> >>>> 2023年12月19日 19:46,Becket Qin <becket....@gmail.com> 写道: >>>> >>>> Hi Jiabao, >>>> >>>> Thanks for updating the FLIP. >>>> >>>> One more question regarding the JDBC connector, since it is a connector >>>> shared by multiple databases, what if there is a filter handling policy >>>> that is only applicable to one of the databases, but not the others? In >>>> that case, how would the users specify that policy? >>>> Unlike the example of orc format with 2nd+ level config, JDBC connector >>>> only looks at the URL to decide which driver to use. >>>> >>>> For example, MySql supports policy FOO while other databases do not. If >>>> users want to use FOO for MySql, what should they do? Will they set >>>> '*mysql.filter.hanlding.policy' >>>> = 'FOO', *which will only be picked up when the MySql driver is used? >>>> Or they should just set* 'filter.handling.policy' = 'FOO', *and throw >>>> exceptions when other JDBC drivers are used? Personally, I prefer the >>>> latter. If we pick that, do we still need to mention the following? >>>> >>>> *The prefix is needed when the option is for a 2nd+ level. * >>>>> 'connector' = 'filesystem', >>>>> 'format' = 'orc', >>>>> 'orc.filter.handling.policy' = 'NUBERIC_ONY' >>>>> >>>>> *In this case, the values of this configuration may be different >>> depending >>>>> on the format option. For example, orc format may have INDEXED_ONLY >>> while >>>>> parquet format may have something else. * >>>>> >>>> >>>> I found this is somewhat misleading, because the example here is not a >>> part >>>> of the proposal of this FLIP. It is just an example explaining when a >>>> prefix is needed, which seems orthogonal to the proposal in this FLIP. >>>> >>>> Thanks, >>>> >>>> Jiangjie (Becket) Qin >>>> >>>> >>>> On Tue, Dec 19, 2023 at 10:09 AM Jiabao Sun <jiabao....@xtransfer.cn >>> .invalid> >>>> wrote: >>>> >>>>> Thanks Becket for the suggestions, >>>>> >>>>> Updated. >>>>> Please help review it again when you have time. >>>>> >>>>> Best, >>>>> Jiabao >>>>> >>>>> >>>>>> 2023年12月19日 09:06,Becket Qin <becket....@gmail.com> 写道: >>>>>> >>>>>> Hi JIabao, >>>>>> >>>>>> Thanks for updating the FLIP. It looks better. Some suggestions / >>>>> questions: >>>>>> >>>>>> 1. In the motivation section: >>>>>> >>>>>>> *Currently, Flink Table/SQL does not expose fine-grained control for >>>>> users >>>>>>> to control 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.* >>>>>> >>>>>> This statement sounds like the side effects are there for all the >>>>> systems, >>>>>> which is inaccurate. Maybe we can say: >>>>>> *Currently, Flink Table/SQL does not expose fine-grained control for >>>>> users >>>>>> to control filter pushdown. **However, filter pushdown may have side >>>>>> effects in some cases, **such as additional computational pressure on >>>>>> external systems. The JDBC source is a typical example of that. If a >>>>> filter >>>>>> is pushed down to the database, an expensive full table scan may happen >>>>> if >>>>>> the filter involves unindexed columns.* >>>>>> >>>>>> 2. Regarding the prefix, usually a prefix is not required for the top >>>>> level >>>>>> connector options. This is because the *connector* option is already >>>>> there. >>>>>> So >>>>>> 'connector' = 'jdbc', >>>>>> 'filter.handling.policy' = 'ALWAYS' >>>>>> is sufficient. >>>>>> >>>>>> The prefix is needed when the option is for a 2nd+ level. For example, >>>>>> 'connector' = 'jdbc', >>>>>> 'format' = 'orc', >>>>>> 'orc.some.option' = 'some_value' >>>>>> In this case, the prefix of "orc" is needed to make it clear this >>> option >>>>> is >>>>>> for the format. >>>>>> >>>>>> I am guessing that the reason that currently the connector prefix is >>>>> there >>>>>> is because the values of this configuration may be different depending >>> on >>>>>> the connectors. For example, jdbc may have INDEXED_ONLY while MongoDB >>> may >>>>>> have something else. Personally speaking, I am fine if we do not have a >>>>>> prefix in this case because users have already specified the connector >>>>> type >>>>>> and it is intuitive enough that the option value is for that connector, >>>>> not >>>>>> others. >>>>>> >>>>>> 3. can we clarify on the following statement: >>>>>> >>>>>>> *Introduce the native configuration [prefix].filter.handling.policy in >>>>> the >>>>>>> connector.* >>>>>> >>>>>> What do you mean by "native configuration"? From what I understand, the >>>>>> FLIP does the following: >>>>>> - introduces a new configuration to the JDBC and MongoDB connector. >>>>>> - Suggests a convention option name if other connectors are going to >>> add >>>>> an >>>>>> option for the same purpose. >>>>>> >>>>>> Thanks, >>>>>> >>>>>> Jiangjie (Becket) Qin >>>>>> >>>>>> >>>>>> >>>>>> On Mon, Dec 18, 2023 at 5:45 PM Jiabao Sun <jiabao....@xtransfer.cn >>>>> .invalid> >>>>>> wrote: >>>>>> >>>>>>> Hi Becket, >>>>>>> >>>>>>> The FLIP document[1] has been updated. >>>>>>> Could you help take a look again? >>>>>>> >>>>>>> Thanks, >>>>>>> Jiabao >>>>>>> >>>>>>> [1] >>>>>>> >>>>> >>> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=276105768 >>>>>>> >>>>>>> >>>>>>>> 2023年12月18日 16:53,Becket Qin <becket....@gmail.com> 写道: >>>>>>>> >>>>>>>> Yes, that sounds reasonable to me. We can start with ALWAYS and >>> NEVER, >>>>>>> and >>>>>>>> add more policies as needed. >>>>>>>> >>>>>>>> Thanks, >>>>>>>> >>>>>>>> Jiangjie (Becket) Qin >>>>>>>> >>>>>>>> On Mon, Dec 18, 2023 at 4:48 PM Jiabao Sun <jiabao....@xtransfer.cn >>>>>>> .invalid> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Thanks Bucket, >>>>>>>>> >>>>>>>>> The jdbc.filter.handling.policy is good to me as it provides >>>>> sufficient >>>>>>>>> extensibility for future filter pushdown optimizations. >>>>>>>>> However, currently, we don't have an implementation for the AUTO >>> mode, >>>>>>> and >>>>>>>>> it seems that the AUTO mode can easily be confused with the ALWAYS >>>>> mode >>>>>>>>> because users don't have the opportunity to MANUALLY decide which >>>>>>> filters >>>>>>>>> to push down. >>>>>>>>> >>>>>>>>> I suggest that we only introduce the ALWAYS and NEVER modes for now, >>>>> and >>>>>>>>> we can consider introducing more flexible policies in the future, >>>>>>>>> such as INDEX_ONLY, NUMBERIC_ONLY and so on. >>>>>>>>> >>>>>>>>> WDYT? >>>>>>>>> >>>>>>>>> Best, >>>>>>>>> Jiabao >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>>> 2023年12月18日 16:27,Becket Qin <becket....@gmail.com> 写道: >>>>>>>>>> >>>>>>>>>> Hi Jiabao, >>>>>>>>>> >>>>>>>>>> Please see the reply inline. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> The MySQL connector is currently in the flink-connector-jdbc >>>>>>> repository >>>>>>>>>>> and is not a standalone connector. >>>>>>>>>>> Is it too unique to use "mysql" as the configuration option >>> prefix? >>>>>>>>>> >>>>>>>>>> If the intended behavior makes sense to all the supported JDBC >>>>> drivers, >>>>>>>>> we >>>>>>>>>> can make this a JDBC connector configuration. >>>>>>>>>> >>>>>>>>>> Also, I would like to ask about the difference in behavior between >>>>> AUTO >>>>>>>>> and >>>>>>>>>>> ALWAYS. >>>>>>>>>>> It seems that we cannot guarantee the pushing down of all filters >>> to >>>>>>> the >>>>>>>>>>> external system under the ALWAYS >>>>>>>>>>> mode because not all filters in Flink SQL are supported by the >>>>>>> external >>>>>>>>>>> system. >>>>>>>>>>> Should we throw an error when encountering a filter that cannot be >>>>>>>>> pushed >>>>>>>>>>> down in the ALWAYS mode? >>>>>>>>>> >>>>>>>>>> The idea of AUTO is to do efficiency-aware pushdowns. The source >>> will >>>>>>>>> query >>>>>>>>>> the external system (MySQL, Oracle, SQL Server, etc) first to >>>>> retrieve >>>>>>>>> the >>>>>>>>>> information of the table. With that information, the source will >>>>> decide >>>>>>>>>> whether to further push a filter to the external system based on >>> the >>>>>>>>>> efficiency. E.g. only push the indexed fields. In contrast, ALWAYS >>>>> will >>>>>>>>>> just always push the supported filters to the external system, >>>>>>> regardless >>>>>>>>>> of the efficiency. In case there are filters that are not >>> supported, >>>>>>>>>> according to the current contract of SupportsFilterPushdown, these >>>>>>>>>> unsupported filters should just be returned by the >>>>>>>>>> *SupportsFilterPushdown.applyFilters()* method as remaining >>> filters. >>>>>>>>>> Therefore, there is no need to throw exceptions here. This is >>> likely >>>>>>> the >>>>>>>>>> desired behavior for most users, IMO. If there are cases that users >>>>>>>>> really >>>>>>>>>> want to get alerted when a filter cannot be pushed to the external >>>>>>>>> system, >>>>>>>>>> we can add another value like "ENFORCED_ALWAYS", which behaves like >>>>>>>>> ALWAYS, >>>>>>>>>> but throws exceptions when a filter cannot be applied to the >>> external >>>>>>>>>> system. But personally I don't see much value in doing this. >>>>>>>>>> >>>>>>>>>> Thanks, >>>>>>>>>> >>>>>>>>>> Jiangjie (Becket) Qin >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Mon, Dec 18, 2023 at 3:54 PM Jiabao Sun < >>> jiabao....@xtransfer.cn >>>>>>>>> .invalid> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> Hi Becket, >>>>>>>>>>> >>>>>>>>>>> The MySQL connector is currently in the flink-connector-jdbc >>>>>>> repository >>>>>>>>>>> and is not a standalone connector. >>>>>>>>>>> Is it too unique to use "mysql" as the configuration option >>> prefix? >>>>>>>>>>> >>>>>>>>>>> Also, I would like to ask about the difference in behavior between >>>>>>> AUTO >>>>>>>>>>> and ALWAYS. >>>>>>>>>>> It seems that we cannot guarantee the pushing down of all filters >>> to >>>>>>> the >>>>>>>>>>> external system under the ALWAYS >>>>>>>>>>> mode because not all filters in Flink SQL are supported by the >>>>>>> external >>>>>>>>>>> system. >>>>>>>>>>> Should we throw an error when encountering a filter that cannot be >>>>>>>>> pushed >>>>>>>>>>> down in the ALWAYS mode? >>>>>>>>>>> >>>>>>>>>>> Thanks, >>>>>>>>>>> Jiabao >>>>>>>>>>> >>>>>>>>>>>> 2023年12月18日 15:34,Becket Qin <becket....@gmail.com> 写道: >>>>>>>>>>>> >>>>>>>>>>>> Hi JIabao, >>>>>>>>>>>> >>>>>>>>>>>> Thanks for updating the FLIP. Maybe I did not explain it clearly >>>>>>>>> enough. >>>>>>>>>>> My >>>>>>>>>>>> point is that given there are various good flavors of behaviors >>>>>>>>> handling >>>>>>>>>>>> filters pushed down, we should not have a common config of >>>>>>>>>>>> "ignore.filter.pushdown", because the behavior is not *common*. >>>>>>>>>>>> >>>>>>>>>>>> It looks like the original motivation of this FLIP is just for >>>>> MySql. >>>>>>>>>>> Let's >>>>>>>>>>>> focus on what is the best solution for MySql connector here >>> first. >>>>>>>>> After >>>>>>>>>>>> that, if people think the best behavior for MySql happens to be a >>>>>>>>> common >>>>>>>>>>>> one, we can then discuss whether that is worth being added to the >>>>>>> base >>>>>>>>>>>> implementation of source. For MySQL, if we are going to >>> introduce a >>>>>>>>>>> config >>>>>>>>>>>> to MySql, why not have something like >>>>> "mysql.filter.handling.policy" >>>>>>>>> with >>>>>>>>>>>> value of AUTO / NEVER / ALWAYS? Isn't that better than >>>>>>>>>>>> "ignore.filter.pushdown"? >>>>>>>>>>>> >>>>>>>>>>>> Thanks, >>>>>>>>>>>> >>>>>>>>>>>> Jiangjie (Becket) Qin >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On Sun, Dec 17, 2023 at 11:30 PM Jiabao Sun < >>>>> jiabao....@xtransfer.cn >>>>>>>>>>> .invalid> >>>>>>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Hi Becket, >>>>>>>>>>>>> >>>>>>>>>>>>> The FLIP document has been updated as well. >>>>>>>>>>>>> Please take a look when you have time. >>>>>>>>>>>>> >>>>>>>>>>>>> Thanks, >>>>>>>>>>>>> Jiabao >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>>> 2023年12月17日 22:54,Jiabao Sun <jiabao....@xtransfer.cn.INVALID> >>>>> 写道: >>>>>>>>>>>>>> >>>>>>>>>>>>>> Thanks Becket, >>>>>>>>>>>>>> >>>>>>>>>>>>>> I apologize for not being able to continue with this proposal >>> due >>>>>>> to >>>>>>>>>>>>> being too busy during this period. >>>>>>>>>>>>>> >>>>>>>>>>>>>> The viewpoints you shared about the design of Flink Source make >>>>>>> sense >>>>>>>>>>> to >>>>>>>>>>>>> me >>>>>>>>>>>>>> The native configuration ‘ignore.filter.pushdown’ is good to >>> me. >>>>>>>>>>>>>> Having a unified name or naming style can indeed prevent >>>>> confusion >>>>>>>>> for >>>>>>>>>>>>> users regarding >>>>>>>>>>>>>> the inconsistent naming of this configuration across different >>>>>>>>>>>>> connectors. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Currently, there are not many external connectors that support >>>>>>> filter >>>>>>>>>>>>> pushdown. >>>>>>>>>>>>>> I propose that we first introduce it in flink-connector-jdbc >>> and >>>>>>>>>>>>> flink-connector-mongodb. >>>>>>>>>>>>>> Do you think this is feasible? >>>>>>>>>>>>>> >>>>>>>>>>>>>> Best, >>>>>>>>>>>>>> Jiabao >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>>> 2023年11月16日 17:45,Becket Qin <becket....@gmail.com> 写道: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Hi Jiabao, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Arguments like "because Spark has it so Flink should also have >>>>> it" >>>>>>>>>>> does >>>>>>>>>>>>> not >>>>>>>>>>>>>>> make sense. Different projects have different API flavors and >>>>>>>>> styles. >>>>>>>>>>>>> What >>>>>>>>>>>>>>> is really important is the rationale and the design principle >>>>>>> behind >>>>>>>>>>> the >>>>>>>>>>>>>>> API. They should conform to the convention of the project. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> First of all, Spark Source API itself has a few issues and >>> they >>>>>>>>> ended >>>>>>>>>>> up >>>>>>>>>>>>>>> introduce DataSource V2 in Spark 3.0, which added the >>> decorative >>>>>>>>>>>>> interfaces >>>>>>>>>>>>>>> like SupportsPushdownXXX. Some of the configurations predating >>>>>>>>>>>>> DataSource >>>>>>>>>>>>>>> V2 may still be there. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> For the Spark configurations you mentioned, they are all the >>>>>>>>>>>>> configurations >>>>>>>>>>>>>>> for FileScanBuilder, which is equivalent to FileSource in >>> Flink. >>>>>>>>>>>>> Currently, >>>>>>>>>>>>>>> regardless of the format (ORC, Parquet, Avro, etc), the >>>>> FileSource >>>>>>>>>>>>> pushes >>>>>>>>>>>>>>> back all the filters to ensure correctness. The actual filters >>>>>>> that >>>>>>>>>>> got >>>>>>>>>>>>>>> applied to the specific format might still be different. This >>>>>>>>>>>>>>> implementation is the same in FileScanBuilder.pushFilters() >>> for >>>>>>>>>>> Spark. I >>>>>>>>>>>>>>> don't know why Spark got separate configurations for each >>>>> format. >>>>>>>>>>> Maybe >>>>>>>>>>>>> it >>>>>>>>>>>>>>> is because the filters are actually implemented differently >>> for >>>>>>>>>>>>> different >>>>>>>>>>>>>>> format. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> At least for the current implementation in FileScanBuilder, >>>>> these >>>>>>>>>>>>>>> configurations can be merged to one configuration like >>>>>>>>>>>>>>> `apply.filters.to.format.enabled`. Note that this config, as >>>>> well >>>>>>> as >>>>>>>>>>> the >>>>>>>>>>>>>>> separate configs you mentioned, are just visible and used by >>> the >>>>>>>>>>>>>>> FileScanBuilder. It determines whether the filters should be >>>>>>> passed >>>>>>>>>>>>> down to >>>>>>>>>>>>>>> the format of the FileScanBuilder instance. Regardless of the >>>>>>> value >>>>>>>>> of >>>>>>>>>>>>>>> these configs, FileScanBuilder.pushFilters() will always be >>>>>>> called, >>>>>>>>>>> and >>>>>>>>>>>>>>> FileScanBuilder (as well as FileSource in Flink) will always >>>>> push >>>>>>>>> back >>>>>>>>>>>>> all >>>>>>>>>>>>>>> the filters to the framework. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> A MySql source can have a very different way to handle this. >>> For >>>>>>>>>>>>> example, A >>>>>>>>>>>>>>> MySql source A config in this case might be >>> "my.apply.filters" >>>>>>> with >>>>>>>>>>>>> three >>>>>>>>>>>>>>> different values: >>>>>>>>>>>>>>> - AUTO: The Source will issue a DESC Table request to >>> understand >>>>>>>>>>>>> whether a >>>>>>>>>>>>>>> filter can be applied efficiently. And decide which filters >>> can >>>>> be >>>>>>>>>>>>> applied >>>>>>>>>>>>>>> and which cannot based on that. >>>>>>>>>>>>>>> - NEVER: Never apply filtering. It will always do a full table >>>>>>> read >>>>>>>>>>> and >>>>>>>>>>>>>>> let Flink do the filtering. >>>>>>>>>>>>>>> - ALWAYS: Always apply the filtering to the MySql server. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> In the above examples of FileSource and MySql Source, I don't >>>>>>> think >>>>>>>>> it >>>>>>>>>>>>> is a >>>>>>>>>>>>>>> good idea to shoehorn the behaviors into a naive config of >>>>>>>>>>>>>>> `ignore.filter.pushdown`. That is why I don't think this is a >>>>>>> common >>>>>>>>>>>>> config. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> To recap, like I said, I do agree that in some cases, we may >>>>> want >>>>>>> to >>>>>>>>>>>>> behave >>>>>>>>>>>>>>> differently when filters are pushed down to the sources, even >>>>> if a >>>>>>>>>>>>> source >>>>>>>>>>>>>>> implements SupportsFilterPushDown, but I don't think there is >>> a >>>>>>>>>>> suitable >>>>>>>>>>>>>>> common config for this. The behavior is very likely source >>>>>>> specific. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Jiangjie (Becket) Qin >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Thu, Nov 16, 2023 at 3:41 PM Jiabao Sun < >>>>>>> jiabao....@xtransfer.cn >>>>>>>>>>>>> .invalid> >>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Thanks Becket, >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> I still believe that adding a configuration at the source >>> level >>>>>>> to >>>>>>>>>>>>> disable >>>>>>>>>>>>>>>> filter pushdown is needed. This demand exists in spark as >>>>>>> well[1]. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> In Spark, most sources that support filter pushdown provide >>>>> their >>>>>>>>> own >>>>>>>>>>>>>>>> corresponding configuration options to enable or disable >>> filter >>>>>>>>>>>>> pushdown. >>>>>>>>>>>>>>>> For PRs[2-4] that support filter pushdown capability, they >>> also >>>>>>>>>>> provide >>>>>>>>>>>>>>>> configuration options to disable this capability. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> I believe this configuration is applicable to most scenarios, >>>>> and >>>>>>>>>>>>> there is >>>>>>>>>>>>>>>> no need to dwell on why this configuration option was not >>>>>>>>> introduced >>>>>>>>>>>>>>>> earlier than the SupportsFilterPushDown interface. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> spark.sql.parquet.filterPushdown >>>>>>>>>>>>>>>> spark.sql.orc.filterPushdown >>>>>>>>>>>>>>>> spark.sql.csv.filterPushdown.enabled >>>>>>>>>>>>>>>> spark.sql.json.filterPushdown.enabled >>>>>>>>>>>>>>>> spark.sql.avro.filterPushdown.enabled >>>>>>>>>>>>>>>> JDBC Option: pushDownPredicate >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> We can see that the lack of consistency is caused by each >>>>>>> connector >>>>>>>>>>>>>>>> introducing different configuration options for the same >>>>>>> behavior. >>>>>>>>>>>>>>>> This is one of the motivations for advocating the >>> introduction >>>>>>> of a >>>>>>>>>>>>>>>> unified configuration name. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> [1] https://issues.apache.org/jira/browse/SPARK-24288 >>>>>>>>>>>>>>>> [2] https://github.com/apache/spark/pull/27366 >>>>>>>>>>>>>>>> [3]https://github.com/apache/spark/pull/26973 >>>>>>>>>>>>>>>> [4] https://github.com/apache/spark/pull/29145 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Best, >>>>>>>>>>>>>>>> Jiabao >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> 2023年11月16日 08:10,Becket Qin <becket....@gmail.com> 写道: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Hi Jiabao, >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> While we can always fix the formality of the config, a more >>>>>>>>>>>>> fundamental >>>>>>>>>>>>>>>>> issue here is whether this configuration is common enough. >>>>>>>>>>> Personally >>>>>>>>>>>>> I >>>>>>>>>>>>>>>> am >>>>>>>>>>>>>>>>> still not convinced it is. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Remember we don't have a common implementation for >>>>>>>>>>>>> SupportsFilterPushdown >>>>>>>>>>>>>>>>> itself. Why does a potential behavior of the >>>>>>>>>>>>>>>>> SupportsFilterPushdown.applyFilters() method deserve a >>> common >>>>>>>>>>>>>>>>> configuration? A common implementation should always come >>>>> first, >>>>>>>>>>> then >>>>>>>>>>>>> its >>>>>>>>>>>>>>>>> configuration becomes a common configuration as a natural >>>>>>> result. >>>>>>>>>>> But >>>>>>>>>>>>>>>> here >>>>>>>>>>>>>>>>> we are trying to add an impl to a configuration just to fix >>>>> its >>>>>>>>>>>>>>>> formality. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> I agree that there might be a few Source implementations >>> that >>>>>>> may >>>>>>>>>>>>> want to >>>>>>>>>>>>>>>>> avoid additional burdens on the remote system in some >>>>>>>>> circumstances. >>>>>>>>>>>>> And >>>>>>>>>>>>>>>>> these circumstances are very specific: >>>>>>>>>>>>>>>>> 1. The source talks to a remote service that can help >>> perform >>>>>>> the >>>>>>>>>>>>> actual >>>>>>>>>>>>>>>>> filtering. >>>>>>>>>>>>>>>>> 2. The filtering done by the remote service is inefficient >>> for >>>>>>>>> some >>>>>>>>>>>>>>>> reason >>>>>>>>>>>>>>>>> (e.g. missing index) >>>>>>>>>>>>>>>>> 3. The external service does not want to perform the >>>>> inefficient >>>>>>>>>>>>>>>> filtering >>>>>>>>>>>>>>>>> for some reason (e.g. it is a shared service with others) >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> There are multiple approaches to address the issue. Pushing >>>>> back >>>>>>>>> the >>>>>>>>>>>>>>>>> filters is just one way of achieving this. So here we are >>>>>>> talking >>>>>>>>>>>>> about a >>>>>>>>>>>>>>>>> config for one of the possible solutions to a scenario with >>>>> all >>>>>>>>> the >>>>>>>>>>>>> above >>>>>>>>>>>>>>>>> situations. I don't think there is enough justification for >>>>> the >>>>>>>>>>>>> config to >>>>>>>>>>>>>>>>> be common. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> There is always this trade-off between the proliferation of >>>>>>> public >>>>>>>>>>>>>>>>> interfaces and the API standardization. As an extreme >>> example, >>>>>>> we >>>>>>>>>>> can >>>>>>>>>>>>>>>> make >>>>>>>>>>>>>>>>> our public API a union of all the configs potentially used >>> in >>>>>>> all >>>>>>>>>>> the >>>>>>>>>>>>>>>> cases >>>>>>>>>>>>>>>>> in the name of standardization. Apparently this won't work. >>> So >>>>>>>>> there >>>>>>>>>>>>> must >>>>>>>>>>>>>>>>> be a bar here and this bar might be somewhat subjective. For >>>>>>> this >>>>>>>>>>>>> FLIP, >>>>>>>>>>>>>>>>> personally I don't think the config meets my bar for the >>>>> reason >>>>>>>>>>> stated >>>>>>>>>>>>>>>>> above. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Therefore, my suggestion remains the same. Keep the config >>> as >>>>> a >>>>>>>>>>> Source >>>>>>>>>>>>>>>>> implementation specific configuration. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Jiangjie (Becket) Qin >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On Thu, Nov 16, 2023 at 12:36 AM Jiabao Sun < >>>>>>>>>>> jiabao....@xtransfer.cn >>>>>>>>>>>>>>>> .invalid> >>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Thanks Becket for the feedback, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Regarding concerns about common configurations, I think we >>>>> can >>>>>>>>>>>>> introduce >>>>>>>>>>>>>>>>>> FiltersApplier to unify the behavior of various connectors. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> public static class FiltersApplier { >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> private final ReadableConfig config; >>>>>>>>>>>>>>>>>> private final Function<List<ResolvedExpression>, Result> >>>>>>> action; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> private FiltersApplier( >>>>>>>>>>>>>>>>>> ReadableConfig config, >>>>>>>>>>>>>>>>>> Function<List<ResolvedExpression>, Result> action) { >>>>>>>>>>>>>>>>>> this.config = config; >>>>>>>>>>>>>>>>>> this.action = action; >>>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> public Result applyFilters(List<ResolvedExpression> >>> filters) >>>>> { >>>>>>>>>>>>>>>>>> if (config.get(ENABLE_FILTER_PUSH_DOWN)) { >>>>>>>>>>>>>>>>>> return action.apply(filters); >>>>>>>>>>>>>>>>>> } else { >>>>>>>>>>>>>>>>>> return Result.of(Collections.emptyList(), filters); >>>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> public static FiltersApplier of( >>>>>>>>>>>>>>>>>> ReadableConfig config, >>>>>>>>>>>>>>>>>> Function<List<ResolvedExpression>, Result> action) { >>>>>>>>>>>>>>>>>> return new FiltersApplier(config, action); >>>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> For connectors implementation: >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> @Override >>>>>>>>>>>>>>>>>> public Result applyFilters(List<ResolvedExpression> >>> filters) >>>>> { >>>>>>>>>>>>>>>>>> return FiltersApplier.of(config, >>>>>>>>>>>>>>>>>> f -> Result.of(new ArrayList<>(filters), >>>>>>>>>>>>>>>>>> Collections.emptyList())); >>>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> As for the name, whether it is >>>>>>> "source.filter-push-down.enabled" >>>>>>>>> or >>>>>>>>>>>>>>>>>> "source.ignore-pushed-down-filters.enabled", I think both >>> are >>>>>>>>> okay. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Do you think this change is feasible? >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Best, >>>>>>>>>>>>>>>>>> Jiabao >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> 2023年11月15日 23:44,Becket Qin <becket....@gmail.com> 写道: >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Hi Jiabao, >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Yes, I still have concerns. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> The FLIP violates the following two principles regarding >>>>>>>>>>>>> configuration: >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> 1.* A config of a class should never negate the semantic >>> of >>>>> a >>>>>>>>>>>>>>>> decorative >>>>>>>>>>>>>>>>>>> interface implemented by that class. * >>>>>>>>>>>>>>>>>>> A decorative interface is a public contract with other >>>>>>>>> components, >>>>>>>>>>>>>>>> while >>>>>>>>>>>>>>>>>> a >>>>>>>>>>>>>>>>>>> config is only internal to the class itself. The >>>>>>> configurations >>>>>>>>>>> for >>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>> Sources are not (and should never be) visible or >>> understood >>>>> to >>>>>>>>>>>>>>>>>>> other components (e.g. optimizer). A configuration of a >>>>> Source >>>>>>>>>>> only >>>>>>>>>>>>>>>>>>> controls the behavior of that Source, provided it is not >>>>>>>>> violating >>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>> API >>>>>>>>>>>>>>>>>>> contract / semantic defined by the decorative interface. >>> So >>>>>>>>> when a >>>>>>>>>>>>>>>> Source >>>>>>>>>>>>>>>>>>> implementation implements SupportsFilterPushdown, this is >>> a >>>>>>>>> clear >>>>>>>>>>>>>>>> public >>>>>>>>>>>>>>>>>>> contract with Flink that filters should be pushed down to >>>>> that >>>>>>>>>>>>> Source. >>>>>>>>>>>>>>>>>>> Therefore, for the same source, there should not be a >>>>>>>>>>> configuration >>>>>>>>>>>>>>>>>>> "source.filter-push-down.enabled" which stops the filters >>>>> from >>>>>>>>>>> being >>>>>>>>>>>>>>>>>> pushed >>>>>>>>>>>>>>>>>>> down to that Source. However, that specific source >>>>>>>>> implementation >>>>>>>>>>>>> can >>>>>>>>>>>>>>>>>> have >>>>>>>>>>>>>>>>>>> its own config to control its internal behavior, e.g. >>>>>>>>>>>>>>>>>>> "ignore-pushed-down-filters.enabled" which may push back >>> all >>>>>>> the >>>>>>>>>>>>> pushed >>>>>>>>>>>>>>>>>>> down filters back to the Flink optimizer. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> 2. When we are talking about "common configs", in fact we >>>>> are >>>>>>>>>>>>> talking >>>>>>>>>>>>>>>>>> about >>>>>>>>>>>>>>>>>>> "configs for common (abstract) implementation classes". >>> With >>>>>>>>> that >>>>>>>>>>>>> as a >>>>>>>>>>>>>>>>>>> context, *a common config should always be backed by a >>>>> common >>>>>>>>>>>>>>>>>>> implementation class, so that consistent behavior can be >>>>>>>>>>>>> guaranteed. * >>>>>>>>>>>>>>>>>>> The LookupOptions you mentioned are configurations defined >>>>> for >>>>>>>>>>>>> classes >>>>>>>>>>>>>>>>>>> DefaultLookupCache / PeriodicCacheReloadTrigger / >>>>>>>>>>>>>>>>>> TimedCacheReloadTrigger. >>>>>>>>>>>>>>>>>>> These configs are considered as "common" only because the >>>>>>>>>>>>>>>> implementation >>>>>>>>>>>>>>>>>>> classes using them are common building blocks for lookup >>>>> table >>>>>>>>>>>>>>>>>>> implementations. It would not make sense to have a >>> dangling >>>>>>>>> config >>>>>>>>>>>>> in >>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>> LookupOptions without the underlying common implementation >>>>>>>>> class, >>>>>>>>>>>>> but >>>>>>>>>>>>>>>>>> only >>>>>>>>>>>>>>>>>>> relies on a specific source to implement the stated >>>>> behavior. >>>>>>>>>>>>>>>>>>> As a bad example, there is this outlier config >>> "max-retries" >>>>>>> in >>>>>>>>>>>>>>>>>>> LookupOptions, which I don't think should be here. This is >>>>>>>>> because >>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>> retry behavior can be very implementation specific. For >>>>>>> example, >>>>>>>>>>>>> there >>>>>>>>>>>>>>>>>> can >>>>>>>>>>>>>>>>>>> be many different flavors of retry related configurations, >>>>>>>>>>>>>>>> retry-backoff, >>>>>>>>>>>>>>>>>>> retry-timeout, retry-async, etc. Why only max-retry is put >>>>>>> here? >>>>>>>>>>>>> should >>>>>>>>>>>>>>>>>> all >>>>>>>>>>>>>>>>>>> of them be put here? If we put all such kinds of configs >>> in >>>>>>> the >>>>>>>>>>>>> common >>>>>>>>>>>>>>>>>>> configs for "standardization and unification", the number >>> of >>>>>>>>>>> "common >>>>>>>>>>>>>>>>>>> configs" can easily go crazy. And I don't see material >>>>>>> benefits >>>>>>>>> of >>>>>>>>>>>>>>>> doing >>>>>>>>>>>>>>>>>>> that. So here I don't think the configuration "max-retry" >>>>>>> should >>>>>>>>>>> be >>>>>>>>>>>>> in >>>>>>>>>>>>>>>>>>> LookupOptions, because it is not backed by any common >>>>>>>>>>> implementation >>>>>>>>>>>>>>>>>>> classes. If max-retry is implemented in the HBase source, >>> it >>>>>>>>>>> should >>>>>>>>>>>>>>>> stay >>>>>>>>>>>>>>>>>>> there. For the same reason, the config proposed in this >>> FLIP >>>>>>>>>>>>> (probably >>>>>>>>>>>>>>>>>> with >>>>>>>>>>>>>>>>>>> a name less confusing for the first reason mentioned >>> above) >>>>>>>>>>> should >>>>>>>>>>>>>>>> stay >>>>>>>>>>>>>>>>>> in >>>>>>>>>>>>>>>>>>> the specific Source implementation. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> For the two reasons above, I am -1 to what the FLIP >>>>> currently >>>>>>>>>>>>> proposes. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> I think the right way to address the motivation here is >>>>> still >>>>>>> to >>>>>>>>>>>>> have a >>>>>>>>>>>>>>>>>>> config like "ignore-pushed-down-filters.enabled" for the >>>>>>>>> specific >>>>>>>>>>>>>>>> source >>>>>>>>>>>>>>>>>>> implementation. Please let me know if this solves the >>>>> problem >>>>>>>>> you >>>>>>>>>>>>> are >>>>>>>>>>>>>>>>>>> facing. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Jiangjie (Becket) Qin >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> On Wed, Nov 15, 2023 at 11:52 AM Jiabao Sun < >>>>>>>>>>>>> jiabao....@xtransfer.cn >>>>>>>>>>>>>>>>>> .invalid> >>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Hi Becket, >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> The purpose of introducing this configuration is that not >>>>> all >>>>>>>>>>>>> filter >>>>>>>>>>>>>>>>>>>> pushdowns can improve overall performance. >>>>>>>>>>>>>>>>>>>> If the filter can hit the external index, then pushdown >>> is >>>>>>>>>>>>> definitely >>>>>>>>>>>>>>>>>>>> worth it, as it can not only improve query time but also >>>>>>>>> decrease >>>>>>>>>>>>>>>>>> network >>>>>>>>>>>>>>>>>>>> overhead. >>>>>>>>>>>>>>>>>>>> However, for filters that do not hit the external index, >>> it >>>>>>> may >>>>>>>>>>>>>>>>>> increase a >>>>>>>>>>>>>>>>>>>> lot of performance overhead on the external system. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Undeniably, if the connector can make accurate decisions >>>>> for >>>>>>>>> good >>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>> bad >>>>>>>>>>>>>>>>>>>> filters, we may not need to introduce this configuration >>>>>>> option >>>>>>>>>>> to >>>>>>>>>>>>>>>>>> disable >>>>>>>>>>>>>>>>>>>> pushing down filters to the external system. >>>>>>>>>>>>>>>>>>>> However, it is currently not easy to achieve. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> IMO, supporting filter pushdown does not mean that always >>>>>>>>> filter >>>>>>>>>>>>>>>>>> pushdown >>>>>>>>>>>>>>>>>>>> is better. >>>>>>>>>>>>>>>>>>>> In the absence of automatic decision-making, I think we >>>>>>> should >>>>>>>>>>>>> leave >>>>>>>>>>>>>>>>>> this >>>>>>>>>>>>>>>>>>>> decision to users. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> The newly introduced configuration option is similar to >>>>>>>>>>>>> LookupOptions, >>>>>>>>>>>>>>>>>>>> providing unified naming and default values to avoid >>>>>>> confusion >>>>>>>>>>>>> caused >>>>>>>>>>>>>>>> by >>>>>>>>>>>>>>>>>>>> inconsistent naming in different connectors for users. >>>>>>>>>>>>>>>>>>>> Setting the default value to true allows it to maintain >>>>>>>>>>>>> compatibility >>>>>>>>>>>>>>>>>> with >>>>>>>>>>>>>>>>>>>> the default behavior of "always pushdown". >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Do you have any other concerns about this proposal? >>> Please >>>>>>> let >>>>>>>>> me >>>>>>>>>>>>>>>> know. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>>>>>>> Jiabao >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> 2023年10月31日 17:29,Jiabao Sun <jiabao....@xtransfer.cn >>>>>>>>> .INVALID> >>>>>>>>>>>>> 写道: >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Hi Becket, >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Actually, for FileSystemSource, it is not always >>> desired, >>>>>>> only >>>>>>>>>>> OCR >>>>>>>>>>>>>>>> file >>>>>>>>>>>>>>>>>>>> formats support filter pushdown. >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> We can disable predicate pushdown for FileSystemSource >>> by >>>>>>>>>>> setting >>>>>>>>>>>>>>>>>>>> 'table.optimizer.source.predicate-pushdown-enabled' to >>>>> false. >>>>>>>>>>>>>>>>>>>>> I think we can also disable filter pushdown at a more >>>>>>> granular >>>>>>>>>>>>> level >>>>>>>>>>>>>>>>>>>> through fine-grained configuration. >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Best, >>>>>>>>>>>>>>>>>>>>> Jiabao >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> 2023年10月31日 16:50,Becket Qin <becket....@gmail.com> >>> 写道: >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Hi Jiabao, >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Thanks for the explanation. Maybe it's easier to >>> explain >>>>>>> with >>>>>>>>>>> an >>>>>>>>>>>>>>>>>>>> example. >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Let's take FileSystemTableSource as an example. >>> Currently >>>>>>> it >>>>>>>>>>>>>>>>>> implements >>>>>>>>>>>>>>>>>>>>>> SupportsFilterPushDown interface. With your proposal, >>>>> does >>>>>>> it >>>>>>>>>>>>> have >>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>> support `source.filter-push-down.enabled` as well? But >>>>> this >>>>>>>>>>>>>>>>>>>> configuration >>>>>>>>>>>>>>>>>>>>>> does not quite make sense for the FileSystemTableSource >>>>>>>>> because >>>>>>>>>>>>>>>> filter >>>>>>>>>>>>>>>>>>>>>> pushdown is always desired. However, because this >>>>>>>>> configuration >>>>>>>>>>>>> is a >>>>>>>>>>>>>>>>>>>> part >>>>>>>>>>>>>>>>>>>>>> of the SupportsFilterPushDown interface (which sounds >>>>>>>>> confusing >>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>> begin >>>>>>>>>>>>>>>>>>>>>> with), the FileSystemTableSource can only do one of the >>>>>>>>>>>>> following: >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> 1. Ignore the user configuration to always apply the >>>>> pushed >>>>>>>>>>> down >>>>>>>>>>>>>>>>>>>> filters - >>>>>>>>>>>>>>>>>>>>>> this is an apparent anti-pattern because a >>> configuration >>>>>>>>> should >>>>>>>>>>>>>>>> always >>>>>>>>>>>>>>>>>>>> do >>>>>>>>>>>>>>>>>>>>>> what it says. >>>>>>>>>>>>>>>>>>>>>> 2. Throw an exception telling users that this >>>>> configuration >>>>>>>>> is >>>>>>>>>>>>> not >>>>>>>>>>>>>>>>>>>>>> applicable to the FileSystemTableSource. >>>>>>>>>>>>>>>>>>>>>> 3. Implement this configuration to push back the pushed >>>>>>> down >>>>>>>>>>>>>>>> filters, >>>>>>>>>>>>>>>>>>>> even >>>>>>>>>>>>>>>>>>>>>> though this is never desired. >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> None of the above options looks awkward. I am curious >>>>> what >>>>>>>>> your >>>>>>>>>>>>>>>>>>>> solution is >>>>>>>>>>>>>>>>>>>>>> here? >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Jiangjie (Becket) Qin >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> On Tue, Oct 31, 2023 at 3:11 PM Jiabao Sun < >>>>>>>>>>>>> jiabao....@xtransfer.cn >>>>>>>>>>>>>>>>>>>> .invalid> >>>>>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> Thanks Becket for the further explanation. >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> Perhaps I didn't explain it clearly. >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> 1. If a source does not implement the >>>>>>> SupportsFilterPushDown >>>>>>>>>>>>>>>>>> interface, >>>>>>>>>>>>>>>>>>>>>>> the newly added configurations do not need to be added >>>>> to >>>>>>>>>>> either >>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>> requiredOptions or optionalOptions. >>>>>>>>>>>>>>>>>>>>>>> Similar to LookupOptions, if a source does not >>> implement >>>>>>>>>>>>>>>>>>>>>>> LookupTableSource, there is no need to add >>> LookupOptions >>>>>>> to >>>>>>>>>>>>> either >>>>>>>>>>>>>>>>>>>>>>> requiredOptions or optionalOptions. >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> 2. "And these configs are specific to those sources, >>>>>>> instead >>>>>>>>>>> of >>>>>>>>>>>>>>>>>> common >>>>>>>>>>>>>>>>>>>>>>> configs." >>>>>>>>>>>>>>>>>>>>>>> The newly introduced configurations define >>> standardized >>>>>>>>> names >>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>>> default >>>>>>>>>>>>>>>>>>>>>>> values. >>>>>>>>>>>>>>>>>>>>>>> They still belong to the configuration at the >>> individual >>>>>>>>>>> source >>>>>>>>>>>>>>>>>> level. >>>>>>>>>>>>>>>>>>>>>>> The purpose is to avoid scattered configuration items >>>>> when >>>>>>>>>>>>>>>> different >>>>>>>>>>>>>>>>>>>>>>> sources implement the same logic. >>>>>>>>>>>>>>>>>>>>>>> Whether a source should accept these configurations is >>>>>>>>>>>>> determined >>>>>>>>>>>>>>>> by >>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>> source's Factory. >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> Best, >>>>>>>>>>>>>>>>>>>>>>> Jiabao >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> 2023年10月31日 13:47,Becket Qin <becket....@gmail.com> >>>>> 写道: >>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> Hi Jiabao, >>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> Please see the replies inline. >>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> Introducing common configurations does not mean that >>>>> all >>>>>>>>>>>>> sources >>>>>>>>>>>>>>>>>> must >>>>>>>>>>>>>>>>>>>>>>>>> accept these configuration options. >>>>>>>>>>>>>>>>>>>>>>>>> The configuration options supported by a source are >>>>>>>>>>>>> determined by >>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>> requiredOptions and optionalOptions in the Factory >>>>>>>>>>> interface. >>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> This is not true. Both required and optional options >>>>> are >>>>>>>>>>>>>>>> SUPPORTED. >>>>>>>>>>>>>>>>>>>> That >>>>>>>>>>>>>>>>>>>>>>>> means they are implemented and if one specifies an >>>>>>> optional >>>>>>>>>>>>> config >>>>>>>>>>>>>>>>>> it >>>>>>>>>>>>>>>>>>>>>>> will >>>>>>>>>>>>>>>>>>>>>>>> still take effect. An OptionalConfig is "Optional" >>>>>>> because >>>>>>>>>>> this >>>>>>>>>>>>>>>>>>>>>>>> configuration has a default value. Hence, it is OK >>> that >>>>>>>>> users >>>>>>>>>>>>> do >>>>>>>>>>>>>>>> not >>>>>>>>>>>>>>>>>>>>>>>> specify their own value. In another word, it is >>>>>>> "optional" >>>>>>>>>>> for >>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>> end >>>>>>>>>>>>>>>>>>>>>>>> users to set the config, but the implementation and >>>>>>> support >>>>>>>>>>> for >>>>>>>>>>>>>>>> that >>>>>>>>>>>>>>>>>>>>>>> config >>>>>>>>>>>>>>>>>>>>>>>> is NOT optional. In case a source does not support a >>>>>>> common >>>>>>>>>>>>>>>> config, >>>>>>>>>>>>>>>>>> an >>>>>>>>>>>>>>>>>>>>>>>> exception must be thrown when the config is provided >>> by >>>>>>> the >>>>>>>>>>> end >>>>>>>>>>>>>>>>>> users. >>>>>>>>>>>>>>>>>>>>>>>> However, the config we are talking about in this FLIP >>>>> is >>>>>>> a >>>>>>>>>>>>> common >>>>>>>>>>>>>>>>>>>> config >>>>>>>>>>>>>>>>>>>>>>>> optional to implement, meaning that sometimes the >>>>> claimed >>>>>>>>>>>>> behavior >>>>>>>>>>>>>>>>>>>> won't >>>>>>>>>>>>>>>>>>>>>>> be >>>>>>>>>>>>>>>>>>>>>>>> there even if users specify that config. >>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> Similar to sources that do not implement the >>>>>>>>>>> LookupTableSource >>>>>>>>>>>>>>>>>>>> interface, >>>>>>>>>>>>>>>>>>>>>>>>> sources that do not implement the >>>>> SupportsFilterPushDown >>>>>>>>>>>>>>>> interface >>>>>>>>>>>>>>>>>>>> also >>>>>>>>>>>>>>>>>>>>>>> do >>>>>>>>>>>>>>>>>>>>>>>>> not need to accept newly introduced options. >>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> First of all, filter pushdown is a behavior of the >>>>> query >>>>>>>>>>>>>>>> optimizer, >>>>>>>>>>>>>>>>>>>> not >>>>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>> behavior of Sources. The Sources tells the optimizer >>>>> that >>>>>>>>> it >>>>>>>>>>>>> has >>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>> ability to accept pushed down filters by implementing >>>>> the >>>>>>>>>>>>>>>>>>>>>>>> SupportsFilterPushDown interface. And this is the >>> only >>>>>>>>>>> contract >>>>>>>>>>>>>>>>>>>> between >>>>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>> Source and Optimizer regarding whether filters should >>>>> be >>>>>>>>>>> pushed >>>>>>>>>>>>>>>>>> down. >>>>>>>>>>>>>>>>>>>> As >>>>>>>>>>>>>>>>>>>>>>>> long as a specific source implements this decorative >>>>>>>>>>> interface, >>>>>>>>>>>>>>>>>> filter >>>>>>>>>>>>>>>>>>>>>>>> pushdown should always take place, i.e. >>>>>>>>>>>>>>>>>>>>>>>> *SupportsFilterPushDown.applyFilters()* will be >>> called. >>>>>>>>> There >>>>>>>>>>>>>>>> should >>>>>>>>>>>>>>>>>>>> be >>>>>>>>>>>>>>>>>>>>>>> no >>>>>>>>>>>>>>>>>>>>>>>> other config to disable that call. However, Sources >>> can >>>>>>>>>>> decide >>>>>>>>>>>>> how >>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>>>> behave based on their own configurations after >>>>>>>>>>>>> *applyFilters()* is >>>>>>>>>>>>>>>>>>>>>>> called. >>>>>>>>>>>>>>>>>>>>>>>> And these configs are specific to those sources, >>>>> instead >>>>>>> of >>>>>>>>>>>>> common >>>>>>>>>>>>>>>>>>>>>>> configs. >>>>>>>>>>>>>>>>>>>>>>>> Please see the examples I mentioned in the previous >>>>>>> email. >>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> Jiangjie (Becket) Qin >>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> On Tue, Oct 31, 2023 at 10:27 AM Jiabao Sun < >>>>>>>>>>>>>>>>>> jiabao....@xtransfer.cn >>>>>>>>>>>>>>>>>>>>>>> .invalid> >>>>>>>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> Hi Becket, >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> Sorry, there was a typo in the second point. Let me >>>>>>>>> correct >>>>>>>>>>>>> it: >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> Introducing common configurations does not mean that >>>>> all >>>>>>>>>>>>> sources >>>>>>>>>>>>>>>>>> must >>>>>>>>>>>>>>>>>>>>>>>>> accept these configuration options. >>>>>>>>>>>>>>>>>>>>>>>>> The configuration options supported by a source are >>>>>>>>>>>>> determined by >>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>> requiredOptions and optionalOptions in the Factory >>>>>>>>>>> interface. >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> Similar to sources that do not implement the >>>>>>>>>>> LookupTableSource >>>>>>>>>>>>>>>>>>>>>>> interface, >>>>>>>>>>>>>>>>>>>>>>>>> sources that do not implement the >>>>> SupportsFilterPushDown >>>>>>>>>>>>>>>> interface >>>>>>>>>>>>>>>>>>>> also >>>>>>>>>>>>>>>>>>>>>>> do >>>>>>>>>>>>>>>>>>>>>>>>> not need to accept newly introduced options. >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> Best, >>>>>>>>>>>>>>>>>>>>>>>>> Jiabao >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> 2023年10月31日 10:13,Jiabao Sun < >>>>> jiabao....@xtransfer.cn >>>>>>>>>>>>> .INVALID> >>>>>>>>>>>>>>>>>> 写道: >>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Thanks Becket for the feedback. >>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> 1. Currently, the >>> SupportsFilterPushDown#applyFilters >>>>>>>>>>> method >>>>>>>>>>>>>>>>>>>> returns a >>>>>>>>>>>>>>>>>>>>>>>>> result that includes acceptedFilters and >>>>>>> remainingFilters. >>>>>>>>>>> The >>>>>>>>>>>>>>>>>> source >>>>>>>>>>>>>>>>>>>>>>> can >>>>>>>>>>>>>>>>>>>>>>>>> decide to push down some filters or not accept any >>> of >>>>>>>>> them. >>>>>>>>>>>>>>>>>>>>>>>>>> 2. Introducing common configuration options does >>> not >>>>>>> mean >>>>>>>>>>>>> that a >>>>>>>>>>>>>>>>>>>> source >>>>>>>>>>>>>>>>>>>>>>>>> that supports the SupportsFilterPushDown capability >>>>> must >>>>>>>>>>>>> accept >>>>>>>>>>>>>>>>>> this >>>>>>>>>>>>>>>>>>>>>>>>> configuration. Similar to LookupOptions, only >>> sources >>>>>>> that >>>>>>>>>>>>>>>>>> implement >>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>> LookupTableSource interface are necessary to accept >>>>>>> these >>>>>>>>>>>>>>>>>>>> configuration >>>>>>>>>>>>>>>>>>>>>>>>> options. >>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Best, >>>>>>>>>>>>>>>>>>>>>>>>>> Jiabao >>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>> 2023年10月31日 07:49,Becket Qin < >>> becket....@gmail.com> >>>>>>> 写道: >>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Jiabao and Ruanhang, >>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>> Adding a configuration of >>>>>>>>> source.filter-push-down.enabled >>>>>>>>>>>>> as a >>>>>>>>>>>>>>>>>>>> common >>>>>>>>>>>>>>>>>>>>>>>>>>> source configuration seems problematic. >>>>>>>>>>>>>>>>>>>>>>>>>>> 1. The config name is misleading. filter pushdown >>>>>>> should >>>>>>>>>>>>> only >>>>>>>>>>>>>>>> be >>>>>>>>>>>>>>>>>>>>>>>>> determined >>>>>>>>>>>>>>>>>>>>>>>>>>> by whether the SupportsFilterPushdown interface is >>>>>>>>>>>>> implemented >>>>>>>>>>>>>>>> or >>>>>>>>>>>>>>>>>>>> not. >>>>>>>>>>>>>>>>>>>>>>>>>>> 2. The behavior of this configuration is only >>>>>>> applicable >>>>>>>>>>> to >>>>>>>>>>>>>>>> some >>>>>>>>>>>>>>>>>>>>>>> source >>>>>>>>>>>>>>>>>>>>>>>>>>> implementations. Why is it a common configuration? >>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>> Here's my suggestion for design principles: >>>>>>>>>>>>>>>>>>>>>>>>>>> 1. Only add source impl specific configuration to >>>>>>>>>>>>> corresponding >>>>>>>>>>>>>>>>>>>>>>> sources. >>>>>>>>>>>>>>>>>>>>>>>>>>> 2. The configuration name should not overrule >>>>> existing >>>>>>>>>>>>> common >>>>>>>>>>>>>>>>>>>>>>> contracts. >>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>> For example, in the case of MySql source. There >>> are >>>>>>>>>>> several >>>>>>>>>>>>>>>>>>>> options: >>>>>>>>>>>>>>>>>>>>>>>>>>> 1. Have a configuration of >>>>>>>>>>>>>>>>>> `*mysql.avoid.remote.full.table.scan`*. >>>>>>>>>>>>>>>>>>>> If >>>>>>>>>>>>>>>>>>>>>>>>> this >>>>>>>>>>>>>>>>>>>>>>>>>>> configuration is set, and a filter pushdown does >>> not >>>>>>> hit >>>>>>>>>>> an >>>>>>>>>>>>>>>>>> index, >>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>> MySql source impl would not further pushdown the >>>>>>> filter >>>>>>>>> to >>>>>>>>>>>>>>>> MySql >>>>>>>>>>>>>>>>>>>>>>>>> servers. >>>>>>>>>>>>>>>>>>>>>>>>>>> Note that this assumes the MySql source can >>> retrieve >>>>>>> the >>>>>>>>>>>>> index >>>>>>>>>>>>>>>>>>>>>>>>> information >>>>>>>>>>>>>>>>>>>>>>>>>>> from the MySql servers. >>>>>>>>>>>>>>>>>>>>>>>>>>> 2. If the MySql index information is not available >>>>> to >>>>>>>>> the >>>>>>>>>>>>> MySql >>>>>>>>>>>>>>>>>>>>>>> source, >>>>>>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>> configuration could be something like >>>>>>>>>>>>>>>>>>>>>>>>> *`mysql.pushback.pushed.down.filters`*. >>>>>>>>>>>>>>>>>>>>>>>>>>> Once set to true, MySql source would just add all >>>>> the >>>>>>>>>>>>> filters >>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>> RemainingFilters in the Result returned by >>>>>>>>>>>>>>>>>>>>>>>>>>> *SupportsFilterPushdown.applyFilters().* >>>>>>>>>>>>>>>>>>>>>>>>>>> 3. An alternative to option 2 is to have a ` >>>>>>>>>>>>>>>>>>>>>>>>>>> *mysql.apply.predicates.after.scan*`. When it is >>> set >>>>>>> to >>>>>>>>>>>>> true, >>>>>>>>>>>>>>>>>> MySql >>>>>>>>>>>>>>>>>>>>>>>>> source >>>>>>>>>>>>>>>>>>>>>>>>>>> will not push the filter down to the MySql >>> servers, >>>>>>> but >>>>>>>>>>>>> apply >>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>> filters >>>>>>>>>>>>>>>>>>>>>>>>>>> inside the MySql source itself. >>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>> As you may see, the above configurations do not >>>>>>> disable >>>>>>>>>>>>> filter >>>>>>>>>>>>>>>>>>>>>>> pushdown >>>>>>>>>>>>>>>>>>>>>>>>>>> itself. They just allow various implementations of >>>>>>>>> filter >>>>>>>>>>>>>>>>>> pushdown. >>>>>>>>>>>>>>>>>>>>>>> And >>>>>>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>> configuration name does not give any illusion that >>>>>>>>> filter >>>>>>>>>>>>>>>>>> pushdown >>>>>>>>>>>>>>>>>>>> is >>>>>>>>>>>>>>>>>>>>>>>>>>> disabled. >>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>> Jiangjie (Becket) Qin >>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>> On Mon, Oct 30, 2023 at 11:58 PM Jiabao Sun < >>>>>>>>>>>>>>>>>>>> jiabao....@xtransfer.cn >>>>>>>>>>>>>>>>>>>>>>>>> .invalid> >>>>>>>>>>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks Hang for the suggestion. >>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>> I think the configuration of TableSource is not >>>>>>> closely >>>>>>>>>>>>>>>> related >>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>>>>>>>> SourceReader, >>>>>>>>>>>>>>>>>>>>>>>>>>>> so I prefer to introduce a independent >>>>> configuration >>>>>>>>>>> class >>>>>>>>>>>>>>>>>>>>>>>>>>>> TableSourceOptions in the flink-table-common >>>>> module, >>>>>>>>>>>>> similar >>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>>>>>>>> LookupOptions. >>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>> For the second point, I suggest adding Java doc >>> to >>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>> SupportsXXXPushDown >>>>>>>>>>>>>>>>>>>>>>>>>>>> interfaces, providing detailed information on >>> these >>>>>>>>>>> options >>>>>>>>>>>>>>>> that >>>>>>>>>>>>>>>>>>>>>>> needs >>>>>>>>>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>>>>>>>> be supported. >>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>> I have made updates in the FLIP document. >>>>>>>>>>>>>>>>>>>>>>>>>>>> Please help check it again. >>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>> Best, >>>>>>>>>>>>>>>>>>>>>>>>>>>> Jiabao >>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2023年10月30日 17:23,Hang Ruan < >>>>> ruanhang1...@gmail.com >>>>>>>> >>>>>>>>>>> 写道: >>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the improvements, Jiabao. >>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> There are some details that I am not sure about. >>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1. The new option >>>>> `source.filter-push-down.enabled` >>>>>>>>> will >>>>>>>>>>>>> be >>>>>>>>>>>>>>>>>>>> added to >>>>>>>>>>>>>>>>>>>>>>>>>>>> which >>>>>>>>>>>>>>>>>>>>>>>>>>>>> class? I think it should be >>> `SourceReaderOptions`. >>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2. How are the connector developers able to know >>>>> and >>>>>>>>>>>>> follow >>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>> FLIP? >>>>>>>>>>>>>>>>>>>>>>>>> Do >>>>>>>>>>>>>>>>>>>>>>>>>>>> we >>>>>>>>>>>>>>>>>>>>>>>>>>>>> need an abstract base class or provide a default >>>>>>>>> method? >>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best, >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hang >>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jiabao Sun <jiabao....@xtransfer.cn.invalid> >>>>>>>>>>>>> 于2023年10月30日周一 >>>>>>>>>>>>>>>>>>>>>>> 14:45写道: >>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi, all, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the lively discussion. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Based on the discussion, I have made some >>>>>>> adjustments >>>>>>>>>>> to >>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>> FLIP >>>>>>>>>>>>>>>>>>>>>>>>>>>> document: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1. The name of the newly added option has been >>>>>>>>> changed >>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> "source.filter-push-down.enabled". >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2. Considering compatibility with older >>> versions, >>>>>>> the >>>>>>>>>>>>> newly >>>>>>>>>>>>>>>>>>>> added >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> "source.filter-push-down.enabled" option needs >>> to >>>>>>>>>>> respect >>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>>> optimizer's >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>> "table.optimizer.source.predicate-pushdown-enabled" >>>>>>>>>>>>> option. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> But there is a consideration to remove the old >>>>>>> option >>>>>>>>>>> in >>>>>>>>>>>>>>>> Flink >>>>>>>>>>>>>>>>>>>> 2.0. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 3. We can provide more options to disable other >>>>>>>>> source >>>>>>>>>>>>>>>>>> abilities >>>>>>>>>>>>>>>>>>>>>>> with >>>>>>>>>>>>>>>>>>>>>>>>>>>> side >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> effects, such as “source.aggregate.enabled” and >>>>>>>>>>>>>>>>>>>>>>>>>>>> “source.projection.enabled" >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> This is not urgent and can be continuously >>>>>>>>> introduced. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Looking forward to your feedback again. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jiabao >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2023年10月29日 08:45,Becket Qin < >>>>>>> becket....@gmail.com> >>>>>>>>>>> 写道: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for digging into the git history, >>> Jark. I >>>>>>>>> agree >>>>>>>>>>>>> it >>>>>>>>>>>>>>>>>> makes >>>>>>>>>>>>>>>>>>>>>>>>> sense >>>>>>>>>>>>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> deprecate this API in 2.0. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cheers, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jiangjie (Becket) Qin >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Fri, Oct 27, 2023 at 5:47 PM Jark Wu < >>>>>>>>>>>>> imj...@gmail.com> >>>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Becket, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I checked the history of " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>> *table.optimizer.source.predicate-pushdown-enabled*", >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> it seems it was introduced since the legacy >>>>>>>>>>>>>>>>>>>> FilterableTableSource >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> interface >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> which might be an experiential feature at >>> that >>>>>>>>> time. >>>>>>>>>>> I >>>>>>>>>>>>>>>> don't >>>>>>>>>>>>>>>>>>>> see >>>>>>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> necessity >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> of this option at the moment. Maybe we can >>>>>>>>> deprecate >>>>>>>>>>>>> this >>>>>>>>>>>>>>>>>>>> option >>>>>>>>>>>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> drop >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> it >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> in Flink 2.0[1] if it is not necessary >>> anymore. >>>>>>>>> This >>>>>>>>>>>>> may >>>>>>>>>>>>>>>>>> help >>>>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> simplify this discussion. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jark >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [1]: >>>>>>>>>>> https://issues.apache.org/jira/browse/FLINK-32383 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Thu, 26 Oct 2023 at 10:14, Becket Qin < >>>>>>>>>>>>>>>>>>>> becket....@gmail.com> >>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the proposal, Jiabao. My two >>> cents >>>>>>>>> below: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1. If I understand correctly, the motivation >>>>> of >>>>>>>>> the >>>>>>>>>>>>> FLIP >>>>>>>>>>>>>>>> is >>>>>>>>>>>>>>>>>>>>>>>>> mainly to >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> make predicate pushdown optional on SOME of >>>>> the >>>>>>>>>>>>> Sources. >>>>>>>>>>>>>>>> If >>>>>>>>>>>>>>>>>>>> so, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> intuitively >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the configuration should be Source specific >>>>>>>>> instead >>>>>>>>>>> of >>>>>>>>>>>>>>>>>>>> general. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Otherwise, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> we will end up with general configurations >>>>> that >>>>>>>>> may >>>>>>>>>>>>> not >>>>>>>>>>>>>>>>>> take >>>>>>>>>>>>>>>>>>>>>>>>> effect >>>>>>>>>>>>>>>>>>>>>>>>>>>> for >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> some of the Source implementations. This >>>>>>> violates >>>>>>>>>>> the >>>>>>>>>>>>>>>> basic >>>>>>>>>>>>>>>>>>>> rule >>>>>>>>>>>>>>>>>>>>>>>>> of a >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configuration - it does what it says, >>>>> regardless >>>>>>>>> of >>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>>> implementation. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> While configuration standardization is >>>>> usually a >>>>>>>>>>> good >>>>>>>>>>>>>>>>>> thing, >>>>>>>>>>>>>>>>>>>> it >>>>>>>>>>>>>>>>>>>>>>>>>>>> should >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> not >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> break the basic rules. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> If we really want to have this general >>>>>>>>>>> configuration, >>>>>>>>>>>>> for >>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>> sources >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> this configuration does not apply, they >>> should >>>>>>>>> throw >>>>>>>>>>>>> an >>>>>>>>>>>>>>>>>>>>>>> exception >>>>>>>>>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> make >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> it clear that this configuration is not >>>>>>> supported. >>>>>>>>>>>>>>>> However, >>>>>>>>>>>>>>>>>>>> that >>>>>>>>>>>>>>>>>>>>>>>>>>>> seems >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ugly. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2. I think the actual motivation of this >>> FLIP >>>>> is >>>>>>>>>>> about >>>>>>>>>>>>>>>>>> "how a >>>>>>>>>>>>>>>>>>>>>>>>> source >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> should implement predicate pushdown >>>>>>> efficiently", >>>>>>>>>>> not >>>>>>>>>>>>>>>>>>>> "whether >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> predicate >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> pushdown should be applied to the source." >>> For >>>>>>>>>>>>> example, >>>>>>>>>>>>>>>> if >>>>>>>>>>>>>>>>>> a >>>>>>>>>>>>>>>>>>>>>>>>> source >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wants >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to avoid additional computing load in the >>>>>>> external >>>>>>>>>>>>>>>> system, >>>>>>>>>>>>>>>>>> it >>>>>>>>>>>>>>>>>>>>>>> can >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> always >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> read the entire record and apply the >>>>> predicates >>>>>>> by >>>>>>>>>>>>>>>> itself. >>>>>>>>>>>>>>>>>>>>>>>>> However, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> from >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the Flink perspective, the predicate >>> pushdown >>>>> is >>>>>>>>>>>>> applied, >>>>>>>>>>>>>>>>>> it >>>>>>>>>>>>>>>>>>>> is >>>>>>>>>>>>>>>>>>>>>>>>> just >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> implemented differently by the source. So >>> the >>>>>>>>> design >>>>>>>>>>>>>>>>>>>> principle >>>>>>>>>>>>>>>>>>>>>>>>> here >>>>>>>>>>>>>>>>>>>>>>>>>>>> is >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> that >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Flink only cares about whether a source >>>>> supports >>>>>>>>>>>>>>>> predicate >>>>>>>>>>>>>>>>>>>>>>>>> pushdown >>>>>>>>>>>>>>>>>>>>>>>>>>>> or >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> not, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> it does not care about the implementation >>>>>>>>>>> efficiency / >>>>>>>>>>>>>>>> side >>>>>>>>>>>>>>>>>>>>>>>>> effect of >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> predicates pushdown. It is the Source >>>>>>>>>>> implementation's >>>>>>>>>>>>>>>>>>>>>>>>> responsibility >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ensure the predicates pushdown is >>> implemented >>>>>>>>>>>>> efficiently >>>>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>>>>>> does >>>>>>>>>>>>>>>>>>>>>>>>>>>> not >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> impose excessive pressure on the external >>>>>>> system. >>>>>>>>>>> And >>>>>>>>>>>>> it >>>>>>>>>>>>>>>> is >>>>>>>>>>>>>>>>>>>> OK >>>>>>>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>>>>>>>> have >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> additional configurations to achieve this >>>>> goal. >>>>>>>>>>>>>>>> Obviously, >>>>>>>>>>>>>>>>>>>> such >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configurations will be source specific in >>> this >>>>>>>>> case. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 3. Regarding the existing configurations of >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>> *table.optimizer.source.predicate-pushdown-enabled. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *I am not sure why we need it. Supposedly, >>> if >>>>> a >>>>>>>>>>> source >>>>>>>>>>>>>>>>>>>>>>> implements >>>>>>>>>>>>>>>>>>>>>>>>> a >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SupportsXXXPushDown interface, the optimizer >>>>>>>>> should >>>>>>>>>>>>> push >>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> corresponding >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> predicates to the Source. I am not sure in >>>>> which >>>>>>>>>>> case >>>>>>>>>>>>>>>> this >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configuration >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> would be used. Any ideas @Jark Wu < >>>>>>>>> imj...@gmail.com >>>>>>>>>>>> ? >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jiangjie (Becket) Qin >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Oct 25, 2023 at 11:55 PM Jiabao Sun >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <jiabao....@xtransfer.cn.invalid> wrote: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks Jane for the detailed explanation. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I think that for users, we should respect >>>>>>>>>>> conventions >>>>>>>>>>>>>>>> over >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configurations. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Conventions can be default values >>> explicitly >>>>>>>>>>>>> specified >>>>>>>>>>>>>>>> in >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configurations, or they can be behaviors >>> that >>>>>>>>>>> follow >>>>>>>>>>>>>>>>>>>> previous >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> versions. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> If the same code has different behaviors in >>>>>>>>>>> different >>>>>>>>>>>>>>>>>>>> versions, >>>>>>>>>>>>>>>>>>>>>>>>> it >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> would >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> be a very bad thing. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I agree that for regular users, it is not >>>>>>>>> necessary >>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>>> understand >>>>>>>>>>>>>>>>>>>>>>>>>>>> all >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the configurations related to Flink. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> By following conventions, they can have a >>>>> good >>>>>>>>>>>>>>>> experience. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Let's get back to the practical situation >>> and >>>>>>>>>>>>> consider >>>>>>>>>>>>>>>> it. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Case 1: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> The user is not familiar with the purpose >>> of >>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>> table.optimizer.source.predicate-pushdown-enabled >>>>>>>>>>>>>>>>>>>> configuration >>>>>>>>>>>>>>>>>>>>>>>>> but >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> follows >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the convention of allowing predicate >>> pushdown >>>>>>> to >>>>>>>>>>> the >>>>>>>>>>>>>>>>>> source >>>>>>>>>>>>>>>>>>>> by >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> default. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Just understanding the >>>>>>>>>>>>> source.predicate-pushdown-enabled >>>>>>>>>>>>>>>>>>>>>>>>>>>> configuration >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and performing fine-grained toggle control >>>>> will >>>>>>>>>>> work >>>>>>>>>>>>>>>> well. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Case 2: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> The user understands the meaning of the >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>> table.optimizer.source.predicate-pushdown-enabled >>>>>>>>>>>>>>>>>>>> configuration >>>>>>>>>>>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> has set >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> its value to false. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> We have reason to believe that the user >>>>>>>>> understands >>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>> meaning >>>>>>>>>>>>>>>>>>>>>>>>> of >>>>>>>>>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> predicate pushdown configuration and the >>>>>>>>> intention >>>>>>>>>>>>> is to >>>>>>>>>>>>>>>>>>>>>>> disable >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> predicate >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> pushdown (rather than whether or not to >>> allow >>>>>>>>> it). >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> The previous choice of globally disabling >>> it >>>>> is >>>>>>>>>>>>> likely >>>>>>>>>>>>>>>>>>>> because >>>>>>>>>>>>>>>>>>>>>>> it >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> couldn't be disabled on individual sources. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> From this perspective, if we provide more >>>>>>>>>>>>> fine-grained >>>>>>>>>>>>>>>>>>>>>>>>> configuration >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> support and provide detailed explanations >>> of >>>>>>> the >>>>>>>>>>>>>>>>>>>> configuration >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> behaviors in >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the documentation, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> users can clearly understand the >>> differences >>>>>>>>>>> between >>>>>>>>>>>>>>>> these >>>>>>>>>>>>>>>>>>>> two >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configurations and use them correctly. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Also, I don't agree that >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>> table.optimizer.source.predicate-pushdown-enabled = >>>>>>>>>>>>> true >>>>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> source.predicate-pushdown-enabled = false >>>>> means >>>>>>>>>>> that >>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>> local >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configuration overrides the global >>>>>>> configuration. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On the contrary, both configurations are >>>>>>>>>>> functioning >>>>>>>>>>>>>>>>>>>> correctly. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> The optimizer allows predicate pushdown to >>>>> all >>>>>>>>>>>>> sources, >>>>>>>>>>>>>>>>>> but >>>>>>>>>>>>>>>>>>>>>>> some >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> sources >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> can reject the filters pushed down by the >>>>>>>>>>> optimizer. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> This is natural, just like different >>>>> components >>>>>>>>> at >>>>>>>>>>>>>>>>>> different >>>>>>>>>>>>>>>>>>>>>>>>> levels >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> are >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> responsible for different tasks. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> The more serious issue is that if >>>>>>>>>>>>>>>>>>>>>>>>>>>> "source.predicate-pushdown-enabled" >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> does not respect >>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>> "table.optimizer.source.predicate-pushdown-enabled”, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>> "table.optimizer.source.predicate-pushdown-enabled" >>>>>>>>>>>>>>>>>>>>>>>>>>>> configuration >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> will be invalidated. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> This means that regardless of whether >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>> "table.optimizer.source.predicate-pushdown-enabled" >>>>>>>>>>>>> is >>>>>>>>>>>>>>>> set >>>>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>>>>> true >>>>>>>>>>>>>>>>>>>>>>>>>>>> or >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> false, it will have no effect. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jiabao >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2023年10月25日 22:24,Jane Chan < >>>>>>>>>>> qingyue....@gmail.com> >>>>>>>>>>>>>>>> 写道: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Jiabao, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the in-depth clarification. >>> Here >>>>>>> are >>>>>>>>> my >>>>>>>>>>>>>>>> cents >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> However, >>>>>>>>>>>>>>>>>>>> "table.optimizer.source.predicate-pushdown-enabled" >>>>>>>>>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> "scan.filter-push-down.enabled" are >>>>>>>>>>> configurations >>>>>>>>>>>>> for >>>>>>>>>>>>>>>>>>>>>>>>> different >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> components(optimizer and source >>> operator). >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> We cannot assume that every user would be >>>>>>>>>>>>> interested in >>>>>>>>>>>>>>>>>>>>>>>>>>>> understanding >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> internal components of Flink, such as the >>>>>>>>>>> optimizer >>>>>>>>>>>>> or >>>>>>>>>>>>>>>>>>>>>>>>> connectors, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> specific configurations associated with >>> each >>>>>>>>>>>>> component. >>>>>>>>>>>>>>>>>>>>>>> Instead, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> users >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> might be more concerned about knowing >>> which >>>>>>>>>>>>>>>> configuration >>>>>>>>>>>>>>>>>>>>>>>>> enables >>>>>>>>>>>>>>>>>>>>>>>>>>>> or >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> disables the filter push-down feature for >>>>> all >>>>>>>>>>> source >>>>>>>>>>>>>>>>>>>>>>> connectors, >>>>>>>>>>>>>>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> which >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> parameter provides the flexibility to >>>>> override >>>>>>>>>>> this >>>>>>>>>>>>>>>>>>>> behavior >>>>>>>>>>>>>>>>>>>>>>>>> for a >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> single >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> source if needed. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> So, from this perspective, I am inclined >>> to >>>>>>>>> divide >>>>>>>>>>>>>>>> these >>>>>>>>>>>>>>>>>>>> two >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> parameters >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> based on the scope of their impact from >>> the >>>>>>>>> user's >>>>>>>>>>>>>>>>>>>> perspective >>>>>>>>>>>>>>>>>>>>>>>>>>>> (i.e. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> global-level or operator-level), rather >>> than >>>>>>>>>>>>>>>> categorizing >>>>>>>>>>>>>>>>>>>> them >>>>>>>>>>>>>>>>>>>>>>>>>>>> based >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> on the >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> component hierarchy from a developer's >>> point >>>>>>> of >>>>>>>>>>>>> view. >>>>>>>>>>>>>>>>>>>>>>> Therefore, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> based >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> on >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> this premise, it is intuitive and natural >>>>> for >>>>>>>>>>> users >>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> understand fine-grained configuration >>>>> options >>>>>>>>> can >>>>>>>>>>>>>>>>>> override >>>>>>>>>>>>>>>>>>>>>>>>> global >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configurations. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Additionally, if >>>>>>> "scan.filter-push-down.enabled" >>>>>>>>>>>>>>>> doesn't >>>>>>>>>>>>>>>>>>>>>>>>> respect to >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>> "table.optimizer.source.predicate-pushdown-enabled" >>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>>> default >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> value >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> of "scan.filter-push-down.enabled" is >>>>> defined >>>>>>>>> as >>>>>>>>>>>>> true, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> it means that just modifying >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>> "table.optimizer.source.predicate-pushdown-enabled" as >>>>>>>>>>>>>>>>>>>> false >>>>>>>>>>>>>>>>>>>>>>>>> will >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> have no >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> effect, and filter pushdown will still be >>>>>>>>>>>>> performed. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> If we define the default value of >>>>>>>>>>>>>>>>>>>>>>>>> "scan.filter-push-down.enabled" >>>>>>>>>>>>>>>>>>>>>>>>>>>> as >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> false, it would introduce a difference in >>>>>>>>>>> behavior >>>>>>>>>>>>>>>>>>>> compared >>>>>>>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> previous >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> version. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <1>If I understand correctly, >>>>>>>>>>>>>>>>>>>> "scan.filter-push-down.enabled" >>>>>>>>>>>>>>>>>>>>>>>>> is a >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> connector option, which means the only way >>>>> to >>>>>>>>>>>>> configure >>>>>>>>>>>>>>>>>> it >>>>>>>>>>>>>>>>>>>> is >>>>>>>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> explicitly >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> specify it in DDL (no matter whether >>> disable >>>>>>> or >>>>>>>>>>>>>>>> enable), >>>>>>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>>> SET >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> command is not applicable, so I think it's >>>>>>>>> natural >>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>> still >>>>>>>>>>>>>>>>>>>>>>>>> respect >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> user's >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> specification here. Otherwise, users might >>>>> be >>>>>>>>> more >>>>>>>>>>>>>>>>>> confused >>>>>>>>>>>>>>>>>>>>>>>>> about >>>>>>>>>>>>>>>>>>>>>>>>>>>> why >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> DDL does not work as expected, and the >>>>> reason >>>>>>> is >>>>>>>>>>>>> just >>>>>>>>>>>>>>>>>>>> because >>>>>>>>>>>>>>>>>>>>>>>>> some >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> other >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> "optimizer" configuration is set to a >>>>>>> different >>>>>>>>>>>>> value. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <2> From the implementation side, I am >>>>>>> inclined >>>>>>>>> to >>>>>>>>>>>>> keep >>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> parameter's >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> priority consistent for all conditions. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Let "global" denote >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>> "table.optimizer.source.predicate-pushdown-enabled", >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and let "per-source" denote >>>>>>>>>>>>>>>>>> "scan.filter-push-down.enabled" >>>>>>>>>>>>>>>>>>>>>>> for >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> specific >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> source T, the following Truth table >>> (based >>>>> on >>>>>>>>> the >>>>>>>>>>>>>>>>>> current >>>>>>>>>>>>>>>>>>>>>>>>> design) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> indicates the inconsistent behavior for >>>>>>>>>>> "per-source >>>>>>>>>>>>>>>>>>>> override >>>>>>>>>>>>>>>>>>>>>>>>>>>> global". >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>> .------------.---------------.------------------- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> ----.-------------------------------------. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> | global | per-source | push-down for T >>> | >>>>>>>>>>>>> per-source >>>>>>>>>>>>>>>>>>>>>>> override >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> global >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> | >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>> >>>>>>> >>>>> >>> :-----------+--------------+-----------------------+------------------------------------: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> | true | false | false >>>>>>>>>>>>>>>>>> | Y >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> | >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>> >>>>>>> >>>>> >>> :-----------+--------------+-----------------------+------------------------------------: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> | false | true | false >>>>>>>>>>>>>>>>>> | N >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> | >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>> >>>>>>> >>>>> >>> .------------.---------------.-----------------------.-------------------------------------. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jane >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Oct 25, 2023 at 6:22 PM Jiabao >>> Sun < >>>>>>>>>>>>>>>>>>>>>>>>>>>> jiabao....@xtransfer.cn >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .invalid> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks Benchao for the feedback. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I understand that the configuration of >>>>> global >>>>>>>>>>>>>>>>>> parallelism >>>>>>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>>>>>>>> task >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> parallelism is at different granularities >>>>> but >>>>>>>>>>> with >>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>> same >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configuration. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> However, >>>>>>>>>>>>>>>>>>>> "table.optimizer.source.predicate-pushdown-enabled" >>>>>>>>>>>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> "scan.filter-push-down.enabled" are >>>>>>>>>>> configurations >>>>>>>>>>>>> for >>>>>>>>>>>>>>>>>>>>>>>>> different >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> components(optimizer and source >>> operator). >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> From a user's perspective, there are two >>>>>>>>>>> scenarios: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1. Disabling all filter pushdown >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> In this case, setting >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>> "table.optimizer.source.predicate-pushdown-enabled" >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to false is sufficient to meet the >>>>>>> requirement. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2. Disabling filter pushdown for specific >>>>>>>>> sources >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> In this scenario, there is no need to >>>>> adjust >>>>>>>>> the >>>>>>>>>>>>> value >>>>>>>>>>>>>>>>>> of >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>> "table.optimizer.source.predicate-pushdown-enabled". >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Instead, the focus should be on the >>>>>>>>> configuration >>>>>>>>>>>>> of >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> "scan.filter-push-down.enabled" to meet >>> the >>>>>>>>>>>>>>>> requirement. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> In this case, users do not need to set >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>> "table.optimizer.source.predicate-pushdown-enabled" to >>>>>>>>>>>>>>>>>>>> false >>>>>>>>>>>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> manually >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> enable filter pushdown for specific >>>>> sources. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Additionally, if >>>>>>>>> "scan.filter-push-down.enabled" >>>>>>>>>>>>>>>> doesn't >>>>>>>>>>>>>>>>>>>>>>>>> respect >>>>>>>>>>>>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>> "table.optimizer.source.predicate-pushdown-enabled" >>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>>> default >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> value >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> of "scan.filter-push-down.enabled" is >>>>> defined >>>>>>>>> as >>>>>>>>>>>>> true, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> it means that just modifying >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>> "table.optimizer.source.predicate-pushdown-enabled" as >>>>>>>>>>>>>>>>>>>> false >>>>>>>>>>>>>>>>>>>>>>>>> will >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> have no >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> effect, and filter pushdown will still be >>>>>>>>>>>>> performed. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> If we define the default value of >>>>>>>>>>>>>>>>>>>>>>>>> "scan.filter-push-down.enabled" >>>>>>>>>>>>>>>>>>>>>>>>>>>> as >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> false, it would introduce a difference in >>>>>>>>>>> behavior >>>>>>>>>>>>>>>>>>>> compared >>>>>>>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> previous >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> version. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> The same SQL query that could >>> successfully >>>>>>> push >>>>>>>>>>>>> down >>>>>>>>>>>>>>>>>>>> filters >>>>>>>>>>>>>>>>>>>>>>> in >>>>>>>>>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> old >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> version but would no longer do so after >>> the >>>>>>>>>>>>> upgrade. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jiabao >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2023年10月25日 17:10,Benchao Li < >>>>>>>>>>>>> libenc...@apache.org> >>>>>>>>>>>>>>>>>> 写道: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks Jiabao for the detailed >>>>> explanations, >>>>>>>>>>> that >>>>>>>>>>>>>>>>>> helps a >>>>>>>>>>>>>>>>>>>>>>>>> lot, I >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> understand your rationale now. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Correct me if I'm wrong. Your >>> perspective >>>>> is >>>>>>>>>>> from >>>>>>>>>>>>>>>>>>>>>>> "developer", >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> which >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> means there is an optimizer and >>> connector >>>>>>>>>>>>> component, >>>>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>>> if >>>>>>>>>>>>>>>>>>>>>>> we >>>>>>>>>>>>>>>>>>>>>>>>>>>> want >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> enable this feature (pushing filters >>> down >>>>>>> into >>>>>>>>>>>>>>>>>>>> connectors), >>>>>>>>>>>>>>>>>>>>>>>>> you >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> must >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> enable it firstly in optimizer, and only >>>>>>> then >>>>>>>>>>>>>>>> connector >>>>>>>>>>>>>>>>>>>> has >>>>>>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> chance >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to decide to use it or not. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> My perspective is from "user" that (Why >>> a >>>>>>> user >>>>>>>>>>>>> should >>>>>>>>>>>>>>>>>>>> care >>>>>>>>>>>>>>>>>>>>>>>>> about >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> difference of optimizer/connector) , >>> this >>>>>>> is a >>>>>>>>>>>>>>>> feature, >>>>>>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>>>>>>>> has >>>>>>>>>>>>>>>>>>>>>>>>>>>> two >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> way to control it, one way is to config >>> it >>>>>>>>>>>>> job-level, >>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>> other >>>>>>>>>>>>>>>>>>>>>>>>>>>> one >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> is >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> in table properties. What a user expects >>>>> is >>>>>>>>> that >>>>>>>>>>>>> they >>>>>>>>>>>>>>>>>> can >>>>>>>>>>>>>>>>>>>>>>>>>>>> control a >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> feature in a tiered way, that setting it >>>>> per >>>>>>>>>>> job, >>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>>> then >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> fine-grained tune it per table. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> This is some kind of similar to other >>>>>>>>> concepts, >>>>>>>>>>>>> such >>>>>>>>>>>>>>>> as >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> parallelism, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> users can set a job level default >>>>>>> parallelism, >>>>>>>>>>> and >>>>>>>>>>>>>>>> then >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> fine-grained >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> tune it per operator. There may be more >>>>> such >>>>>>>>>>>>> debate >>>>>>>>>>>>>>>> in >>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>>>>> future >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> e.g., we can have a job level config >>> about >>>>>>>>>>> adding >>>>>>>>>>>>>>>>>> key-by >>>>>>>>>>>>>>>>>>>>>>>>> before >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> lookup >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> join, and also a hint/table property way >>>>> to >>>>>>>>>>>>>>>>>> fine-grained >>>>>>>>>>>>>>>>>>>>>>>>> control >>>>>>>>>>>>>>>>>>>>>>>>>>>> it >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> per lookup operator. Hence we'd better >>>>> find >>>>>>> a >>>>>>>>>>>>> unified >>>>>>>>>>>>>>>>>> way >>>>>>>>>>>>>>>>>>>>>>> for >>>>>>>>>>>>>>>>>>>>>>>>> all >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> those similar kind of features. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jiabao Sun <jiabao....@xtransfer.cn >>>>>>> .invalid> >>>>>>>>>>>>>>>>>>>> 于2023年10月25日周三 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 15:27写道: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 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 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best, >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Benchao Li >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>> >>>>> >>> >>>