Hi everyone, I did a summary on the Jira issue page [1] since the discussion has achieved a consensus. If there is anything missed or not corrected, please let me know.
[1] https://issues.apache.org/jira/browse/FLINK-21045# Best, Jane On Wed, Feb 3, 2021 at 1:33 PM Jark Wu <imj...@gmail.com> wrote: > Hi Jane, > > Yes. I think we should fail fast. > > Best, > Jark > > On Wed, 3 Feb 2021 at 12:06, Jane Chan <qingyue....@gmail.com> wrote: > > > 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 > > > >>>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>> > > > >>>>>> > > > >>>>> > > > >>>>> > > > >>>> > > > >>>> > > > >>> > > > >> > > > >> > > > > > > > > > > > > >