Hi Kurt, Currently, there is still a long time to go from flink 2.0. Considering that the flink-table is one of the most active modules in the current flink project, each version has a number of changes and features added. I think that refactoring faster will reduce subsequent complexity and workload. And this may be a gradual and long process. We should be able to regard it as a "technical debt", and if it does not change it, it will also affect the decision-making of other issues.
Thanks, vino. Kurt Young <ykt...@gmail.com> 于2018年11月27日周二 下午7:34写道: > Hi Timo, > > Thanks for writing up the document. I'm +1 for reorganizing the module > structure and make table scala free. But I have > a little concern abount the timing. Is it more appropriate to get this done > when Flink decide to bump to next big version, like 2.x. > It's true you can keep all the class's package path as it is, and will not > introduce API change. But if some company are developing their own > Flink, and sync with community version by rebasing, may face a lot of > conflicts. Although you can avoid conflicts by always moving source codes > between packages, but I assume you still need to delete the original scala > file and add a new java file when you want to change program language. > > Best, > Kurt > > > On Tue, Nov 27, 2018 at 5:57 PM Timo Walther <twal...@apache.org> wrote: > > > Hi Hequn, > > > > thanks for your feedback. Yes, migrating the test cases is another issue > > that is not represented in the document but should naturally go along > > with the migration. > > > > I agree that we should migrate the main API classes quickly within this > > 1.8 release after the module split has been performed. Help here is > > highly appreciated! > > > > I forgot that Java supports static methods in interfaces now, but > > actually I don't like the design of calling `TableEnvironment.get(env)`. > > Because people often use `TableEnvironment tEnd = > > TableEnvironment.get(env)` and then wonder why there is no > > `toAppendStream` or `toDataSet` because they are using the base class. > > However, things like that can be discussed in the corresponding issue > > when it comes to implementation. > > > > @Vino: I think your work fits nicely to these efforts. > > > > @everyone: I will wait for more feedback until end of this week. Then I > > will convert the design document into a FLIP and open subtasks in Jira, > > if there are no objections? > > > > Regards, > > Timo > > > > Am 24.11.18 um 13:45 schrieb vino yang: > > > Hi hequn, > > > > > > I am very glad to hear that you are interested in this work. > > > As we all know, this process involves a lot. > > > Currently, the migration work has begun. I started with the > > > Kafka connector's dependency on flink-table and moved the > > > related dependencies to flink-table-common. > > > This work is tracked by FLINK-9461. [1] > > > I don't know if it will conflict with what you expect to do, but from > the > > > impact I have observed, > > > it will involve many classes that are currently in flink-table. > > > > > > *Just a statement to prevent unnecessary conflicts.* > > > > > > Thanks, vino. > > > > > > [1]: https://issues.apache.org/jira/browse/FLINK-9461 > > > > > > Hequn Cheng <chenghe...@gmail.com> 于2018年11月24日周六 下午7:20写道: > > > > > >> Hi Timo, > > >> > > >> Thanks for the effort and writing up this document. I like the idea to > > make > > >> flink-table scala free, so +1 for the proposal! > > >> > > >> It's good to make Java the first-class citizen. For a long time, we > have > > >> neglected java so that many features in Table are missed in Java Test > > >> cases, such as this one[1] I found recently. And I think we may also > > need > > >> to migrate our test cases, i.e, add java tests. > > >> > > >> This definitely is a big change and will break API compatible. In > order > > to > > >> bring a smaller impact on users, I think we should go fast when we > > migrate > > >> APIs targeted to users. It's better to introduce the user sensitive > > changes > > >> within a release. However, it may be not that easy. I can help to > > >> contribute. > > >> > > >> Separation of interface and implementation is a good idea. This may > > >> introduce a minimum of dependencies or even no dependencies. I saw > your > > >> reply in the google doc. Java8 has already supported static method for > > >> interfaces, I think we can make use of it? > > >> > > >> Best, > > >> Hequn > > >> > > >> [1] https://issues.apache.org/jira/browse/FLINK-11001 > > >> > > >> > > >> On Fri, Nov 23, 2018 at 5:36 PM Timo Walther <twal...@apache.org> > > wrote: > > >> > > >>> Hi everyone, > > >>> > > >>> thanks for the great feedback so far. I updated the document with the > > >>> input I got so far > > >>> > > >>> @Fabian: I moved the porting of flink-table-runtime classes up in the > > >> list. > > >>> @Xiaowei: Could you elaborate what "interface only" means to you? Do > > you > > >>> mean a module containing pure Java `interface`s? Or is the validation > > >>> logic also part of the API module? Are 50+ expression classes part of > > >>> the API interface or already too implementation-specific? > > >>> > > >>> @Xuefu: I extended the document by almost a page to clarify when we > > >>> should develop in Scala and when in Java. As Piotr said, every new > > Scala > > >>> line is instant technical debt. > > >>> > > >>> Thanks, > > >>> Timo > > >>> > > >>> > > >>> Am 23.11.18 um 10:29 schrieb Piotr Nowojski: > > >>>> Hi Timo, > > >>>> > > >>>> Thanks for writing this down +1 from my side :) > > >>>> > > >>>>> I'm wondering that whether we can have rule in the interim when > Java > > >>> and Scala coexist that dependency can only be one-way. I found that > in > > >> the > > >>> current code base there are cases where a Scala class extends Java > and > > >> vise > > >>> versa. This is quite painful. I'm thinking if we could say that > > extension > > >>> can only be from Java to Scala, which will help the situation. > However, > > >> I'm > > >>> not sure if this is practical. > > >>>> Xuefu: I’m also not sure what’s the best approach here, probably we > > >> will > > >>> have to work it out as we go. One thing to consider is that from now > > on, > > >>> every single new code line written in Scala anywhere in Flink-table > > >> (except > > >>> of Flink-table-api-scala) is an instant technological debt. From this > > >>> perspective I would be in favour of tolerating quite big > inchonvieneces > > >>> just to avoid any new Scala code. > > >>>> Piotrek > > >>>> > > >>>>> On 23 Nov 2018, at 03:25, Zhang, Xuefu <xuef...@alibaba-inc.com> > > >> wrote: > > >>>>> Hi Timo, > > >>>>> > > >>>>> Thanks for the effort and the Google writeup. During our external > > >>> catalog rework, we found much confusion between Java and Scala, and > > this > > >>> Scala-free roadmap should greatly mitigate that. > > >>>>> I'm wondering that whether we can have rule in the interim when > Java > > >>> and Scala coexist that dependency can only be one-way. I found that > in > > >> the > > >>> current code base there are cases where a Scala class extends Java > and > > >> vise > > >>> versa. This is quite painful. I'm thinking if we could say that > > extension > > >>> can only be from Java to Scala, which will help the situation. > However, > > >> I'm > > >>> not sure if this is practical. > > >>>>> Thanks, > > >>>>> Xuefu > > >>>>> > > >>>>> > > >>>>> ------------------------------------------------------------------ > > >>>>> Sender:jincheng sun <sunjincheng...@gmail.com> > > >>>>> Sent at:2018 Nov 23 (Fri) 09:49 > > >>>>> Recipient:dev <dev@flink.apache.org> > > >>>>> Subject:Re: [DISCUSS] Long-term goal of making flink-table > Scala-free > > >>>>> > > >>>>> Hi Timo, > > >>>>> Thanks for initiating this great discussion. > > >>>>> > > >>>>> Currently when using SQL/TableAPI should include many dependence. > In > > >>>>> particular, it is not necessary to introduce the specific > > >> implementation > > >>>>> dependencies which users do not care about. So I am glad to see > your > > >>>>> proposal, and hope when we consider splitting the API interface > into > > a > > >>>>> separate module, so that the user can introduce minimum of > > >> dependencies. > > >>>>> So, +1 to [separation of interface and implementation; e.g. > `Table` & > > >>>>> `TableImpl`] which you mentioned in the google doc. > > >>>>> Best, > > >>>>> Jincheng > > >>>>> > > >>>>> Xiaowei Jiang <xiaow...@gmail.com> 于2018年11月22日周四 下午10:50写道: > > >>>>> > > >>>>>> Hi Timo, thanks for driving this! I think that this is a nice > thing > > >> to > > >>> do. > > >>>>>> While we are doing this, can we also keep in mind that we want to > > >>>>>> eventually have a TableAPI interface only module which users can > > take > > >>>>>> dependency on, but without including any implementation details? > > >>>>>> > > >>>>>> Xiaowei > > >>>>>> > > >>>>>> On Thu, Nov 22, 2018 at 6:37 PM Fabian Hueske <fhue...@gmail.com> > > >>> wrote: > > >>>>>>> Hi Timo, > > >>>>>>> > > >>>>>>> Thanks for writing up this document. > > >>>>>>> I like the new structure and agree to prioritize the porting of > the > > >>>>>>> flink-table-common classes. > > >>>>>>> Since flink-table-runtime is (or should be) independent of the > API > > >> and > > >>>>>>> planner modules, we could start porting these classes once the > code > > >> is > > >>>>>>> split into the new module structure. > > >>>>>>> The benefits of a Scala-free flink-table-runtime would be a > > >> Scala-free > > >>>>>>> execution Jar. > > >>>>>>> > > >>>>>>> Best, Fabian > > >>>>>>> > > >>>>>>> > > >>>>>>> Am Do., 22. Nov. 2018 um 10:54 Uhr schrieb Timo Walther < > > >>>>>>> twal...@apache.org > > >>>>>>>> : > > >>>>>>>> Hi everyone, > > >>>>>>>> > > >>>>>>>> I would like to continue this discussion thread and convert the > > >>> outcome > > >>>>>>>> into a FLIP such that users and contributors know what to expect > > in > > >>> the > > >>>>>>>> upcoming releases. > > >>>>>>>> > > >>>>>>>> I created a design document [1] that clarifies our motivation > why > > >> we > > >>>>>>>> want to do this, how a Maven module structure could look like, > and > > >> a > > >>>>>>>> suggestion for a migration plan. > > >>>>>>>> > > >>>>>>>> It would be great to start with the efforts for the 1.8 release > > >> such > > >>>>>>>> that new features can be developed in Java and major > refactorings > > >>> such > > >>>>>>>> as improvements to the connectors and external catalog support > are > > >>> not > > >>>>>>>> blocked. > > >>>>>>>> > > >>>>>>>> Please let me know what you think. > > >>>>>>>> > > >>>>>>>> Regards, > > >>>>>>>> Timo > > >>>>>>>> > > >>>>>>>> [1] > > >>>>>>>> > > >>>>>>>> > > >> > > > https://docs.google.com/document/d/1PPo6goW7tOwxmpFuvLSjFnx7BF8IVz0w3dcmPPyqvoY/edit?usp=sharing > > >>>>>>>> Am 02.07.18 um 17:08 schrieb Fabian Hueske: > > >>>>>>>>> Hi Piotr, > > >>>>>>>>> > > >>>>>>>>> thanks for bumping this thread and thanks for Xingcan for the > > >>>>>> comments. > > >>>>>>>>> I think the first step would be to separate the flink-table > > module > > >>>>>> into > > >>>>>>>>> multiple sub modules. These could be: > > >>>>>>>>> > > >>>>>>>>> - flink-table-api: All API facing classes. Can be later divided > > >>>>>> further > > >>>>>>>>> into Java/Scala Table API/SQL > > >>>>>>>>> - flink-table-planning: involves all planning (basically > > >> everything > > >>>>>> we > > >>>>>>> do > > >>>>>>>>> with Calcite) > > >>>>>>>>> - flink-table-runtime: the runtime code > > >>>>>>>>> > > >>>>>>>>> IMO, a realistic mid-term goal is to have the runtime module > and > > >>>>>>> certain > > >>>>>>>>> parts of the planning module ported to Java. > > >>>>>>>>> The api module will be much harder to port because of several > > >>>>>>>> dependencies > > >>>>>>>>> to Scala core classes (the parser framework, tree iterations, > > >> etc.). > > >>>>>>> I'm > > >>>>>>>>> not saying we should not port this to Java, but it is not clear > > to > > >>> me > > >>>>>>>> (yet) > > >>>>>>>>> how to do it. > > >>>>>>>>> > > >>>>>>>>> I think flink-table-runtime should not be too hard to port. The > > >> code > > >>>>>>> does > > >>>>>>>>> not make use of many Scala features, i.e., it's writing very > > >>>>>> Java-like. > > >>>>>>>>> Also, there are not many dependencies and operators can be > > >>>>>> individually > > >>>>>>>>> ported step-by-step. > > >>>>>>>>> For flink-table-planning, we can have certain packages that we > > >> port > > >>>>>> to > > >>>>>>>> Java > > >>>>>>>>> like planning rules or plan nodes. The related classes mostly > > >> extend > > >>>>>>>>> Calcite's Java interfaces/classes and would be natural choices > > for > > >>>>>>> being > > >>>>>>>>> ported. The code generation classes will require more effort to > > >>> port. > > >>>>>>>> There > > >>>>>>>>> are also some dependencies in planning on the api module that > we > > >>>>>> would > > >>>>>>>> need > > >>>>>>>>> to resolve somehow. > > >>>>>>>>> > > >>>>>>>>> For SQL most work when adding new features is done in the > > planning > > >>>>>> and > > >>>>>>>>> runtime modules. So, this separation should already reduce > > >>>>>>> "technological > > >>>>>>>>> dept" quite a lot. > > >>>>>>>>> The Table API depends much more on Scala than SQL. > > >>>>>>>>> > > >>>>>>>>> Cheers, Fabian > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> 2018-07-02 16:26 GMT+02:00 Xingcan Cui <xingc...@gmail.com>: > > >>>>>>>>> > > >>>>>>>>>> Hi all, > > >>>>>>>>>> > > >>>>>>>>>> I also think about this problem these days and here are my > > >>> thoughts. > > >>>>>>>>>> 1) We must admit that it’s really a tough task to interoperate > > >> with > > >>>>>>> Java > > >>>>>>>>>> and Scala. E.g., they have different collection types (Scala > > >>>>>>> collections > > >>>>>>>>>> v.s. java.util.*) and in Java, it's hard to implement a method > > >>> which > > >>>>>>>> takes > > >>>>>>>>>> Scala functions as parameters. Considering the major part of > the > > >>>>>> code > > >>>>>>>> base > > >>>>>>>>>> is implemented in Java, +1 for this goal from a long-term > view. > > >>>>>>>>>> > > >>>>>>>>>> 2) The ideal solution would be to just expose a Scala API and > > >> make > > >>>>>> all > > >>>>>>>> the > > >>>>>>>>>> other parts Scala-free. But I am not sure if it could be > > achieved > > >>>>>> even > > >>>>>>>> in a > > >>>>>>>>>> long-term. Thus as Timo suggested, keep the Scala codes in > > >>>>>>>>>> "flink-table-core" would be a compromise solution. > > >>>>>>>>>> > > >>>>>>>>>> 3) If the community makes the final decision, maybe any new > > >>> features > > >>>>>>>>>> should be added in Java (regardless of the modules), in order > to > > >>>>>>> prevent > > >>>>>>>>>> the Scala codes from growing. > > >>>>>>>>>> > > >>>>>>>>>> Best, > > >>>>>>>>>> Xingcan > > >>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>>>>> On Jul 2, 2018, at 9:30 PM, Piotr Nowojski < > > >>>>>> pi...@data-artisans.com> > > >>>>>>>>>> wrote: > > >>>>>>>>>>> Bumping the topic. > > >>>>>>>>>>> > > >>>>>>>>>>> If we want to do this, the sooner we decide, the less code we > > >> will > > >>>>>>> have > > >>>>>>>>>> to rewrite. I have some objections/counter proposals to > Fabian's > > >>>>>>>> proposal > > >>>>>>>>>> of doing it module wise and one module at a time. > > >>>>>>>>>>> First, I do not see a problem of having java/scala code even > > >>> within > > >>>>>>> one > > >>>>>>>>>> module, especially not if there are clean boundaries. Like we > > >> could > > >>>>>>> have > > >>>>>>>>>> API in Scala and optimizer rules/logical nodes written in Java > > in > > >>>>>> the > > >>>>>>>> same > > >>>>>>>>>> module. However I haven’t previously maintained mixed > scala/java > > >>>>>> code > > >>>>>>>> bases > > >>>>>>>>>> before, so I might be missing something here. > > >>>>>>>>>>> Secondly this whole migration might and most like will take > > >> longer > > >>>>>>> then > > >>>>>>>>>> expected, so that creates a problem for a new code that we > will > > >> be > > >>>>>>>>>> creating. After making a decision to migrate to Java, almost > any > > >>> new > > >>>>>>>> Scala > > >>>>>>>>>> line of code will be immediately a technological debt and we > > will > > >>>>>> have > > >>>>>>>> to > > >>>>>>>>>> rewrite it to Java later. > > >>>>>>>>>>> Thus I would propose first to state our end goal - modules > > >>>>>> structure > > >>>>>>>> and > > >>>>>>>>>> which parts of modules we want to have eventually Scala-free. > > >>>>>> Secondly > > >>>>>>>>>> taking all steps necessary that will allow us to write new > code > > >>>>>>>> complaint > > >>>>>>>>>> with our end goal. Only after that we should/could focus on > > >>>>>>>> incrementally > > >>>>>>>>>> rewriting the old code. Otherwise we could be stuck/blocked > for > > >>>>>> years > > >>>>>>>>>> writing new code in Scala (and increasing technological debt), > > >>>>>> because > > >>>>>>>>>> nobody have found a time to rewrite some non important and not > > >>>>>>> actively > > >>>>>>>>>> developed part of some module. > > >>>>>>>>>>> Piotrek > > >>>>>>>>>>> > > >>>>>>>>>>>> On 14 Jun 2018, at 15:34, Fabian Hueske <fhue...@gmail.com> > > >>>>>> wrote: > > >>>>>>>>>>>> Hi, > > >>>>>>>>>>>> > > >>>>>>>>>>>> In general, I think this is a good effort. However, it won't > > be > > >>>>>> easy > > >>>>>>>>>> and I > > >>>>>>>>>>>> think we have to plan this well. > > >>>>>>>>>>>> I don't like the idea of having the whole code base > fragmented > > >>>>>> into > > >>>>>>>> Java > > >>>>>>>>>>>> and Scala code for too long. > > >>>>>>>>>>>> > > >>>>>>>>>>>> I think we should do this one step at a time and focus on > > >>>>>> migrating > > >>>>>>>> one > > >>>>>>>>>>>> module at a time. > > >>>>>>>>>>>> IMO, the easiest start would be to port the runtime to Java. > > >>>>>>>>>>>> Extracting the API classes into an own module, porting them > to > > >>>>>> Java, > > >>>>>>>> and > > >>>>>>>>>>>> removing the Scala dependency won't be possible without > > >> breaking > > >>>>>> the > > >>>>>>>> API > > >>>>>>>>>>>> since a few classes depend on the Scala Table API. > > >>>>>>>>>>>> > > >>>>>>>>>>>> Best, Fabian > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> 2018-06-14 10:33 GMT+02:00 Till Rohrmann < > > trohrm...@apache.org > > >>> : > > >>>>>>>>>>>>> I think that is a noble and honorable goal and we should > > >> strive > > >>>>>> for > > >>>>>>>> it. > > >>>>>>>>>>>>> This, however, must be an iterative process given the sheer > > >> size > > >>>>>> of > > >>>>>>>> the > > >>>>>>>>>>>>> code base. I like the approach to define common Java > modules > > >>>>>> which > > >>>>>>>> are > > >>>>>>>>>> used > > >>>>>>>>>>>>> by more specific Scala modules and slowly moving classes > from > > >>>>>> Scala > > >>>>>>>> to > > >>>>>>>>>>>>> Java. Thus +1 for the proposal. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> Cheers, > > >>>>>>>>>>>>> Till > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> On Wed, Jun 13, 2018 at 12:01 PM Piotr Nowojski < > > >>>>>>>>>> pi...@data-artisans.com> > > >>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>> > > >>>>>>>>>>>>>> Hi, > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> I do not have an experience with how scala and java > > interacts > > >>>>>> with > > >>>>>>>>>> each > > >>>>>>>>>>>>>> other, so I can not fully validate your proposal, but > > >> generally > > >>>>>>>>>> speaking > > >>>>>>>>>>>>> +1 > > >>>>>>>>>>>>>> from me. > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Does it also mean, that we should slowly migrate > > >>>>>>> `flink-table-core` > > >>>>>>>> to > > >>>>>>>>>>>>>> Java? How would you envision it? It would be nice to be > able > > >> to > > >>>>>>> add > > >>>>>>>>>> new > > >>>>>>>>>>>>>> classes/features written in Java and so that they can > > coexist > > >>>>>> with > > >>>>>>>> old > > >>>>>>>>>>>>>> Scala code until we gradually switch from Scala to Java. > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Piotrek > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> On 13 Jun 2018, at 11:32, Timo Walther < > twal...@apache.org > > > > > >>>>>>> wrote: > > >>>>>>>>>>>>>>> Hi everyone, > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> as you all know, currently the Table & SQL API is > > >> implemented > > >>>>>> in > > >>>>>>>>>> Scala. > > >>>>>>>>>>>>>> This decision was made a long-time ago when the initital > > code > > >>>>>> base > > >>>>>>>> was > > >>>>>>>>>>>>>> created as part of a master's thesis. The community kept > > >> Scala > > >>>>>>>>>> because of > > >>>>>>>>>>>>>> the nice language features that enable a fluent Table API > > >> like > > >>>>>>>>>>>>>> table.select('field.trim()) and because Scala allows for > > >> quick > > >>>>>>>>>>>>> prototyping > > >>>>>>>>>>>>>> (e.g. multi-line comments for code generation). The > > >> committers > > >>>>>>>>>> enforced > > >>>>>>>>>>>>> not > > >>>>>>>>>>>>>> splitting the code-base into two programming languages. > > >>>>>>>>>>>>>>> However, nowadays the flink-table module more and more > > >> becomes > > >>>>>> an > > >>>>>>>>>>>>>> important part in the Flink ecosystem. Connectors, > formats, > > >> and > > >>>>>>> SQL > > >>>>>>>>>>>>> client > > >>>>>>>>>>>>>> are actually implemented in Java but need to interoperate > > >> with > > >>>>>>>>>>>>> flink-table > > >>>>>>>>>>>>>> which makes these modules dependent on Scala. As mentioned > > in > > >>> an > > >>>>>>>>>> earlier > > >>>>>>>>>>>>>> mail thread, using Scala for API classes also exposes > member > > >>>>>>>> variables > > >>>>>>>>>>>>> and > > >>>>>>>>>>>>>> methods in Java that should not be exposed to users [1]. > > Java > > >>> is > > >>>>>>>> still > > >>>>>>>>>>>>> the > > >>>>>>>>>>>>>> most important API language and right now we treat it as a > > >>>>>>>>>> second-class > > >>>>>>>>>>>>>> citizen. I just noticed that you even need to add Scala if > > >> you > > >>>>>>> just > > >>>>>>>>>> want > > >>>>>>>>>>>>> to > > >>>>>>>>>>>>>> implement a ScalarFunction because of method clashes > between > > >>>>>>> `public > > >>>>>>>>>>>>> String > > >>>>>>>>>>>>>> toString()` and `public scala.Predef.String toString()`. > > >>>>>>>>>>>>>>> Given the size of the current code base, reimplementing > the > > >>>>>>> entire > > >>>>>>>>>>>>>> flink-table code in Java is a goal that we might never > > reach. > > >>>>>>>>>> However, we > > >>>>>>>>>>>>>> should at least treat the symptoms and have this as a > > >> long-term > > >>>>>>> goal > > >>>>>>>>>> in > > >>>>>>>>>>>>>> mind. My suggestion would be to convert user-facing and > > >> runtime > > >>>>>>>>>> classes > > >>>>>>>>>>>>> and > > >>>>>>>>>>>>>> split the code base into multiple modules: > > >>>>>>>>>>>>>>>> flink-table-java {depends on flink-table-core} > > >>>>>>>>>>>>>>> Implemented in Java. Java users can use this. This would > > >>>>>> require > > >>>>>>> to > > >>>>>>>>>>>>>> convert classes like TableEnvironment, Table. > > >>>>>>>>>>>>>>>> flink-table-scala {depends on flink-table-core} > > >>>>>>>>>>>>>>> Implemented in Scala. Scala users can use this. > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> flink-table-common > > >>>>>>>>>>>>>>> Implemented in Java. Connectors, formats, and UDFs can > use > > >>>>>> this. > > >>>>>>> It > > >>>>>>>>>>>>>> contains interface classes such as descriptors, table > sink, > > >>>>>> table > > >>>>>>>>>> source. > > >>>>>>>>>>>>>>>> flink-table-core {depends on flink-table-common and > > >>>>>>>>>>>>>> flink-table-runtime} > > >>>>>>>>>>>>>>> Implemented in Scala. Contains the current main code > base. > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> flink-table-runtime > > >>>>>>>>>>>>>>> Implemented in Java. This would require to convert > classes > > >> in > > >>>>>>>>>>>>>> o.a.f.table.runtime but would improve the runtime > > >> potentially. > > >>>>>>>>>>>>>>> What do you think? > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> Regards, > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> Timo > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> [1] > > >>>>>>>>>>>>>> http://apache-flink-mailing-list-archive.1008284.n3. > > >>>>>>>>>>>>> nabble.com/DISCUSS-Convert-main-Table-API-classes-into- > > >>>>>>>>>> traits-tp21335.html > > >>> > > > > >