lsyldliu commented on code in PR #26064: URL: https://github.com/apache/flink/pull/26064#discussion_r1944182747
########## docs/content.zh/docs/dev/table/materialized-table/statements.md: ########## @@ -326,6 +328,67 @@ ALTER MATERIALIZED TABLE my_materialized_table REFRESH PARTITION (ds='2024-06-28 <span class="label label-danger">注意</span> - REFRESH 操作会启动批作业来刷新表的数据。 +## AS <select_statement> +```sql +ALTER MATERIALIZED TABLE [catalog_name.][db_name.]table_name AS <select_statement> +``` + +`AS <select_statement>` 子句用于修改刷新物化表的查询定义。它会先使用新查询推导的 `schema` 更新表的 `schema`,然后使用新查询刷新表数据。需要特别强调的是,默认情况下,这不会影响历史数据。 + +具体修改流程取决于物化表的刷新模式: + +**全量模式:** + +1. 更新物化表的 `schema` 和查询定义。 +2. 在刷新作业下次触发执行时,将使用新的查询定义刷新数据: + - 如果修改的物化表是分区表,且[partition.fields.#.date-formatter]({{< ref "docs/dev/table/config" >}}#partition-fields-date-formatter) 配置正确,则仅刷新最新分区。 + - 否则,将刷新整个表的数据。 + +**持续模式:** + +1. 暂停当前的流式刷新作业。 +2. 更新物化表的 `schema` 和查询定义。 +3. 启动新的流式任务以刷新物化表: + - 新的流式任务会从头开始,而不会从之前的流式任务状态恢复。 + - 数据源的起始位点会由到连接器的默认实现或查询中设置的 [dynamic hint]({{< ref "docs/dev/table/sql/queries/hints" >}}#dynamic-table-options) 决定。 + +**示例:** + +```sql +-- 原始物化表定义 +CREATE MATERIALIZED TABLE my_materialized_table + FRESHNESS = INTERVAL '10' SECOND + AS + SELECT + user_id, + COUNT(*) AS event_count, + SUM(amount) AS total_amount + FROM + kafka_catalog.db1.events + WHERE + event_type = 'purchase' + GROUP BY + user_id; + +-- 修改现有物化表的查询 +ALTER MATERIALIZED TABLE my_materialized_table +AS SELECT + user_id, + COUNT(*) AS event_count, + SUM(amount) AS total_amount, + AVG(amount) AS avg_amount -- 在末尾追加新的可为空列 +FROM + kafka_catalog.db1.events +WHERE + event_type = 'purchase' +GROUP BY + user_id; +``` + +<span class="label label-danger">注意</span> +- Schema 演进当前仅支持在原表 schema 尾部追加`可空列`。 +- 在持续模式下,新的流式任务不会从原来的流式任务的状态恢复。这可能会导致短暂的数据重复或丢失。 Review Comment: 流式任务 -> 流式作业 ########## docs/content.zh/docs/dev/table/materialized-table/statements.md: ########## @@ -326,6 +328,67 @@ ALTER MATERIALIZED TABLE my_materialized_table REFRESH PARTITION (ds='2024-06-28 <span class="label label-danger">注意</span> - REFRESH 操作会启动批作业来刷新表的数据。 +## AS <select_statement> +```sql +ALTER MATERIALIZED TABLE [catalog_name.][db_name.]table_name AS <select_statement> +``` + +`AS <select_statement>` 子句用于修改刷新物化表的查询定义。它会先使用新查询推导的 `schema` 更新表的 `schema`,然后使用新查询刷新表数据。需要特别强调的是,默认情况下,这不会影响历史数据。 + +具体修改流程取决于物化表的刷新模式: + +**全量模式:** + +1. 更新物化表的 `schema` 和查询定义。 +2. 在刷新作业下次触发执行时,将使用新的查询定义刷新数据: + - 如果修改的物化表是分区表,且[partition.fields.#.date-formatter]({{< ref "docs/dev/table/config" >}}#partition-fields-date-formatter) 配置正确,则仅刷新最新分区。 + - 否则,将刷新整个表的数据。 + +**持续模式:** + +1. 暂停当前的流式刷新作业。 +2. 更新物化表的 `schema` 和查询定义。 +3. 启动新的流式任务以刷新物化表: Review Comment: 流式任务 -> 流式作业 ########## docs/content.zh/docs/dev/table/materialized-table/statements.md: ########## @@ -326,6 +328,67 @@ ALTER MATERIALIZED TABLE my_materialized_table REFRESH PARTITION (ds='2024-06-28 <span class="label label-danger">注意</span> - REFRESH 操作会启动批作业来刷新表的数据。 +## AS <select_statement> +```sql +ALTER MATERIALIZED TABLE [catalog_name.][db_name.]table_name AS <select_statement> +``` + +`AS <select_statement>` 子句用于修改刷新物化表的查询定义。它会先使用新查询推导的 `schema` 更新表的 `schema`,然后使用新查询刷新表数据。需要特别强调的是,默认情况下,这不会影响历史数据。 + +具体修改流程取决于物化表的刷新模式: + +**全量模式:** + +1. 更新物化表的 `schema` 和查询定义。 +2. 在刷新作业下次触发执行时,将使用新的查询定义刷新数据: + - 如果修改的物化表是分区表,且[partition.fields.#.date-formatter]({{< ref "docs/dev/table/config" >}}#partition-fields-date-formatter) 配置正确,则仅刷新最新分区。 + - 否则,将刷新整个表的数据。 + +**持续模式:** + +1. 暂停当前的流式刷新作业。 +2. 更新物化表的 `schema` 和查询定义。 +3. 启动新的流式任务以刷新物化表: + - 新的流式任务会从头开始,而不会从之前的流式任务状态恢复。 Review Comment: ditto -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@flink.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org