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

Reply via email to