>>Currently I think we can load from the jar and check the services file to >> get the connector type. but is it necessary we may continue to discuss. >>Hi, Sergey, WDYT?
Another idea is FactoryUtil#discoverFactories and check if it implements DynamicTableSourceFactory or DynamicTableSinkFactory with versions it could be trickier... Moreover it seems the version could be a part of the name sometimes[1]. I think name and type could be enough or please correct me if I'm wrong >>or can we open a single ticket under this FLIP? I have a relatively old jira issue[2] for showing connectors with a poc pr. Could I propose to move this jira issue as a subtask under the FLIP one and revive it? [1] https://github.com/apache/flink/blob/161014149e803bfd1d3653badb230b2ed36ce3cb/flink-table/flink-table-common/src/main/java/org/apache/flink/table/factories/Factory.java#L65-L69 [2] https://issues.apache.org/jira/browse/FLINK-25788 On Tue, Feb 28, 2023 at 11:56 AM Ran Tao <chucheng...@gmail.com> wrote: > Hi, Jark. thanks. > > About ILIKE > I have updated the FLIP for ILIKE support (Including existing showTables & > showColumns how to change). > > > About show connectors @Sergey, > Currently I think we can load from the jar and check the services file to > get the connector type. but is it necessary we may continue to discuss. > Hi, Sergey, WDYT?or can we open a single ticket under this FLIP? > > > Best Regards, > Ran Tao > > > Jark Wu <imj...@gmail.com> 于2023年2月28日周二 17:45写道: > > > Besides, if we introduce the ILIKE, we should also add this feature for > > the previous SHOW with LIKE statements. They should be included in this > > FLIP. > > > > Best, > > Jark > > > > > 2023年2月28日 17:40,Jark Wu <imj...@gmail.com> 写道: > > > > > > Hi Ran, > > > > > > Could you add descriptions about what’s the behavior and differences > > between the LIKE and ILIKE? > > > > > > Besides, I don’t see the SHOW CONNECTOR syntax and description and how > > it works in the FLIP. Is it intended to be included in this FLIP? > > > > > > Best, > > > Jark > > > > > > > > >> 2023年2月28日 10:58,Ran Tao <chucheng...@gmail.com> 写道: > > >> > > >> Hi, guys. thanks for advices. > > >> > > >> allow me to make a small summary: > > >> > > >> 1.Support ILIKE > > >> 2.Using catalog api to support show operations > > >> 3.Need a dedicated FLIP try to support INFORMATION_SCHEMA > > >> 4.Support SHOW CONNECTORS > > >> > > >> If there are no other questions, i will try to start a VOTE for this > > FLIP. > > >> WDYT? > > >> > > >> Best Regards, > > >> Ran Tao > > >> > > >> > > >> Sergey Nuyanzin <snuyan...@gmail.com> 于2023年2月27日周一 21:12写道: > > >> > > >>> Hi Jark, > > >>> > > >>> thanks for your comment. > > >>> > > >>>> Considering they > > >>>> are orthogonal and information schema requires more complex design > and > > >>>> discussion, it deserves a separate FLIP > > >>> I'm ok with a separate FLIP for INFORMATION_SCHEMA. > > >>> > > >>>> Sergey, are you willing to contribute this FLIP? > > >>> Seems I need to have more research done for that. > > >>> I would try to help/contribute here > > >>> > > >>> > > >>> On Mon, Feb 27, 2023 at 3:46 AM Ran Tao <chucheng...@gmail.com> > wrote: > > >>> > > >>>> HI, Jing. thanks. > > >>>> > > >>>> @about ILIKE, from my collections of some popular engines founds > that > > >>> just > > >>>> snowflake has this syntax in show with filtering. > > >>>> do we need to support it? if yes, then current some existed show > > >>> operations > > >>>> need to be addressed either. > > >>>> @about ShowOperation with like. it's a good idea. yes, two > parameters > > for > > >>>> constructor can work. thanks for your advice. > > >>>> > > >>>> > > >>>> Best Regards, > > >>>> Ran Tao > > >>>> > > >>>> > > >>>> Jing Ge <j...@ververica.com.invalid> 于2023年2月27日周一 06:29写道: > > >>>> > > >>>>> Hi, > > >>>>> > > >>>>> @Aitozi > > >>>>> > > >>>>> This is exactly why LoD has been introduced: to avoid exposing > > internal > > >>>>> structure(2nd and lower level API). > > >>>>> > > >>>>> @Jark > > >>>>> > > >>>>> IMHO, there is no conflict between LoD and "High power-to-weight > > ratio" > > >>>>> with the given example, List.subList() returns List interface > itself, > > >>> no > > >>>>> internal or further interface has been exposed. After offering > > >>>>> tEvn.getCatalog(), "all" methods in Catalog Interface have been > > >>> provided > > >>>> by > > >>>>> TableEnvironment(via getCatalog()). From user's perspective and > > >>>> maintenance > > >>>>> perspective there is no/less difference between providing them > > directly > > >>>> via > > >>>>> TableEnvironment or via getCatalog(). They are all exposed. Using > > >>>>> getCatalog() will reduce the number of boring wrapper methods, but > on > > >>> the > > >>>>> other hand not every method in Catalog needs to be exposed, so the > > >>> number > > >>>>> of wrapper methods would be limited/less, if we didn't expose > > Catalog. > > >>>>> Nevertheless, since we already offered getCatalog(), it makes sense > > to > > >>>>> continue using it. The downside is the learning effort for users - > > they > > >>>>> have to know that listDatabases() is hidden in Catalog, go to > another > > >>>>> haystack and then find the needle in there. > > >>>>> > > >>>>> +1 for Information schema with a different FLIP. From a design > > >>>> perspective, > > >>>>> information schema should be the first choice for most cases and > easy > > >>> to > > >>>>> use. Catalog, on the other hand, will be more powerful and offer > more > > >>>>> advanced features. > > >>>>> > > >>>>> Best regards, > > >>>>> Jing > > >>>>> > > >>>>> > > >>>>> On Sat, Feb 25, 2023 at 3:57 PM Jark Wu <imj...@gmail.com> wrote: > > >>>>> > > >>>>>> Hi Sergey, > > >>>>>> > > >>>>>> I think INFORMATION_SCHEMA is a very interesting idea, and I hope > we > > >>>> can > > >>>>>> support it. However, it doesn't conflict with the idea of > auxiliary > > >>>>>> statements. I can see different benefits of them. The information > > >>>> schema > > >>>>>> provides powerful and flexible capabilities but needs to learn the > > >>>>> complex > > >>>>>> entity relationship[1]. The auxiliary SQL statements are super > handy > > >>>> and > > >>>>>> can resolve most problems, but they offer limited features. > > >>>>>> > > >>>>>> I can see almost all the mature systems support both of them. I > > think > > >>>> it > > >>>>>> also makes sense to support both of them in Flink. Considering > they > > >>>>>> are orthogonal and information schema requires more complex design > > >>> and > > >>>>>> discussion, it deserves a separate FLIP. Sergey, are you willing > to > > >>>>>> contribute this FLIP? > > >>>>>> > > >>>>>> Best, > > >>>>>> Jark > > >>>>>> > > >>>>>> [1]: > > >>>>>> > > >>>>>> > > >>>>> > > >>>> > > >>> > > > https://docs.databricks.com/sql/language-manual/sql-ref-information-schema.html > > >>>>>> > > >>>>>> > > >>>>>> On Fri, 24 Feb 2023 at 22:43, Ran Tao <chucheng...@gmail.com> > > wrote: > > >>>>>> > > >>>>>>> Thanks John. > > >>>>>>> > > >>>>>>> It seems that most people prefer the information_schema > > >>>> implementation. > > >>>>>>> information_schema does have more benefits (however, the show > > >>>> operation > > >>>>>> is > > >>>>>>> also an option and supplement). > > >>>>>>> Otherwise, the sql syntax and keywords may be changed frequently. > > >>>>>>> Of course, it will be more complicated than the extension of the > > >>> show > > >>>>>>> operation. > > >>>>>>> It is necessary to design various tables in information_schema, > > >>>> which > > >>>>>> may > > >>>>>>> take a period of effort. > > >>>>>>> > > >>>>>>> I will try to design the information_schema and integrate it with > > >>>>> flink. > > >>>>>>> This may be a relatively big feature for me. I hope you guys can > > >>> give > > >>>>>>> comments and opinions later. > > >>>>>>> Thank you all. > > >>>>>>> > > >>>>>>> Best Regards, > > >>>>>>> Ran Tao > > >>>>>>> > > >>>>>>> > > >>>>>>> John Roesler <vvcep...@apache.org> 于2023年2月24日周五 21:53写道: > > >>>>>>> > > >>>>>>>> Hello Ran, > > >>>>>>>> > > >>>>>>>> Thanks for the FLIP! > > >>>>>>>> > > >>>>>>>> Do you mind if we revisit the topic of doing this by adding an > > >>>>>>> Information > > >>>>>>>> schema? The SHOW approach requires modifying the parser/language > > >>>> for > > >>>>>>> every > > >>>>>>>> gap we identify. On the flip side, an Information schema is much > > >>>>> easier > > >>>>>>> to > > >>>>>>>> discover and remember how to use, and the ability to run queries > > >>> on > > >>>>> it > > >>>>>> is > > >>>>>>>> quite valuable for admins. It’s also better for Flink > > >>> maintainers, > > >>>>>>> because > > >>>>>>>> the information tables’ schemas can be evolved over time just > > >>> like > > >>>>>>> regular > > >>>>>>>> tables, whereas every change to a SHOW statement would be a > > >>>> breaking > > >>>>>>>> change. > > >>>>>>>> > > >>>>>>>> I understand that it may seem like a big effort, but we’re > > >>>> proposing > > >>>>>>> quite > > >>>>>>>> a big extension to the space of SHOW statement, so it seems > > >>>>> appropriate > > >>>>>>> to > > >>>>>>>> take the opportunity and migrate to a better framework rather > > >>> than > > >>>>>>>> incrementally building on (and tying us even more firmly to) the > > >>>>>> existing > > >>>>>>>> approach. > > >>>>>>>> > > >>>>>>>> Thanks for your consideration, > > >>>>>>>> John > > >>>>>>>> > > >>>>>>>> On Fri, Feb 24, 2023, at 05:58, Sergey Nuyanzin wrote: > > >>>>>>>>> thanks for explanation > > >>>>>>>>> > > >>>>>>>>>> But it's not clear to me what exactly > > >>>>>>>>>> you want to display? Is it the name of the plugin? > > >>>>>>>>> > > >>>>>>>>> I was thinking about name, type (source/sink) and may be > > >>> version > > >>>>> (not > > >>>>>>>> sure > > >>>>>>>>> if it's possible right now) > > >>>>>>>>> > > >>>>>>>>> On Fri, Feb 24, 2023 at 12:46 PM Ran Tao < > > >>> chucheng...@gmail.com> > > >>>>>>> wrote: > > >>>>>>>>> > > >>>>>>>>>> Hi, Sergey. thanks. first step we can support filtering for > > >>> show > > >>>>>>>> operations > > >>>>>>>>>> in this FLIP try to align other engines. > > >>>>>>>>>> If we want to support describe other objects, of course we > > >>> need > > >>>> to > > >>>>>>>> design > > >>>>>>>>>> how to get these metadatas or informations and printAsStyle. > > >>> (So > > >>>>> it > > >>>>>>>> maybe > > >>>>>>>>>> need another FLIP for more details). > > >>>>>>>>>> > > >>>>>>>>>>> Does it make sense to add support for connectors e.g. show > > >>>>>>>>>>> {sink|source|all} connectors? > > >>>>>>>>>> I think we can support it, currently flink do support some > > >>>>>> operations > > >>>>>>>> only > > >>>>>>>>>> for flink itself such as showJobs. But it's not clear to me > > >>> what > > >>>>>>> exactly > > >>>>>>>>>> you want to display? Is it the name of the plugin? > > >>>>>>>>>> Just Like: > > >>>>>>>>>> Kafka > > >>>>>>>>>> Hudi > > >>>>>>>>>> Files > > >>>>>>>>>> > > >>>>>>>>>> Best Regards, > > >>>>>>>>>> Ran Tao > > >>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>>>> Sergey Nuyanzin <snuyan...@gmail.com> 于2023年2月24日周五 19:11写道: > > >>>>>>>>>> > > >>>>>>>>>>> Thanks for driving the FLIP > > >>>>>>>>>>> > > >>>>>>>>>>> I have a couple of questions > > >>>>>>>>>>> Am I right that INFORMATION_SCHEMA mentioned by Timo[1] is > > >>>> out > > >>>>> of > > >>>>>>>> scope > > >>>>>>>>>> of > > >>>>>>>>>>> this FLIP? > > >>>>>>>>>>> I noticed there are some support of it in > > >>>>>>>> Spark[2]/Hive[3]/Snowflake[4] > > >>>>>>>>>> and > > >>>>>>>>>>> others > > >>>>>>>>>>> > > >>>>>>>>>>> Does it make sense to add support for connectors e.g. show > > >>>>>>>>>>> {sink|source|all} connectors? > > >>>>>>>>>>> > > >>>>>>>>>>> [1] > > >>>>>>> https://lists.apache.org/thread/2g108qlfwbhb56wnoc5qj0yq29dvq1vv > > >>>>>>>>>>> [2] https://issues.apache.org/jira/browse/SPARK-16452 > > >>>>>>>>>>> [3] https://issues.apache.org/jira/browse/HIVE-1010 > > >>>>>>>>>>> [4] https://docs.snowflake.com/en/sql-reference/info-schema > > >>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> On Fri, Feb 24, 2023 at 4:19 AM Jark Wu <imj...@gmail.com> > > >>>>> wrote: > > >>>>>>>>>>> > > >>>>>>>>>>>> Hi Jing, > > >>>>>>>>>>>> > > >>>>>>>>>>>>> we'd better reduce the dependency chain and follow the > > >>> Law > > >>>>> of > > >>>>>>>>>>>> Demeter(LoD, clean code). > > >>>>>>>>>>>>> Adding a new method in TableEnvironment is therefore > > >>>> better > > >>>>>> than > > >>>>>>>>>>> calling > > >>>>>>>>>>>> an API chain > > >>>>>>>>>>>> > > >>>>>>>>>>>> I think I don't fully agree that LoD is a good practice. > > >>>>>>> Actually, I > > >>>>>>>>>>> would > > >>>>>>>>>>>> prefer to keep the API clean and concise. > > >>>>>>>>>>>> This is also the Java Collection Framework design > > >>> principle > > >>>>> [1]: > > >>>>>>>> "High > > >>>>>>>>>>>> power-to-weight ratio". Otherwise, > > >>>>>>>>>>>> it will explode the API interfaces with different > > >>>> combinations > > >>>>>> of > > >>>>>>>>>>> methods. > > >>>>>>>>>>>> Currently, TableEnvironment > > >>>>>>>>>>>> already provides 60+ methods. > > >>>>>>>>>>>> > > >>>>>>>>>>>> IMO, with the increasing methods of accessing and > > >>>> manipulating > > >>>>>>>>>> metadata, > > >>>>>>>>>>>> they can be extracted to > > >>>>>>>>>>>> a separate interface, where we can add richer methods. > > >>> This > > >>>>> work > > >>>>>>>> can be > > >>>>>>>>>>>> aligned with the > > >>>>>>>>>>>> CatalogManager interface (FLIP-295) [2]. > > >>>>>>>>>>>> > > >>>>>>>>>>>> Best, > > >>>>>>>>>>>> Jark > > >>>>>>>>>>>> > > >>>>>>>>>>>> [1]: > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>> > > >>>>>>> > > >>>>>> > > >>>>> > > >>>> > > >>> > > > https://stackoverflow.com/questions/7568819/why-no-tail-or-head-method-in-list-to-get-last-or-first-element > > >>>>>>>>>>>> [2]: > > >>>>>>>> > https://lists.apache.org/thread/9bnjblgd9wvrl75lkm84oo654c4lqv70 > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> On Fri, 24 Feb 2023 at 10:38, Aitozi < > > >>> gjying1...@gmail.com> > > >>>>>>> wrote: > > >>>>>>>>>>>> > > >>>>>>>>>>>>> Hi, > > >>>>>>>>>>>>> Thanks for the nice proposal, Ran. > > >>>>>>>>>>>>> Regarding this api usage, I have some discussion > > >>> with > > >>>>>>> @twalthr > > >>>>>>>>>>> before > > >>>>>>>>>>>>> as here < > > >>>>>>>>>>>>> > > >>>>>>>> > > >>> https://github.com/apache/flink/pull/15137#issuecomment-1356124138 > > >>>>> > > >>>>>>>>>>>>> Personally, I think leaking the Catalog to the user side > > >>>> is > > >>>>>> not > > >>>>>>>>>>> suitable, > > >>>>>>>>>>>>> since there are some read/write operations in the > > >>> Catalog, > > >>>>> the > > >>>>>>>>>>>>> TableEnvironment#getCatalog will expose all of them to > > >>> the > > >>>>>> user > > >>>>>>>> side. > > >>>>>>>>>>> So > > >>>>>>>>>>>> I > > >>>>>>>>>>>>> learned to add a new api in TableEnvironment to reduce > > >>>>>> reliance > > >>>>>>> on > > >>>>>>>>>> the > > >>>>>>>>>>>>> current TableEnvironment#getCatalog. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> Thanks, > > >>>>>>>>>>>>> Aitozi > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> Ran Tao <chucheng...@gmail.com> 于2023年2月23日周四 23:44写道: > > >>>>>>>>>>>>> > > >>>>>>>>>>>>>> Hi, JingSong, Jing. > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> thank for sharing your opinions. > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> What you say makes sense, both approaches have pros > > >>> and > > >>>>>> cons. > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> If it is a modification of `TableEnvrionment`, such as > > >>>>>>>>>>>>>> listDatabases(catalog). It is actually consistent with > > >>>> the > > >>>>>>> other > > >>>>>>>>>>>>> overloaded > > >>>>>>>>>>>>>> methods before, > > >>>>>>>>>>>>>> and defining this method means that TableEnvrionment > > >>>> does > > >>>>>>>> provide > > >>>>>>>>>>> this > > >>>>>>>>>>>>>> capability (rather than relying on the functionality > > >>> of > > >>>>>>> another > > >>>>>>>>>>> class). > > >>>>>>>>>>>>>> The disadvantage is that api changes may be required, > > >>>> and > > >>>>>> may > > >>>>>>>>>>> continue > > >>>>>>>>>>>> to > > >>>>>>>>>>>>>> be modified in the future. > > >>>>>>>>>>>>>> But from the TableEnvrionment itself, it really > > >>> doesn't > > >>>>> pay > > >>>>>>>>>> attention > > >>>>>>>>>>>> to > > >>>>>>>>>>>>>> how the underlying layer is implemented. > > >>>>>>>>>>>>>> (Although it is actually taken from the catalogManager > > >>>> at > > >>>>>>>> present, > > >>>>>>>>>>> this > > >>>>>>>>>>>>> is > > >>>>>>>>>>>>>> another question) > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Judging from the current dependencies, > > >>>>> flink-table-api-java > > >>>>>>>>>> strongly > > >>>>>>>>>>>>> relies > > >>>>>>>>>>>>>> on flink-table-common to use various common classes > > >>> and > > >>>>>>>> interfaces, > > >>>>>>>>>>>>>> especially the catalog interface. > > >>>>>>>>>>>>>> So we can extract various metadata information in the > > >>>>>> catalog > > >>>>>>>>>> through > > >>>>>>>>>>>>>> `tEnv.getCatalog`. > > >>>>>>>>>>>>>> The advantage is that it will not cause api > > >>>> modification, > > >>>>>> but > > >>>>>>>> this > > >>>>>>>>>>>> method > > >>>>>>>>>>>>>> of use breaks LoD. > > >>>>>>>>>>>>>> In fact, the current flink-table-api-java design is > > >>>>>> completely > > >>>>>>>>>> bound > > >>>>>>>>>>> to > > >>>>>>>>>>>>> the > > >>>>>>>>>>>>>> catalog interface. > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> If the mandatory modification of PublicApi is > > >>>> constrained > > >>>>>> (may > > >>>>>>>> be > > >>>>>>>>>>>>> modified > > >>>>>>>>>>>>>> again and later), I tend to use `tEnv.getCatalog` > > >>>>> directly, > > >>>>>>>>>> otherwise > > >>>>>>>>>>>>>> It would actually be more standard to add overloaded > > >>>>> methods > > >>>>>>> to > > >>>>>>>>>>>>>> `TableEnvrionment`. > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Another question, can the later capabilities of > > >>>>>>>> TableEnvrionment be > > >>>>>>>>>>>>>> implemented through SupportXXX? > > >>>>>>>>>>>>>> In order to solve the problem that the method needs to > > >>>> be > > >>>>>>> added > > >>>>>>>> in > > >>>>>>>>>>> the > > >>>>>>>>>>>>>> future. This kind of usage occurs frequently in flink. > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Looking forward to your other considerations, > > >>>>>>>>>>>>>> and also try to wait to see if there are other > > >>> relevant > > >>>>> API > > >>>>>>>>>> designers > > >>>>>>>>>>>> or > > >>>>>>>>>>>>>> committers to provide comments. > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Best Regards, > > >>>>>>>>>>>>>> Ran Tao > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Jing Ge <j...@ververica.com.invalid> 于2023年2月23日周四 > > >>>>> 18:58写道: > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> Hi Jingson, > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> Thanks for sharing your thoughts. Please see my > > >>> reply > > >>>>>> below. > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> On Thu, Feb 23, 2023 at 10:16 AM Jingsong Li < > > >>>>>>>>>>> jingsongl...@gmail.com > > >>>>>>>>>>>>> > > >>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> Hi Jing Ge, > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> First, flink-table-common contains all common > > >>>> classes > > >>>>> of > > >>>>>>>> Flink > > >>>>>>>>>>>> Table, > > >>>>>>>>>>>>>>>> I think it is hard to bypass its dependence. > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> If any time when we use flink-table-api-java, we > > >>> have > > >>>> to > > >>>>>>> cross > > >>>>>>>>>>>> through > > >>>>>>>>>>>>>>> flink-table-api-java and use flink-table-common, we > > >>>>> should > > >>>>>>>>>>> reconsider > > >>>>>>>>>>>>> the > > >>>>>>>>>>>>>>> design of these two modules and how > > >>> interfaces/classes > > >>>>> are > > >>>>>>>>>>> classified > > >>>>>>>>>>>>>> into > > >>>>>>>>>>>>>>> those modules. > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> Secondly, almost all methods in Catalog looks > > >>> useful > > >>>>> to > > >>>>>>> me, > > >>>>>>>> so > > >>>>>>>>>> if > > >>>>>>>>>>>> we > > >>>>>>>>>>>>>>>> are following LoD, we should add all methods again > > >>>> to > > >>>>>>>>>>>>>>>> TableEnvironment. I think it is redundant. > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> That is the enlarged issue I mentioned previously. A > > >>>>>> simple > > >>>>>>>>>>> solution > > >>>>>>>>>>>> is > > >>>>>>>>>>>>>> to > > >>>>>>>>>>>>>>> move Catalog to the top level API. The fact is that > > >>> a > > >>>>>>> catalog > > >>>>>>>>>>> package > > >>>>>>>>>>>>>>> already exists in flink-table-api-java but the > > >>> Catalog > > >>>>>>>> interface > > >>>>>>>>>> is > > >>>>>>>>>>>> in > > >>>>>>>>>>>>>>> flink-table-common. I don't know the historical > > >>>> context > > >>>>> of > > >>>>>>>> this > > >>>>>>>>>>>> design. > > >>>>>>>>>>>>>>> Maybe you could share some insight with us? Thanks > > >>> in > > >>>>>>> advance. > > >>>>>>>>>>> Beyond > > >>>>>>>>>>>>>> that, > > >>>>>>>>>>>>>>> there should be other AOP options but need more time > > >>>> to > > >>>>>>>> figure it > > >>>>>>>>>>>> out. > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> And, this API chain does not look deep. > > >>>>>>>>>>>>>>>> - > > >>>>>>>>>>> > > >>>>> "tEnv.getCatalog(tEnv.getCurrentCatalog()).get().listDatabases()" > > >>>>>>>>>>>>>>>> looks a little complicated. The complex part is > > >>>> ahead. > > >>>>>>>>>>>>>>>> - If we have a method to get Catalog directly, can > > >>>> be > > >>>>>>>> simplify > > >>>>>>>>>> to > > >>>>>>>>>>>>>>>> "tEnv.catalog().listDatabase()", this is simple. > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> Commonly, it will need more effort to always follow > > >>>> LoD, > > >>>>>> but > > >>>>>>>> for > > >>>>>>>>>>> the > > >>>>>>>>>>>>> top > > >>>>>>>>>>>>>>> level facade API like TableEnvironment, both the API > > >>>>>>>> developer, > > >>>>>>>>>> API > > >>>>>>>>>>>>>>> consumer and the project itself from a long-term > > >>>>>> perspective > > >>>>>>>> will > > >>>>>>>>>>>>> benefit > > >>>>>>>>>>>>>>> from sticking to LoD. Since we already have the > > >>>>>>>> getCatalog(String > > >>>>>>>>>>>>>> catalog) > > >>>>>>>>>>>>>>> method in TableEnvironment, it also makes sense to > > >>>>> follow > > >>>>>>> your > > >>>>>>>>>>>>>> suggestion, > > >>>>>>>>>>>>>>> if we only want to limit/avoid public API changes. > > >>> But > > >>>>>>> please > > >>>>>>>> be > > >>>>>>>>>>>> aware > > >>>>>>>>>>>>>> that > > >>>>>>>>>>>>>>> we will have all known long-term drawbacks because > > >>> of > > >>>>> LoD > > >>>>>>>>>>>>>>> violation, especially the cross modules violation. I > > >>>>> just > > >>>>>>>> checked > > >>>>>>>>>>> all > > >>>>>>>>>>>>>>> usages of getCatalog(String catalog) in the master > > >>>>> branch. > > >>>>>>>>>>> Currently > > >>>>>>>>>>>>>> there > > >>>>>>>>>>>>>>> are very limited calls. It is better to pay > > >>> attention > > >>>> to > > >>>>>> it > > >>>>>>>>>> before > > >>>>>>>>>>> it > > >>>>>>>>>>>>>> goes > > >>>>>>>>>>>>>>> worse. Just my 2 cents. :) > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> Best, > > >>>>>>>>>>>>>>>> Jingsong > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> On Thu, Feb 23, 2023 at 4:47 PM Jing Ge > > >>>>>>>>>>> <j...@ververica.com.invalid > > >>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> Hi Jingson, > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> Thanks for the knowledge sharing. IMHO, it looks > > >>>>> more > > >>>>>>>> like a > > >>>>>>>>>>>> design > > >>>>>>>>>>>>>>>>> guideline question than just avoiding public API > > >>>>>> change. > > >>>>>>>>>> Please > > >>>>>>>>>>>>>> correct > > >>>>>>>>>>>>>>>> me > > >>>>>>>>>>>>>>>>> if I'm wrong. > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> Catalog is in flink-table-common module and > > >>>>>>>> TableEnvironment > > >>>>>>>>>> is > > >>>>>>>>>>>> in > > >>>>>>>>>>>>>>>>> flink-table-api-java. Depending on how and where > > >>>>> those > > >>>>>>>>>> features > > >>>>>>>>>>>>>>> proposed > > >>>>>>>>>>>>>>>> in > > >>>>>>>>>>>>>>>>> this FLIP will be used, we'd better reduce the > > >>>>>>> dependency > > >>>>>>>>>> chain > > >>>>>>>>>>>> and > > >>>>>>>>>>>>>>>> follow > > >>>>>>>>>>>>>>>>> the Law of Demeter(LoD, clean code) [1]. Adding > > >>> a > > >>>>> new > > >>>>>>>> method > > >>>>>>>>>> in > > >>>>>>>>>>>>>>>>> TableEnvironment is therefore better than > > >>> calling > > >>>> an > > >>>>>> API > > >>>>>>>>>> chain. > > >>>>>>>>>>>> It > > >>>>>>>>>>>>> is > > >>>>>>>>>>>>>>>> also > > >>>>>>>>>>>>>>>>> more user friendly for the caller, because there > > >>>> is > > >>>>> no > > >>>>>>>> need > > >>>>>>>>>> to > > >>>>>>>>>>>>>>> understand > > >>>>>>>>>>>>>>>>> the internal structure of the called API. The > > >>>>> downside > > >>>>>>> of > > >>>>>>>>>> doing > > >>>>>>>>>>>>> this > > >>>>>>>>>>>>>> is > > >>>>>>>>>>>>>>>>> that we might have another issue with the > > >>> current > > >>>>>>>>>>>> TableEnvironment > > >>>>>>>>>>>>>>>> design - > > >>>>>>>>>>>>>>>>> the TableEnvironment interface got enlarged with > > >>>>> more > > >>>>>>>> wrapper > > >>>>>>>>>>>>>> methods. > > >>>>>>>>>>>>>>>> This > > >>>>>>>>>>>>>>>>> is a different issue that could be solved with > > >>>>>> improved > > >>>>>>>>>>>> abstraction > > >>>>>>>>>>>>>>>> design > > >>>>>>>>>>>>>>>>> in the future. After considering pros and cons, > > >>> if > > >>>>> we > > >>>>>>>> want to > > >>>>>>>>>>> add > > >>>>>>>>>>>>>> those > > >>>>>>>>>>>>>>>>> features now, I would prefer following LoD than > > >>>> API > > >>>>>>> chain > > >>>>>>>>>>> calls. > > >>>>>>>>>>>>>> WDYT? > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> Best regards, > > >>>>>>>>>>>>>>>>> Jing > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> [1] > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>> > > >>>>>>> > > >>>>>> > > >>>>> > > >>>> > > >>> > > > https://hackernoon.com/object-oriented-tricks-2-law-of-demeter-4ecc9becad85 > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> On Thu, Feb 23, 2023 at 6:26 AM Ran Tao < > > >>>>>>>>>> chucheng...@gmail.com > > >>>>>>>>>>>> > > >>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> Hi Jingsong. thanks. i got it. > > >>>>>>>>>>>>>>>>>> In this way, there is no need to introduce new > > >>>> API > > >>>>>>>> changes. > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> Best Regards, > > >>>>>>>>>>>>>>>>>> Ran Tao > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> Jingsong Li <jingsongl...@gmail.com> > > >>>>> 于2023年2月23日周四 > > >>>>>>>>>> 12:26写道: > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> Hi Ran, > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> I mean we can just use > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>> > > >>> TableEnvironment.getCatalog(getCurrentCatalog).get().listDatabases(). > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> We don't need to provide new apis just for > > >>>>> utils. > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> Best, > > >>>>>>>>>>>>>>>>>>> Jingsong > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> On Thu, Feb 23, 2023 at 12:11 PM Ran Tao < > > >>>>>>>>>>>>> chucheng...@gmail.com> > > >>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> Hi Jingsong, thanks. > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> The implementation of these statements in > > >>>>>>>>>>>>> TableEnvironmentImpl > > >>>>>>>>>>>>>> is > > >>>>>>>>>>>>>>>>>> called > > >>>>>>>>>>>>>>>>>>>> through the catalog api. > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> but it does support some new override > > >>>> methods > > >>>>> on > > >>>>>>> the > > >>>>>>>>>>>> catalog > > >>>>>>>>>>>>>> api > > >>>>>>>>>>>>>>>> side, > > >>>>>>>>>>>>>>>>>>> and > > >>>>>>>>>>>>>>>>>>>> I will update it later. Thank you. > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> e.g. > > >>>>>>>>>>>>>>>>>>>> TableEnvironmentImpl > > >>>>>>>>>>>>>>>>>>>> @Override > > >>>>>>>>>>>>>>>>>>>> public String[] listDatabases() { > > >>>>>>>>>>>>>>>>>>>> return catalogManager > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>> .getCatalog(catalogManager.getCurrentCatalog()) > > >>>>>>>>>>>>>>>>>>>> .get() > > >>>>>>>>>>>>>>>>>>>> .listDatabases() > > >>>>>>>>>>>>>>>>>>>> .toArray(new String[0]); > > >>>>>>>>>>>>>>>>>>>> } > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> Best Regards, > > >>>>>>>>>>>>>>>>>>>> Ran Tao > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> Jingsong Li <jingsongl...@gmail.com> > > >>>>>>> 于2023年2月23日周四 > > >>>>>>>>>>>> 11:47写道: > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> Thanks for the proposal. > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> +1 for the proposal. > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> I am confused about "Proposed > > >>>>> TableEnvironment > > >>>>>>> SQL > > >>>>>>>>>> API > > >>>>>>>>>>>>>>> Changes", > > >>>>>>>>>>>>>>>> can > > >>>>>>>>>>>>>>>>>>>>> we just use catalog api for this > > >>>>> requirement? > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> Best, > > >>>>>>>>>>>>>>>>>>>>> Jingsong > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> On Thu, Feb 23, 2023 at 10:48 AM Jacky > > >>>> Lau < > > >>>>>>>>>>>>>>> liuyong...@gmail.com > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> Hi Ran: > > >>>>>>>>>>>>>>>>>>>>>> Thanks for driving the FLIP. the > > >>> google > > >>>>> doc > > >>>>>>>> looks > > >>>>>>>>>>>> really > > >>>>>>>>>>>>>>> good. > > >>>>>>>>>>>>>>>> it > > >>>>>>>>>>>>>>>>>> is > > >>>>>>>>>>>>>>>>>>>>>> important to improve user interactive > > >>>>>>>> experience. > > >>>>>>>>>> +1 > > >>>>>>>>>>> to > > >>>>>>>>>>>>>>> support > > >>>>>>>>>>>>>>>>>> this > > >>>>>>>>>>>>>>>>>>>>>> feature. > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> Jing Ge <j...@ververica.com.invalid> > > >>>>>>>> 于2023年2月23日周四 > > >>>>>>>>>>>>>> 00:51写道: > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> Hi Ran, > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> Thanks for driving the FLIP. It > > >>> looks > > >>>>>>> overall > > >>>>>>>>>>> good. > > >>>>>>>>>>>>>> Would > > >>>>>>>>>>>>>>>> you > > >>>>>>>>>>>>>>>>>>> like to > > >>>>>>>>>>>>>>>>>>>>> add > > >>>>>>>>>>>>>>>>>>>>>>> a description of useLike and > > >>> notLike? > > >>>> I > > >>>>>>> guess > > >>>>>>>>>>> useLike > > >>>>>>>>>>>>>> true > > >>>>>>>>>>>>>>>> is for > > >>>>>>>>>>>>>>>>>>>>> "LIKE" > > >>>>>>>>>>>>>>>>>>>>>>> and notLike true is for "NOT LIKE" > > >>>> but I > > >>>>>> am > > >>>>>>>> not > > >>>>>>>>>>> sure > > >>>>>>>>>>>>> if I > > >>>>>>>>>>>>>>>>>>> understood it > > >>>>>>>>>>>>>>>>>>>>>>> correctly. Furthermore, does it make > > >>>>> sense > > >>>>>>> to > > >>>>>>>>>>> support > > >>>>>>>>>>>>>>> "ILIKE" > > >>>>>>>>>>>>>>>>>> too? > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> Best regards, > > >>>>>>>>>>>>>>>>>>>>>>> Jing > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> On Wed, Feb 22, 2023 at 1:17 PM Ran > > >>>> Tao > > >>>>> < > > >>>>>>>>>>>>>>>> chucheng...@gmail.com> > > >>>>>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> Currently flink sql auxiliary > > >>>>> statements > > >>>>>>> has > > >>>>>>>>>>>>> supported > > >>>>>>>>>>>>>>> some > > >>>>>>>>>>>>>>>>>> good > > >>>>>>>>>>>>>>>>>>>>> features > > >>>>>>>>>>>>>>>>>>>>>>>> such as catalog/databases/table > > >>>>> support. > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> But these features are not very > > >>>>> complete > > >>>>>>>>>> compared > > >>>>>>>>>>>>> with > > >>>>>>>>>>>>>>>> other > > >>>>>>>>>>>>>>>>>>> popular > > >>>>>>>>>>>>>>>>>>>>>>>> engines such as spark, presto, > > >>> hive > > >>>>> and > > >>>>>>>>>>> commercial > > >>>>>>>>>>>>>>> engines > > >>>>>>>>>>>>>>>> such > > >>>>>>>>>>>>>>>>>>> as > > >>>>>>>>>>>>>>>>>>>>>>>> snowflake. > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> For example, many engines support > > >>>> show > > >>>>>>>>>> operation > > >>>>>>>>>>>> with > > >>>>>>>>>>>>>>>> filtering > > >>>>>>>>>>>>>>>>>>>>> except > > >>>>>>>>>>>>>>>>>>>>>>>> flink, and support describe other > > >>>>>>>> object(flink > > >>>>>>>>>>> only > > >>>>>>>>>>>>>>> support > > >>>>>>>>>>>>>>>>>>> describe > > >>>>>>>>>>>>>>>>>>>>>>>> table). > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> I wonder can we add these useful > > >>>>>> features > > >>>>>>>> for > > >>>>>>>>>>>> flink? > > >>>>>>>>>>>>>>>>>>>>>>>> You can find details in this > > >>> doc.[1] > > >>>>> or > > >>>>>>>>>> FLIP.[2] > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> Also, please let me know if there > > >>>> is a > > >>>>>>>> mistake. > > >>>>>>>>>>>>> Looking > > >>>>>>>>>>>>>>>> forward > > >>>>>>>>>>>>>>>>>>> to > > >>>>>>>>>>>>>>>>>>>>> your > > >>>>>>>>>>>>>>>>>>>>>>>> reply. > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> [1] > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>> > > >>>>>>> > > >>>>>> > > >>>>> > > >>>> > > >>> > > > https://docs.google.com/document/d/1hAiOfPx14VTBTOlpyxG7FA2mB1k5M31VnKYad2XpJ1I/ > > >>>>>>>>>>>>>>>>>>>>>>>> [2] > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>> > > >>>>>>> > > >>>>>> > > >>>>> > > >>>> > > >>> > > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-297%3A+Improve+Auxiliary+Sql+Statements > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> Best Regards, > > >>>>>>>>>>>>>>>>>>>>>>>> Ran Tao > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> -- > > >>>>>>>>>>> Best regards, > > >>>>>>>>>>> Sergey > > >>>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> -- > > >>>>>>>>> Best regards, > > >>>>>>>>> Sergey > > >>>>>>>> > > >>>>>>> > > >>>>>> > > >>>>> > > >>>> > > >>> > > >>> > > >>> -- > > >>> Best regards, > > >>> Sergey > > >>> > > > > > > > > -- Best regards, Sergey