Re: The reason why I prefer option 3 is that in option 3 all objects internally are identified with 3 parts.
True, but the problem we have is not about how to differentiate each type objects internally. Rather, it's rather about how a user referencing an object unambiguously and consistently. Thanks, Xuefu On Wed, Sep 18, 2019 at 4:55 PM Dawid Wysakowicz <wysakowicz.da...@gmail.com> wrote: > Last additional comment on Option 2. The reason why I prefer option 3 is > that in option 3 all objects internally are identified with 3 parts. This > makes it easier to handle at different locations e.g. while persisting > views, as all objects have uniform representation. > > On Thu, 19 Sep 2019, 07:31 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!"