[ https://issues.apache.org/jira/browse/FLINK-21634?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Yun Gao updated FLINK-21634: ---------------------------- Fix Version/s: 1.16.0 (was: 1.15.0) > ALTER TABLE statement enhancement > --------------------------------- > > Key: FLINK-21634 > URL: https://issues.apache.org/jira/browse/FLINK-21634 > Project: Flink > Issue Type: New Feature > Components: Table SQL / API, Table SQL / Client > Reporter: Jark Wu > Assignee: Jark Wu > Priority: Major > Labels: auto-unassigned, stale-assigned > Fix For: 1.16.0 > > > We already introduced ALTER TABLE statement in FLIP-69 [1], but only support > to rename table name and change table options. One useful feature of ALTER > TABLE statement is modifying schema. This is also heavily required by > integration with data lakes (e.g. iceberg). > Therefore, I propose to support following ALTER TABLE statements (except > {{SET}} and {{{}RENAME TO{}}}, others are all new introduced syntax): > {code:sql} > ALTER TABLE table_name { > ADD { <schema_component> | (<schema_component> [, ...]) } > | MODIFY { <schema_component> | (<schema_component> [, ...]) } > | DROP {column_name | (column_name, column_name, ....) | PRIMARY KEY | > CONSTRAINT constraint_name | WATERMARK} > | RENAME old_column_name TO new_column_name > | RENAME TO new_table_name > | SET (key1=val1, ...) > | RESET (key1, ...) > } > <schema_component>:: > { <column_component> | <constraint_component> | <watermark_component> } > <column_component>:: > column_name <column_definition> [FIRST | AFTER column_name] > <constraint_component>:: > [CONSTRAINT constraint_name] PRIMARY KEY (column_name, ...) NOT ENFORCED > <watermark_component>:: > WATERMARK FOR rowtime_column_name AS watermark_strategy_expression > <column_definition>:: > { <physical_column_definition> | <metadata_column_definition> | > <computed_column_definition> } [COMMENT column_comment] > <physical_column_definition>:: > column_type > <metadata_column_definition>:: > column_type METADATA [ FROM metadata_key ] [ VIRTUAL ] > <computed_column_definition>:: > AS computed_column_expression > {code} > And some examples: > {code:sql} > -- add a new column > ALTER TABLE mytable ADD new_column STRING COMMENT 'new_column docs'; > -- add columns, constraint, and watermark > ALTER TABLE mytable ADD ( > log_ts STRING COMMENT 'log timestamp string' FIRST, > ts AS TO_TIMESTAMP(log_ts) AFTER log_ts, > PRIMARY KEY (id) NOT ENFORCED, > WATERMARK FOR ts AS ts - INTERVAL '3' SECOND > ); > -- modify a column type > ALTER TABLE prod.db.sample MODIFY measurement double COMMENT 'unit is bytes > per second' AFTER `id`; > -- modify definition of column log_ts and ts, primary key, watermark. they > must exist in table schema > ALTER TABLE mytable ADD ( > log_ts STRING COMMENT 'log timestamp string' AFTER `id`, -- reoder > columns > ts AS TO_TIMESTAMP(log_ts) AFTER log_ts, > PRIMARY KEY (id) NOT ENFORCED, > WATERMARK FOR ts AS ts - INTERVAL '3' SECOND > ); > -- drop an old column > ALTER TABLE prod.db.sample DROP measurement; > -- drop columns > ALTER TABLE prod.db.sample DROP (col1, col2, col3); > -- drop a watermark > ALTER TABLE prod.db.sample DROP WATERMARK; > -- rename column name > ALTER TABLE prod.db.sample RENAME `data` TO payload; > -- rename table name > ALTER TABLE mytable RENAME TO mytable2; > -- set options > ALTER TABLE kafka_table SET ( > 'scan.startup.mode' = 'specific-offsets', > 'scan.startup.specific-offsets' = 'partition:0,offset:42' > ); > -- reset options > ALTER TABLE kafka_table RESET ('scan.startup.mode', > 'scan.startup.specific-offsets'); > {code} > Note: we don't need to introduce new interfaces, because all the alter table > operation will be forward to catalog through > {{{}Catalog#alterTable(tablePath, newTable, ignoreIfNotExists){}}}. > [1]: > [https://ci.apache.org/projects/flink/flink-docs-master/docs/dev/table/sql/alter/#alter-table] > [2]: [http://iceberg.apache.org/spark-ddl/#alter-table-alter-column] > [3]: [https://trino.io/docs/current/sql/alter-table.html] > [4]: [https://dev.mysql.com/doc/refman/8.0/en/alter-table.html] > [5]: [https://www.postgresql.org/docs/9.1/sql-altertable.html] -- This message was sent by Atlassian Jira (v8.20.1#820001)