Hi Kui Yuan,

Thanks for the +1, and for surfacing the conversion step explicitly. You
are right: even with this FLIP, the conversion is a one-time
stop-and-pick-offset for the existing writer. The win is that everything
after that point stays in the catalog and evolves through the standard MT
path.

I will kick off the [VOTE] thread shortly.

Cheers,
Ramin

On Fri, May 29, 2026 at 3:55 AM Kui Yuan <[email protected]> wrote:

> Hi, Ramin
>
> Thanks for your reply.
>
> Going back to your example — if there is an existing CatalogTable
> orders_summary with a corresponding streaming job writing into it,
> converting it to a CatalogMaterializedTable would still require
> stopping the streaming job first and choosing an appropriate starting
> consumption offset during the conversion. But this is a one-time step.
>
> As Materialized Table capabilities continue to mature, we expect users
> to migrate more use cases onto MT. Supporting the conversion from
> CatalogTable to MaterializedTable will make that migration
> considerably smoother for users. So I agree with your proposal.
>
> +1 from me.
>
> Best,
> Kui.Yuan
>
> Ramin Gharib <[email protected]> 于2026年5月26日周二 23:29写道:
> >
> > Hi Kui Yuan,
> >
> > Thanks for the questions. I added Section 4 "Use Cases" to the FLIP
> > covering both points. Short answers below; full walkthrough in the FLIP.
> >
> > 1. Typical scenario: a Flink user maintains a regular table populated by
> > CTAS, e.g.
> >        CREATE TABLE orders_summary AS
> >            SELECT ... FROM orders;
> >
> > In streaming this spawns a long-running statement writing into
> > `orders_summary`. Adding a column today is a multi-step, non-atomic
> chore:
> > find the writer (catalog has no link), savepoint-stop it, ALTER the
> schema,
> > resubmit the INSERT with manual offset handling, roll back by hand on
> > failure.
> > With this FLIP, the same change is one DDL:
> >
> >        CREATE OR ALTER MATERIALIZED TABLE orders_summary
> >          [START_MODE=RESUME_OR_FROM_BEGINNING]
> >          AS SELECT ..., price FROM orders;
> >
> > Defining query becomes part of the catalog object. Schema, query, and
> > refresh evolve together through the existing ALTER MT path (FLIP-492,
> > FLIP-557). See Section 4.1 for the full step-by-step.
> >
> > 2. Reverse direction (MT to Table) intentionally out of scope. Two
> reasons:
> >
> > First, the use case is asymmetric. We expect users to move toward MTs as
> > capabilities mature, not back. Conversion is also gated behind an
> explicit
> > opt-in flag, so users don't slide into MT by accident.
> >
> > Second, the MT lifecycle already gives users the escape hatch a downgrade
> > would: `ALTER MATERIALIZED TABLE ... SUSPEND` stops the managed refresh
> > while preserving the catalog object, schema, and storage, and lets users
> > write to it with plain `INSERT INTO`. See Section 4.2.
> >
> > If a real use case for a true MT-to-Table conversion emerges, it is a
> > natural follow-up FLIP.
> >
> > Cheers,
> > Ramin
> >
> > On Mon, May 25, 2026 at 10:02 AM Kui Yuan <[email protected]> wrote:
> >
> > > Hi Ramin,
> > >
> > > Thank you for for driving this topic.
> > >
> > > I have a couple of questions about this proposal:
> > > 1. Could we elaborate a bit more on when users would typically need
> this
> > > feature?  It will be helpful to have a few concrete scenarios
> illustrating.
> > > 2. Since the proposal supports converting a CatalogTable to a
> > > CatalogMaterializedTable, should we also consider the reverse
> direction?
> > >
> > > I'd appreciate your thoughts on this.
> > >
> > > Kui.Yuan
> > >
> > > Ramin Gharib <[email protected]> 于2026年5月13日周三 18:57写道:
> > >
> > > > Hi everyone,
> > > >
> > > > I'd like to start a discussion on FLIP-578: In-place Table to
> > > Materialized
> > > > Table conversion. [1]
> > > > Flink's catalog DDL has no way to change a table's kind. Converting a
> > > > regular CREATE TABLE to a materialized table today requires creating
> a
> > > new
> > > > MT under a different name, repointing downstream consumers, and
> dropping
> > > > the old one — breaking references, doubling storage during cutover,
> and
> > > > offering no atomic rename.
> > > >
> > > > The FLIP proposes to allow CREATE OR ALTER MATERIALIZED TABLE
> > > > <existing_table> AS <query> against an existing regular table,
> converting
> > > > it in place. Identity and storage are preserved, and the conversion
> > > > surfaces as a distinct Operation subtype.
> > > >
> > > > Highlights:
> > > > 1. Gated by a new opt-in config option,
> > > > table.materialized-table.conversion-from-table.enabled (default
> false).
> > > > Existing workflows are unchanged.
> > > > 2. A new Catalog method convertTableToMaterializedTable(...) is added
> > > with
> > > > a default that throws UnsupportedOperationException, so existing
> catalogs
> > > > remain source- and binary-compatible.
> > > > 3. Validation reuses the existing ALTER MATERIALIZED TABLE machinery
> > > > (schema reconciliation, options merge, freshness / refresh-mode). The
> > > > CREATE OR ALTER keyword (FLIP-546 [2]) is idempotent and inherits
> > > FLIP-492
> > > > query evolution for free.
> > > >
> > > > Looking forward to your feedback.
> > > >
> > > > Best,
> > > > Ramin Gharib [1]
> > > >
> > > >
> > >
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-578%3A+In-place+Table+to+Materialized+Table+conversion
> > > > [2]
> > > >
> > > >
> > >
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-546%3A+Introduce+CREATE+OR+ALTER+for+Materialized+Tables
> > > >
> > >
>

Reply via email to