Sorry, i meant white-list ~

Danny Chan <danny0...@apache.org> 于2020年3月27日周五 下午12:40写道:

> Thanks everyone for the feedback ~
>
> - For the global config option belongs to `ExecutionConfigOptions` or
> `OptimizerConfigOptions`, i have to strong objections, switch
> to `OptimizerConfigOptions` is okey to me and i have updated the WIKI
> - For use while-list or black-list, i have opinion with Timo, so black-list
>
> I would fire a Vote if there are no other objections soon, thanks ~
>
> Timo Walther <twal...@apache.org> 于2020年3月26日周四 下午6:31写道:
>
>> Hi everyone,
>>
>> it is not only about security concerns. Hint options should be
>> well-defined. We had a couple of people that were concerned about
>> changing the semantics with a concept that is called "hint". These
>> options are more like "debugging options" while someone is developing a
>> connector or using a notebook to quickly produce some rows.
>>
>> The final pipeline should use a temporary table instead. I suggest to
>> use a whitelist and force people to think about what should be exposed
>> as a hint. By default, no option should be exposed. It is better to be
>> conservative here.
>>
>> Regards,
>> Timo
>>
>>
>> On 26.03.20 10:31, Danny Chan wrote:
>> > Thanks Kurt for the suggestion ~
>> >
>> > In my opinion:
>> > - There is no need for TableFormatFactory#supportedHintOptions because
>> all
>> > the format options can be configured dynamically, they have no security
>> > issues
>> > - Dynamic table options is not an optimization, it is more like an
>> > execution behavior from my side
>> >
>> > Kurt Young <ykt...@gmail.com> 于2020年3月26日周四 下午4:47写道:
>> >
>> >> 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