This is an automated email from the ASF dual-hosted git repository. jinsongzhou pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/amoro.git
The following commit(s) were added to refs/heads/master by this push: new decd55dec [AMORO-3389][improvement]support add comment to mixed_hive table (#3389) decd55dec is described below commit decd55dec29e253d81e29ee960244d2999996432 Author: Wang Tao <wtrunw...@gmail.com> AuthorDate: Mon Jan 20 19:58:37 2025 +0800 [AMORO-3389][improvement]support add comment to mixed_hive table (#3389) * [improvement]support add comment to hive table * add ut --- .../apache/amoro/hive/catalog/MixedHiveTables.java | 8 +++- .../suites/sql/TestMixedFormatSessionCatalog.java | 44 +++++++++++++++------- 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/amoro-format-mixed/amoro-mixed-hive/src/main/java/org/apache/amoro/hive/catalog/MixedHiveTables.java b/amoro-format-mixed/amoro-mixed-hive/src/main/java/org/apache/amoro/hive/catalog/MixedHiveTables.java index d4ac4a8c9..bf07b2f37 100644 --- a/amoro-format-mixed/amoro-mixed-hive/src/main/java/org/apache/amoro/hive/catalog/MixedHiveTables.java +++ b/amoro-format-mixed/amoro-mixed-hive/src/main/java/org/apache/amoro/hive/catalog/MixedHiveTables.java @@ -59,6 +59,7 @@ import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.Locale; import java.util.Map; +import java.util.Optional; public class MixedHiveTables { @@ -510,6 +511,11 @@ public class MixedHiveTables { TableMeta meta, Schema schema, PartitionSpec partitionSpec) { final long currentTimeMillis = System.currentTimeMillis(); + // set table comment here! + Map<String, String> parameters = new HashMap<>(); + Optional<String> comment = Optional.ofNullable(meta.getProperties().get("comment")); + comment.ifPresent(val -> parameters.put("comment", val)); + org.apache.hadoop.hive.metastore.api.Table newTable = new org.apache.hadoop.hive.metastore.api.Table( meta.getTableIdentifier().getTableName(), @@ -521,7 +527,7 @@ public class MixedHiveTables { Integer.MAX_VALUE, null, HiveSchemaUtil.hivePartitionFields(schema, partitionSpec), - new HashMap<>(), + parameters, null, null, TableType.EXTERNAL_TABLE.toString()); diff --git a/amoro-format-mixed/amoro-mixed-spark/v3.3/amoro-mixed-spark-3.3/src/test/java/org/apache/amoro/spark/test/suites/sql/TestMixedFormatSessionCatalog.java b/amoro-format-mixed/amoro-mixed-spark/v3.3/amoro-mixed-spark-3.3/src/test/java/org/apache/amoro/spark/test/suites/sql/TestMixedFormatSessionCatalog.java index dec6d8a7d..f1b414e24 100644 --- a/amoro-format-mixed/amoro-mixed-spark/v3.3/amoro-mixed-spark-3.3/src/test/java/org/apache/amoro/spark/test/suites/sql/TestMixedFormatSessionCatalog.java +++ b/amoro-format-mixed/amoro-mixed-spark/v3.3/amoro-mixed-spark-3.3/src/test/java/org/apache/amoro/spark/test/suites/sql/TestMixedFormatSessionCatalog.java @@ -43,6 +43,7 @@ import org.junit.platform.commons.util.StringUtils; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.stream.Stream; public class TestMixedFormatSessionCatalog extends MixedTableTestBase { @@ -57,16 +58,16 @@ public class TestMixedFormatSessionCatalog extends MixedTableTestBase { public static Stream<Arguments> testCreateTable() { return Stream.of( - Arguments.arguments("arctic", true, ""), - Arguments.arguments("arctic", false, "pt"), - Arguments.arguments("arctic", true, "pt"), - Arguments.arguments("parquet", false, "pt"), - Arguments.arguments("parquet", false, "dt string")); + Arguments.arguments("arctic", true, "", "hive comment"), + Arguments.arguments("arctic", false, "pt", "hive comment"), + Arguments.arguments("arctic", true, "pt", "hive comment"), + Arguments.arguments("parquet", false, "pt", null), + Arguments.arguments("parquet", false, "dt string", null)); } - @ParameterizedTest(name = "{index} USING {0} WITH PK {1} PARTITIONED BY ({2})") + @ParameterizedTest(name = "{index} USING {0} WITH PK {1} PARTITIONED BY ({2}) COMMENT {3}") @MethodSource - public void testCreateTable(String provider, boolean pk, String pt) { + public void testCreateTable(String provider, boolean pk, String pt, String comment) { String sqlText = "CREATE TABLE " + target() + "(" + " id INT, data string, pt string "; if (pk) { @@ -78,6 +79,10 @@ public class TestMixedFormatSessionCatalog extends MixedTableTestBase { sqlText += " PARTITIONED BY (" + pt + ")"; } + if (StringUtils.isNotBlank(comment)) { + sqlText += " COMMENT '" + comment + "'"; + } + sql(sqlText); if ("arctic".equalsIgnoreCase(provider)) { @@ -86,6 +91,9 @@ public class TestMixedFormatSessionCatalog extends MixedTableTestBase { Table hiveTable = loadHiveTable(); Assertions.assertNotNull(hiveTable); + + String hiveComment = hiveTable.getParameters().get("comment"); + Assertions.assertTrue(Objects.equals(hiveComment, comment)); } static final Schema SCHEMA = @@ -105,17 +113,17 @@ public class TestMixedFormatSessionCatalog extends MixedTableTestBase { public static Stream<Arguments> testCreateTableAsSelect() { return Stream.of( - Arguments.arguments("arctic", true, "", true), - Arguments.arguments("arctic", false, "pt", true), - Arguments.arguments("arctic", true, "pt", false), - Arguments.arguments("parquet", false, "pt", false), - Arguments.arguments("parquet", false, "", false)); + Arguments.arguments("arctic", true, "", true, "hive comment"), + Arguments.arguments("arctic", false, "pt", true, "hive comment"), + Arguments.arguments("arctic", true, "pt", false, "hive comment"), + Arguments.arguments("parquet", false, "pt", false, "hive comment"), + Arguments.arguments("parquet", false, "", false, "hive comment")); } - @ParameterizedTest(name = "{index} USING {0} WITH PK {1} PARTITIONED BY ({2})") + @ParameterizedTest(name = "{index} USING {0} WITH PK {1} PARTITIONED BY ({2}) COMMENT {3}") @MethodSource public void testCreateTableAsSelect( - String provider, boolean pk, String pt, boolean duplicateCheck) { + String provider, boolean pk, String pt, boolean duplicateCheck, String comment) { spark().conf().set(SparkSQLProperties.CHECK_SOURCE_DUPLICATES_ENABLE, duplicateCheck); createViewSource(SCHEMA, source); String sqlText = "CREATE TABLE " + target(); @@ -126,6 +134,11 @@ public class TestMixedFormatSessionCatalog extends MixedTableTestBase { if (StringUtils.isNotBlank(pt)) { sqlText += " PARTITIONED BY (" + pt + ")"; } + + if (StringUtils.isNotBlank(comment)) { + sqlText += " COMMENT '" + comment + "'"; + } + sqlText += " AS SELECT * FROM " + source(); sql(sqlText); @@ -135,6 +148,9 @@ public class TestMixedFormatSessionCatalog extends MixedTableTestBase { Table hiveTable = loadHiveTable(); Assertions.assertNotNull(hiveTable); + + String hiveComment = hiveTable.getParameters().get("comment"); + Assertions.assertTrue(Objects.equals(hiveComment, comment)); } @Test