Mika Naylor created FLINK-41468:
-----------------------------------

             Summary: Converting table to materialized table with different 
partition keys makes existing data unreadable
                 Key: FLINK-41468
                 URL: https://issues.apache.org/jira/browse/FLINK-41468
             Project: Flink
          Issue Type: Bug
          Components: Table SQL / Gateway
    Affects Versions: 2.4.0
            Reporter: Mika Naylor
             Fix For: 2.4.0


CREATE OR ALTER MATERIALIZED TABLE can turn a regular table into an MT, which 
keeps the old table's data, but its partition keys come only from the statement 
and nothing ensures that they match the old table's partition keys.

If theyre different, the existing data no longer match the MT's partitioning. 
The conversion succeeds without a warning, but afterwards:
 * If the partition key changes, batch reads of the MT fail.
 * If an unpartitioned table is converted with PARTITION BY, batch reads fail.
 * If a partitioned table is converted without PARTITIONED BY, reads work, but 
rows written before the conversion lose their parition column value (it becomes 
NULL).

FLIP-578 says that partition keys are inherited from the existing table, unless 
the statement overrides them, but the current impl does not inherit them.
h4. Reproduction Steps

On 2.4 with table.materialized-table.conversion-from-table.enabled: true:
 
{code:java}
CREATE CATALOG mt_cat WITH ('type' = 'test-filesystem', 'path' = 
'/tmp/flip578/catalog', 'default-database' = 'mydb');USE CATALOG mt_cat;CREATE 
TABLE orders (user_id BIGINT NOT NULL, amount BIGINT, ds STRING) WITH ('format' 
= 'json');INSERT INTO orders VALUES (1, 30, '2026-11-02');-- A regular table 
partitioned by ds, with one row
CREATE TABLE p (ds STRING, user_id BIGINT NOT NULL, amount BIGINT)
  PARTITIONED BY (ds) WITH ('format' = 'json');INSERT INTO p VALUES 
('2026-10-31', 100, 500);-- Convert it, partitioned by a different key
CREATE OR ALTER MATERIALIZED TABLE p
  PARTITIONED BY (user_id)
  WITH ('format' = 'json')
  FRESHNESS = INTERVAL '30' SECOND
  AS SELECT ds, user_id, amount FROM orders;SET 'execution.runtime-mode' = 
'batch';
SELECT * FROM p;
-- TableException: Partition keys are: [user_id], incomplete partition spec: 
{ds=2026-10-31}
{code}
h4. Expected Behaviour

After a successful conversion, I would expect data the table held before 
conversion could still be read, and if the conversion can't guarantee that, it 
should be rejected with a clear error.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to