Hi everyone,

Thanks for the discussion to make this improvement plan clearer.

Hi, @Jark, @Rui, and @Timo, I'm collecting the final discussion summaries
now and want to confirm one thing that for the statement `USE MODULES x [,
y, z, ...]`, if the module name list contains an unexsited module, shall we
#1 fail the execution for all of them or #2 enabled the rest modules and
return a warning to users? My personal preference goes to #1 for
simplicity. What do you think?

Best,
Jane

On Tue, Feb 2, 2021 at 3:53 PM Timo Walther <twal...@apache.org> wrote:

> +1
>
> @Jane Can you summarize our discussion in the JIRA issue?
>
> Thanks,
> Timo
>
>
> On 02.02.21 03:50, Jark Wu wrote:
> > Hi Timo,
> >
> >> Another question is whether a LOAD operation also adds the module to the
> > enabled list by default?
> >
> > I would like to add the module to the enabled list by default, the main
> > reasons are:
> > 1) Reordering is an advanced requirement, adding modules needs additional
> > USE statements with "core" module
> >   sounds too burdensome. Most users should be satisfied with only LOAD
> > statements.
> > 2) We should keep compatible for TableEnvironment#loadModule().
> > 3) We are using the LOAD statement instead of CREATE, so I think it's
> fine
> > that it does some implicit things.
> >
> > Best,
> > Jark
> >
> > On Tue, 2 Feb 2021 at 00:48, Timo Walther <twal...@apache.org> wrote:
> >
> >> Not the module itself but the ModuleManager should handle this case,
> yes.
> >>
> >> Regards,
> >> Timo
> >>
> >>
> >> On 01.02.21 17:35, Jane Chan wrote:
> >>> +1 to Jark's proposal
> >>>
> >>>    To make it clearer,  will `module#getFunctionDefinition()` return
> empty
> >>> suppose the module is loaded but not enabled?
> >>>
> >>> Best,
> >>> Jane
> >>>
> >>> On Mon, Feb 1, 2021 at 10:02 PM Timo Walther <twal...@apache.org>
> wrote:
> >>>
> >>>> +1 to Jark's proposal
> >>>>
> >>>> I like the difference between just loading and actually enabling these
> >>>> modules.
> >>>>
> >>>> @Rui: I would use the same behavior as catalogs here. You cannot
> `USE` a
> >>>> catalog without creating it before.
> >>>>
> >>>> Another question is whether a LOAD operation also adds the module to
> the
> >>>> enabled list by default?
> >>>>
> >>>> Regards,
> >>>> Timo
> >>>>
> >>>> On 01.02.21 13:52, Rui Li wrote:
> >>>>> If `USE MODULES` implies unloading modules that are not listed, does
> it
> >>>>> also imply loading modules that are not previously loaded, especially
> >>>> since
> >>>>> we're mapping modules by name now?
> >>>>>
> >>>>> On Mon, Feb 1, 2021 at 8:20 PM Jark Wu <imj...@gmail.com> wrote:
> >>>>>
> >>>>>> I agree with Timo that the USE implies the specified modules are in
> >> use
> >>>> in
> >>>>>> the specified order and others are not used.
> >>>>>> This would be easier to know what's the result list and order after
> >> the
> >>>> USE
> >>>>>> statement.
> >>>>>> That means: if current modules in order are x, y, z. And `USE
> MODULES
> >>>> z, y`
> >>>>>> means current modules in order are z, y.
> >>>>>>
> >>>>>> But I would like to not unload the unmentioned modules in the USE
> >>>>>> statement. Because it seems strange that USE
> >>>>>> will implicitly remove modules. In the above example, the user may
> >> type
> >>>> the
> >>>>>> wrong modules list using USE by mistake
> >>>>>>     and would like to declare the list again, the user has to create
> >> the
> >>>>>> module again with some properties he may don't know. Therefore, I
> >>>> propose
> >>>>>> the USE statement just specifies the current module lists and
> doesn't
> >>>>>> unload modules.
> >>>>>> Besides that, we may need a new syntax to list all the modules
> >> including
> >>>>>> not used but loaded.
> >>>>>> We can introduce SHOW FULL MODULES for this purpose with an
> additional
> >>>>>> `used` column.
> >>>>>>
> >>>>>> For example:
> >>>>>>
> >>>>>> Flink SQL> list modules:
> >>>>>> -----------
> >>>>>> | modules |
> >>>>>> -----------
> >>>>>> | x       |
> >>>>>> | y       |
> >>>>>> | z       |
> >>>>>> -----------
> >>>>>> Flink SQL> USE MODULES z, y;
> >>>>>> Flink SQL> show modules:
> >>>>>> -----------
> >>>>>> | modules |
> >>>>>> -----------
> >>>>>> | z       |
> >>>>>> | y       |
> >>>>>> -----------
> >>>>>> Flink SQL> show FULL modules;
> >>>>>> -------------------
> >>>>>> | modules |  used |
> >>>>>> -------------------
> >>>>>> | z       | true  |
> >>>>>> | y       | true  |
> >>>>>> | x       | false |
> >>>>>> -------------------
> >>>>>> Flink SQL> USE MODULES z, y, x;
> >>>>>> Flink SQL> show modules;
> >>>>>> -----------
> >>>>>> | modules |
> >>>>>> -----------
> >>>>>> | z       |
> >>>>>> | y       |
> >>>>>> | x       |
> >>>>>> -----------
> >>>>>>
> >>>>>> What do you think?
> >>>>>>
> >>>>>> Best,
> >>>>>> Jark
> >>>>>>
> >>>>>> On Mon, 1 Feb 2021 at 19:02, Jane Chan <qingyue....@gmail.com>
> wrote:
> >>>>>>
> >>>>>>> Hi Timo, thanks for the discussion.
> >>>>>>>
> >>>>>>> It seems to reach an agreement regarding #3 that <1> Module name
> >> should
> >>>>>>> better be a simple identifier rather than a string literal. <2>
> >>>> Property
> >>>>>>> `type` is redundant and should be removed, and mapping will rely on
> >> the
> >>>>>>> module name because loading a module multiple times just using a
> >>>>>> different
> >>>>>>> module name doesn't make much sense. <3> We should migrate to the
> >> newer
> >>>>>> API
> >>>>>>> rather than the deprecated `TableFactory` class.
> >>>>>>>
> >>>>>>> Regarding #1, I think the point lies in whether changing the
> >> resolution
> >>>>>>> order implies an `unload` operation explicitly (i.e., users could
> >> sense
> >>>>>>> it). What do others think?
> >>>>>>>
> >>>>>>> Best,
> >>>>>>> Jane
> >>>>>>>
> >>>>>>> On Mon, Feb 1, 2021 at 6:41 PM Timo Walther <twal...@apache.org>
> >>>> wrote:
> >>>>>>>
> >>>>>>>> IMHO I would rather unload the not mentioned modules. The
> statement
> >>>>>>>> expresses `USE` that implicilty implies that the other modules are
> >>>> "not
> >>>>>>>> used". What do others think?
> >>>>>>>>
> >>>>>>>> Regards,
> >>>>>>>> Timo
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On 01.02.21 11:28, Jane Chan wrote:
> >>>>>>>>> Hi Jark and Rui,
> >>>>>>>>>
> >>>>>>>>> Thanks for the discussions.
> >>>>>>>>>
> >>>>>>>>> Regarding #1, I'm fine with `USE MODULES` syntax, and
> >>>>>>>>>
> >>>>>>>>>> It can be interpreted as "setting the current order of modules",
> >>>>>> which
> >>>>>>>> is
> >>>>>>>>>> similar to "setting the current catalog" for `USE CATALOG`.
> >>>>>>>>>>
> >>>>>>>>> I would like to confirm that the unmentioned modules remain in
> the
> >>>>>> same
> >>>>>>>>> relative order? E.g., if there are three loaded modules `X`, `Y`,
> >>>>>> `Z`,
> >>>>>>>> then
> >>>>>>>>> `USE MODULES Y, Z` means shifting the order to `Y`, `Z`, `X`.
> >>>>>>>>>
> >>>>>>>>> Regarding #3, I'm fine with mapping modules purely by name, and I
> >>>>>> think
> >>>>>>>>> Jark raised a good point on making the module name a simple
> >>>>>> identifier
> >>>>>>>>> instead of a string literal. For backward compatibility, since we
> >>>>>>> haven't
> >>>>>>>>> supported this syntax yet, the affected users are those who
> defined
> >>>>>>>> modules
> >>>>>>>>> in the YAML configuration file. Maybe we can eliminate the 'type'
> >>>>>> from
> >>>>>>>> the
> >>>>>>>>> 'requiredContext' to make it optional. Thus the proposed mapping
> >>>>>>>> mechanism
> >>>>>>>>> could use the module name to lookup the suitable factory,  and in
> >> the
> >>>>>>>>> meanwhile updating documentation to encourage users to simplify
> >> their
> >>>>>>>> YAML
> >>>>>>>>> configuration. And in the long run, we can deprecate the 'type'.
> >>>>>>>>>
> >>>>>>>>> Best,
> >>>>>>>>> Jane
> >>>>>>>>>
> >>>>>>>>> On Mon, Feb 1, 2021 at 4:19 PM Rui Li <lirui.fu...@gmail.com>
> >> wrote:
> >>>>>>>>>
> >>>>>>>>>> Thanks Jane for starting the discussion.
> >>>>>>>>>>
> >>>>>>>>>> Regarding #1, I also prefer `USE MODULES` syntax. It can be
> >>>>>>> interpreted
> >>>>>>>> as
> >>>>>>>>>> "setting the current order of modules", which is similar to
> >> "setting
> >>>>>>> the
> >>>>>>>>>> current catalog" for `USE CATALOG`.
> >>>>>>>>>>
> >>>>>>>>>> Regarding #3, I'm fine to map modules purely by name because I
> >> think
> >>>>>>> it
> >>>>>>>>>> satisfies all the use cases we have at hand. But I guess we need
> >> to
> >>>>>>> make
> >>>>>>>>>> sure we're backward compatible, i.e. users don't need to change
> >>>>>> their
> >>>>>>>> yaml
> >>>>>>>>>> files to configure the modules.
> >>>>>>>>>>
> >>>>>>>>>> On Mon, Feb 1, 2021 at 3:10 PM Jark Wu <imj...@gmail.com>
> wrote:
> >>>>>>>>>>
> >>>>>>>>>>> Thanks Jane for the summary and starting the discussion in the
> >>>>>>> mailing
> >>>>>>>>>>> list.
> >>>>>>>>>>>
> >>>>>>>>>>> Here are my thoughts:
> >>>>>>>>>>>
> >>>>>>>>>>> 1) syntax to reorder modules
> >>>>>>>>>>> I agree with Rui Li it would be quite useful if we can have
> some
> >>>>>>> syntax
> >>>>>>>>>> to
> >>>>>>>>>>> reorder modules.
> >>>>>>>>>>> I slightly prefer `USE MODULES x, y, z` than `RELOAD MODULES x,
> >> y,
> >>>>>>> z`,
> >>>>>>>>>>> because USE has a more sense of effective and specifying
> >> ordering,
> >>>>>>> than
> >>>>>>>>>>> RELOAD.
> >>>>>>>>>>>     From my feeling, RELOAD just means we unregister and
> register
> >>>>>> x,y,z
> >>>>>>>>>> modules
> >>>>>>>>>>> again,
> >>>>>>>>>>> it sounds like other registered modules are still in use and in
> >> the
> >>>>>>>>>> order.
> >>>>>>>>>>>
> >>>>>>>>>>> 3) mapping modules purely by name
> >>>>>>>>>>> This can definitely improve the usability of loading modules,
> >>>>>> because
> >>>>>>>>>>> the 'type=' property
> >>>>>>>>>>> looks really redundant. We can think of this as a syntax sugar
> >> that
> >>>>>>> the
> >>>>>>>>>>> default type value is the module name.
> >>>>>>>>>>> And we can support to specify 'type=' property in the future to
> >>>>>> allow
> >>>>>>>>>>> multiple modules for one module type.
> >>>>>>>>>>>
> >>>>>>>>>>> Besides, I would like to mention one more change, that the
> module
> >>>>>>> name
> >>>>>>>>>>> proposed in FLIP-68 is a string literal.
> >>>>>>>>>>> But I think we are all on the same page to change it into a
> >> simple
> >>>>>>>>>>> (non-compound) identifier.
> >>>>>>>>>>>
> >>>>>>>>>>> LOAD/UNLOAD MODULE 'core'
> >>>>>>>>>>> ==>
> >>>>>>>>>>> LOAD/UNLOAD MODULE core
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> Best,
> >>>>>>>>>>> Jark
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> On Sat, 30 Jan 2021 at 04:00, Jane Chan <qingyue....@gmail.com
> >
> >>>>>>> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>>> Hi everyone,
> >>>>>>>>>>>>
> >>>>>>>>>>>> I would like to start a discussion on FLINK-21045 [1] about
> >>>>>>> supporting
> >>>>>>>>>>>> `LOAD MODULE` and `UNLOAD MODULE` SQL syntax. It's first
> >> proposed
> >>>>>> by
> >>>>>>>>>>>> FLIP-68 [2] as following.
> >>>>>>>>>>>>
> >>>>>>>>>>>> -- load a module with the given name and append it to the end
> of
> >>>>>> the
> >>>>>>>>>>> module
> >>>>>>>>>>>> list
> >>>>>>>>>>>> LOAD MODULE 'name' [WITH ('type'='xxx', 'prop'='myProp', ...)]
> >>>>>>>>>>>>
> >>>>>>>>>>>> --unload a module by name from the module list and other
> modules
> >>>>>>>> remain
> >>>>>>>>>>> in
> >>>>>>>>>>>> the same relative positions
> >>>>>>>>>>>> UNLOAD MODULE 'name'
> >>>>>>>>>>>>
> >>>>>>>>>>>> After a round of discussion on the Jira ticket, it seems some
> >>>>>>>>>> unanswered
> >>>>>>>>>>>> questions need more opinions and suggestions.
> >>>>>>>>>>>>
> >>>>>>>>>>>> 1. The way to redefine resolution order easily
> >>>>>>>>>>>>
> >>>>>>>>>>>>         Rui Li suggested introducing `USE MODULES` and adding
> >>>> similar
> >>>>>>>>>>>> functionality to the API because
> >>>>>>>>>>>>
> >>>>>>>>>>>>>      1) It's very tedious to unload old modules just to
> reorder
> >>>>>> them.
> >>>>>>>>>>>>
> >>>>>>>>>>>>      2) Users may not even know how to "re-load" an old module
> >> if it
> >>>>>>> was
> >>>>>>>>>> not
> >>>>>>>>>>>>> initially loaded by the user, e.g. don't know which type to
> >> use.
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>         Jane Chan wondered that module is not like the catalog
> >> which
> >>>>>>> has
> >>>>>>>> a
> >>>>>>>>>>>> concept of namespace could specify, and `USE` sounds like a
> >>>>>>>>>>>> mutual-exclusive concept.
> >>>>>>>>>>>>         Maybe `RELOAD MODULES` can express upgrading the
> >> priority of
> >>>>>>> the
> >>>>>>>>>>> loaded
> >>>>>>>>>>>> module(s).
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> 2. `LOAD/UNLOAD MODULE` v.s. `CREATE/DROP MODULE` syntax
> >>>>>>>>>>>>         Jark Wu and Nicholas Jiang proposed to use
> `CREATE/DROP
> >>>>>> MODULE`
> >>>>>>>>>>> instead
> >>>>>>>>>>>> of `LOAD/UNLOAD MODULE` because
> >>>>>>>>>>>>
> >>>>>>>>>>>>>      1) From a pure SQL user's perspective, maybe `CREATE
> >> MODULE +
> >>>>>> USE
> >>>>>>>>>>>> MODULE`
> >>>>>>>>>>>>> is easier to use rather than `LOAD/UNLOAD`.
> >>>>>>>>>>>>>      2) This will be very similar to what the catalog used
> now.
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>       Timo Walther would rather stick to the agreed design
> >> because
> >>>>>>>>>>>> loading/unloading modules is a concept known from kernels etc.
> >>>>>>>>>>>>
> >>>>>>>>>>>> 3. Simplify the module design by mapping modules purely by
> name
> >>>>>>>>>>>>
> >>>>>>>>>>>> LOAD MODULE geo_utils
> >>>>>>>>>>>> LOAD MODULE hive WITH ('version'='2.1')  -- no dedicated
> >>>>>>>>>>> 'type='/'module='
> >>>>>>>>>>>> but allow only 1 module to be loaded parameterized
> >>>>>>>>>>>> UNLOAD hive
> >>>>>>>>>>>> USE MODULES hive, core
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> Please find more details in the reference link. Looking
> forward
> >> to
> >>>>>>>> your
> >>>>>>>>>>>> feedback.
> >>>>>>>>>>>>
> >>>>>>>>>>>> [1] https://issues.apache.org/jira/browse/FLINK-21045#
> >>>>>>>>>>>> <
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>
> >>
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-68%3A+Extend+Core+Table+System+with+Pluggable+Modules
> >>>>>>>>>>>>>
> >>>>>>>>>>>> [2]
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>
> >>
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-68%3A+Extend+Core+Table+System+with+Pluggable+Modules
> >>>>>>>>>>>>
> >>>>>>>>>>>> Best,
> >>>>>>>>>>>> Jane
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> --
> >>>>>>>>>> Best regards!
> >>>>>>>>>> Rui Li
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>>
> >>>>
> >>>>
> >>>
> >>
> >>
> >
>
>

Reply via email to