Hi Danny,

Thanks for the updates. I have 2 comments regarding to latest document:

1) I think we also need `*supportedHintOptions*` for  `*TableFormatFactory*`
2) IMO "dynamic-table-options.enabled" should belong to `
*OptimizerConfigOptions*`

Best,
Kurt


On Thu, Mar 26, 2020 at 4:40 PM Timo Walther <twal...@apache.org> wrote:

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

Reply via email to