Hi Danny, Regarding to `supportedHintOptions()` interface, I suggest to use the inverted version, `unsupportedHintOptions()`. Because I think the disallowed list is much smaller. In addition, it's hard to list all the properties under `connector.properties.*`. But we know `connector.properties.bootstrap.servers` and `connector.properties.zookeeper.connect` are the only security options.
Best, Jark On Thu, 26 Mar 2020 at 16:47, Kurt Young <ykt...@gmail.com> wrote: > Hi Danny, > > Thanks for the updates. I have 2 comments regarding to latest document: > > 1) I think we also need `*supportedHintOptions*` for > `*TableFormatFactory*` > 2) IMO "dynamic-table-options.enabled" should belong to ` > *OptimizerConfigOptions*` > > Best, > Kurt > > > On Thu, Mar 26, 2020 at 4:40 PM Timo Walther <twal...@apache.org> wrote: > > > Thanks for the update Danny. +1 for this proposal. > > > > Regards, > > Timo > > > > On 26.03.20 04:51, Danny Chan wrote: > > > Thanks everyone who engaged in this discussion ~ > > > > > > Our goal is "Supports Dynamic Table Options for Flink SQL". After an > > > offline discussion with Kurt, Timo and Dawid, we have made the final > > > conclusion, here is the summary: > > > > > > > > > - Use comment style syntax to specify the dynamic table options: > "/*+ > > > *OPTIONS*(k1='v1', k2='v2') */" > > > - Have constraint on the options keys: the options that may bring > in > > > security problems should not be allowed, i.e. Kafka connector > > zookeeper > > > endpoint URL and topic name > > > - Use white-list to control the allowed options for each connector, > > > which is more safe for future extention > > > - We allow to enable/disable this feature globally > > > - Implement based on the current code base first, and when FLIP-95 > is > > > checked in, implement this feature based on new interface > > > > > > Any suggestions are appreciated ~ > > > > > > [1] > > > > > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-113%3A+Supports+Dynamic+Table+Options+for+Flink+SQL > > > > > > Best, > > > Danny Chan > > > > > > Jark Wu <imj...@gmail.com> 于2020年3月18日周三 下午10:38写道: > > > > > >> Hi everyone, > > >> > > >> Sorry, but I'm not sure about the `supportedHintOptions`. I'm afraid > it > > >> doesn't solve the problems but increases some development and learning > > >> burdens. > > >> > > >> # increase development and learning burden > > >> > > >> According to the discussion so far, we want to support overriding a > > subset > > >> of options in hints which doesn't affect semantics. > > >> With the `supportedHintOptions`, it's up to the connector developers > to > > >> decide which options will not affect semantics, and to be hint > options. > > >> However, the question is how to distinguish whether an option will > > *affect > > >> semantics*? What happens if an option will affect semantics but > > provided as > > >> hint options? > > >> From my point of view, it's not easy to distinguish. For example, the > > >> "format.ignore-parse-error" can be a very useful dynamic option but > that > > >> will affect semantic, because the result is different (null vs > > exception). > > >> Another example, the "connector.lookup.cache.*" options are also very > > >> useful to tune jobs, however, it will also affect the job results. I > can > > >> come up many more useful options but may affect semantics. > > >> > > >> I can see that the community will under endless discussion around "can > > this > > >> option to be a hint option?", "wether this option will affect > > semantics?". > > >> You can also find that we already have different opinions on > > >> "ignore-parse-error". Those discussion is a waste of time! That's not > > what > > >> users want! > > >> The problem is user need this, this, this options and HOW to expose > > them? > > >> We should focus on that. > > >> > > >> Then there could be two endings in the future: > > >> 1) compromise on the usability, we drop the rule that hints don't > affect > > >> semantics, allow all the useful options in the hints list. > > >> 2) stick on the rule, users will find this is a stumbling feature > which > > >> doesn't solve their problems. > > >> And they will be surprised why this option can't be set, but the > > other > > >> could. *semantic* is hard to be understood by users. > > >> > > >> # doesn't solve the problems > > >> > > >> I think the purpose of this FLIP is to allow users to quickly override > > some > > >> connectors' properties to tune their jobs. > > >> However, `supportedHintOptions` is off track. It only allows a subset > > >> options and for the users it's not *clear* which subset is allowed. > > >> > > >> Besides, I'm not sure `supportedHintOptions` can work well for all > > cases. > > >> How could you support kafka properties (`connector.properties.*`) as > > hint > > >> options? Some kafka properties may affect semantics > (bootstrap.servers), > > >> some may not (max.poll.records). Besides, I think it's not possible to > > list > > >> all the possible kafka properties [1]. > > >> > > >> In summary, IMO, `supportedHintOptions` > > >> (1) it increase the complexity to develop a connector > > >> (2) it confuses users which options can be used in hint, which are > not, > > >> they have to check the docs again and again. > > >> (3) it doesn't solve the problems which we want to solve by this FLIP. > > >> > > >> I think we should avoid introducing some partial solutions. Otherwise, > > we > > >> will be stuck in a loop that introduce new API -> deprecate API -> > > >> introduce new API.... > > >> > > >> I personally in favor of an explicit WITH syntax after the table as a > > part > > >> of the query which is mentioned by Kurt before, e.g. SELECT * from T > > >> WITH('key' = 'value') . > > >> It allows users to dynamically set options which can affect semantics. > > It > > >> will be very flexible to solve users' problems so far. > > >> > > >> Best, > > >> Jark > > >> > > >> [1]: https://kafka.apache.org/documentation/#consumerconfigs > > >> > > >> On Wed, 18 Mar 2020 at 21:44, Danny Chan <yuzhao....@gmail.com> > wrote: > > >> > > >>> My POC is here for the hints options merge [1]. > > >>> > > >>> Personally, I have no strong objections for splitting hints with the > > >>> CatalogTable, the only cons is a more complex implementation but the > > >>> concept is more clear, and I have updated the WIKI. > > >>> > > >>> I think it would be nice if we can support the format “ignore-parse > > >> error” > > >>> option key, the CSV source already has a key [2] and we can use that > in > > >> the > > >>> supportedHIntOptions, for the common CSV and JSON formats, we cal > also > > >> give > > >>> a support. This is the only kind of key in formats that “do not > change > > >> the > > >>> semantics” (somehow), what do you think about this ~ > > >>> > > >>> [1] > > >>> > > >> > > > https://github.com/danny0405/flink/commit/5d925fa16c3c553423c4b7d93001521b8e6e6bee#diff-6e569a6dd124fd2091c18e2790fb49c5 > > >>> [2] > > >>> > > >> > > > https://github.com/apache/flink/blob/b83060dff6d403b6994b6646b3f29a374f599530/flink-table/flink-table-api-java-bridge/src/main/java/org/apache/flink/table/sources/CsvTableSourceFactoryBase.java#L92 > > >>> > > >>> Best, > > >>> Danny Chan > > >>> 在 2020年3月18日 +0800 PM9:10,Timo Walther <twal...@apache.org>,写道: > > >>>> Hi everyone, > > >>>> > > >>>> +1 to Kurt's suggestion. Let's just have it in source and sink > > >> factories > > >>>> for now. We can still move this method up in the future. Currently, > I > > >>>> don't see a need for catalogs or formats. Because how would you > target > > >> a > > >>>> format in the query? > > >>>> > > >>>> @Danny: Can you send a link to your PoC? I'm very skeptical about > > >>>> creating a new CatalogTable in planner. Actually CatalogTable should > > be > > >>>> immutable between Catalog and Factory. Because a catalog can return > > its > > >>>> own factory and fully control the instantiation. Depending on the > > >>>> implementation, that means it can be possible that the catalog has > > >>>> encoded more information in a concrete subclass implementing the > > >>>> interface. I vote for separating the concerns of catalog information > > >> and > > >>>> hints in the factory explicitly. > > >>>> > > >>>> Regards, > > >>>> Timo > > >>>> > > >>>> > > >>>> On 18.03.20 05:41, Jingsong Li wrote: > > >>>>> Hi, > > >>>>> > > >>>>> I am thinking we can provide hints to *table* related instances. > > >>>>> - TableFormatFactory: of cause we need hints support, there are > many > > >>> format > > >>>>> options in DDL too. > > >>>>> - catalog and module: I don't know, maybe in future we can provide > > >> some > > >>>>> hints for them. > > >>>>> > > >>>>> Best, > > >>>>> Jingsong Lee > > >>>>> > > >>>>> On Wed, Mar 18, 2020 at 12:28 PM Danny Chan <yuzhao....@gmail.com> > > >>> wrote: > > >>>>> > > >>>>>> Yes, I think we should move the `supportedHintOptions` from > > >>> TableFactory > > >>>>>> to TableSourceFactory, and we also need to add the interface to > > >>>>>> TableSinkFactory though because sink target table may also have > > >> hints > > >>>>>> attached. > > >>>>>> > > >>>>>> Best, > > >>>>>> Danny Chan > > >>>>>> 在 2020年3月18日 +0800 AM11:08,Kurt Young <ykt...@gmail.com>,写道: > > >>>>>>> Have one question for adding `supportedHintOptions` method to > > >>>>>>> `TableFactory`. It seems > > >>>>>>> `TableFactory` is a base factory interface for all *table module* > > >>> related > > >>>>>>> instances, such as > > >>>>>>> catalog, module, format and so on. It's not created only for > > >>> *table*. Is > > >>>>>> it > > >>>>>>> possible to move it > > >>>>>>> to `TableSourceFactory`? > > >>>>>>> > > >>>>>>> Best, > > >>>>>>> Kurt > > >>>>>>> > > >>>>>>> > > >>>>>>> On Wed, Mar 18, 2020 at 10:59 AM Danny Chan < > > >> yuzhao....@gmail.com> > > >>>>>> wrote: > > >>>>>>> > > >>>>>>>> Thanks Timo ~ > > >>>>>>>> > > >>>>>>>> For the naming itself, I also think the PROPERTIES is not that > > >>>>>> concise, so > > >>>>>>>> +1 for OPTIONS (I had thought about that, but there are many > > >>> codes in > > >>>>>>>> current Flink called it properties, i.e. the > > >>> DescriptorProperties, > > >>>>>>>> #getSupportedProperties), let’s use OPTIONS if this is our new > > >>>>>> preference. > > >>>>>>>> > > >>>>>>>> +1 to `Set<ConfigOption> supportedHintOptions()` because the > > >>>>>> ConfigOption > > >>>>>>>> can take more info. AFAIK, Spark also call their table options > > >>> instead > > >>>>>> of > > >>>>>>>> properties. [1] > > >>>>>>>> > > >>>>>>>> In my local POC, I did create a new CatalogTable, and it works > > >>> for > > >>>>>> current > > >>>>>>>> connectors well, all the DDL tables would finally yield a > > >>> CatalogTable > > >>>>>>>> instance and we can apply the options to that(in the > > >>> CatalogSourceTable > > >>>>>>>> when we generating the TableSource), the pros is that we do not > > >>> need to > > >>>>>>>> modify the codes of connectors itself. If we split the options > > >>> from > > >>>>>>>> CatalogTable, we may need to add some additional logic in each > > >>>>>> connector > > >>>>>>>> factories in order to merge these properties (and the logic are > > >>> almost > > >>>>>> the > > >>>>>>>> same), what do you think about this? > > >>>>>>>> > > >>>>>>>> [1] > > >>>>>>>> > > >>>>>> > > >>> > > >> > > > https://docs.databricks.com/spark/latest/spark-sql/language-manual/create-table.html > > >>>>>>>> > > >>>>>>>> Best, > > >>>>>>>> Danny Chan > > >>>>>>>> 在 2020年3月17日 +0800 PM10:10,Timo Walther <twal...@apache.org > > >>> ,写道: > > >>>>>>>>> Hi Danny, > > >>>>>>>>> > > >>>>>>>>> thanks for updating the FLIP. I think your current design is > > >>>>>> sufficient > > >>>>>>>>> to separate hints from result-related properties. > > >>>>>>>>> > > >>>>>>>>> One remark to the naming itself: I would vote for calling the > > >>> hints > > >>>>>>>>> around table scan `OPTIONS('k'='v')`. We used the term > > >>> "properties" > > >>>>>> in > > >>>>>>>>> the past but since we want to unify the Flink configuration > > >>>>>> experience, > > >>>>>>>>> we should use consistent naming and classes around > > >>> `ConfigOptions`. > > >>>>>>>>> > > >>>>>>>>> It would be nice to use `Set<ConfigOption> > > >>> supportedHintOptions();` > > >>>>>> to > > >>>>>>>>> start using config options instead of pure string properties. > > >>> This > > >>>>>> will > > >>>>>>>>> also allow us to generate documentation in the future around > > >>>>>> supported > > >>>>>>>>> data types, ranges, etc. for options. At some point we would > > >>> also > > >>>>>> like > > >>>>>>>>> to drop `DescriptorProperties` class. "Options" is also used > > >>> in the > > >>>>>>>>> documentation [1] and in the SQL/MED standard [2]. > > >>>>>>>>> > > >>>>>>>>> Furthermore, I would still vote for separating CatalogTable > > >>> and hint > > >>>>>>>>> options. Otherwise the planner would need to create a new > > >>>>>> CatalogTable > > >>>>>>>>> instance which might not always be easy. We should offer them > > >>> via: > > >>>>>>>>> > > >>>>>>>>> > > >>> org.apache.flink.table.factories.TableSourceFactory.Context#getHints: > > >>>>>>>>> ReadableConfig > > >>>>>>>>> > > >>>>>>>>> What do you think? > > >>>>>>>>> > > >>>>>>>>> Regards, > > >>>>>>>>> Timo > > >>>>>>>>> > > >>>>>>>>> [1] > > >>>>>>>>> > > >>>>>>>> > > >>>>>> > > >>> > > >> > > > https://ci.apache.org/projects/flink/flink-docs-master/dev/table/sql/create.html#create-table > > >>>>>>>>> [2] https://wiki.postgresql.org/wiki/SQL/MED > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> On 12.03.20 15:06, Stephan Ewen wrote: > > >>>>>>>>>> @Danny sounds good. > > >>>>>>>>>> > > >>>>>>>>>> Maybe it is worth listing all the classes of problems that > > >>> you > > >>>>>> want to > > >>>>>>>>>> address and then look at each class and see if hints are a > > >>> good > > >>>>>> default > > >>>>>>>>>> solution or a good optional way of simplifying things? > > >>>>>>>>>> The discussion has grown a lot and it is starting to be > > >> hard > > >>> to > > >>>>>>>> distinguish > > >>>>>>>>>> the parts where everyone agrees from the parts were there > > >> are > > >>>>>> concerns. > > >>>>>>>>>> > > >>>>>>>>>> On Thu, Mar 12, 2020 at 2:31 PM Danny Chan < > > >>> danny0...@apache.org> > > >>>>>>>> wrote: > > >>>>>>>>>> > > >>>>>>>>>>> Thanks Stephan ~ > > >>>>>>>>>>> > > >>>>>>>>>>> We can remove the support for properties that may change > > >>> the > > >>>>>>>> semantics of > > >>>>>>>>>>> query if you think that is a trouble. > > >>>>>>>>>>> > > >>>>>>>>>>> How about we support the /*+ properties() */ hint only > > >> for > > >>> those > > >>>>>>>> optimize > > >>>>>>>>>>> parameters, such as the fetch size of source or something > > >>> like > > >>>>>> that, > > >>>>>>>> does > > >>>>>>>>>>> that make sense? > > >>>>>>>>>>> > > >>>>>>>>>>> Stephan Ewen <se...@apache.org>于2020年3月12日 周四下午7:45写道: > > >>>>>>>>>>> > > >>>>>>>>>>>> I think Bowen has actually put it very well. > > >>>>>>>>>>>> > > >>>>>>>>>>>> (1) Hints that change semantics looks like trouble > > >>> waiting to > > >>>>>>>> happen. For > > >>>>>>>>>>>> example Kafka offset handling should be in filters. The > > >>> Kafka > > >>>>>>>> source > > >>>>>>>>>>> should > > >>>>>>>>>>>> support predicate pushdown. > > >>>>>>>>>>>> > > >>>>>>>>>>>> (2) Hints should not be a workaround for current > > >>> shortcomings. > > >>>>>> A > > >>>>>>>> lot of > > >>>>>>>>>>> the > > >>>>>>>>>>>> suggested above sounds exactly like that. Working > > >> around > > >>>>>>>> catalog/DDL > > >>>>>>>>>>>> shortcomings, missing exposure of metadata (offsets), > > >>> missing > > >>>>>>>> predicate > > >>>>>>>>>>>> pushdown in Kafka. Abusing a feature like hints now as > > >> a > > >>> quick > > >>>>>> fix > > >>>>>>>> for > > >>>>>>>>>>>> these issues, rather than fixing the root causes, will > > >>> much > > >>>>>> likely > > >>>>>>>> bite > > >>>>>>>>>>> us > > >>>>>>>>>>>> back badly in the future. > > >>>>>>>>>>>> > > >>>>>>>>>>>> Best, > > >>>>>>>>>>>> Stephan > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> On Thu, Mar 12, 2020 at 10:43 AM Kurt Young < > > >>> ykt...@gmail.com> > > >>>>>>>> wrote: > > >>>>>>>>>>>> > > >>>>>>>>>>>>> It seems this FLIP's name is somewhat misleading. > > >> From > > >>> my > > >>>>>>>>>>> understanding, > > >>>>>>>>>>>>> this FLIP is trying to > > >>>>>>>>>>>>> address the dynamic parameter issue, and table hints > > >>> is the > > >>>>>> way > > >>>>>>>> we wan > > >>>>>>>>>>> to > > >>>>>>>>>>>>> choose. I think we should > > >>>>>>>>>>>>> be focus on "what's the right way to solve dynamic > > >>> property" > > >>>>>>>> instead of > > >>>>>>>>>>>>> discussing "whether table > > >>>>>>>>>>>>> hints can affect query semantics". > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> For now, there are two proposed ways to achieve > > >> dynamic > > >>>>>> property: > > >>>>>>>>>>>>> 1. FLIP-110: create temporary table xx like xx with > > >>> (xxx) > > >>>>>>>>>>>>> 2. use custom "from t with (xxx)" syntax > > >>>>>>>>>>>>> 3. "Borrow" the table hints to have a special > > >>> PROPERTIES > > >>>>>> hint. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> The first one didn't break anything, but the only > > >>> problem i > > >>>>>> see > > >>>>>>>> is a > > >>>>>>>>>>>> little > > >>>>>>>>>>>>> more verbose than the table hint > > >>>>>>>>>>>>> approach. I can imagine when someone using SQL CLI to > > >>> have a > > >>>>>> sql > > >>>>>>>>>>>>> experience, it's quite often that > > >>>>>>>>>>>>> he will modify the table property, some use cases i > > >> can > > >>>>>> think of: > > >>>>>>>>>>>>> 1. the source contains some corrupted data, i want to > > >>> turn > > >>>>>> on the > > >>>>>>>>>>>>> "ignore-error" flag for certain formats. > > >>>>>>>>>>>>> 2. I have a kafka table and want to see some sample > > >>> data > > >>>>>> from the > > >>>>>>>>>>>>> beginning, so i change the offset > > >>>>>>>>>>>>> to "earliest", and then I want to observe the latest > > >>> data > > >>>>>> which > > >>>>>>>> keeps > > >>>>>>>>>>>>> coming in. I would write another query > > >>>>>>>>>>>>> to select from the latest table. > > >>>>>>>>>>>>> 3. I want to my jdbc sink flush data more eagerly > > >> then > > >>> i can > > >>>>>>>> observe > > >>>>>>>>>>> the > > >>>>>>>>>>>>> data from database side. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> Most of such use cases are quite ad-hoc. If every > > >> time > > >>> I > > >>>>>> want to > > >>>>>>>> have a > > >>>>>>>>>>>>> different experience, i need to create > > >>>>>>>>>>>>> a temporary table and then also modify my query, it > > >>> doesn't > > >>>>>> feel > > >>>>>>>>>>> smooth. > > >>>>>>>>>>>>> Embed such dynamic property into > > >>>>>>>>>>>>> query would have better user experience. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> Both 2 & 3 can make this happen. The cons of #2 is > > >>> breaking > > >>>>>> SQL > > >>>>>>>>>>>> compliant, > > >>>>>>>>>>>>> and for #3, it only breaks some > > >>>>>>>>>>>>> unwritten rules, but we can have an explanation on > > >>> that. And > > >>>>>> I > > >>>>>>>> really > > >>>>>>>>>>>> doubt > > >>>>>>>>>>>>> whether user would complain about > > >>>>>>>>>>>>> this when they actually have flexible and good > > >>> experience > > >>>>>> using > > >>>>>>>> this. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> My tendency would be #3 > #1 > #2, what do you think? > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> Best, > > >>>>>>>>>>>>> Kurt > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> On Thu, Mar 12, 2020 at 1:11 PM Danny Chan < > > >>>>>> yuzhao....@gmail.com > > >>>>>>>>> > > >>>>>>>>>>> wrote: > > >>>>>>>>>>>>> > > >>>>>>>>>>>>>> Thanks Aljoscha ~ > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> I agree for most of the query hints, they are > > >>> optional as > > >>>>>> an > > >>>>>>>>>>> optimizer > > >>>>>>>>>>>>>> instruction, especially for the traditional RDBMS. > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> But, just like BenChao said, Flink as a computation > > >>> engine > > >>>>>> has > > >>>>>>>> many > > >>>>>>>>>>>>>> different kind of data sources, thus, dynamic > > >>> parameters > > >>>>>> like > > >>>>>>>>>>>>> start_offest > > >>>>>>>>>>>>>> can only bind to each table scope, we can not set a > > >>> session > > >>>>>>>> config > > >>>>>>>>>>> like > > >>>>>>>>>>>>>> KSQL because they are all about Kafka: > > >>>>>>>>>>>>>>> SET ‘auto.offset.reset’=‘earliest’; > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Thus the most flexible way to set up these dynamic > > >>> params > > >>>>>> is > > >>>>>>>> to bind > > >>>>>>>>>>> to > > >>>>>>>>>>>>>> the table scope in the query when we want to > > >> override > > >>>>>>>> something, so > > >>>>>>>>>>> we > > >>>>>>>>>>>>> have > > >>>>>>>>>>>>>> these solutions above (with pros and cons from my > > >>> side): > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> • 1. Select * from t(offset=123) (from Timo) > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Pros: > > >>>>>>>>>>>>>> - Easy to add > > >>>>>>>>>>>>>> - Parameters are part of the main query > > >>>>>>>>>>>>>> Cons: > > >>>>>>>>>>>>>> - Not SQL compliant > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> • 2. Select * from t /*+ PROPERTIES(offset=123) */ > > >>> (from > > >>>>>> me) > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Pros: > > >>>>>>>>>>>>>> - Easy to add > > >>>>>>>>>>>>>> - SQL compliant because it is nested in the > > >> comments > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Cons: > > >>>>>>>>>>>>>> - Parameters are not part of the main query > > >>>>>>>>>>>>>> - Cryptic syntax for new users > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> The biggest problem for hints way may be the “if > > >>> hints > > >>>>>> must be > > >>>>>>>>>>>> optional”, > > >>>>>>>>>>>>>> actually we have though about 1 for a while but > > >>> aborted > > >>>>>>>> because it > > >>>>>>>>>>>> breaks > > >>>>>>>>>>>>>> the SQL standard too much. And we replace it with > > >> 2, > > >>>>>> because > > >>>>>>>> the > > >>>>>>>>>>> hints > > >>>>>>>>>>>>>> syntax do not break SQL standard(nested in > > >> comments). > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> What if we have the special /*+ PROPERTIES */ hint > > >>> that > > >>>>>> allows > > >>>>>>>>>>> override > > >>>>>>>>>>>>>> some properties of table dynamically, it does not > > >>> break > > >>>>>>>> anything, at > > >>>>>>>>>>>>> lease > > >>>>>>>>>>>>>> for current Flink use cases. > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Planner hints are optional just because they are > > >>> naturally > > >>>>>>>> enforcers > > >>>>>>>>>>> of > > >>>>>>>>>>>>>> the planner, most of them aim to instruct the > > >>> optimizer, > > >>>>>> but, > > >>>>>>>> the > > >>>>>>>>>>> table > > >>>>>>>>>>>>>> hints is a little different, table hints can > > >> specify > > >>> the > > >>>>>> table > > >>>>>>>> meta > > >>>>>>>>>>>> like > > >>>>>>>>>>>>>> index column, and it is very convenient to specify > > >>> table > > >>>>>>>> properties. > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Or shall we not call /*+ PROPERTIES(offset=123) */ > > >>> table > > >>>>>> hint, > > >>>>>>>> we > > >>>>>>>>>>> can > > >>>>>>>>>>>>>> call it table dynamic parameters. > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Best, > > >>>>>>>>>>>>>> Danny Chan > > >>>>>>>>>>>>>> 在 2020年3月11日 +0800 PM9:20,Aljoscha Krettek < > > >>>>>>>> aljos...@apache.org>,写道: > > >>>>>>>>>>>>>>> Hi, > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> I don't understand this discussion. Hints, as I > > >>>>>> understand > > >>>>>>>> them, > > >>>>>>>>>>>> should > > >>>>>>>>>>>>>>> work like this: > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> - hints are *optional* advice for the optimizer > > >> to > > >>> try > > >>>>>> and > > >>>>>>>> help it > > >>>>>>>>>>> to > > >>>>>>>>>>>>>>> find a good execution strategy > > >>>>>>>>>>>>>>> - hints should not change query semantics, i.e. > > >>> they > > >>>>>> should > > >>>>>>>> not > > >>>>>>>>>>>> change > > >>>>>>>>>>>>>>> connector properties executing a query with > > >> taking > > >>> into > > >>>>>>>> account the > > >>>>>>>>>>>>>>> hints *must* produce the same result as executing > > >>> the > > >>>>>> query > > >>>>>>>> without > > >>>>>>>>>>>>>>> taking into account the hints > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> From these simple requirements you can derive a > > >>> solution > > >>>>>>>> that makes > > >>>>>>>>>>>>>>> sense. I don't have a strong preference for the > > >>> syntax > > >>>>>> but we > > >>>>>>>>>>> should > > >>>>>>>>>>>>>>> strive to be in line with prior work. > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> Best, > > >>>>>>>>>>>>>>> Aljoscha > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> On 11.03.20 11:53, Danny Chan wrote: > > >>>>>>>>>>>>>>>> Thanks Timo for summarize the 3 options ~ > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> I agree with Kurt that option2 is too > > >>> complicated to > > >>>>>> use > > >>>>>>>> because: > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> • As a Kafka topic consumer, the user must > > >>> define both > > >>>>>> the > > >>>>>>>>>>> virtual > > >>>>>>>>>>>>>> column for start offset and he must apply a special > > >>> filter > > >>>>>>>> predicate > > >>>>>>>>>>>>> after > > >>>>>>>>>>>>>> each query > > >>>>>>>>>>>>>>>> • And for the internal implementation, the > > >>> metadata > > >>>>>> column > > >>>>>>>> push > > >>>>>>>>>>>> down > > >>>>>>>>>>>>>> is another hard topic, each kind of message queue > > >>> may have > > >>>>>> its > > >>>>>>>> offset > > >>>>>>>>>>>>>> attribute, we need to consider the expression type > > >>> for > > >>>>>>>> different > > >>>>>>>>>>> kind; > > >>>>>>>>>>>>> the > > >>>>>>>>>>>>>> source also need to recognize the constant column > > >> as > > >>> a > > >>>>>> config > > >>>>>>>>>>>>> option(which > > >>>>>>>>>>>>>> is weird because usually what we pushed down is a > > >>> table > > >>>>>> column) > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> For option 1 and option3, I think there is no > > >>>>>> difference, > > >>>>>>>> option1 > > >>>>>>>>>>>> is > > >>>>>>>>>>>>>> also a hint syntax which is introduced in Sybase > > >> and > > >>>>>>>> referenced then > > >>>>>>>>>>>>>> deprecated by MS-SQL in 199X years because of the > > >>>>>>>> ambitiousness. > > >>>>>>>>>>>>> Personally > > >>>>>>>>>>>>>> I prefer /*+ */ style table hint than WITH keyword > > >>> for > > >>>>>> these > > >>>>>>>> reasons: > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> • We do not break the standard SQL, the hints > > >> are > > >>>>>> nested > > >>>>>>>> in SQL > > >>>>>>>>>>>>>> comments > > >>>>>>>>>>>>>>>> • We do not need to introduce additional WITH > > >>> keyword > > >>>>>>>> which may > > >>>>>>>>>>>>> appear > > >>>>>>>>>>>>>> in a query if we use that because a table can be > > >>>>>> referenced in > > >>>>>>>> all > > >>>>>>>>>>>> kinds > > >>>>>>>>>>>>> of > > >>>>>>>>>>>>>> SQL contexts: INSERT/DELETE/FROM/JOIN …. That would > > >>> make > > >>>>>> our > > >>>>>>>> sql > > >>>>>>>>>>> query > > >>>>>>>>>>>>>> break too much of the SQL from standard > > >>>>>>>>>>>>>>>> • We would have uniform syntax for hints as > > >> query > > >>>>>> hint, one > > >>>>>>>>>>> syntax > > >>>>>>>>>>>>>> fits all and more easy to use > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> And here is the reason why we choose a uniform > > >>> Oracle > > >>>>>>>> style query > > >>>>>>>>>>>>>> hint syntax which is addressed by Julian Hyde when > > >> we > > >>>>>> design > > >>>>>>>> the > > >>>>>>>>>>> syntax > > >>>>>>>>>>>>>> from the Calcite community: > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> I don’t much like the MSSQL-style syntax for > > >>> table > > >>>>>> hints. > > >>>>>>>> It > > >>>>>>>>>>> adds a > > >>>>>>>>>>>>>> new use of the WITH keyword that is unrelated to > > >> the > > >>> use of > > >>>>>>>> WITH for > > >>>>>>>>>>>>>> common-table expressions. > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> A historical note. Microsoft SQL Server > > >>> inherited its > > >>>>>> hint > > >>>>>>>> syntax > > >>>>>>>>>>>>> from > > >>>>>>>>>>>>>> Sybase a very long time ago. (See “Transact SQL > > >>>>>>>> Programming”[1], page > > >>>>>>>>>>>>> 632, > > >>>>>>>>>>>>>> “Optimizer hints”. The book was written in 1999, > > >> and > > >>> covers > > >>>>>>>> Microsoft > > >>>>>>>>>>>> SQL > > >>>>>>>>>>>>>> Server 6.5 / 7.0 and Sybase Adaptive Server 11.5, > > >>> but the > > >>>>>>>> syntax very > > >>>>>>>>>>>>>> likely predates Sybase 4.3, from which Microsoft > > >> SQL > > >>>>>> Server was > > >>>>>>>>>>> forked > > >>>>>>>>>>>> in > > >>>>>>>>>>>>>> 1993.) > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> Microsoft later added the WITH keyword to make > > >>> it less > > >>>>>>>> ambiguous, > > >>>>>>>>>>>> and > > >>>>>>>>>>>>>> has now deprecated the syntax that does not use > > >> WITH. > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> They are forced to keep the syntax for > > >> backwards > > >>>>>>>> compatibility > > >>>>>>>>>>> but > > >>>>>>>>>>>>>> that doesn’t mean that we should shoulder their > > >>> burden. > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> I think formatted comments are the right > > >>> container for > > >>>>>>>> hints > > >>>>>>>>>>>> because > > >>>>>>>>>>>>>> it allows us to change the hint syntax without > > >>> changing > > >>>>>> the SQL > > >>>>>>>>>>> parser, > > >>>>>>>>>>>>> and > > >>>>>>>>>>>>>> makes clear that we are at liberty to ignore hints > > >>>>>> entirely. > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> Julian > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> [1] https://www.amazon.com/s?k=9781565924017 < > > >>>>>>>>>>>>>> https://www.amazon.com/s?k=9781565924017> > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> Best, > > >>>>>>>>>>>>>>>> Danny Chan > > >>>>>>>>>>>>>>>> 在 2020年3月11日 +0800 PM4:03,Timo Walther < > > >>>>>> twal...@apache.org > > >>>>>>>>> ,写道: > > >>>>>>>>>>>>>>>>> Hi Danny, > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> it is true that our DDL is not standard > > >>> compliant by > > >>>>>>>> using the > > >>>>>>>>>>>> WITH > > >>>>>>>>>>>>>>>>> clause. Nevertheless, we aim for not > > >> diverging > > >>> too > > >>>>>> much > > >>>>>>>> and the > > >>>>>>>>>>>>> LIKE > > >>>>>>>>>>>>>>>>> clause is an example of that. It will solve > > >>> things > > >>>>>> like > > >>>>>>>>>>>> overwriting > > >>>>>>>>>>>>>>>>> WATERMARKs, add additional/modifying > > >>> properties and > > >>>>>>>> inherit > > >>>>>>>>>>>> schema. > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> Bowen is right that Flink's DDL is mixing 3 > > >>> types > > >>>>>>>> definition > > >>>>>>>>>>>>>> together. > > >>>>>>>>>>>>>>>>> We are not the first ones that try to solve > > >>> this. > > >>>>>> There > > >>>>>>>> is also > > >>>>>>>>>>>> the > > >>>>>>>>>>>>>> SQL > > >>>>>>>>>>>>>>>>> MED standard [1] that tried to tackle this > > >>> problem. I > > >>>>>>>> think it > > >>>>>>>>>>>> was > > >>>>>>>>>>>>>> not > > >>>>>>>>>>>>>>>>> considered when designing the current DDL. > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> Currently, I see 3 options for handling Kafka > > >>>>>> offsets. I > > >>>>>>>> will > > >>>>>>>>>>>> give > > >>>>>>>>>>>>>> some > > >>>>>>>>>>>>>>>>> examples and look forward to feedback here: > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> *Option 1* Runtime and semantic parms as part > > >>> of the > > >>>>>>>> query > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> `SELECT * FROM MyTable('offset'=123)` > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> Pros: > > >>>>>>>>>>>>>>>>> - Easy to add > > >>>>>>>>>>>>>>>>> - Parameters are part of the main query > > >>>>>>>>>>>>>>>>> - No complicated hinting syntax > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> Cons: > > >>>>>>>>>>>>>>>>> - Not SQL compliant > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> *Option 2* Use metadata in query > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> `CREATE TABLE MyTable (id INT, offset AS > > >>>>>>>>>>>>> SYSTEM_METADATA('offset'))` > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> `SELECT * FROM MyTable WHERE offset > > > >> TIMESTAMP > > >>>>>>>> '2012-12-12 > > >>>>>>>>>>>>>> 12:34:22'` > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> Pros: > > >>>>>>>>>>>>>>>>> - SQL compliant in the query > > >>>>>>>>>>>>>>>>> - Access of metadata in the DDL which is > > >>> required > > >>>>>> anyway > > >>>>>>>>>>>>>>>>> - Regular pushdown rules apply > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> Cons: > > >>>>>>>>>>>>>>>>> - Users need to add an additional comlumn in > > >>> the DDL > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> *Option 3*: Use hints for properties > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> ` > > >>>>>>>>>>>>>>>>> SELECT * > > >>>>>>>>>>>>>>>>> FROM MyTable /*+ PROPERTIES('offset'=123) */ > > >>>>>>>>>>>>>>>>> ` > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> Pros: > > >>>>>>>>>>>>>>>>> - Easy to add > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> Cons: > > >>>>>>>>>>>>>>>>> - Parameters are not part of the main query > > >>>>>>>>>>>>>>>>> - Cryptic syntax for new users > > >>>>>>>>>>>>>>>>> - Not standard compliant. > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> If we go with this option, I would suggest to > > >>> make it > > >>>>>>>> available > > >>>>>>>>>>>> in > > >>>>>>>>>>>>> a > > >>>>>>>>>>>>>>>>> separate map and don't mix it with statically > > >>> defined > > >>>>>>>>>>> properties. > > >>>>>>>>>>>>>> Such > > >>>>>>>>>>>>>>>>> that the factory can decide which properties > > >>> have the > > >>>>>>>> right to > > >>>>>>>>>>> be > > >>>>>>>>>>>>>>>>> overwritten by the hints: > > >>>>>>>>>>>>>>>>> TableSourceFactory.Context.getQueryHints(): > > >>>>>>>> ReadableConfig > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> Regards, > > >>>>>>>>>>>>>>>>> Timo > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> [1] https://en.wikipedia.org/wiki/SQL/MED > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> Currently I see 3 options as a > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> On 11.03.20 07:21, Danny Chan wrote: > > >>>>>>>>>>>>>>>>>> Thanks Bowen ~ > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> I agree we should somehow categorize our > > >>> connector > > >>>>>>>>>>> parameters. > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> For type1, I’m already preparing a solution > > >>> like > > >>>>>> the > > >>>>>>>>>>> Confluent > > >>>>>>>>>>>>>> schema registry + Avro schema inference thing, so > > >>> this may > > >>>>>> not > > >>>>>>>> be a > > >>>>>>>>>>>>> problem > > >>>>>>>>>>>>>> in the near future. > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> For type3, I have some questions: > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> "SELECT * FROM mykafka WHERE offset > > > >> 12pm > > >>>>>> yesterday” > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> Where does the offset column come from, a > > >>> virtual > > >>>>>>>> column from > > >>>>>>>>>>>> the > > >>>>>>>>>>>>>> table schema, you said that > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> They change > > >>>>>>>>>>>>>>>>>> almost every time a query starts and have > > >>> nothing > > >>>>>> to > > >>>>>>>> do with > > >>>>>>>>>>>>>> metadata, thus > > >>>>>>>>>>>>>>>>>> should not be part of table definition/DDL > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> But why you can reference it in the query, > > >>> I’m > > >>>>>>>> confused for > > >>>>>>>>>>>> that, > > >>>>>>>>>>>>>> can you elaborate a little ? > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> Best, > > >>>>>>>>>>>>>>>>>> Danny Chan > > >>>>>>>>>>>>>>>>>> 在 2020年3月11日 +0800 PM12:52,Bowen Li < > > >>>>>>>> bowenl...@gmail.com > > >>>>>>>>>>>> ,写道: > > >>>>>>>>>>>>>>>>>>> Thanks Danny for kicking off the effort > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> The root cause of too much manual work is > > >>> Flink > > >>>>>> DDL > > >>>>>>>> has > > >>>>>>>>>>>> mixed 3 > > >>>>>>>>>>>>>> types of > > >>>>>>>>>>>>>>>>>>> params together and doesn't handle each > > >> of > > >>> them > > >>>>>> very > > >>>>>>>> well. > > >>>>>>>>>>>>> Below > > >>>>>>>>>>>>>> are how I > > >>>>>>>>>>>>>>>>>>> categorize them and corresponding > > >>> solutions in my > > >>>>>>>> mind: > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> - type 1: Metadata of external data, like > > >>>>>> external > > >>>>>>>>>>>>> endpoint/url, > > >>>>>>>>>>>>>>>>>>> username/pwd, schemas, formats. > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> Such metadata are mostly already > > >>> accessible in > > >>>>>>>> external > > >>>>>>>>>>>> system > > >>>>>>>>>>>>>> as long as > > >>>>>>>>>>>>>>>>>>> endpoints and credentials are provided. > > >>> Flink can > > >>>>>>>> get it > > >>>>>>>>>>> thru > > >>>>>>>>>>>>>> catalogs, but > > >>>>>>>>>>>>>>>>>>> we haven't had many catalogs yet and thus > > >>> Flink > > >>>>>> just > > >>>>>>>> hasn't > > >>>>>>>>>>>>> been > > >>>>>>>>>>>>>> able to > > >>>>>>>>>>>>>>>>>>> leverage that. So the solution should be > > >>> building > > >>>>>>>> more > > >>>>>>>>>>>>> catalogs. > > >>>>>>>>>>>>>> Such > > >>>>>>>>>>>>>>>>>>> params should be part of a Flink table > > >>>>>>>> DDL/definition, and > > >>>>>>>>>>>> not > > >>>>>>>>>>>>>> overridable > > >>>>>>>>>>>>>>>>>>> in any means. > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> - type 2: Runtime params, like jdbc > > >>> connector's > > >>>>>>>> fetch size, > > >>>>>>>>>>>>>> elasticsearch > > >>>>>>>>>>>>>>>>>>> connector's bulk flush size. > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> Such params don't affect query results, > > >> but > > >>>>>> affect > > >>>>>>>> how > > >>>>>>>>>>>> results > > >>>>>>>>>>>>>> are produced > > >>>>>>>>>>>>>>>>>>> (eg. fast or slow, aka performance) - > > >> they > > >>> are > > >>>>>>>> essentially > > >>>>>>>>>>>>>> execution and > > >>>>>>>>>>>>>>>>>>> implementation details. They change often > > >>> in > > >>>>>>>> exploration or > > >>>>>>>>>>>>>> development > > >>>>>>>>>>>>>>>>>>> stages, but not quite frequently in > > >>> well-defined > > >>>>>>>>>>> long-running > > >>>>>>>>>>>>>> pipelines. > > >>>>>>>>>>>>>>>>>>> They should always have default values > > >> and > > >>> can be > > >>>>>>>> missing > > >>>>>>>>>>> in > > >>>>>>>>>>>>>> query. They > > >>>>>>>>>>>>>>>>>>> can be part of a table DDL/definition, > > >> but > > >>> should > > >>>>>>>> also be > > >>>>>>>>>>>>>> replaceable in a > > >>>>>>>>>>>>>>>>>>> query - *this is what table "hints" in > > >>> FLIP-113 > > >>>>>>>> should > > >>>>>>>>>>>> cover*. > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> - type 3: Semantic params, like kafka > > >>> connector's > > >>>>>>>> start > > >>>>>>>>>>>> offset. > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> Such params affect query results - the > > >>> semantics. > > >>>>>>>> They'd > > >>>>>>>>>>>> better > > >>>>>>>>>>>>>> be as > > >>>>>>>>>>>>>>>>>>> filter conditions in WHERE clause that > > >> can > > >>> be > > >>>>>> pushed > > >>>>>>>> down. > > >>>>>>>>>>>> They > > >>>>>>>>>>>>>> change > > >>>>>>>>>>>>>>>>>>> almost every time a query starts and have > > >>>>>> nothing to > > >>>>>>>> do > > >>>>>>>>>>> with > > >>>>>>>>>>>>>> metadata, thus > > >>>>>>>>>>>>>>>>>>> should not be part of table > > >>> definition/DDL, nor > > >>>>>> be > > >>>>>>>>>>> persisted > > >>>>>>>>>>>> in > > >>>>>>>>>>>>>> catalogs. > > >>>>>>>>>>>>>>>>>>> If they will, users should create views > > >> to > > >>> keep > > >>>>>> such > > >>>>>>>> params > > >>>>>>>>>>>>>> around (note > > >>>>>>>>>>>>>>>>>>> this is different from variable > > >>> substitution). > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> Take Flink-Kafka as an example. Once we > > >>> get these > > >>>>>>>> params > > >>>>>>>>>>>> right, > > >>>>>>>>>>>>>> here're the > > >>>>>>>>>>>>>>>>>>> steps users need to do to develop and run > > >>> a Flink > > >>>>>>>> job: > > >>>>>>>>>>>>>>>>>>> - configure a Flink > > >>> ConfluentSchemaRegistry with > > >>>>>> url, > > >>>>>>>>>>>> username, > > >>>>>>>>>>>>>> and password > > >>>>>>>>>>>>>>>>>>> - run "SELECT * FROM mykafka WHERE offset > > >>>> 12pm > > >>>>>>>> yesterday" > > >>>>>>>>>>>>>> (simplified > > >>>>>>>>>>>>>>>>>>> timestamp) in SQL CLI, Flink > > >> automatically > > >>>>>> retrieves > > >>>>>>>> all > > >>>>>>>>>>>>>> metadata of > > >>>>>>>>>>>>>>>>>>> schema, file format, etc and start the > > >> job > > >>>>>>>>>>>>>>>>>>> - users want to make the job read Kafka > > >>> topic > > >>>>>>>> faster, so it > > >>>>>>>>>>>>> goes > > >>>>>>>>>>>>>> as "SELECT > > >>>>>>>>>>>>>>>>>>> * FROM mykafka /* faster_read_key=value*/ > > >>> WHERE > > >>>>>>>> offset > > > >>>>>>>>>>> 12pm > > >>>>>>>>>>>>>> yesterday" > > >>>>>>>>>>>>>>>>>>> - done and satisfied, users submit it to > > >>>>>> production > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> Regarding "CREATE TABLE t LIKE with > > >> (k1=v1, > > >>>>>> k2=v2), > > >>>>>>>> I think > > >>>>>>>>>>>>> it's > > >>>>>>>>>>>>>> a > > >>>>>>>>>>>>>>>>>>> nice-to-have feature, but not a > > >>> strategically > > >>>>>>>> critical, > > >>>>>>>>>>>>>> long-term solution, > > >>>>>>>>>>>>>>>>>>> because > > >>>>>>>>>>>>>>>>>>> 1) It may seem promising at the current > > >>> stage to > > >>>>>>>> solve the > > >>>>>>>>>>>>>>>>>>> too-much-manual-work problem, but that's > > >>> only > > >>>>>>>> because Flink > > >>>>>>>>>>>>>> hasn't > > >>>>>>>>>>>>>>>>>>> leveraged catalogs well and handled the 3 > > >>> types > > >>>>>> of > > >>>>>>>> params > > >>>>>>>>>>>> above > > >>>>>>>>>>>>>> properly. > > >>>>>>>>>>>>>>>>>>> Once we get the params types right, the > > >>> LIKE > > >>>>>> syntax > > >>>>>>>> won't > > >>>>>>>>>>> be > > >>>>>>>>>>>>> that > > >>>>>>>>>>>>>>>>>>> important, and will be just an easier way > > >>> to > > >>>>>> create > > >>>>>>>> tables > > >>>>>>>>>>>>>> without retyping > > >>>>>>>>>>>>>>>>>>> long fields like username and pwd. > > >>>>>>>>>>>>>>>>>>> 2) Note that only some rare type of > > >>> catalog can > > >>>>>>>> store k-v > > >>>>>>>>>>>>>> property pair, so > > >>>>>>>>>>>>>>>>>>> table created this way often cannot be > > >>>>>> persisted. In > > >>>>>>>> the > > >>>>>>>>>>>>>> foreseeable > > >>>>>>>>>>>>>>>>>>> future, such catalog will only be > > >>> HiveCatalog, > > >>>>>> and > > >>>>>>>> not > > >>>>>>>>>>>> everyone > > >>>>>>>>>>>>>> has a Hive > > >>>>>>>>>>>>>>>>>>> metastore. To be honest, without > > >>> persistence, > > >>>>>>>> recreating > > >>>>>>>>>>>> tables > > >>>>>>>>>>>>>> every time > > >>>>>>>>>>>>>>>>>>> this way is still a lot of keyboard > > >> typing. > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> Cheers, > > >>>>>>>>>>>>>>>>>>> Bowen > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> On Tue, Mar 10, 2020 at 8:07 PM Kurt > > >> Young > > >>> < > > >>>>>>>>>>> ykt...@gmail.com > > >>>>>>>>>>>>> > > >>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> If a specific connector want to have > > >> such > > >>>>>>>> parameter and > > >>>>>>>>>>>> read > > >>>>>>>>>>>>>> if out of > > >>>>>>>>>>>>>>>>>>>> configuration, then that's fine. > > >>>>>>>>>>>>>>>>>>>> If we are talking about a configuration > > >>> for all > > >>>>>>>> kinds of > > >>>>>>>>>>>>>> sources, I would > > >>>>>>>>>>>>>>>>>>>> be super careful about that. > > >>>>>>>>>>>>>>>>>>>> It's true it can solve maybe 80% cases, > > >>> but it > > >>>>>>>> will also > > >>>>>>>>>>>> make > > >>>>>>>>>>>>>> the left 20% > > >>>>>>>>>>>>>>>>>>>> feels weird. > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> Best, > > >>>>>>>>>>>>>>>>>>>> Kurt > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> On Wed, Mar 11, 2020 at 11:00 AM Jark > > >> Wu > > >>> < > > >>>>>>>>>>> imj...@gmail.com > > >>>>>>>>>>>>> > > >>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> Hi Kurt, > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> #3 Regarding to global offset: > > >>>>>>>>>>>>>>>>>>>>> I'm not saying to use the global > > >>>>>> configuration to > > >>>>>>>>>>>> override > > >>>>>>>>>>>>>> connector > > >>>>>>>>>>>>>>>>>>>>> properties by the planner. > > >>>>>>>>>>>>>>>>>>>>> But the connector should take this > > >>>>>> configuration > > >>>>>>>> and > > >>>>>>>>>>>>>> translate into their > > >>>>>>>>>>>>>>>>>>>>> client API. > > >>>>>>>>>>>>>>>>>>>>> AFAIK, almost all the message queues > > >>> support > > >>>>>>>> eariliest > > >>>>>>>>>>>> and > > >>>>>>>>>>>>>> latest and a > > >>>>>>>>>>>>>>>>>>>>> timestamp value as start point. > > >>>>>>>>>>>>>>>>>>>>> So we can support 3 options for this > > >>>>>>>> configuration: > > >>>>>>>>>>>>>> "eariliest", "latest" > > >>>>>>>>>>>>>>>>>>>>> and a timestamp string value. > > >>>>>>>>>>>>>>>>>>>>> Of course, this can't solve 100% > > >>> cases, but I > > >>>>>>>> guess can > > >>>>>>>>>>>>>> sovle 80% or 90% > > >>>>>>>>>>>>>>>>>>>>> cases. > > >>>>>>>>>>>>>>>>>>>>> And the remaining cases can be > > >>> resolved by > > >>>>>> LIKE > > >>>>>>>> syntax > > >>>>>>>>>>>>> which > > >>>>>>>>>>>>>> I guess is > > >>>>>>>>>>>>>>>>>>>> not > > >>>>>>>>>>>>>>>>>>>>> very common cases. > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> Best, > > >>>>>>>>>>>>>>>>>>>>> Jark > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> On Wed, 11 Mar 2020 at 10:33, Kurt > > >>> Young < > > >>>>>>>>>>>> ykt...@gmail.com > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> Good to have such lovely > > >>> discussions. I > > >>>>>> also > > >>>>>>>> want to > > >>>>>>>>>>>>> share > > >>>>>>>>>>>>>> some of my > > >>>>>>>>>>>>>>>>>>>>>> opinions. > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> #1 Regarding to error handling: I > > >>> also > > >>>>>> think > > >>>>>>>> ignore > > >>>>>>>>>>>>>> invalid hints would > > >>>>>>>>>>>>>>>>>>>>> be > > >>>>>>>>>>>>>>>>>>>>>> dangerous, maybe > > >>>>>>>>>>>>>>>>>>>>>> the simplest solution is just throw > > >>> an > > >>>>>>>> exception. > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> #2 Regarding to property > > >>> replacement: I > > >>>>>> don't > > >>>>>>>> think > > >>>>>>>>>>> we > > >>>>>>>>>>>>>> should > > >>>>>>>>>>>>>>>>>>>> constraint > > >>>>>>>>>>>>>>>>>>>>>> ourself to > > >>>>>>>>>>>>>>>>>>>>>> the meaning of the word "hint", and > > >>>>>> forbidden > > >>>>>>>> it > > >>>>>>>>>>>>> modifying > > >>>>>>>>>>>>>> any > > >>>>>>>>>>>>>>>>>>>> properties > > >>>>>>>>>>>>>>>>>>>>>> which can effect > > >>>>>>>>>>>>>>>>>>>>>> query results. IMO `PROPERTIES` is > > >>> one of > > >>>>>> the > > >>>>>>>> table > > >>>>>>>>>>>>> hints, > > >>>>>>>>>>>>>> and a > > >>>>>>>>>>>>>>>>>>>> powerful > > >>>>>>>>>>>>>>>>>>>>>> one. It can > > >>>>>>>>>>>>>>>>>>>>>> modify properties located in DDL's > > >>> WITH > > >>>>>> block. > > >>>>>>>> But I > > >>>>>>>>>>>> also > > >>>>>>>>>>>>>> see the harm > > >>>>>>>>>>>>>>>>>>>>> that > > >>>>>>>>>>>>>>>>>>>>>> if we make it > > >>>>>>>>>>>>>>>>>>>>>> too flexible like change the kafka > > >>> topic > > >>>>>> name > > >>>>>>>> with a > > >>>>>>>>>>>>> hint. > > >>>>>>>>>>>>>> Such use > > >>>>>>>>>>>>>>>>>>>> case > > >>>>>>>>>>>>>>>>>>>>> is > > >>>>>>>>>>>>>>>>>>>>>> not common and > > >>>>>>>>>>>>>>>>>>>>>> sounds very dangerous to me. I > > >> would > > >>>>>> propose > > >>>>>>>> we have > > >>>>>>>>>>> a > > >>>>>>>>>>>>> map > > >>>>>>>>>>>>>> of hintable > > >>>>>>>>>>>>>>>>>>>>>> properties for each > > >>>>>>>>>>>>>>>>>>>>>> connector, and should validate all > > >>> passed > > >>>>>> in > > >>>>>>>>>>> properties > > >>>>>>>>>>>>>> are actually > > >>>>>>>>>>>>>>>>>>>>>> hintable. And combining with > > >>>>>>>>>>>>>>>>>>>>>> #1 error handling, we can throw an > > >>>>>> exception > > >>>>>>>> once > > >>>>>>>>>>>>> received > > >>>>>>>>>>>>>> invalid > > >>>>>>>>>>>>>>>>>>>>>> property. > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> #3 Regarding to global offset: I'm > > >>> not sure > > >>>>>>>> it's > > >>>>>>>>>>>>> feasible. > > >>>>>>>>>>>>>> Different > > >>>>>>>>>>>>>>>>>>>>>> connectors will have totally > > >>>>>>>>>>>>>>>>>>>>>> different properties to represent > > >>> offset, > > >>>>>> some > > >>>>>>>> might > > >>>>>>>>>>> be > > >>>>>>>>>>>>>> timestamps, > > >>>>>>>>>>>>>>>>>>>> some > > >>>>>>>>>>>>>>>>>>>>>> might be string literals > > >>>>>>>>>>>>>>>>>>>>>> like "earliest", and others might > > >> be > > >>> just > > >>>>>>>> integers. > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> Best, > > >>>>>>>>>>>>>>>>>>>>>> Kurt > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> On Tue, Mar 10, 2020 at 11:46 PM > > >>> Jark Wu < > > >>>>>>>>>>>>> imj...@gmail.com> > > >>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> Hi everyone, > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> I want to jump in the discussion > > >>> about > > >>>>>> the > > >>>>>>>> "dynamic > > >>>>>>>>>>>>>> start offset" > > >>>>>>>>>>>>>>>>>>>>>> problem. > > >>>>>>>>>>>>>>>>>>>>>>> First of all, I share the same > > >>> concern > > >>>>>> with > > >>>>>>>> Timo > > >>>>>>>>>>> and > > >>>>>>>>>>>>>> Fabian, that the > > >>>>>>>>>>>>>>>>>>>>>>> "start offset" affects the query > > >>>>>> semantics, > > >>>>>>>> i.e. > > >>>>>>>>>>> the > > >>>>>>>>>>>>>> query result. > > >>>>>>>>>>>>>>>>>>>>>>> But "hints" is just used for > > >>> optimization > > >>>>>>>> which > > >>>>>>>>>>>> should > > >>>>>>>>>>>>>> affect the > > >>>>>>>>>>>>>>>>>>>>> result? > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> I think the "dynamic start > > >> offset" > > >>> is an > > >>>>>> very > > >>>>>>>>>>>> important > > >>>>>>>>>>>>>> usability > > >>>>>>>>>>>>>>>>>>>>> problem > > >>>>>>>>>>>>>>>>>>>>>>> which will be faced by many > > >>> streaming > > >>>>>>>> platforms. > > >>>>>>>>>>>>>>>>>>>>>>> I also agree "CREATE TEMPORARY > > >>> TABLE Temp > > >>>>>>>> (LIKE t) > > >>>>>>>>>>>> WITH > > >>>>>>>>>>>>>>>>>>>>>>> > > >>> ('connector.startup-timestamp-millis' = > > >>>>>>>>>>>>>> '1578538374471')" is verbose, > > >>>>>>>>>>>>>>>>>>>>>> what > > >>>>>>>>>>>>>>>>>>>>>>> if we have 10 tables to join? > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> However, what I want to propose > > >>> (should > > >>>>>> be > > >>>>>>>> another > > >>>>>>>>>>>>>> thread) is a > > >>>>>>>>>>>>>>>>>>>> global > > >>>>>>>>>>>>>>>>>>>>>>> configuration to reset start > > >>> offsets of > > >>>>>> all > > >>>>>>>> the > > >>>>>>>>>>>> source > > >>>>>>>>>>>>>> connectors > > >>>>>>>>>>>>>>>>>>>>>>> in the query session, e.g. > > >>>>>>>>>>>>> "table.sources.start-offset". > > >>>>>>>>>>>>>> This is > > >>>>>>>>>>>>>>>>>>>>> possible > > >>>>>>>>>>>>>>>>>>>>>>> now because > > >>> `TableSourceFactory.Context` > > >>>>>> has > > >>>>>>>>>>>>>> `getConfiguration` > > >>>>>>>>>>>>>>>>>>>>>>> method to get the session > > >>> configuration, > > >>>>>> and > > >>>>>>>> use it > > >>>>>>>>>>>> to > > >>>>>>>>>>>>>> create an > > >>>>>>>>>>>>>>>>>>>>> adapted > > >>>>>>>>>>>>>>>>>>>>>>> TableSource. > > >>>>>>>>>>>>>>>>>>>>>>> Then we can also expose to SQL > > >> CLI > > >>> via > > >>>>>> SET > > >>>>>>>> command, > > >>>>>>>>>>>>> e.g. > > >>>>>>>>>>>>>> `SET > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>> 'table.sources.start-offset'='earliest';`, > > >>>>>>>> which is > > >>>>>>>>>>>>>> pretty simple and > > >>>>>>>>>>>>>>>>>>>>>>> straightforward. > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> This is very similar to KSQL's > > >> `SET > > >>>>>>>>>>>>>> 'auto.offset.reset'='earliest'` > > >>>>>>>>>>>>>>>>>>>>> which > > >>>>>>>>>>>>>>>>>>>>>>> is very helpful IMO. > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> Best, > > >>>>>>>>>>>>>>>>>>>>>>> Jark > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> On Tue, 10 Mar 2020 at 22:29, > > >> Timo > > >>>>>> Walther < > > >>>>>>>>>>>>>> twal...@apache.org> > > >>>>>>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> Hi Danny, > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> compared to the hints, FLIP-110 > > >>> is > > >>>>>> fully > > >>>>>>>>>>> compliant > > >>>>>>>>>>>> to > > >>>>>>>>>>>>>> the SQL > > >>>>>>>>>>>>>>>>>>>>> standard. > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> I don't think that `CREATE > > >>> TEMPORARY > > >>>>>> TABLE > > >>>>>>>> Temp > > >>>>>>>>>>>> (LIKE > > >>>>>>>>>>>>>> t) WITH > > >>>>>>>>>>>>>>>>>>>> (k=v)` > > >>>>>>>>>>>>>>>>>>>>> is > > >>>>>>>>>>>>>>>>>>>>>>>> too verbose or awkward for the > > >>> power of > > >>>>>>>> basically > > >>>>>>>>>>>>>> changing the > > >>>>>>>>>>>>>>>>>>>> entire > > >>>>>>>>>>>>>>>>>>>>>>>> connector. Usually, this > > >>> statement > > >>>>>> would > > >>>>>>>> just > > >>>>>>>>>>>> precede > > >>>>>>>>>>>>>> the query in > > >>>>>>>>>>>>>>>>>>>> a > > >>>>>>>>>>>>>>>>>>>>>>>> multiline file. So it can be > > >>> change > > >>>>>>>> "in-place" > > >>>>>>>>>>> like > > >>>>>>>>>>>>>> the hints you > > >>>>>>>>>>>>>>>>>>>>>>> proposed. > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> Many companies have a > > >>> well-defined set > > >>>>>> of > > >>>>>>>> tables > > >>>>>>>>>>>> that > > >>>>>>>>>>>>>> should be > > >>>>>>>>>>>>>>>>>>>> used. > > >>>>>>>>>>>>>>>>>>>>>> It > > >>>>>>>>>>>>>>>>>>>>>>>> would be dangerous if users can > > >>> change > > >>>>>> the > > >>>>>>>> path > > >>>>>>>>>>> or > > >>>>>>>>>>>>>> topic in a hint. > > >>>>>>>>>>>>>>>>>>>>> The > > >>>>>>>>>>>>>>>>>>>>>>>> catalog/catalog manager should > > >>> be the > > >>>>>>>> entity that > > >>>>>>>>>>>>>> controls which > > >>>>>>>>>>>>>>>>>>>>> tables > > >>>>>>>>>>>>>>>>>>>>>>>> exist and how they can be > > >>> accessed. > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>> what’s the problem there if > > >> we > > >>> user > > >>>>>> the > > >>>>>>>> table > > >>>>>>>>>>>> hints > > >>>>>>>>>>>>>> to support > > >>>>>>>>>>>>>>>>>>>>>> “start > > >>>>>>>>>>>>>>>>>>>>>>>> offset”? > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> IMHO it violates the meaning of > > >>> a hint. > > >>>>>>>> According > > >>>>>>>>>>>> to > > >>>>>>>>>>>>>> the > > >>>>>>>>>>>>>>>>>>>> dictionary, > > >>>>>>>>>>>>>>>>>>>>> a > > >>>>>>>>>>>>>>>>>>>>>>>> hint is "a statement that > > >>> expresses > > >>>>>>>> indirectly > > >>>>>>>>>>> what > > >>>>>>>>>>>>>> one prefers not > > >>>>>>>>>>>>>>>>>>>>> to > > >>>>>>>>>>>>>>>>>>>>>>>> say explicitly". But offsets > > >> are > > >>> a > > >>>>>>>> property that > > >>>>>>>>>>>> are > > >>>>>>>>>>>>>> very explicit. > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> If we go with the hint > > >> approach, > > >>> it > > >>>>>> should > > >>>>>>>> be > > >>>>>>>>>>>>>> expressible in the > > >>>>>>>>>>>>>>>>>>>>>>>> TableSourceFactory which > > >>> properties are > > >>>>>>>> supported > > >>>>>>>>>>>> for > > >>>>>>>>>>>>>> hinting. Or > > >>>>>>>>>>>>>>>>>>>> do > > >>>>>>>>>>>>>>>>>>>>>> you > > >>>>>>>>>>>>>>>>>>>>>>>> plan to offer those hints in a > > >>> separate > > >>>>>>>>>>> Map<String, > > >>>>>>>>>>>>>> String> that > > >>>>>>>>>>>>>>>>>>>>> cannot > > >>>>>>>>>>>>>>>>>>>>>>>> overwrite existing properties? > > >> I > > >>> think > > >>>>>>>> this would > > >>>>>>>>>>>> be > > >>>>>>>>>>>>> a > > >>>>>>>>>>>>>> different > > >>>>>>>>>>>>>>>>>>>>>> story... > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> Regards, > > >>>>>>>>>>>>>>>>>>>>>>>> Timo > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> On 10.03.20 10:34, Danny Chan > > >>> wrote: > > >>>>>>>>>>>>>>>>>>>>>>>>> Thanks Timo ~ > > >>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>> Personally I would say that > > >>> offset > > > >>>>>> 0 > > >>>>>>>> and > > >>>>>>>>>>> start > > >>>>>>>>>>>>>> offset = 10 does > > >>>>>>>>>>>>>>>>>>>>> not > > >>>>>>>>>>>>>>>>>>>>>>>> have the same semantic, so from > > >>> the SQL > > >>>>>>>> aspect, > > >>>>>>>>>>> we > > >>>>>>>>>>>>> can > > >>>>>>>>>>>>>> not > > >>>>>>>>>>>>>>>>>>>> implement > > >>>>>>>>>>>>>>>>>>>>> a > > >>>>>>>>>>>>>>>>>>>>>>>> “starting offset” hint for > > >> query > > >>> with > > >>>>>> such > > >>>>>>>> a > > >>>>>>>>>>>> syntax. > > >>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>> And the CREATE TABLE LIKE > > >>> syntax is a > > >>>>>>>> DDL which > > >>>>>>>>>>>> is > > >>>>>>>>>>>>>> just verbose > > >>>>>>>>>>>>>>>>>>>> for > > >>>>>>>>>>>>>>>>>>>>>>>> defining such dynamic > > >> parameters > > >>> even > > >>>>>> if > > >>>>>>>> it could > > >>>>>>>>>>>> do > > >>>>>>>>>>>>>> that, shall we > > >>>>>>>>>>>>>>>>>>>>>> force > > >>>>>>>>>>>>>>>>>>>>>>>> users to define a temporal > > >> table > > >>> for > > >>>>>> each > > >>>>>>>> query > > >>>>>>>>>>>> with > > >>>>>>>>>>>>>> dynamic > > >>>>>>>>>>>>>>>>>>>> params, > > >>>>>>>>>>>>>>>>>>>>> I > > >>>>>>>>>>>>>>>>>>>>>>>> would say it’s an awkward > > >>> solution. > > >>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>> "Hints should give "hints" > > >> but > > >>> not > > >>>>>>>> affect the > > >>>>>>>>>>>>> actual > > >>>>>>>>>>>>>> produced > > >>>>>>>>>>>>>>>>>>>>>> result.” > > >>>>>>>>>>>>>>>>>>>>>>>> You mentioned that multiple > > >>> times and > > >>>>>>>> could we > > >>>>>>>>>>>> give a > > >>>>>>>>>>>>>> reason, > > >>>>>>>>>>>>>>>>>>>> what’s > > >>>>>>>>>>>>>>>>>>>>>> the > > >>>>>>>>>>>>>>>>>>>>>>>> problem there if we user the > > >>> table > > >>>>>> hints to > > >>>>>>>>>>> support > > >>>>>>>>>>>>>> “start offset” > > >>>>>>>>>>>>>>>>>>>> ? > > >>>>>>>>>>>>>>>>>>>>>> From > > >>>>>>>>>>>>>>>>>>>>>>>> my side I saw some benefits for > > >>> that: > > >>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>> • It’s very convent to set up > > >>> these > > >>>>>>>> parameters, > > >>>>>>>>>>>> the > > >>>>>>>>>>>>>> syntax is > > >>>>>>>>>>>>>>>>>>>> very > > >>>>>>>>>>>>>>>>>>>>>> much > > >>>>>>>>>>>>>>>>>>>>>>>> like the DDL definition > > >>>>>>>>>>>>>>>>>>>>>>>>> • It’s scope is very clear, > > >>> right on > > >>>>>> the > > >>>>>>>> table > > >>>>>>>>>>> it > > >>>>>>>>>>>>>> attathed > > >>>>>>>>>>>>>>>>>>>>>>>>> • It does not affect the > > >> table > > >>>>>> schema, > > >>>>>>>> which > > >>>>>>>>>>>> means > > >>>>>>>>>>>>>> in order to > > >>>>>>>>>>>>>>>>>>>>>> specify > > >>>>>>>>>>>>>>>>>>>>>>>> the offset, there is no need to > > >>> define > > >>>>>> an > > >>>>>>>> offset > > >>>>>>>>>>>>>> column which is > > >>>>>>>>>>>>>>>>>>>>> weird > > >>>>>>>>>>>>>>>>>>>>>>>> actually, offset should never > > >> be > > >>> a > > >>>>>> column, > > >>>>>>>> it’s > > >>>>>>>>>>>> more > > >>>>>>>>>>>>>> like a > > >>>>>>>>>>>>>>>>>>>> metadata > > >>>>>>>>>>>>>>>>>>>>>> or a > > >>>>>>>>>>>>>>>>>>>>>>>> start option. > > >>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>> So in total, FLIP-110 uses > > >> the > > >>> offset > > >>>>>>>> more > > >>>>>>>>>>> like a > > >>>>>>>>>>>>>> Hive partition > > >>>>>>>>>>>>>>>>>>>>>> prune, > > >>>>>>>>>>>>>>>>>>>>>>>> we can do that if we have an > > >>> offset > > >>>>>>>> column, but > > >>>>>>>>>>>> most > > >>>>>>>>>>>>>> of the case we > > >>>>>>>>>>>>>>>>>>>>> do > > >>>>>>>>>>>>>>>>>>>>>>> not > > >>>>>>>>>>>>>>>>>>>>>>>> define that, so there is > > >>> actually no > > >>>>>>>> conflict or > > >>>>>>>>>>>>>> overlap. > > >>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>> Best, > > >>>>>>>>>>>>>>>>>>>>>>>>> Danny Chan > > >>>>>>>>>>>>>>>>>>>>>>>>> 在 2020年3月10日 +0800 > > >> PM4:28,Timo > > >>>>>> Walther < > > >>>>>>>>>>>>>> twal...@apache.org>,写道: > > >>>>>>>>>>>>>>>>>>>>>>>>>> Hi Danny, > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>> shouldn't FLIP-110[1] solve > > >>> most > > >>>>>> of the > > >>>>>>>>>>>> problems > > >>>>>>>>>>>>>> we have around > > >>>>>>>>>>>>>>>>>>>>>>> defining > > >>>>>>>>>>>>>>>>>>>>>>>>>> table properties more > > >>> dynamically > > >>>>>>>> without > > >>>>>>>>>>>> manual > > >>>>>>>>>>>>>> schema work? > > >>>>>>>>>>>>>>>>>>>> Also > > >>>>>>>>>>>>>>>>>>>>>>>>>> offset definition is easier > > >>> with > > >>>>>> such a > > >>>>>>>>>>> syntax. > > >>>>>>>>>>>>>> They must not be > > >>>>>>>>>>>>>>>>>>>>>>> defined > > >>>>>>>>>>>>>>>>>>>>>>>>>> in catalog but could be > > >>> temporary > > >>>>>>>> tables that > > >>>>>>>>>>>>>> extend from the > > >>>>>>>>>>>>>>>>>>>>>> original > > >>>>>>>>>>>>>>>>>>>>>>>>>> table. > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>> In general, we should aim > > >> to > > >>> keep > > >>>>>> the > > >>>>>>>> syntax > > >>>>>>>>>>>>>> concise and don't > > >>>>>>>>>>>>>>>>>>>>>> provide > > >>>>>>>>>>>>>>>>>>>>>>>>>> too many ways of doing the > > >>> same > > >>>>>> thing. > > >>>>>>>> Hints > > >>>>>>>>>>>>>> should give "hints" > > >>>>>>>>>>>>>>>>>>>>> but > > >>>>>>>>>>>>>>>>>>>>>>> not > > >>>>>>>>>>>>>>>>>>>>>>>>>> affect the actual produced > > >>> result. > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>> Some connector properties > > >>> might > > >>>>>> also > > >>>>>>>> change > > >>>>>>>>>>> the > > >>>>>>>>>>>>>> plan or schema > > >>>>>>>>>>>>>>>>>>>> in > > >>>>>>>>>>>>>>>>>>>>>> the > > >>>>>>>>>>>>>>>>>>>>>>>>>> future. E.g. they might > > >> also > > >>> define > > >>>>>>>> whether a > > >>>>>>>>>>>>>> table source > > >>>>>>>>>>>>>>>>>>>>> supports > > >>>>>>>>>>>>>>>>>>>>>>>>>> certain push-downs (e.g. > > >>> predicate > > >>>>>>>>>>> push-down). > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>> Dawid is currently working > > >> a > > >>> draft > > >>>>>>>> that might > > >>>>>>>>>>>>>> makes it possible > > >>>>>>>>>>>>>>>>>>>> to > > >>>>>>>>>>>>>>>>>>>>>>>>>> expose a Kafka offset via > > >> the > > >>>>>> schema > > >>>>>>>> such > > >>>>>>>>>>> that > > >>>>>>>>>>>>>> `SELECT * FROM > > >>>>>>>>>>>>>>>>>>>>> Topic > > >>>>>>>>>>>>>>>>>>>>>>>>>> WHERE offset > 10` would > > >>> become > > >>>>>>>> possible and > > >>>>>>>>>>>>> could > > >>>>>>>>>>>>>> be pushed > > >>>>>>>>>>>>>>>>>>>> down. > > >>>>>>>>>>>>>>>>>>>>>> But > > >>>>>>>>>>>>>>>>>>>>>>>>>> this is of course, not > > >>> planned > > >>>>>>>> initially. > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>> Regards, > > >>>>>>>>>>>>>>>>>>>>>>>>>> Timo > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>> [1] > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>> > > >>>>>> > > >>> > > >> > > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-110%3A+Support+LIKE+clause+in+CREATE+TABLE > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>> On 10.03.20 08:34, Danny > > >> Chan > > >>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks Wenlong ~ > > >>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> For PROPERTIES Hint Error > > >>>>>> handling > > >>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> Actually we have no way > > >> to > > >>>>>> figure out > > >>>>>>>>>>>> whether a > > >>>>>>>>>>>>>> error prone > > >>>>>>>>>>>>>>>>>>>> hint > > >>>>>>>>>>>>>>>>>>>>>> is a > > >>>>>>>>>>>>>>>>>>>>>>>> PROPERTIES hint, for example, > > >> if > > >>> use > > >>>>>>>> writes a > > >>>>>>>>>>> hint > > >>>>>>>>>>>>> like > > >>>>>>>>>>>>>>>>>>>> ‘PROPERTIAS’, > > >>>>>>>>>>>>>>>>>>>>>> we > > >>>>>>>>>>>>>>>>>>>>>>> do > > >>>>>>>>>>>>>>>>>>>>>>>> not know if this hint is a > > >>> PROPERTIES > > >>>>>>>> hint, what > > >>>>>>>>>>> we > > >>>>>>>>>>>>>> know is that > > >>>>>>>>>>>>>>>>>>>> the > > >>>>>>>>>>>>>>>>>>>>>> hint > > >>>>>>>>>>>>>>>>>>>>>>>> name was not registered in our > > >>> Flink. > > >>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> If the user writes the > > >>> hint name > > >>>>>>>> correctly > > >>>>>>>>>>>>> (i.e. > > >>>>>>>>>>>>>> PROPERTIES), > > >>>>>>>>>>>>>>>>>>>> we > > >>>>>>>>>>>>>>>>>>>>>> did > > >>>>>>>>>>>>>>>>>>>>>>>> can enforce the validation of > > >>> the hint > > >>>>>>>> options > > >>>>>>>>>>>> though > > >>>>>>>>>>>>>> the pluggable > > >>>>>>>>>>>>>>>>>>>>>>>> HintOptionChecker. > > >>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> For PROPERTIES Hint > > >> Option > > >>> Format > > >>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> For a key value style > > >> hint > > >>>>>> option, > > >>>>>>>> the key > > >>>>>>>>>>>> can > > >>>>>>>>>>>>>> be either a > > >>>>>>>>>>>>>>>>>>>> simple > > >>>>>>>>>>>>>>>>>>>>>>>> identifier or a string literal, > > >>> which > > >>>>>>>> means that > > >>>>>>>>>>>> it’s > > >>>>>>>>>>>>>> compatible > > >>>>>>>>>>>>>>>>>>>> with > > >>>>>>>>>>>>>>>>>>>>>> our > > >>>>>>>>>>>>>>>>>>>>>>>> DDL syntax. We support simple > > >>>>>> identifier > > >>>>>>>> because > > >>>>>>>>>>>> many > > >>>>>>>>>>>>>> other hints > > >>>>>>>>>>>>>>>>>>>> do > > >>>>>>>>>>>>>>>>>>>>>> not > > >>>>>>>>>>>>>>>>>>>>>>>> have the component complex keys > > >>> like > > >>>>>> the > > >>>>>>>> table > > >>>>>>>>>>>>>> properties, and we > > >>>>>>>>>>>>>>>>>>>>> want > > >>>>>>>>>>>>>>>>>>>>>> to > > >>>>>>>>>>>>>>>>>>>>>>>> unify the parse block. > > >>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> Best, > > >>>>>>>>>>>>>>>>>>>>>>>>>>> Danny Chan > > >>>>>>>>>>>>>>>>>>>>>>>>>>> 在 2020年3月10日 +0800 > > >>>>>>>> PM3:19,wenlong.lwl < > > >>>>>>>>>>>>>> wenlong88....@gmail.com > > >>>>>>>>>>>>>>>>>>>>>>> ,写道: > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Danny, thanks for > > >> the > > >>>>>> proposal. > > >>>>>>>> +1 for > > >>>>>>>>>>>>>> adding table hints, > > >>>>>>>>>>>>>>>>>>>> it > > >>>>>>>>>>>>>>>>>>>>>> is > > >>>>>>>>>>>>>>>>>>>>>>>> really > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> a necessary feature for > > >>> flink > > >>>>>> sql > > >>>>>>>> to > > >>>>>>>>>>>>> integrate > > >>>>>>>>>>>>>> with a catalog. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> For error handling, I > > >>> think it > > >>>>>>>> would be > > >>>>>>>>>>>> more > > >>>>>>>>>>>>>> natural to throw > > >>>>>>>>>>>>>>>>>>>> an > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> exception when error > > >>> table hint > > >>>>>>>> provided, > > >>>>>>>>>>>>>> because the > > >>>>>>>>>>>>>>>>>>>> properties > > >>>>>>>>>>>>>>>>>>>>>> in > > >>>>>>>>>>>>>>>>>>>>>>>> hint > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> will be merged and used > > >>> to find > > >>>>>>>> the table > > >>>>>>>>>>>>>> factory which would > > >>>>>>>>>>>>>>>>>>>>>> cause > > >>>>>>>>>>>>>>>>>>>>>>> an > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> exception when error > > >>> properties > > >>>>>>>> provided, > > >>>>>>>>>>>>>> right? On the other > > >>>>>>>>>>>>>>>>>>>>>> hand, > > >>>>>>>>>>>>>>>>>>>>>>>> unlike > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> other hints which just > > >>> affect > > >>>>>> the > > >>>>>>>> way to > > >>>>>>>>>>>>>> execute the query, > > >>>>>>>>>>>>>>>>>>>> the > > >>>>>>>>>>>>>>>>>>>>>>>> property > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> table hint actually > > >>> affects the > > >>>>>>>> result of > > >>>>>>>>>>>> the > > >>>>>>>>>>>>>> query, we should > > >>>>>>>>>>>>>>>>>>>>>> never > > >>>>>>>>>>>>>>>>>>>>>>>> ignore > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> the given property > > >> hints. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> For the format of > > >>> property > > >>>>>> hints, > > >>>>>>>>>>>> currently, > > >>>>>>>>>>>>>> in sql client, we > > >>>>>>>>>>>>>>>>>>>>>>> accept > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> properties in format of > > >>> string > > >>>>>>>> only in > > >>>>>>>>>>> DDL: > > >>>>>>>>>>>>>>>>>>>>>>> 'connector.type'='kafka', > > >>>>>>>>>>>>>>>>>>>>>>>> I > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> think the format of > > >>> properties > > >>>>>> in > > >>>>>>>> hint > > >>>>>>>>>>>> should > > >>>>>>>>>>>>>> be the same as > > >>>>>>>>>>>>>>>>>>>> the > > >>>>>>>>>>>>>>>>>>>>>>>> format we > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> defined in ddl. What do > > >>> you > > >>>>>> think? > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> Bests, > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> Wenlong Lyu > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> On Tue, 10 Mar 2020 at > > >>> 14:22, > > >>>>>>>> Danny Chan > > >>>>>>>>>>> < > > >>>>>>>>>>>>>>>>>>>> yuzhao....@gmail.com> > > >>>>>>>>>>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> To Weike: About the > > >>> Error > > >>>>>> Handing > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> To be consistent with > > >>> other > > >>>>>> SQL > > >>>>>>>>>>> vendors, > > >>>>>>>>>>>>> the > > >>>>>>>>>>>>>> default is to > > >>>>>>>>>>>>>>>>>>>> log > > >>>>>>>>>>>>>>>>>>>>>>>> warnings > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> and if there is any > > >>> error > > >>>>>>>> (invalid hint > > >>>>>>>>>>>>> name > > >>>>>>>>>>>>>> or options), the > > >>>>>>>>>>>>>>>>>>>>>> hint > > >>>>>>>>>>>>>>>>>>>>>>>> is just > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> ignored. I have > > >> already > > >>>>>>>> addressed in > > >>>>>>>>>>> the > > >>>>>>>>>>>>>> wiki. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> To Timo: About the > > >>> PROPERTIES > > >>>>>>>> Table > > >>>>>>>>>>> Hint > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> • The properties > > >> hints > > >>> is > > >>>>>> also > > >>>>>>>>>>> optional, > > >>>>>>>>>>>>>> user can pass in an > > >>>>>>>>>>>>>>>>>>>>>> option > > >>>>>>>>>>>>>>>>>>>>>>>> to > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> override the table > > >>> properties > > >>>>>>>> but this > > >>>>>>>>>>>> does > > >>>>>>>>>>>>>> not mean it is > > >>>>>>>>>>>>>>>>>>>>>>> required. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> • They should not > > >>> include > > >>>>>>>> semantics: > > >>>>>>>>>>> does > > >>>>>>>>>>>>>> the properties > > >>>>>>>>>>>>>>>>>>>> belong > > >>>>>>>>>>>>>>>>>>>>>> to > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> semantic ? I don't > > >>> think so, > > >>>>>> the > > >>>>>>>> plan > > >>>>>>>>>>>> does > > >>>>>>>>>>>>>> not change right ? > > >>>>>>>>>>>>>>>>>>>>> The > > >>>>>>>>>>>>>>>>>>>>>>>> result > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> set may be affected, > > >>> but > > >>>>>> there > > >>>>>>>> are > > >>>>>>>>>>>> already > > >>>>>>>>>>>>>> some hints do so, > > >>>>>>>>>>>>>>>>>>>>> for > > >>>>>>>>>>>>>>>>>>>>>>>> example, > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> MS-SQL MAXRECURSION > > >> and > > >>>>>> SNAPSHOT > > >>>>>>>> hint > > >>>>>>>>>>> [1] > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> • `SELECT * FROM > > >> t(k=v, > > >>>>>> k=v)`: > > >>>>>>>> this > > >>>>>>>>>>>> grammar > > >>>>>>>>>>>>>> breaks the SQL > > >>>>>>>>>>>>>>>>>>>>>> standard > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> compared to the hints > > >>>>>> way(which > > >>>>>>>> is > > >>>>>>>>>>>> included > > >>>>>>>>>>>>>> in comments) > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> • I actually didn't > > >>> found any > > >>>>>>>> vendors > > >>>>>>>>>>> to > > >>>>>>>>>>>>>> support such > > >>>>>>>>>>>>>>>>>>>> grammar, > > >>>>>>>>>>>>>>>>>>>>>> and > > >>>>>>>>>>>>>>>>>>>>>>>> there > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> is no way to override > > >>> table > > >>>>>> level > > >>>>>>>>>>>>> properties > > >>>>>>>>>>>>>> dynamically. For > > >>>>>>>>>>>>>>>>>>>>>>> normal > > >>>>>>>>>>>>>>>>>>>>>>>> RDBMS, > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> I think there are no > > >>> requests > > >>>>>>>> for such > > >>>>>>>>>>>>>> dynamic parameters > > >>>>>>>>>>>>>>>>>>>>> because > > >>>>>>>>>>>>>>>>>>>>>>>> all the > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> table have the same > > >>> storage > > >>>>>> and > > >>>>>>>>>>>> computation > > >>>>>>>>>>>>>> and they are > > >>>>>>>>>>>>>>>>>>>> almost > > >>>>>>>>>>>>>>>>>>>>>> all > > >>>>>>>>>>>>>>>>>>>>>>>> batch > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> tables. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> • While Flink as a > > >>>>>> computation > > >>>>>>>> engine > > >>>>>>>>>>> has > > >>>>>>>>>>>>>> many connectors, > > >>>>>>>>>>>>>>>>>>>>>>>> especially for > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> some message queue > > >> like > > >>>>>> Kafka, > > >>>>>>>> we would > > >>>>>>>>>>>>> have > > >>>>>>>>>>>>>> a start_offset > > >>>>>>>>>>>>>>>>>>>>> which > > >>>>>>>>>>>>>>>>>>>>>>> is > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> different each time > > >> we > > >>> start > > >>>>>> the > > >>>>>>>> query, > > >>>>>>>>>>>>> such > > >>>>>>>>>>>>>> parameters can > > >>>>>>>>>>>>>>>>>>>> not > > >>>>>>>>>>>>>>>>>>>>>> be > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> persisted to catalog, > > >>> because > > >>>>>>>> it’s not > > >>>>>>>>>>>>>> static, this is > > >>>>>>>>>>>>>>>>>>>> actually > > >>>>>>>>>>>>>>>>>>>>>> the > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> background we propose > > >>> the > > >>>>>> table > > >>>>>>>> hints > > >>>>>>>>>>> to > > >>>>>>>>>>>>>> indicate such > > >>>>>>>>>>>>>>>>>>>>> properties > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> dynamically. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> To Jark and Jinsong: > > >> I > > >>> have > > >>>>>>>> removed the > > >>>>>>>>>>>>>> query hints part and > > >>>>>>>>>>>>>>>>>>>>>> change > > >>>>>>>>>>>>>>>>>>>>>>>> the > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> title. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> [1] > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>> > > >>>>>> > > >>> > > >> > > > https://docs.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-query?view=sql-server-ver15 > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best, > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Danny Chan > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> 在 2020年3月9日 +0800 > > >>> PM5:46,Timo > > >>>>>>>> Walther < > > >>>>>>>>>>>>>> twal...@apache.org > > >>>>>>>>>>>>>>>>>>>>> ,写道: > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Danny, > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> thanks for the > > >>> proposal. I > > >>>>>>>> agree with > > >>>>>>>>>>>>> Jark > > >>>>>>>>>>>>>> and Jingsong. > > >>>>>>>>>>>>>>>>>>>>> Planner > > >>>>>>>>>>>>>>>>>>>>>>>> hints > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and table hints are > > >>>>>> orthogonal > > >>>>>>>> topics > > >>>>>>>>>>>>> that > > >>>>>>>>>>>>>> should be > > >>>>>>>>>>>>>>>>>>>> discussed > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> separately. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I share Jingsong's > > >>> opinion > > >>>>>>>> that we > > >>>>>>>>>>>> should > > >>>>>>>>>>>>>> not use planner > > >>>>>>>>>>>>>>>>>>>>> hints > > >>>>>>>>>>>>>>>>>>>>>>> for > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> passing connector > > >>>>>> properties. > > >>>>>>>> Planner > > >>>>>>>>>>>>>> hints should be > > >>>>>>>>>>>>>>>>>>>> optional > > >>>>>>>>>>>>>>>>>>>>>> at > > >>>>>>>>>>>>>>>>>>>>>>>> any > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> time. They should > > >> not > > >>>>>> include > > >>>>>>>>>>> semantics > > >>>>>>>>>>>>>> but only affect > > >>>>>>>>>>>>>>>>>>>>>> execution > > >>>>>>>>>>>>>>>>>>>>>>>> time. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Connector > > >> properties > > >>> are an > > >>>>>>>> important > > >>>>>>>>>>>>> part > > >>>>>>>>>>>>>> of the query > > >>>>>>>>>>>>>>>>>>>>> itself. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Have you thought > > >>> about > > >>>>>> options > > >>>>>>>> such > > >>>>>>>>>>> as > > >>>>>>>>>>>>>> `SELECT * FROM t(k=v, > > >>>>>>>>>>>>>>>>>>>>>>> k=v)`? > > >>>>>>>>>>>>>>>>>>>>>>>> How > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> are other vendors > > >>> deal with > > >>>>>>>> this > > >>>>>>>>>>>> problem? > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Regards, > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Timo > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On 09.03.20 10:37, > > >>>>>> Jingsong Li > > >>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Danny, +1 for > > >>> table > > >>>>>> hints, > > >>>>>>>>>>> thanks > > >>>>>>>>>>>>> for > > >>>>>>>>>>>>>> driving. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I took a look to > > >>> FLIP, > > >>>>>> most > > >>>>>>>> of > > >>>>>>>>>>>> content > > >>>>>>>>>>>>>> are talking about > > >>>>>>>>>>>>>>>>>>>>> query > > >>>>>>>>>>>>>>>>>>>>>>>> hints. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> It is > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> hard to > > >> discussion > > >>> and > > >>>>>>>> voting. So > > >>>>>>>>>>> +1 > > >>>>>>>>>>>> to > > >>>>>>>>>>>>>> split it as Jark > > >>>>>>>>>>>>>>>>>>>>> said. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Another thing is > > >>>>>>>> configuration that > > >>>>>>>>>>>>>> suitable to config with > > >>>>>>>>>>>>>>>>>>>>>> table > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> hints: > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> "connector.path" > > >>> and > > >>>>>>>>>>>> "connector.topic", > > >>>>>>>>>>>>>> Are they really > > >>>>>>>>>>>>>>>>>>>>>> suitable > > >>>>>>>>>>>>>>>>>>>>>>>> for > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> table > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> hints? Looks > > >> weird > > >>> to me. > > >>>>>>>> Because I > > >>>>>>>>>>>>>> think these properties > > >>>>>>>>>>>>>>>>>>>>> are > > >>>>>>>>>>>>>>>>>>>>>>> the > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> core of > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> table. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best, > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jingsong Lee > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Mon, Mar 9, > > >>> 2020 at > > >>>>>> 5:30 > > >>>>>>>> PM Jark > > >>>>>>>>>>>> Wu > > >>>>>>>>>>>>> < > > >>>>>>>>>>>>>> imj...@gmail.com> > > >>>>>>>>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks Danny > > >> for > > >>>>>> starting > > >>>>>>>> the > > >>>>>>>>>>>>>> discussion. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +1 for this > > >>> feature. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> If we just > > >> focus > > >>> on the > > >>>>>>>> table > > >>>>>>>>>>> hints > > >>>>>>>>>>>>>> not the query hints in > > >>>>>>>>>>>>>>>>>>>>>> this > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> release, > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> could you split > > >>> the > > >>>>>> FLIP > > >>>>>>>> into two > > >>>>>>>>>>>>>> FLIPs? > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Because it's > > >>> hard to > > >>>>>> vote > > >>>>>>>> on > > >>>>>>>>>>>> partial > > >>>>>>>>>>>>>> part of a FLIP. You > > >>>>>>>>>>>>>>>>>>>> can > > >>>>>>>>>>>>>>>>>>>>>>> keep > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> the table > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> hints proposal > > >> in > > >>>>>> FLIP-113 > > >>>>>>>> and > > >>>>>>>>>>> move > > >>>>>>>>>>>>>> query hints into > > >>>>>>>>>>>>>>>>>>>> another > > >>>>>>>>>>>>>>>>>>>>>>> FLIP. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> So that we can > > >>> focuse > > >>>>>> on > > >>>>>>>> the > > >>>>>>>>>>> table > > >>>>>>>>>>>>>> hints in the FLIP. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks, > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jark > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Mon, 9 Mar > > >>> 2020 at > > >>>>>>>> 17:14, > > >>>>>>>>>>> DONG, > > >>>>>>>>>>>>>> Weike < > > >>>>>>>>>>>>>>>>>>>>>>> kyled...@connect.hku.hk > > >>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Danny, > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> This is a > > >> nice > > >>>>>> feature, > > >>>>>>>> +1. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> One thing I > > >> am > > >>>>>>>> interested in > > >>>>>>>>>>> but > > >>>>>>>>>>>>> not > > >>>>>>>>>>>>>> mentioned in the > > >>>>>>>>>>>>>>>>>>>>>> proposal > > >>>>>>>>>>>>>>>>>>>>>>> is > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> the > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> error > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> handling, as > > >>> it is > > >>>>>> quite > > >>>>>>>> common > > >>>>>>>>>>>> for > > >>>>>>>>>>>>>> users to write > > >>>>>>>>>>>>>>>>>>>>>>> inappropriate > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> hints in > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SQL code, if > > >>> illegal > > >>>>>> or > > >>>>>>>> "bad" > > >>>>>>>>>>>> hints > > >>>>>>>>>>>>>> are given, would the > > >>>>>>>>>>>>>>>>>>>>>> system > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> simply > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ignore them > > >> or > > >>> throw > > >>>>>>>>>>> exceptions? > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks : ) > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best, > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Weike > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Mon, Mar > > >> 9, > > >>> 2020 > > >>>>>> at > > >>>>>>>> 5:02 PM > > >>>>>>>>>>>>> Danny > > >>>>>>>>>>>>>> Chan < > > >>>>>>>>>>>>>>>>>>>>>>> yuzhao....@gmail.com> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Note: > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> we only > > >> plan > > >>> to > > >>>>>>>> support table > > >>>>>>>>>>>>>> hints in Flink release > > >>>>>>>>>>>>>>>>>>>> 1.11, > > >>>>>>>>>>>>>>>>>>>>>> so > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> please > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> focus > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> mainly on > > >>> the table > > >>>>>>>> hints > > >>>>>>>>>>> part > > >>>>>>>>>>>>> and > > >>>>>>>>>>>>>> just ignore the > > >>>>>>>>>>>>>>>>>>>> planner > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> hints, sorry > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> for > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> that > > >> mistake > > >>> ~ > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best, > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Danny Chan > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 在 2020年3月9日 > > >>> +0800 > > >>>>>>>>>>> PM4:36,Danny > > >>>>>>>>>>>>>> Chan < > > >>>>>>>>>>>>>>>>>>>> yuzhao....@gmail.com > > >>>>>>>>>>>>>>>>>>>>>>>> ,写道: > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi, > > >>> fellows ~ > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I would > > >>> like to > > >>>>>>>> propose the > > >>>>>>>>>>>>>> supports for SQL hints for > > >>>>>>>>>>>>>>>>>>>>> our > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Flink SQL. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> We would > > >>> support > > >>>>>>>> hints > > >>>>>>>>>>> syntax > > >>>>>>>>>>>>> as > > >>>>>>>>>>>>>> following: > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> select > > >> /*+ > > >>>>>>>> NO_HASH_JOIN, > > >>>>>>>>>>>>>> RESOURCE(mem='128mb', > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> parallelism='24') */ > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> from > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> emp /*+ > > >>>>>> INDEX(idx1, > > >>>>>>>> idx2) > > >>>>>>>>>>> */ > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> join > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> dept /*+ > > >>>>>>>>>>> PROPERTIES(k1='v1', > > >>>>>>>>>>>>>> k2='v2') */ > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> on > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >> emp.deptno > > >>> = > > >>>>>>>> dept.deptno > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Basically > > >>> we > > >>>>>> would > > >>>>>>>> support > > >>>>>>>>>>>> both > > >>>>>>>>>>>>>> query hints(after the > > >>>>>>>>>>>>>>>>>>>>>> SELECT > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> keyword) > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and table > > >>>>>> hints(after > > >>>>>>>> the > > >>>>>>>>>>>>>> referenced table name), for > > >>>>>>>>>>>>>>>>>>>>> 1.11, > > >>>>>>>>>>>>>>>>>>>>>> we > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> plan to > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> only > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> support > > >>> table hints > > >>>>>>>> with a > > >>>>>>>>>>> hint > > >>>>>>>>>>>>>> probably named > > >>>>>>>>>>>>>>>>>>>> PROPERTIES: > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >> table_name > > >>> /*+ > > >>>>>>>>>>>>>> PROPERTIES(k1='v1', k2='v2') *+/ > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I am > > >>> looking > > >>>>>> forward > > >>>>>>>> to > > >>>>>>>>>>> your > > >>>>>>>>>>>>>> comments. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> You can > > >>> access > > >>>>>> the > > >>>>>>>> FLIP > > >>>>>>>>>>> here: > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>> > > >>>>>> > > >>> > > >> > > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-113%3A+SQL+and+Planner+Hints > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best, > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Danny > > >> Chan > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>>> > > >>>>>>>> > > >>>>>> > > >>>>> > > >>>>> > > >>>> > > >>> > > >> > > > > > > > >