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