+1 for using the keyword "SYSTEM". Thanks to Timo for chiming in!
--Xuefu On Fri, Sep 20, 2019 at 3:28 PM Timo Walther <twal...@apache.org> wrote: > Hi everyone, > > sorry, for the late replay. I give also +1 for option #2. Thus, I guess > we have a clear winner. > > I would also like to find a better keyword/syntax for this statement. > Esp. the BUILTIN keyword can confuse people, because it could be written > as BUILTIN, BUILDIN, BUILT_IN, or BUILD_IN. And we would need to > introduce a new reserved keyword in the parser which affects also > non-DDL queries. How about: > > CREATE TEMPORARY SYSTEM FUNCTION xxx > > The SYSTEM keyword is already a reserved keyword and in FLIP-66 we are > discussing to prefix some of the function with a SYSTEM_ prefix like > SYSTEM_WATERMARK. Also SQL defines syntax like "FOR SYSTEM_TIME AS OF". > > What do you think? > > Thanks, > Timo > > > On 20.09.19 05:45, Bowen Li wrote: > > Another reason I prefer "CREATE TEMPORARY BUILTIN FUNCTION" over "ALTER > > BUILTIN FUNCTION xxx TEMPORARILY" is - what if users want to drop the > > temporary built-in function in the same session? With the former one, > they > > can run something like "DROP TEMPORARY BUILTIN FUNCTION"; With the latter > > one, I'm not sure how users can "restore" the original builtin function > > easily from an "altered" function without introducing further nonstandard > > SQL syntax. > > > > Also please pardon me as I realized using net may not be a good idea... > I'm > > trying to fit this vote into cases listed in Flink Bylaw [1]. > > > > >From the following result, the majority seems to be #2 too as it has the > > most approval so far and doesn't have strong "-1". > > > > #1:3 (+1), 1 (0), 4(-1) > > #2:4(0), 3 (+1), 1(+0.5) > > * Dawid -1/0 depending on keyword > > #3:2(+1), 3(-1), 3(0) > > > > [1] > > > https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=120731026 > > > > On Thu, Sep 19, 2019 at 10:30 AM Bowen Li <bowenl...@gmail.com> wrote: > > > >> Hi, > >> > >> Thanks everyone for your votes. I summarized the result as following: > >> > >> #1:3 (+1), 1 (0), 4(-1) - net: -1 > >> #2:4(0), 2 (+1), 1(+0.5) - net: +2.5 > >> Dawid -1/0 depending on keyword > >> #3:2(+1), 3(-1), 3(0) - net: -1 > >> > >> Given the result, I'd like to change my vote for #2 from 0 to +1, to > make > >> it a stronger case with net +3.5. So the votes so far are: > >> > >> #1:3 (+1), 1 (0), 4(-1) - net: -1 > >> #2:4(0), 3 (+1), 1(+0.5) - net: +3.5 > >> Dawid -1/0 depending on keyword > >> #3:2(+1), 3(-1), 3(0) - net: -1 > >> > >> What do you think? Do you think we can conclude with this result? Or > would > >> you like to take it as a formal FLIP vote with 3 days voting period? > >> > >> BTW, I'd prefer "CREATE TEMPORARY BUILTIN FUNCTION" over "ALTER BUILTIN > >> FUNCTION xxx TEMPORARILY" because > >> 1. the syntax is more consistent with "CREATE FUNCTION" and "CREATE > >> TEMPORARY FUNCTION" > >> 2. "ALTER BUILTIN FUNCTION xxx TEMPORARILY" implies it alters a built-in > >> function but it actually doesn't, the logic only creates a temp function > >> with higher priority than that built-in function in ambiguous resolution > >> order; and it would behave inconsistently with "ALTER FUNCTION". > >> > >> > >> > >> On Thu, Sep 19, 2019 at 2:58 AM Fabian Hueske <fhue...@gmail.com> > wrote: > >> > >>> I agree, it's very similar from the implementation point of view and > the > >>> implications. > >>> > >>> IMO, the difference is mostly on the mental model for the user. > >>> Instead of having a special class of temporary functions that have > >>> precedence over builtin functions it suggests to temporarily change > >>> built-in functions. > >>> > >>> Fabian > >>> > >>> Am Do., 19. Sept. 2019 um 11:52 Uhr schrieb Kurt Young < > ykt...@gmail.com > >>>> : > >>>> Hi Fabian, > >>>> > >>>> I think it's almost the same with #2 with different keyword: > >>>> > >>>> CREATE TEMPORARY BUILTIN FUNCTION xxx > >>>> > >>>> Best, > >>>> Kurt > >>>> > >>>> > >>>> On Thu, Sep 19, 2019 at 5:50 PM Fabian Hueske <fhue...@gmail.com> > >>> wrote: > >>>>> Hi, > >>>>> > >>>>> I thought about it a bit more and think that there is some good value > >>> in > >>>> my > >>>>> last proposal. > >>>>> > >>>>> A lot of complexity comes from the fact that we want to allow > >>> overriding > >>>>> built-in functions which are differently addressed as other functions > >>>> (and > >>>>> db objects). > >>>>> We could just have "CREATE TEMPORARY FUNCTION" do exactly the same > >>> thing > >>>> as > >>>>> "CREATE FUNCTION" and treat both functions exactly the same except > >>> that: > >>>>> 1) temp functions disappear at the end of the session > >>>>> 2) temp function are resolved before other functions > >>>>> > >>>>> This would be Dawid's proposal from the beginning of this thread (in > >>> case > >>>>> you still remember... ;-) ) > >>>>> > >>>>> Temporarily overriding built-in functions would be supported with an > >>>>> explicit command like > >>>>> > >>>>> ALTER BUILTIN FUNCTION xxx TEMPORARILY AS ... > >>>>> > >>>>> This would also address the concerns about accidentally changing the > >>>>> semantics of built-in functions. > >>>>> IMO, it can't get much more explicit than the above command. > >>>>> > >>>>> Sorry for bringing up a new option in the middle of the discussion, > >>> but > >>>> as > >>>>> I said, I think it has a bunch of benefits and I don't see major > >>>> drawbacks > >>>>> (maybe you do?). > >>>>> > >>>>> What do you think? > >>>>> > >>>>> Fabian > >>>>> > >>>>> Am Do., 19. Sept. 2019 um 11:24 Uhr schrieb Fabian Hueske < > >>>>> fhue...@gmail.com > >>>>>> : > >>>>>> Hi everyone, > >>>>>> > >>>>>> I thought again about option #1 and something that I don't like is > >>> that > >>>>>> the resolved address of xyz is different in "CREATE FUNCTION xyz" > >>> and > >>>>>> "CREATE TEMPORARY FUNCTION xyz". > >>>>>> IMO, adding the keyword "TEMPORARY" should only change the > >>> lifecycle of > >>>>>> the function, but not where it is located. This implicitly changed > >>>>> location > >>>>>> might be confusing for users. > >>>>>> After all, a temp function should behave pretty much like any other > >>>>>> function, except for the fact that it disappears when the session is > >>>>> closed. > >>>>>> Approach #2 with the additional keyword would make that pretty > >>> clear, > >>>>> IMO. > >>>>>> However, I neither like GLOBAL (for reasons mentioned by Dawid) or > >>>>> BUILDIN > >>>>>> (we are not adding a built-in function). > >>>>>> So I'd be OK with #2 if we find a good keyword. In fact, approach #2 > >>>>> could > >>>>>> also be an alias for approach #3 to avoid explicit specification of > >>> the > >>>>>> system catalog/db. > >>>>>> > >>>>>> Approach #3 would be consistent with other db objects and the > >>> "CREATE > >>>>>> FUNCTION" statement. > >>>>>> Adding system catalog/db seems rather complex, but then again how > >>> often > >>>>> do > >>>>>> we expect users to override built-in functions? If this becomes a > >>> major > >>>>>> issue, we can still add option #2 as an alias. > >>>>>> > >>>>>> Not sure what's the best approach from an internal point of view, > >>> but I > >>>>>> certainly think that consistent behavior is important. > >>>>>> Hence my votes are: > >>>>>> > >>>>>> -1 for #1 > >>>>>> 0 for #2 > >>>>>> 0 for #3 > >>>>>> > >>>>>> Btw. Did we consider a completely separate command for overriding > >>>>> built-in > >>>>>> functions like "ALTER BUILTIN FUNCTION xxx TEMPORARILY AS ..."? > >>>>>> > >>>>>> Cheers, Fabian > >>>>>> > >>>>>> > >>>>>> Am Do., 19. Sept. 2019 um 11:03 Uhr schrieb JingsongLee > >>>>>> <lzljs3620...@aliyun.com.invalid>: > >>>>>> > >>>>>>> I know Hive and Spark can shadow built-in functions by temporary > >>>>> function. > >>>>>>> Mysql, Oracle, Sql server can not shadow. > >>>>>>> User can use full names to access functions instead of shadowing. > >>>>>>> > >>>>>>> So I think it is a completely new thing, and the direct way to deal > >>>> with > >>>>>>> new things is to add new grammar. So, > >>>>>>> +1 for #2, +0 for #3, -1 for #1 > >>>>>>> > >>>>>>> Best, > >>>>>>> Jingsong Lee > >>>>>>> > >>>>>>> > >>>>>>> ------------------------------------------------------------------ > >>>>>>> From:Kurt Young <ykt...@gmail.com> > >>>>>>> Send Time:2019年9月19日(星期四) 16:43 > >>>>>>> To:dev <dev@flink.apache.org> > >>>>>>> Subject:Re: [DISCUSS] FLIP-57 - Rework FunctionCatalog > >>>>>>> > >>>>>>> And let me make my vote complete: > >>>>>>> > >>>>>>> -1 for #1 > >>>>>>> +1 for #2 with different keyword > >>>>>>> -0 for #3 > >>>>>>> > >>>>>>> Best, > >>>>>>> Kurt > >>>>>>> > >>>>>>> > >>>>>>> On Thu, Sep 19, 2019 at 4:40 PM Kurt Young <ykt...@gmail.com> > >>> wrote: > >>>>>>>> Looks like I'm the only person who is willing to +1 to #2 for now > >>>> :-) > >>>>>>>> But I would suggest to change the keyword from GLOBAL to > >>>>>>>> something like BUILTIN. > >>>>>>>> > >>>>>>>> I think #2 and #3 are almost the same proposal, just with > >>> different > >>>>>>>> format to indicate whether it want to override built-in > >>> functions. > >>>>>>>> My biggest reason to choose it is I want this behavior be > >>> consistent > >>>>>>>> with temporal tables. I will give some examples to show the > >>> behavior > >>>>>>>> and also make sure I'm not misunderstanding anything here. > >>>>>>>> > >>>>>>>> For most DBs, when user create a temporary table with: > >>>>>>>> > >>>>>>>> CREATE TEMPORARY TABLE t1 > >>>>>>>> > >>>>>>>> It's actually equivalent with: > >>>>>>>> > >>>>>>>> CREATE TEMPORARY TABLE `curent_db`.t1 > >>>>>>>> > >>>>>>>> If user change current database, they will not be able to access > >>> t1 > >>>>>>> without > >>>>>>>> fully qualified name, .i.e db1.t1 (assuming db1 is current > >>> database > >>>>> when > >>>>>>>> this temporary table is created). > >>>>>>>> > >>>>>>>> Only #2 and #3 followed this behavior and I would vote for this > >>>> since > >>>>>>> this > >>>>>>>> makes such behavior consistent through temporal tables and > >>>> functions. > >>>>>>>> Why I'm not voting for #3 is a special catalog and database just > >>>> looks > >>>>>>> very > >>>>>>>> hacky to me. It gave a imply that our built-in functions saved > >>> at a > >>>>>>>> special > >>>>>>>> catalog and database, which is actually not. Introducing a > >>> dedicated > >>>>>>>> keyword > >>>>>>>> like CREATE TEMPORARY BUILTIN FUNCTION looks more clear and > >>>>>>>> straightforward. One can argue that we should avoid introducing > >>> new > >>>>>>>> keyword, > >>>>>>>> but it's also very rare that a system can overwrite built-in > >>>>> functions. > >>>>>>>> Since we > >>>>>>>> decided to support this, introduce a new keyword is not a big > >>> deal > >>>>> IMO. > >>>>>>>> Best, > >>>>>>>> Kurt > >>>>>>>> > >>>>>>>> > >>>>>>>> On Thu, Sep 19, 2019 at 3:07 PM Piotr Nowojski < > >>> pi...@ververica.com > >>>>>>>> wrote: > >>>>>>>> > >>>>>>>>> Hi, > >>>>>>>>> > >>>>>>>>> It is a quite long discussion to follow and I hope I didn’t > >>>>>>> misunderstand > >>>>>>>>> anything. From the proposals presented by Xuefu I would vote: > >>>>>>>>> > >>>>>>>>> -1 for #1 and #2 > >>>>>>>>> +1 for #3 > >>>>>>>>> > >>>>>>>>> Besides #3 being IMO more general and more consistent, having > >>>>> qualified > >>>>>>>>> names (#3) would help/make easier for someone to use cross > >>>>>>>>> databases/catalogs queries (joining multiple data sets/streams). > >>>> For > >>>>>>>>> example with some functions to manipulate/clean up/convert the > >>>> stored > >>>>>>> data > >>>>>>>>> in different catalogs registered in the respective catalogs. > >>>>>>>>> > >>>>>>>>> Piotrek > >>>>>>>>> > >>>>>>>>>> On 19 Sep 2019, at 06:35, Jark Wu <imj...@gmail.com> wrote: > >>>>>>>>>> > >>>>>>>>>> I agree with Xuefu that inconsistent handling with all the > >>> other > >>>>>>>>> objects is > >>>>>>>>>> not a big problem. > >>>>>>>>>> > >>>>>>>>>> Regarding to option#3, the special "system.system" namespace > >>> may > >>>>>>> confuse > >>>>>>>>>> users. > >>>>>>>>>> Users need to know the set of built-in function names to know > >>>> when > >>>>> to > >>>>>>>>> use > >>>>>>>>>> "system.system" namespace. > >>>>>>>>>> What will happen if user registers a non-builtin function name > >>>>> under > >>>>>>> the > >>>>>>>>>> "system.system" namespace? > >>>>>>>>>> Besides, I think it doesn't solve the "explode" problem I > >>>> mentioned > >>>>>>> at > >>>>>>>>> the > >>>>>>>>>> beginning of this thread. > >>>>>>>>>> > >>>>>>>>>> So here is my vote: > >>>>>>>>>> > >>>>>>>>>> +1 for #1 > >>>>>>>>>> 0 for #2 > >>>>>>>>>> -1 for #3 > >>>>>>>>>> > >>>>>>>>>> Best, > >>>>>>>>>> Jark > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> On Thu, 19 Sep 2019 at 08:38, Xuefu Z <usxu...@gmail.com> > >>> wrote: > >>>>>>>>>>> @Dawid, Re: we also don't need additional referencing the > >>>>>>>>> specialcatalog > >>>>>>>>>>> anywhere. > >>>>>>>>>>> > >>>>>>>>>>> True. But once we allow such reference, then user can do so > >>> in > >>>> any > >>>>>>>>> possible > >>>>>>>>>>> place where a function name is expected, for which we have to > >>>>>>> handle. > >>>>>>>>>>> That's a big difference, I think. > >>>>>>>>>>> > >>>>>>>>>>> Thanks, > >>>>>>>>>>> Xuefu > >>>>>>>>>>> > >>>>>>>>>>> On Wed, Sep 18, 2019 at 5:25 PM Dawid Wysakowicz < > >>>>>>>>>>> wysakowicz.da...@gmail.com> > >>>>>>>>>>> wrote: > >>>>>>>>>>> > >>>>>>>>>>>> @Bowen I am not suggesting introducing additional catalog. I > >>>>> think > >>>>>>> we > >>>>>>>>>>> need > >>>>>>>>>>>> to get rid of the current built-in catalog. > >>>>>>>>>>>> > >>>>>>>>>>>> @Xuefu in option #3 we also don't need additional > >>> referencing > >>>> the > >>>>>>>>> special > >>>>>>>>>>>> catalog anywhere else besides in the CREATE statement. The > >>>>>>> resolution > >>>>>>>>>>>> behaviour is exactly the same in both options. > >>>>>>>>>>>> > >>>>>>>>>>>> On Thu, 19 Sep 2019, 08:17 Xuefu Z, <usxu...@gmail.com> > >>> wrote: > >>>>>>>>>>>>> Hi Dawid, > >>>>>>>>>>>>> > >>>>>>>>>>>>> "GLOBAL" is a temporary keyword that was given to the > >>>> approach. > >>>>> It > >>>>>>>>> can > >>>>>>>>>>> be > >>>>>>>>>>>>> changed to something else for better. > >>>>>>>>>>>>> > >>>>>>>>>>>>> The difference between this and the #3 approach is that we > >>>> only > >>>>>>> need > >>>>>>>>>>> the > >>>>>>>>>>>>> keyword for this create DDL. For other places (such as > >>>> function > >>>>>>>>>>>>> referencing), no keyword or special namespace is needed. > >>>>>>>>>>>>> > >>>>>>>>>>>>> Thanks, > >>>>>>>>>>>>> Xuefu > >>>>>>>>>>>>> > >>>>>>>>>>>>> On Wed, Sep 18, 2019 at 4:32 PM Dawid Wysakowicz < > >>>>>>>>>>>>> wysakowicz.da...@gmail.com> > >>>>>>>>>>>>> wrote: > >>>>>>>>>>>>> > >>>>>>>>>>>>>> Hi, > >>>>>>>>>>>>>> I think it makes sense to start voting at this point. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Option 1: Only 1-part identifiers > >>>>>>>>>>>>>> PROS: > >>>>>>>>>>>>>> - allows shadowing built-in functions > >>>>>>>>>>>>>> CONS: > >>>>>>>>>>>>>> - incosistent with all the other objects, both permanent & > >>>>>>> temporary > >>>>>>>>>>>>>> - does not allow shadowing catalog functions > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Option 2: Special keyword for built-in function > >>>>>>>>>>>>>> I think this is quite similar to the special catalog/db. > >>> The > >>>>>>> thing I > >>>>>>>>>>> am > >>>>>>>>>>>>>> strongly against in this proposal is the GLOBAL keyword. > >>> This > >>>>>>>>> keyword > >>>>>>>>>>>>> has a > >>>>>>>>>>>>>> meaning in rdbms systems and means a function that is > >>> present > >>>>>>> for a > >>>>>>>>>>>>>> lifetime of a session in which it was created, but > >>> available > >>>> in > >>>>>>> all > >>>>>>>>>>>> other > >>>>>>>>>>>>>> sessions. Therefore I really don't want to use this > >>> keyword > >>>> in > >>>>> a > >>>>>>>>>>>>> different > >>>>>>>>>>>>>> context. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Option 3: Special catalog/db > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> PROS: > >>>>>>>>>>>>>> - allows shadowing built-in functions > >>>>>>>>>>>>>> - allows shadowing catalog functions > >>>>>>>>>>>>>> - consistent with other objects > >>>>>>>>>>>>>> CONS: > >>>>>>>>>>>>>> - we introduce a special namespace for built-in functions > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> I don't see a problem with introducing the special > >>> namespace. > >>>>> In > >>>>>>> the > >>>>>>>>>>>> end > >>>>>>>>>>>>> it > >>>>>>>>>>>>>> is very similar to the keyword approach. In this case the > >>>>>>> catalog/db > >>>>>>>>>>>>>> combination would be the "keyword" > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Therefore my votes: > >>>>>>>>>>>>>> Option 1: -0 > >>>>>>>>>>>>>> Option 2: -1 (I might change to +0 if we can come up with > >>> a > >>>>>>> better > >>>>>>>>>>>>> keyword) > >>>>>>>>>>>>>> Option 3: +1 > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>> Dawid > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> On Thu, 19 Sep 2019, 05:12 Xuefu Z, <usxu...@gmail.com> > >>>> wrote: > >>>>>>>>>>>>>>> Hi Aljoscha, > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Thanks for the summary and these are great questions to > >>> be > >>>>>>>>>>> answered. > >>>>>>>>>>>>> The > >>>>>>>>>>>>>>> answer to your first question is clear: there is a > >>> general > >>>>>>>>>>> agreement > >>>>>>>>>>>> to > >>>>>>>>>>>>>>> override built-in functions with temp functions. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> However, your second and third questions are sort of > >>>> related, > >>>>>>> as a > >>>>>>>>>>>>>> function > >>>>>>>>>>>>>>> reference can be either just function name (like "func") > >>> or > >>>> in > >>>>>>> the > >>>>>>>>>>>> form > >>>>>>>>>>>>>> or > >>>>>>>>>>>>>>> "cat.db.func". When a reference is just function name, it > >>>> can > >>>>>>> mean > >>>>>>>>>>>>>> either a > >>>>>>>>>>>>>>> built-in function or a function defined in the current > >>>> cat/db. > >>>>>>> If > >>>>>>>>>>> we > >>>>>>>>>>>>>>> support overriding a built-in function with a temp > >>> function, > >>>>>>> such > >>>>>>>>>>>>>>> overriding can also cover a function in the current > >>> cat/db. > >>>>>>>>>>>>>>> I think what Timo referred as "overriding a catalog > >>>> function" > >>>>>>>>>>> means a > >>>>>>>>>>>>>> temp > >>>>>>>>>>>>>>> function defined as "cat.db.func" overrides a catalog > >>>> function > >>>>>>>>>>> "func" > >>>>>>>>>>>>> in > >>>>>>>>>>>>>>> cat/db even if cat/db is not current. To support this, > >>> temp > >>>>>>>>>>> function > >>>>>>>>>>>>> has > >>>>>>>>>>>>>> to > >>>>>>>>>>>>>>> be tied to a cat/db. What's why I said above that the 2nd > >>>> and > >>>>>>> 3rd > >>>>>>>>>>>>>> questions > >>>>>>>>>>>>>>> are related. The problem with such support is the > >>> ambiguity > >>>>> when > >>>>>>>>>>> user > >>>>>>>>>>>>>>> defines a function w/o namespace, "CREATE TEMPORARY > >>> FUNCTION > >>>>>>> func > >>>>>>>>>>>> ...". > >>>>>>>>>>>>>>> Here "func" can means a global temp function, or a temp > >>>>>>> function in > >>>>>>>>>>>>>> current > >>>>>>>>>>>>>>> cat/db. If we can assume the former, this creates an > >>>>>>> inconsistency > >>>>>>>>>>>>>> because > >>>>>>>>>>>>>>> "CREATE FUNCTION func" actually means a function in > >>> current > >>>>>>> cat/db. > >>>>>>>>>>>> If > >>>>>>>>>>>>> we > >>>>>>>>>>>>>>> assume the latter, then there is no way for user to > >>> create a > >>>>>>> global > >>>>>>>>>>>>> temp > >>>>>>>>>>>>>>> function. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Giving a special namespace for built-in functions may > >>> solve > >>>>> the > >>>>>>>>>>>>> ambiguity > >>>>>>>>>>>>>>> problem above, but it also introduces artificial > >>>>>>> catalog/database > >>>>>>>>>>>> that > >>>>>>>>>>>>>>> needs special treatment and pollutes the cleanness of > >>> the > >>>>>>> code. I > >>>>>>>>>>>>> would > >>>>>>>>>>>>>>> rather introduce a syntax in DDL to solve the problem, > >>> like > >>>>>>> "CREATE > >>>>>>>>>>>>>>> [GLOBAL] TEMPORARY FUNCTION func". > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Thus, I'd like to summarize a few candidate proposals for > >>>>> voting > >>>>>>>>>>>>>> purposes: > >>>>>>>>>>>>>>> 1. Support only global, temporary functions without > >>>> namespace. > >>>>>>> Such > >>>>>>>>>>>>> temp > >>>>>>>>>>>>>>> functions overrides built-in functions and catalog > >>> functions > >>>>> in > >>>>>>>>>>>> current > >>>>>>>>>>>>>>> cat/db. The resolution order is: temp functions -> > >>> built-in > >>>>>>>>>>> functions > >>>>>>>>>>>>> -> > >>>>>>>>>>>>>>> catalog functions. (Partially or fully qualified > >>> functions > >>>> has > >>>>>>> no > >>>>>>>>>>>>>>> ambiguity!) > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> 2. In addition to #1, support creating and referencing > >>>>> temporary > >>>>>>>>>>>>>> functions > >>>>>>>>>>>>>>> associated with a cat/db with "GLOBAL" qualifier in DDL > >>> for > >>>>>>> global > >>>>>>>>>>>> temp > >>>>>>>>>>>>>>> functions. The resolution order is: global temp > >>> functions -> > >>>>>>>>>>> built-in > >>>>>>>>>>>>>>> functions -> temp functions in current cat/db -> catalog > >>>>>>> function. > >>>>>>>>>>>>>>> (Resolution for partially or fully qualified function > >>>>> reference > >>>>>>> is: > >>>>>>>>>>>>> temp > >>>>>>>>>>>>>>> functions -> persistent functions.) > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> 3. In addition to #1, support creating and referencing > >>>>> temporary > >>>>>>>>>>>>>> functions > >>>>>>>>>>>>>>> associated with a cat/db with a special namespace for > >>>> built-in > >>>>>>>>>>>>> functions > >>>>>>>>>>>>>>> and global temp functions. The resolution is the same as > >>> #2, > >>>>>>> except > >>>>>>>>>>>>> that > >>>>>>>>>>>>>>> the special namespace might be prefixed to a reference > >>> to a > >>>>>>>>>>> built-in > >>>>>>>>>>>>>>> function or global temp function. (In absence of the > >>> special > >>>>>>>>>>>> namespace, > >>>>>>>>>>>>>> the > >>>>>>>>>>>>>>> resolution order is the same as in #2.) > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> My personal preference is #1, given the unknown use case > >>> and > >>>>>>>>>>>> introduced > >>>>>>>>>>>>>>> complexity for #2 and #3. However, #2 is an acceptable > >>>>>>> alternative. > >>>>>>>>>>>>> Thus, > >>>>>>>>>>>>>>> my votes are: > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> +1 for #1 > >>>>>>>>>>>>>>> +0 for #2 > >>>>>>>>>>>>>>> -1 for #3 > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Everyone, please cast your vote (in above format > >>> please!), > >>>> or > >>>>>>> let > >>>>>>>>>>> me > >>>>>>>>>>>>> know > >>>>>>>>>>>>>>> if you have more questions or other candidates. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Thanks, > >>>>>>>>>>>>>>> Xuefu > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> On Wed, Sep 18, 2019 at 6:42 AM Aljoscha Krettek < > >>>>>>>>>>>> aljos...@apache.org> > >>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Hi, > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> I think this discussion and the one for FLIP-64 are very > >>>>>>>>>>> connected. > >>>>>>>>>>>>> To > >>>>>>>>>>>>>>>> resolve the differences, think we have to think about > >>> the > >>>>> basic > >>>>>>>>>>>>>>> principles > >>>>>>>>>>>>>>>> and find consensus there. The basic questions I see are: > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> - Do we want to support overriding builtin functions? > >>>>>>>>>>>>>>>> - Do we want to support overriding catalog functions? > >>>>>>>>>>>>>>>> - And then later: should temporary functions be tied to > >>> a > >>>>>>>>>>>>>>>> catalog/database? > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> I don’t have much to say about these, except that we > >>> should > >>>>>>>>>>>> somewhat > >>>>>>>>>>>>>>> stick > >>>>>>>>>>>>>>>> to what the industry does. But I also understand that > >>> the > >>>>>>>>>>> industry > >>>>>>>>>>>> is > >>>>>>>>>>>>>>>> already very divided on this. > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>>> Aljoscha > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> On 18. Sep 2019, at 11:41, Jark Wu <imj...@gmail.com> > >>>>> wrote: > >>>>>>>>>>>>>>>>> Hi, > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> +1 to strive for reaching consensus on the remaining > >>>> topics. > >>>>>>> We > >>>>>>>>>>>> are > >>>>>>>>>>>>>>>> close to the truth. It will waste a lot of time if we > >>>> resume > >>>>>>> the > >>>>>>>>>>>>> topic > >>>>>>>>>>>>>>> some > >>>>>>>>>>>>>>>> time later. > >>>>>>>>>>>>>>>>> +1 to “1-part/override” and I’m also fine with Timo’s > >>>>>>>>>>>> “cat.db.fun” > >>>>>>>>>>>>>> way > >>>>>>>>>>>>>>>> to override a catalog function. > >>>>>>>>>>>>>>>>> I’m not sure about “system.system.fun”, it introduces a > >>>>>>>>>>>> nonexistent > >>>>>>>>>>>>>> cat > >>>>>>>>>>>>>>>> & db? And we still need to do special treatment for the > >>>>>>> dedicated > >>>>>>>>>>>>>>>> system.system cat & db? > >>>>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>>>> Jark > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> 在 2019年9月18日,06:54,Timo Walther <twal...@apache.org> > >>> 写道: > >>>>>>>>>>>>>>>>>> Hi everyone, > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> @Xuefu: I would like to avoid adding too many things > >>>>>>>>>>>>> incrementally. > >>>>>>>>>>>>>>>> Users should be able to override all catalog objects > >>>>>>> consistently > >>>>>>>>>>>>>>> according > >>>>>>>>>>>>>>>> to FLIP-64 (Support for Temporary Objects in Table > >>> module). > >>>>> If > >>>>>>>>>>>>>> functions > >>>>>>>>>>>>>>>> are treated completely different, we need more code and > >>>>> special > >>>>>>>>>>>>> cases. > >>>>>>>>>>>>>>> From > >>>>>>>>>>>>>>>> an implementation perspective, this topic only affects > >>> the > >>>>>>> lookup > >>>>>>>>>>>>> logic > >>>>>>>>>>>>>>>> which is rather low implementation effort which is why I > >>>>> would > >>>>>>>>>>> like > >>>>>>>>>>>>> to > >>>>>>>>>>>>>>>> clarify the remaining items. As you said, we have a > >>> slight > >>>>>>>>>>> consenus > >>>>>>>>>>>>> on > >>>>>>>>>>>>>>>> overriding built-in functions; we should also strive for > >>>>>>> reaching > >>>>>>>>>>>>>>> consensus > >>>>>>>>>>>>>>>> on the remaining topics. > >>>>>>>>>>>>>>>>>> @Dawid: I like your idea as it ensures registering > >>>> catalog > >>>>>>>>>>>> objects > >>>>>>>>>>>>>>>> consistent and the overriding of built-in functions more > >>>>>>>>>>> explicit. > >>>>>>>>>>>>>>>>>> Thanks, > >>>>>>>>>>>>>>>>>> Timo > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> On 17.09.19 11:59, kai wang wrote: > >>>>>>>>>>>>>>>>>>> hi, everyone > >>>>>>>>>>>>>>>>>>> I think this flip is very meaningful. it supports > >>>>> functions > >>>>>>>>>>>> that > >>>>>>>>>>>>>> can > >>>>>>>>>>>>>>> be > >>>>>>>>>>>>>>>>>>> shared by different catalogs and dbs, reducing the > >>>>>>>>>>> duplication > >>>>>>>>>>>> of > >>>>>>>>>>>>>>>> functions. > >>>>>>>>>>>>>>>>>>> Our group based on flink's sql parser module > >>> implements > >>>>>>>>>>> create > >>>>>>>>>>>>>>> function > >>>>>>>>>>>>>>>>>>> feature, stores the parsed function metadata and > >>> schema > >>>>> into > >>>>>>>>>>>>> mysql, > >>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>> also customizes the catalog, customizes sql-client to > >>>>>>> support > >>>>>>>>>>>>>> custom > >>>>>>>>>>>>>>>>>>> schemas and functions. Loaded, but the function is > >>>>> currently > >>>>>>>>>>>>>> global, > >>>>>>>>>>>>>>>> and is > >>>>>>>>>>>>>>>>>>> not subdivided according to catalog and db. > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> In addition, I very much hope to participate in the > >>>>>>>>>>> development > >>>>>>>>>>>>> of > >>>>>>>>>>>>>>> this > >>>>>>>>>>>>>>>>>>> flip, I have been paying attention to the community, > >>> but > >>>>>>>>>>> found > >>>>>>>>>>>> it > >>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>> more > >>>>>>>>>>>>>>>>>>> difficult to join. > >>>>>>>>>>>>>>>>>>> thank you. > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> Xuefu Z <usxu...@gmail.com> 于2019年9月17日周二 上午11:19写道: > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> Thanks to Tmo and Dawid for sharing thoughts. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> It seems to me that there is a general consensus on > >>>>> having > >>>>>>>>>>>> temp > >>>>>>>>>>>>>>>> functions > >>>>>>>>>>>>>>>>>>>> that have no namespaces and overwrite built-in > >>>> functions. > >>>>>>>>>>> (As > >>>>>>>>>>>> a > >>>>>>>>>>>>>> side > >>>>>>>>>>>>>>>> note > >>>>>>>>>>>>>>>>>>>> for comparability, the current user defined > >>> functions > >>>> are > >>>>>>>>>>> all > >>>>>>>>>>>>>>>> temporary and > >>>>>>>>>>>>>>>>>>>> having no namespaces.) > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> Nevertheless, I can also see the merit of having > >>>>> namespaced > >>>>>>>>>>>> temp > >>>>>>>>>>>>>>>> functions > >>>>>>>>>>>>>>>>>>>> that can overwrite functions defined in a specific > >>>>> cat/db. > >>>>>>>>>>>>>> However, > >>>>>>>>>>>>>>>> this > >>>>>>>>>>>>>>>>>>>> idea appears orthogonal to the former and can be > >>> added > >>>>>>>>>>>>>>> incrementally. > >>>>>>>>>>>>>>>>>>>> How about we first implement non-namespaced temp > >>>>> functions > >>>>>>>>>>> now > >>>>>>>>>>>>> and > >>>>>>>>>>>>>>>> leave > >>>>>>>>>>>>>>>>>>>> the door open for namespaced ones for later > >>> releases as > >>>>> the > >>>>>>>>>>>>>>>> requirement > >>>>>>>>>>>>>>>>>>>> might become more crystal? This also helps shorten > >>> the > >>>>>>>>>>> debate > >>>>>>>>>>>>> and > >>>>>>>>>>>>>>>> allow us > >>>>>>>>>>>>>>>>>>>> to make some progress along this direction. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> As to Dawid's idea of having a dedicated cat/db to > >>> host > >>>>> the > >>>>>>>>>>>>>>> temporary > >>>>>>>>>>>>>>>> temp > >>>>>>>>>>>>>>>>>>>> functions that don't have namespaces, my only > >>> concern > >>>> is > >>>>>>> the > >>>>>>>>>>>>>> special > >>>>>>>>>>>>>>>>>>>> treatment for a cat/db, which makes code less > >>> clean, as > >>>>>>>>>>>> evident > >>>>>>>>>>>>> in > >>>>>>>>>>>>>>>> treating > >>>>>>>>>>>>>>>>>>>> the built-in catalog currently. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> Thanks, > >>>>>>>>>>>>>>>>>>>> Xuefiu > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> On Mon, Sep 16, 2019 at 5:07 PM Dawid Wysakowicz < > >>>>>>>>>>>>>>>>>>>> wysakowicz.da...@gmail.com> > >>>>>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> Hi, > >>>>>>>>>>>>>>>>>>>>> Another idea to consider on top of Timo's > >>> suggestion. > >>>>> How > >>>>>>>>>>>> about > >>>>>>>>>>>>>> we > >>>>>>>>>>>>>>>> have a > >>>>>>>>>>>>>>>>>>>>> special namespace (catalog + database) for built-in > >>>>>>>>>>> objects? > >>>>>>>>>>>>> This > >>>>>>>>>>>>>>>> catalog > >>>>>>>>>>>>>>>>>>>>> would be invisible for users as Xuefu was > >>> suggesting. > >>>>>>>>>>>>>>>>>>>>> Then users could still override built-in > >>> functions, if > >>>>>>> they > >>>>>>>>>>>>> fully > >>>>>>>>>>>>>>>> qualify > >>>>>>>>>>>>>>>>>>>>> object with the built-in namespace, but by default > >>> the > >>>>>>>>>>> common > >>>>>>>>>>>>>> logic > >>>>>>>>>>>>>>>> of > >>>>>>>>>>>>>>>>>>>>> current dB & cat would be used. > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> CREATE TEMPORARY FUNCTION func ... > >>>>>>>>>>>>>>>>>>>>> registers temporary function in current cat & dB > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> CREATE TEMPORARY FUNCTION cat.db.func ... > >>>>>>>>>>>>>>>>>>>>> registers temporary function in cat db > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> CREATE TEMPORARY FUNCTION system.system.func ... > >>>>>>>>>>>>>>>>>>>>> Overrides built-in function with temporary function > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> The built-in/system namespace would not be writable > >>>> for > >>>>>>>>>>>>> permanent > >>>>>>>>>>>>>>>>>>>> objects. > >>>>>>>>>>>>>>>>>>>>> WDYT? > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> This way I think we can have benefits of both > >>>> solutions. > >>>>>>>>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>>>>>>>> Dawid > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> On Tue, 17 Sep 2019, 07:24 Timo Walther, < > >>>>>>>>>>> twal...@apache.org > >>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>>>> Hi Bowen, > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> I understand the potential benefit of overriding > >>>>> certain > >>>>>>>>>>>>>> built-in > >>>>>>>>>>>>>>>>>>>>>> functions. I'm open to such a feature if many > >>> people > >>>>>>>>>>> agree. > >>>>>>>>>>>>>>>> However, it > >>>>>>>>>>>>>>>>>>>>>> would be great to still support overriding catalog > >>>>>>>>>>> functions > >>>>>>>>>>>>>> with > >>>>>>>>>>>>>>>>>>>>>> temporary functions in order to prototype a query > >>>> even > >>>>>>>>>>>> though > >>>>>>>>>>>>> a > >>>>>>>>>>>>>>>>>>>>>> catalog/database might not be available currently > >>> or > >>>>>>>>>>> should > >>>>>>>>>>>>> not > >>>>>>>>>>>>>> be > >>>>>>>>>>>>>>>>>>>>>> modified yet. How about we support both cases? > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> CREATE TEMPORARY FUNCTION abs > >>>>>>>>>>>>>>>>>>>>>> -> creates/overrides a built-in function and never > >>>>>>>>>>>> consideres > >>>>>>>>>>>>>>>> current > >>>>>>>>>>>>>>>>>>>>>> catalog and database; inconsistent with other DDL > >>> but > >>>>>>>>>>>>> acceptable > >>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>>> functions I guess. > >>>>>>>>>>>>>>>>>>>>>> CREATE TEMPORARY FUNCTION cat.db.fun > >>>>>>>>>>>>>>>>>>>>>> -> creates/overrides a catalog function > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> Regarding "Flink don't have any other built-in > >>>> objects > >>>>>>>>>>>>> (tables, > >>>>>>>>>>>>>>>> views) > >>>>>>>>>>>>>>>>>>>>>> except functions", this might change in the near > >>>>> future. > >>>>>>>>>>>> Take > >>>>>>>>>>>>>>>>>>>>>> https://issues.apache.org/jira/browse/FLINK-13900 > >>> as > >>>>> an > >>>>>>>>>>>>>> example. > >>>>>>>>>>>>>>>>>>>>>> Thanks, > >>>>>>>>>>>>>>>>>>>>>> Timo > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> On 14.09.19 01:40, Bowen Li wrote: > >>>>>>>>>>>>>>>>>>>>>>> Hi Fabian, > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> Yes, I agree 1-part/no-override is the least > >>>> favorable > >>>>>>>>>>>> thus I > >>>>>>>>>>>>>>>> didn't > >>>>>>>>>>>>>>>>>>>>>>> include that as a voting option, and the > >>> discussion > >>>> is > >>>>>>>>>>>> mainly > >>>>>>>>>>>>>>>> between > >>>>>>>>>>>>>>>>>>>>>>> 1-part/override builtin and 3-part/not override > >>>>> builtin. > >>>>>>>>>>>>>>>>>>>>>>> Re > However, it means that temp functions are > >>>>>>>>>>> differently > >>>>>>>>>>>>>>> treated > >>>>>>>>>>>>>>>>>>>> than > >>>>>>>>>>>>>>>>>>>>>>> other db objects. > >>>>>>>>>>>>>>>>>>>>>>> IMO, the treatment difference results from the > >>> fact > >>>>> that > >>>>>>>>>>>>>>> functions > >>>>>>>>>>>>>>>>>>>> are > >>>>>>>>>>>>>>>>>>>>> a > >>>>>>>>>>>>>>>>>>>>>>> bit different from other objects - Flink don't > >>> have > >>>>> any > >>>>>>>>>>>> other > >>>>>>>>>>>>>>>>>>>> built-in > >>>>>>>>>>>>>>>>>>>>>>> objects (tables, views) except functions. > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> Cheers, > >>>>>>>>>>>>>>>>>>>>>>> Bowen > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> -- > >>>>>>>>>>>>>>>>>>>> Xuefu Zhang > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> "In Honey We Trust!" > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> -- > >>>>>>>>>>>>>>> Xuefu Zhang > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> "In Honey We Trust!" > >>>>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>>> -- > >>>>>>>>>>>>> Xuefu Zhang > >>>>>>>>>>>>> > >>>>>>>>>>>>> "In Honey We Trust!" > >>>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> -- > >>>>>>>>>>> Xuefu Zhang > >>>>>>>>>>> > >>>>>>>>>>> "In Honey We Trust!" > >>>>>>>>>>> > >>>>>>>>> > > -- Xuefu Zhang "In Honey We Trust!"