Hi Seth,

Thanks for your comment.

That is perfect then !

If the community agrees to give precedence to the table API connectors over the DataStream connectors as discussed here, all the features are already available then.

I will not need to port my latest additions to table connectors then.

Best

Etienne

On 08/07/2021 17:28, Seth Wiesman wrote:
Hi Etienne,

The `toDataStream` method supports converting to concrete Java types, not
just Row, which can include your Avro specific-records. See example 2:

https://ci.apache.org/projects/flink/flink-docs-master/docs/dev/table/data_stream_api/#examples-for-todatastream

On Thu, Jul 8, 2021 at 5:11 AM Etienne Chauchot <echauc...@apache.org>
wrote:

Hi Timo,

Thanks for your answers, no problem with the delay, I was in vacation
too last week :)

My comments are inline

Best,

Etienne

On 07/07/2021 16:48, Timo Walther wrote:
Hi Etienne,

sorry for the late reply due to my vacation last week.

Regarding: "support of aggregations in batch mode for DataStream API
[...] is there a plan to solve it before the actual drop of DataSet API"

Just to clarify it again: we will not drop the DataSet API any time
soon. So users will have enough time to update their pipelines. There
are a couple of features missing to fully switch to DataStream API in
batch mode. Thanks for opening an issue, this is helpful for us to
gradually remove those barriers. They don't need to have a "Blocker"
priority in JIRA for now.

Ok I thought the drop was sooner, no problem then.


But aggregations is a good example where we should discuss if it would
be easier to simply switch to Table API for that. Table API has a lot
of aggregation optimizations and can work on binary data. Also joins
should be easier in Table API. DataStream API can be a very low-level
API in the near future and most use cases (esp. the batch ones) should
be possible in Table API.

Yes sure. As a matter of fact, my point was to use low level DataStream
API in a benchmark to compare with Table API but I guess it is not a
common user behavior.


Regarding: "Is it needed to port these Avro enhancements to new
DataStream connectors (add a new equivalent of
ParquetColumnarRowInputFormat but for Avro)"

We should definitely not loose functionality. The same functionality
should be present in the new connectors. The questions is rather
whether we need to offer a DataStream API connector or if a Table API
connector would be nicer to use (also nicely integrated with catalogs).

So a user can use a simple CREATE TABLE statement to configure the
connector; an easier abstraction is almost not possible. With
`tableEnv.toDataStream(table)` you can then continue in DataStream API
if there is still a need for it.

Yes I agree, there is no easier connector setup than CREATE TABLE, and
with tableEnv.toDataStream(table) if one would want to stay with
DataStream (in my bench for example) it is still possible. And by the
way the doc for parquet (1) for example only mentions using Table API
connector.

So I guess the table connector would be nicer for the user indeed. But
if we use tableEnv.toDataStream(table), we would be able to produce only
usual types like Row, Tuples or Pojos, we still need to add Avro support
right ?

[1]

https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/connectors/table/formats/parquet/


Regarding: "there are parquet bugs still open on deprecated parquet
connector"

Yes, bugs should still be fixed in 1.13.

OK


Regarading: "I've been doing TPCDS benchmarks with Flink lately"

Great to hear that :-)

And congrats again on blink performances !


Did you also see the recent discussion? A TPC-DS benchmark can further
be improved by providing statistics. Maybe this is helpful to you:


https://lists.apache.org/thread.html/ra383c23f230ab8e7fa16ec64b4f277c267d6358d55cc8a0edc77bb63%40%3Cuser.flink.apache.org%3E

No, I missed that thread, thanks for the pointer, I'll read it and
comment if I have something to add.


I will prepare a blog post shortly.

Good to hear :)


Regards,
Timo



On 06.07.21 15:05, Etienne Chauchot wrote:
Hi all,

Any comments ?

cheers,

Etienne

On 25/06/2021 15:09, Etienne Chauchot wrote:
Hi everyone,

@Timo, my comments are inline for steps 2, 4 and 5, please tell me
what you think.

Best

Etienne


On 23/06/2021 15:27, Chesnay Schepler wrote:
If we want to publicize this plan more shouldn't we have a rough
timeline for when 2.0 is on the table?

On 6/23/2021 2:44 PM, Stephan Ewen wrote:
Thanks for writing this up, this also reflects my understanding.

I think a blog post would be nice, ideally with an explicit call for
feedback so we learn about user concerns.
A blog post has a lot more reach than an ML thread.

Best,
Stephan


On Wed, Jun 23, 2021 at 12:23 PM Timo Walther <twal...@apache.org>
wrote:

Hi everyone,

I'm sending this email to make sure everyone is on the same page
about
slowly deprecating the DataSet API.

There have been a few thoughts mentioned in presentations, offline
discussions, and JIRA issues. However, I have observed that there
are
still some concerns or different opinions on what steps are
necessary to
implement this change.

Let me summarize some of the steps and assumpations and let's have a
discussion about it:

Step 1: Introduce a batch mode for Table API (FLIP-32)
[DONE in 1.9]

Step 2: Introduce a batch mode for DataStream API (FLIP-134)
[DONE in 1.12]

I've been using DataSet API and I tested migrating to DataStream +
batch mode.

I opened this (1) ticket regarding the support of aggregations in
batch mode for DataStream API. It seems that join operation (at
least) does not work in batch mode even though I managed to
implement a join using low level KeyedCoProcessFunction (thanks
Seth, for the pointer !).

=> Should it be considered a blocker ? Is there a plan to solve it
before the actual drop of DataSet API ? Maybe in step 6 ?

[1] https://issues.apache.org/jira/browse/FLINK-22587


Step 3: Soft deprecate DataSet API (FLIP-131)
[DONE in 1.12]

We updated the documentation recently to make this deprecation
even more
visible. There is a dedicated `(Legacy)` label right next to the
menu
item now.

We won't deprecate concrete classes of the API with a @Deprecated
annotation to avoid extensive warnings in logs until then.

Step 4: Drop the legacy SQL connectors and formats (FLINK-14437)
[DONE in 1.14]

We dropped code for ORC, Parque, and HBase formats that were only
used
by DataSet API users. The removed classes had no documentation
and were
not annotated with one of our API stability annotations.

The old functionality should be available through the new sources
and
sinks for Table API and DataStream API. If not, we should bring them
into a shape that they can be a full replacement.

DataSet users are encouraged to either upgrade the API or use Flink
1.13. Users can either just stay at Flink 1.13 or copy only the
format's
code to a newer Flink version. We aim to keep the core interfaces
(i.e.
InputFormat and OutputFormat) stable until the next major version.

We will maintain/allow important contributions to dropped
connectors in
1.13. So 1.13 could be considered as kind of a DataSet API LTS
release.

I added several bug fixes and enhancements (avro support, automatic
schema etc...) to parquet DataSet connector. After discussing with
Jingsong and Arvid, we agreed to merge them to 1.13 in accordance to
the fact that 1.13 is a LTS release receiving maintenance changes as
you mentioned here.

=> Is it needed to port these Avro enhancements to new DataStream
connectors (add a new equivalent of ParquetColumnarRowInputFormat
but for Avro) ? IMHO opinion it is an important feature that the
users will need. So, if I understand the plan correctly, we have
until the release of 2.0 to implement it, right ?

=> Also there are parquet bugs still open on deprecated parquet
connector: https://issues.apache.org/jira/browse/FLINK-21520,
https://issues.apache.org/jira/browse/FLINK-21468, I think that the
same applies, we should fix them on 1.13 right ?

Step 5: Drop the legacy SQL planner (FLINK-14437)
[DONE in 1.14]

This included dropping support of DataSet API with SQL.

That is a major point ! I've been doing TPCDS benchmarks with Flink
lately by coding query3 with a DataSet pipeline, a DataStream
pipeline and a SQL pipeline. What I can tell is that when I migrated
from the legacy SQL planer to blink SQL planner, I got 2 major
improvements:

1. around 25% gain in run times on 1TB input dataset (even if memory
conf was slightly different between runs of the 2 planners)

2. global order support: with legacy planer based on DataSet, only
local partition ordering was supported. As a consequence, a SQL
query with an ORDER BY clause actually produced wrong results. With
blink planner based on DataStream, global order is supported and now
the query results are correct !

=> congrats to everyone involved in these big SQL improvements !

Step 6: Connect both Table and DataStream API in batch mode
(FLINK-20897)
[PLANNED in 1.14]

Step 7: Reach feature parity of Table API/DataStream API with
DataSet API
[PLANNED for 1.14++]

We need to identify blockers when migrating from DataSet API to
Table
API/DataStream API. Here we need to estabilish a good feedback
pipeline
to include DataSet users in the roadmap planning.

Step 7: Drop the Gelly library

No concrete plan yet. Latest would be the next major Flink
version aka
Flink 2.0.

Step 8: Drop DataSet API

Planned for the next major Flink version aka Flink 2.0.


Please let me know if this matches your thoughts. We can also
convert
this into a blog post or mention it in the next release notes.

Regards,
Timo


Reply via email to