This is an automated email from the ASF dual-hosted git repository.
snuyanzin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git
The following commit(s) were added to refs/heads/master by this push:
new 8b716346099 [FLINK-39302][table] Support `SHOW CREATE OR ALTER
MATERIALIZED TABLE`
8b716346099 is described below
commit 8b716346099d36e5519913ac4bbab58ba64a8af4
Author: Sergey Nuyanzin <[email protected]>
AuthorDate: Tue Mar 31 18:37:38 2026 +0200
[FLINK-39302][table] Support `SHOW CREATE OR ALTER MATERIALIZED TABLE`
---
docs/content.zh/docs/sql/reference/utility/show.md | 10 +-
docs/content/docs/sql/reference/utility/show.md | 10 +-
.../src/main/codegen/includes/parserImpls.ftl | 4 +-
.../parser/dql/SqlShowCreateMaterializedTable.java | 21 +-
.../MaterializedTableStatementParserTest.java | 16 ++
.../flink/table/api/internal/ShowCreateUtil.java | 17 +-
.../ShowCreateMaterializedTableOperation.java | 14 +-
.../table/api/internal/ShowCreateUtilTest.java | 247 ++++++++++-----------
.../operations/SqlNodeToOperationConversion.java | 3 +-
9 files changed, 197 insertions(+), 145 deletions(-)
diff --git a/docs/content.zh/docs/sql/reference/utility/show.md
b/docs/content.zh/docs/sql/reference/utility/show.md
index 7c2793c78a9..705d2912ec8 100644
--- a/docs/content.zh/docs/sql/reference/utility/show.md
+++ b/docs/content.zh/docs/sql/reference/utility/show.md
@@ -41,7 +41,7 @@ SHOW CREATE 语句用于打印给定对象的创建 DDL 语句。当前的 SHOW
- SHOW TABLES
- SHOW CREATE TABLE
- SHOW MATERIALIZED TABLES
-- SHOW CREATE MATERIALIZED TABLE
+- SHOW CREATE [OR ALTER ]MATERIALIZED TABLE
- SHOW COLUMNS
- SHOW PARTITIONS
- SHOW PROCEDURES
@@ -993,7 +993,7 @@ The syntax of sql pattern in `LIKE` clause is the same as
that of `MySQL` dialec
* `%` matches any number of characters, including zero characters, `\%`
matches one `%` character.
* `_` matches exactly one character, `\_` matches one `_` character.
-## SHOW CREATE MATERIALIZED TABLE
+## SHOW CREATE [OR ALTER ]MATERIALIZED TABLE
```sql
SHOW CREATE MATERIALIZED TABLE [catalog_name.][db_name.]materialized_table_name
@@ -1001,6 +1001,12 @@ SHOW CREATE MATERIALIZED TABLE
[catalog_name.][db_name.]materialized_table_name
Show create materialized table statement for specified materialized table.
+```sql
+SHOW CREATE OR ALTER MATERIALIZED TABLE
[catalog_name.][db_name.]materialized_table_name
+```
+
+Show create or alter materialized table statement for specified materialized
table.
+
展示创建指定视图的 create 语句。
## SHOW FUNCTIONS
diff --git a/docs/content/docs/sql/reference/utility/show.md
b/docs/content/docs/sql/reference/utility/show.md
index 3912e625c2c..b1fd17ac77c 100644
--- a/docs/content/docs/sql/reference/utility/show.md
+++ b/docs/content/docs/sql/reference/utility/show.md
@@ -45,7 +45,7 @@ Flink SQL supports the following SHOW statements for now:
- SHOW VIEWS
- SHOW CREATE VIEW
- SHOW MATERIALIZED TABLES
-- SHOW CREATE MATERIALIZED TABLE
+- SHOW CREATE [OR ALTER ]MATERIALIZED TABLE
- SHOW FUNCTIONS
- SHOW MODULES
- SHOW JARS
@@ -1004,7 +1004,7 @@ The syntax of sql pattern in `LIKE` clause is the same as
that of `MySQL` dialec
* `%` matches any number of characters, including zero characters, `\%`
matches one `%` character.
* `_` matches exactly one character, `\_` matches one `_` character.
-## SHOW CREATE MATERIALIZED TABLE
+## SHOW CREATE [OR ALTER ]MATERIALIZED TABLE
```sql
SHOW CREATE MATERIALIZED TABLE [catalog_name.][db_name.]materialized_table_name
@@ -1012,6 +1012,12 @@ SHOW CREATE MATERIALIZED TABLE
[catalog_name.][db_name.]materialized_table_name
Show create materialized table statement for specified materialized table.
+```sql
+SHOW CREATE OR ALTER MATERIALIZED TABLE
[catalog_name.][db_name.]materialized_table_name
+```
+
+Show create or alter materialized table statement for specified materialized
table.
+
## SHOW FUNCTIONS
```sql
diff --git
a/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl
b/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl
index 5944f533616..cf01aee2f7e 100644
--- a/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl
+++ b/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl
@@ -792,11 +792,13 @@ SqlShowCreate SqlShowCreate() :
return new SqlShowCreateConnection(pos, sqlIdentifier);
}
|
+ {boolean createOrAlter = false;}
+ [ <OR> <ALTER> {createOrAlter = true;} ]
<MATERIALIZED> <TABLE>
{ pos = getPos(); }
sqlIdentifier = CompoundIdentifier()
{
- return new SqlShowCreateMaterializedTable(pos, sqlIdentifier);
+ return new SqlShowCreateMaterializedTable(pos, sqlIdentifier,
createOrAlter);
}
)
}
diff --git
a/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/dql/SqlShowCreateMaterializedTable.java
b/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/dql/SqlShowCreateMaterializedTable.java
index eb38d2f431b..929d2fb238c 100644
---
a/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/dql/SqlShowCreateMaterializedTable.java
+++
b/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/dql/SqlShowCreateMaterializedTable.java
@@ -29,13 +29,20 @@ import org.apache.calcite.sql.parser.SqlParserPos;
import java.util.Collections;
import java.util.List;
-/** SHOW CREATE MATERIALIZED TABLE sql call. */
+/** SHOW CREATE [OR ALTER ]MATERIALIZED TABLE sql call. */
public class SqlShowCreateMaterializedTable extends SqlShowCreate {
- public static final SqlSpecialOperator OPERATOR =
+ private static final SqlSpecialOperator SHOW_CREATE_OPERATOR =
new SqlSpecialOperator("SHOW CREATE MATERIALIZED TABLE",
SqlKind.OTHER_DDL);
- public SqlShowCreateMaterializedTable(SqlParserPos pos, SqlIdentifier
sqlIdentifier) {
+ private static final SqlSpecialOperator SHOW_CREATE_OR_ALTER_OPERATOR =
+ new SqlSpecialOperator("SHOW CREATE OR ALTER MATERIALIZED TABLE",
SqlKind.OTHER_DDL);
+
+ private final boolean createOrAlter;
+
+ public SqlShowCreateMaterializedTable(
+ SqlParserPos pos, SqlIdentifier sqlIdentifier, boolean
createOrAlter) {
super(pos, sqlIdentifier);
+ this.createOrAlter = createOrAlter;
}
public SqlIdentifier getMaterializedTableName() {
@@ -48,7 +55,7 @@ public class SqlShowCreateMaterializedTable extends
SqlShowCreate {
@Override
public SqlOperator getOperator() {
- return OPERATOR;
+ return createOrAlter ? SHOW_CREATE_OR_ALTER_OPERATOR :
SHOW_CREATE_OPERATOR;
}
@Override
@@ -56,9 +63,13 @@ public class SqlShowCreateMaterializedTable extends
SqlShowCreate {
return Collections.singletonList(sqlIdentifier);
}
+ public boolean isCreateOrAlter() {
+ return createOrAlter;
+ }
+
@Override
public void unparse(SqlWriter writer, int leftPrec, int rightPrec) {
- writer.keyword(OPERATOR.getName());
+ writer.keyword(getOperator().getName());
sqlIdentifier.unparse(writer, leftPrec, rightPrec);
}
}
diff --git
a/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/MaterializedTableStatementParserTest.java
b/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/MaterializedTableStatementParserTest.java
index 559d4c320d5..d38a8cdc04e 100644
---
a/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/MaterializedTableStatementParserTest.java
+++
b/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/MaterializedTableStatementParserTest.java
@@ -741,6 +741,22 @@ class MaterializedTableStatementParserTest {
+ " ");
}
+ @Test
+ void testShowCreateOrAlterMaterializedTable() {
+ sql("show create materialized table mt1").ok("SHOW CREATE MATERIALIZED
TABLE `MT1`");
+ sql("show create materialized table db1.mt1")
+ .ok("SHOW CREATE MATERIALIZED TABLE `DB1`.`MT1`");
+ sql("show create materialized table catalog1.db1.mt1")
+ .ok("SHOW CREATE MATERIALIZED TABLE `CATALOG1`.`DB1`.`MT1`");
+
+ sql("show create or alter materialized table mt1")
+ .ok("SHOW CREATE OR ALTER MATERIALIZED TABLE `MT1`");
+ sql("show create or alter materialized table db1.mt1")
+ .ok("SHOW CREATE OR ALTER MATERIALIZED TABLE `DB1`.`MT1`");
+ sql("show create or alter materialized table catalog1.db1.mt1")
+ .ok("SHOW CREATE OR ALTER MATERIALIZED TABLE
`CATALOG1`.`DB1`.`MT1`");
+ }
+
public SqlParserFixture fixture() {
return SqlParserFixture.DEFAULT.withConfig(
c -> c.withParserFactory(FlinkSqlParserImpl.FACTORY));
diff --git
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/api/internal/ShowCreateUtil.java
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/api/internal/ShowCreateUtil.java
index 5cd5035e806..c62cf638494 100644
---
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/api/internal/ShowCreateUtil.java
+++
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/api/internal/ShowCreateUtil.java
@@ -61,7 +61,7 @@ public class ShowCreateUtil {
new StringBuilder()
.append(
buildCreateFormattedPrefix(
- "MODEL", isTemporary, modelIdentifier,
false));
+ "MODEL", isTemporary, modelIdentifier,
false, false));
extractFormattedColumns(model.getResolvedInputSchema())
.ifPresent(
c -> sb.append(String.format("INPUT (%s)%s", c,
System.lineSeparator())));
@@ -93,7 +93,7 @@ public class ShowCreateUtil {
new StringBuilder()
.append(
buildCreateFormattedPrefix(
- "TABLE", isTemporary, tableIdentifier,
true));
+ "TABLE", isTemporary, tableIdentifier,
false, true));
sb.append(extractFormattedColumns(table, PRINT_INDENT));
extractFormattedWatermarkSpecs(table, PRINT_INDENT, sqlFactory)
.ifPresent(watermarkSpecs ->
sb.append(",\n").append(watermarkSpecs));
@@ -117,13 +117,18 @@ public class ShowCreateUtil {
ResolvedCatalogMaterializedTable table,
ObjectIdentifier tableIdentifier,
boolean isTemporary,
+ boolean createOrAlter,
SqlFactory sqlFactory) {
validateTableKind(table, tableIdentifier,
TableKind.MATERIALIZED_TABLE);
StringBuilder sb =
new StringBuilder()
.append(
buildCreateFormattedPrefix(
- "MATERIALIZED TABLE", isTemporary,
tableIdentifier, true));
+ "MATERIALIZED TABLE",
+ isTemporary,
+ tableIdentifier,
+ createOrAlter,
+ true));
sb.append(extractFormattedColumns(table, PRINT_INDENT));
extractFormattedWatermarkSpecs(table, PRINT_INDENT, sqlFactory)
.ifPresent(watermarkSpecs ->
sb.append(",\n").append(watermarkSpecs));
@@ -162,7 +167,7 @@ public class ShowCreateUtil {
new StringBuilder()
.append(
buildCreateFormattedPrefix(
- "VIEW", isTemporary, viewIdentifier,
true));
+ "VIEW", isTemporary, viewIdentifier,
false, true));
sb.append(extractFormattedColumnNames(view,
PRINT_INDENT)).append("\n)\n");
extractComment(view).ifPresent(c ->
sb.append(formatComment(c)).append("\n"));
sb.append("AS ").append(((CatalogView)
origin).getExpandedQuery()).append("\n");
@@ -186,9 +191,11 @@ public class ShowCreateUtil {
String type,
boolean isTemporary,
ObjectIdentifier identifier,
+ boolean createOrAlter,
boolean openParenthesis) {
return String.format(
- "CREATE %s%s %s%s%s",
+ "CREATE %s%s%s %s%s%s",
+ createOrAlter ? "OR ALTER " : "",
isTemporary ? "TEMPORARY " : "",
type,
identifier.asSerializableString(),
diff --git
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowCreateMaterializedTableOperation.java
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowCreateMaterializedTableOperation.java
index 14377d116b1..22383d39eb3 100644
---
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowCreateMaterializedTableOperation.java
+++
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowCreateMaterializedTableOperation.java
@@ -27,19 +27,23 @@ import org.apache.flink.table.catalog.ObjectIdentifier;
import static
org.apache.flink.table.api.internal.TableResultUtils.buildStringArrayResult;
-/** Operation to describe a SHOW CREATE MATERIALIZED TABLE statement. */
+/** Operation to describe a SHOW CREATE [OR ALTER ]MATERIALIZED TABLE
statement. */
@Internal
public class ShowCreateMaterializedTableOperation implements ShowOperation {
private final ObjectIdentifier tableIdentifier;
+ private final boolean createOrAlter;
- public ShowCreateMaterializedTableOperation(ObjectIdentifier
sqlIdentifier) {
+ public ShowCreateMaterializedTableOperation(
+ ObjectIdentifier sqlIdentifier, boolean createOrAlter) {
this.tableIdentifier = sqlIdentifier;
+ this.createOrAlter = createOrAlter;
}
@Override
public String asSummaryString() {
return String.format(
- "SHOW CREATE MATERIALIZED TABLE %s",
tableIdentifier.asSummaryString());
+ "SHOW CREATE %sMATERIALIZED TABLE %s",
+ createOrAlter ? "OR ALTER " : "",
tableIdentifier.asSummaryString());
}
@Override
@@ -51,13 +55,15 @@ public class ShowCreateMaterializedTableOperation
implements ShowOperation {
() ->
new ValidationException(
String.format(
- "Could not execute
SHOW CREATE MATERIALIZED TABLE. Materialized table with identifier %s does not
exist.",
+ "Could not execute %s.
Materialized table with identifier %s does not exist.",
+ asSummaryString(),
tableIdentifier.asSerializableString())));
String resultRow =
ShowCreateUtil.buildShowCreateMaterializedTableRow(
table.getResolvedTable(),
tableIdentifier,
table.isTemporary(),
+ createOrAlter,
ctx.getCatalogManager().getSqlFactory());
return buildStringArrayResult("result", new String[] {resultRow});
diff --git
a/flink-table/flink-table-api-java/src/test/java/org/apache/flink/table/api/internal/ShowCreateUtilTest.java
b/flink-table/flink-table-api-java/src/test/java/org/apache/flink/table/api/internal/ShowCreateUtilTest.java
index 6b50542898b..93b4683f966 100644
---
a/flink-table/flink-table-api-java/src/test/java/org/apache/flink/table/api/internal/ShowCreateUtilTest.java
+++
b/flink-table/flink-table-api-java/src/test/java/org/apache/flink/table/api/internal/ShowCreateUtilTest.java
@@ -46,9 +46,7 @@ import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -115,15 +113,18 @@ class ShowCreateUtilTest {
assertThat(createViewString).isEqualTo(expected);
}
- @ParameterizedTest(name = "{index}: {2}")
+ @ParameterizedTest(name = "{index}: {1}")
@MethodSource("argsForShowCreateMaterializedTable")
void showCreateMaterializedTable(
- ResolvedCatalogMaterializedTable materializedTable, String
expected) {
+ ResolvedCatalogMaterializedTable materializedTable,
+ boolean createOrAlter,
+ String expected) {
final String createMaterializedTableString =
ShowCreateUtil.buildShowCreateMaterializedTableRow(
materializedTable,
MATERIALIZED_TABLE_IDENTIFIER,
false,
+ createOrAlter,
DefaultSqlFactory.INSTANCE);
assertThat(createMaterializedTableString).isEqualTo(expected);
}
@@ -200,10 +201,10 @@ class ShowCreateUtilTest {
argList,
createResolvedTable(
ONE_COLUMN_SCHEMA,
- Collections.emptyMap(),
- Collections.emptyList(),
+ Map.of(),
+ List.of(),
TableDistribution.of(
- TableDistribution.Kind.HASH, 2,
Arrays.asList("key1", "key2")),
+ TableDistribution.Kind.HASH, 2,
List.of("key1", "key2")),
null),
"CREATE %sTABLE `catalogName`.`dbName`.`tableName` (\n"
+ " `id` INT\n"
@@ -214,10 +215,9 @@ class ShowCreateUtilTest {
argList,
createResolvedTable(
ONE_COLUMN_SCHEMA,
- Collections.emptyMap(),
- Collections.emptyList(),
- TableDistribution.of(
- TableDistribution.Kind.RANGE, 2,
Arrays.asList("1", "10")),
+ Map.of(),
+ List.of(),
+ TableDistribution.of(TableDistribution.Kind.RANGE, 2,
List.of("1", "10")),
"Table comment"),
"CREATE %sTABLE `catalogName`.`dbName`.`tableName` (\n"
+ " `id` INT\n"
@@ -229,10 +229,9 @@ class ShowCreateUtilTest {
argList,
createResolvedTable(
TWO_COLUMNS_SCHEMA_WITH_PRIMARY_KEY_AND_IMMUTABLE_COLS,
- Collections.emptyMap(),
- Collections.emptyList(),
- TableDistribution.of(
- TableDistribution.Kind.RANGE, 2,
Arrays.asList("1", "10")),
+ Map.of(),
+ List.of(),
+ TableDistribution.of(TableDistribution.Kind.RANGE, 2,
List.of("1", "10")),
"Table comment"),
"CREATE %sTABLE `catalogName`.`dbName`.`tableName` (\n"
+ " `id` INT,\n"
@@ -250,11 +249,7 @@ class ShowCreateUtilTest {
addTemporaryAndPermanent(
argList,
createResolvedTable(
- TWO_COLUMNS_SCHEMA,
- options,
- Collections.emptyList(),
- null,
- "Another table comment"),
+ TWO_COLUMNS_SCHEMA, options, List.of(), null, "Another
table comment"),
"CREATE %sTABLE `catalogName`.`dbName`.`tableName` (\n"
+ " `id` INT,\n"
+ " `name` VARCHAR(2147483647)\n"
@@ -269,11 +264,7 @@ class ShowCreateUtilTest {
addTemporaryAndPermanent(
argList,
createResolvedTable(
- ONE_COLUMN_SCHEMA,
- Collections.emptyMap(),
- Arrays.asList("key1", "key2"),
- null,
- "comment"),
+ ONE_COLUMN_SCHEMA, Map.of(), List.of("key1", "key2"),
null, "comment"),
"CREATE %sTABLE `catalogName`.`dbName`.`tableName` (\n"
+ " `id` INT\n"
+ ")\n"
@@ -285,9 +276,9 @@ class ShowCreateUtilTest {
createResolvedTable(
TWO_COLUMNS_SCHEMA,
options,
- Arrays.asList("key1", "key2"),
+ List.of("key1", "key2"),
TableDistribution.of(
- TableDistribution.Kind.UNKNOWN, 3,
Arrays.asList("1", "2", "3")),
+ TableDistribution.Kind.UNKNOWN, 3,
List.of("1", "2", "3")),
"table comment"),
"CREATE %sTABLE `catalogName`.`dbName`.`tableName` (\n"
+ " `id` INT,\n"
@@ -306,107 +297,107 @@ class ShowCreateUtilTest {
private static Collection<Arguments> argsForShowCreateMaterializedTable() {
final Collection<Arguments> argList = new ArrayList<>();
- argList.add(
- Arguments.of(
- createResolvedMaterialized(
- ONE_COLUMN_SCHEMA,
- null,
- List.of(),
- null,
- IntervalFreshness.ofMinute(1),
- RefreshMode.CONTINUOUS,
- "SELECT 1",
- "SELECT 1"),
- "CREATE MATERIALIZED TABLE
`catalogName`.`dbName`.`materializedTableName` (\n"
- + " `id` INT\n"
- + ")\n"
- + "FRESHNESS = INTERVAL '1' MINUTE\n"
- + "REFRESH_MODE = CONTINUOUS\n"
- + "AS SELECT 1\n"));
+ addCreateAndCreateOrAlter(
+ argList,
+ createResolvedMaterialized(
+ ONE_COLUMN_SCHEMA,
+ null,
+ List.of(),
+ null,
+ IntervalFreshness.ofMinute(1),
+ RefreshMode.CONTINUOUS,
+ "SELECT 1",
+ "SELECT 1"),
+ "%sMATERIALIZED TABLE
`catalogName`.`dbName`.`materializedTableName` (\n"
+ + " `id` INT\n"
+ + ")\n"
+ + "FRESHNESS = INTERVAL '1' MINUTE\n"
+ + "REFRESH_MODE = CONTINUOUS\n"
+ + "AS SELECT 1\n");
- argList.add(
- Arguments.of(
- createResolvedMaterialized(
- ONE_COLUMN_SCHEMA_WITH_PRIMARY_KEY,
- null,
- List.of(),
- null,
- IntervalFreshness.ofMinute(1),
- RefreshMode.CONTINUOUS,
- "SELECT 1",
- "SELECT 1"),
- "CREATE MATERIALIZED TABLE
`catalogName`.`dbName`.`materializedTableName` (\n"
- + " `id` INT,\n"
- + " `mt_column` VARCHAR(2147483647) METADATA
VIRTUAL,\n"
- + " CONSTRAINT `pk` PRIMARY KEY (`id`) NOT
ENFORCED\n"
- + ")\n"
- + "FRESHNESS = INTERVAL '1' MINUTE\n"
- + "REFRESH_MODE = CONTINUOUS\n"
- + "AS SELECT 1\n"));
+ addCreateAndCreateOrAlter(
+ argList,
+ createResolvedMaterialized(
+ ONE_COLUMN_SCHEMA_WITH_PRIMARY_KEY,
+ null,
+ List.of(),
+ null,
+ IntervalFreshness.ofMinute(1),
+ RefreshMode.CONTINUOUS,
+ "SELECT 1",
+ "SELECT 1"),
+ "%sMATERIALIZED TABLE
`catalogName`.`dbName`.`materializedTableName` (\n"
+ + " `id` INT,\n"
+ + " `mt_column` VARCHAR(2147483647) METADATA
VIRTUAL,\n"
+ + " CONSTRAINT `pk` PRIMARY KEY (`id`) NOT ENFORCED\n"
+ + ")\n"
+ + "FRESHNESS = INTERVAL '1' MINUTE\n"
+ + "REFRESH_MODE = CONTINUOUS\n"
+ + "AS SELECT 1\n");
- argList.add(
- Arguments.of(
- createResolvedMaterialized(
-
TWO_COLUMNS_SCHEMA_WITH_PRIMARY_KEY_AND_IMMUTABLE_COLS,
- null,
- List.of(),
- null,
- IntervalFreshness.ofMinute(1),
- RefreshMode.CONTINUOUS,
- "SELECT 1",
- "SELECT 1"),
- "CREATE MATERIALIZED TABLE
`catalogName`.`dbName`.`materializedTableName` (\n"
- + " `id` INT,\n"
- + " `name` VARCHAR(2147483647),\n"
- + " CONSTRAINT `pk` PRIMARY KEY (`id`) NOT
ENFORCED\n"
- + ")\n"
- + "FRESHNESS = INTERVAL '1' MINUTE\n"
- + "REFRESH_MODE = CONTINUOUS\n"
- + "AS SELECT 1\n"));
+ addCreateAndCreateOrAlter(
+ argList,
+ createResolvedMaterialized(
+ TWO_COLUMNS_SCHEMA_WITH_PRIMARY_KEY_AND_IMMUTABLE_COLS,
+ null,
+ List.of(),
+ null,
+ IntervalFreshness.ofMinute(1),
+ RefreshMode.CONTINUOUS,
+ "SELECT 1",
+ "SELECT 1"),
+ "%sMATERIALIZED TABLE
`catalogName`.`dbName`.`materializedTableName` (\n"
+ + " `id` INT,\n"
+ + " `name` VARCHAR(2147483647),\n"
+ + " CONSTRAINT `pk` PRIMARY KEY (`id`) NOT ENFORCED\n"
+ + ")\n"
+ + "FRESHNESS = INTERVAL '1' MINUTE\n"
+ + "REFRESH_MODE = CONTINUOUS\n"
+ + "AS SELECT 1\n");
- argList.add(
- Arguments.of(
- createResolvedMaterialized(
- TWO_COLUMNS_SCHEMA,
- "Materialized table comment",
- List.of("id"),
-
TableDistribution.of(TableDistribution.Kind.HASH, 5, List.of("id")),
- IntervalFreshness.ofMinute(3),
- RefreshMode.FULL,
- "SELECT id, name FROM tbl_a",
- "SELECT id, name FROM
`catalogName`.`dbName`.`tbl_a`"),
- "CREATE MATERIALIZED TABLE
`catalogName`.`dbName`.`materializedTableName` (\n"
- + " `id` INT,\n"
- + " `name` VARCHAR(2147483647)\n"
- + ")\n"
- + "COMMENT 'Materialized table comment'\n"
- + "DISTRIBUTED BY HASH(`id`) INTO 5 BUCKETS\n"
- + "PARTITIONED BY (`id`)\n"
- + "FRESHNESS = INTERVAL '3' MINUTE\n"
- + "REFRESH_MODE = FULL\n"
- + "AS SELECT id, name FROM
`catalogName`.`dbName`.`tbl_a`\n"));
+ addCreateAndCreateOrAlter(
+ argList,
+ createResolvedMaterialized(
+ TWO_COLUMNS_SCHEMA,
+ "Materialized table comment",
+ List.of("id"),
+ TableDistribution.of(TableDistribution.Kind.HASH, 5,
List.of("id")),
+ IntervalFreshness.ofMinute(3),
+ RefreshMode.FULL,
+ "SELECT id, name FROM tbl_a",
+ "SELECT id, name FROM `catalogName`.`dbName`.`tbl_a`"),
+ "%sMATERIALIZED TABLE
`catalogName`.`dbName`.`materializedTableName` (\n"
+ + " `id` INT,\n"
+ + " `name` VARCHAR(2147483647)\n"
+ + ")\n"
+ + "COMMENT 'Materialized table comment'\n"
+ + "DISTRIBUTED BY HASH(`id`) INTO 5 BUCKETS\n"
+ + "PARTITIONED BY (`id`)\n"
+ + "FRESHNESS = INTERVAL '3' MINUTE\n"
+ + "REFRESH_MODE = FULL\n"
+ + "AS SELECT id, name FROM
`catalogName`.`dbName`.`tbl_a`\n");
- argList.add(
- Arguments.of(
- createResolvedMaterialized(
- TWO_COLUMNS_SCHEMA,
- "Materialized table comment",
- List.of("id"),
-
TableDistribution.of(TableDistribution.Kind.HASH, 5, List.of("id")),
- IntervalFreshness.ofMinute(3),
- RefreshMode.FULL,
- "SELECT * FROM tbl_a",
- "SELECT id, name FROM
`catalogName`.`dbName`.`tbl_a`"),
- "CREATE MATERIALIZED TABLE
`catalogName`.`dbName`.`materializedTableName` (\n"
- + " `id` INT,\n"
- + " `name` VARCHAR(2147483647)\n"
- + ")\n"
- + "COMMENT 'Materialized table comment'\n"
- + "DISTRIBUTED BY HASH(`id`) INTO 5 BUCKETS\n"
- + "PARTITIONED BY (`id`)\n"
- + "FRESHNESS = INTERVAL '3' MINUTE\n"
- + "REFRESH_MODE = FULL\n"
- + "AS SELECT id, name FROM
`catalogName`.`dbName`.`tbl_a`\n"));
+ addCreateAndCreateOrAlter(
+ argList,
+ createResolvedMaterialized(
+ TWO_COLUMNS_SCHEMA,
+ "Materialized table comment",
+ List.of("id"),
+ TableDistribution.of(TableDistribution.Kind.HASH, 5,
List.of("id")),
+ IntervalFreshness.ofMinute(3),
+ RefreshMode.FULL,
+ "SELECT * FROM tbl_a",
+ "SELECT id, name FROM `catalogName`.`dbName`.`tbl_a`"),
+ "%sMATERIALIZED TABLE
`catalogName`.`dbName`.`materializedTableName` (\n"
+ + " `id` INT,\n"
+ + " `name` VARCHAR(2147483647)\n"
+ + ")\n"
+ + "COMMENT 'Materialized table comment'\n"
+ + "DISTRIBUTED BY HASH(`id`) INTO 5 BUCKETS\n"
+ + "PARTITIONED BY (`id`)\n"
+ + "FRESHNESS = INTERVAL '3' MINUTE\n"
+ + "REFRESH_MODE = FULL\n"
+ + "AS SELECT id, name FROM
`catalogName`.`dbName`.`tbl_a`\n");
return argList;
}
@@ -417,6 +408,12 @@ class ShowCreateUtilTest {
argList.add(Arguments.of(catalogBaseTable, true, String.format(sql,
"TEMPORARY ")));
}
+ private static void addCreateAndCreateOrAlter(
+ Collection<Arguments> argList, CatalogBaseTable catalogBaseTable,
String sql) {
+ argList.add(Arguments.of(catalogBaseTable, false, String.format(sql,
"CREATE ")));
+ argList.add(Arguments.of(catalogBaseTable, true, String.format(sql,
"CREATE OR ALTER ")));
+ }
+
private static ResolvedCatalogTable createResolvedTable(
ResolvedSchema resolvedSchema,
Map<String, String> options,
@@ -446,7 +443,7 @@ class ShowCreateUtilTest {
comment,
originalQuery,
expandedQuery,
- Collections.emptyMap()),
+ Map.of()),
resolvedSchema);
}
diff --git
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/SqlNodeToOperationConversion.java
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/SqlNodeToOperationConversion.java
index 8aed230e3a3..3609545be94 100644
---
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/SqlNodeToOperationConversion.java
+++
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/SqlNodeToOperationConversion.java
@@ -515,7 +515,8 @@ public class SqlNodeToOperationConversion {
UnresolvedIdentifier.of(
sqlShowCreateMaterializedTable.getFullMaterializedTableName());
ObjectIdentifier identifier =
catalogManager.qualifyIdentifier(unresolvedIdentifier);
- return new ShowCreateMaterializedTableOperation(identifier);
+ return new ShowCreateMaterializedTableOperation(
+ identifier, sqlShowCreateMaterializedTable.isCreateOrAlter());
}
/** Convert SHOW CREATE VIEW statement. */