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