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 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >