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!" > > >> >> >> > > >> >> > > >> >> > > >> > > > > > >