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