From 7ce87c5e190df713bedf445a1c14799130da0110 Mon Sep 17 00:00:00 2001 From: yingxuanwangxuan Date: Mon, 26 Sep 2022 16:13:55 +0800 Subject: [PATCH] Support partitioned view in legacy Hive view reader --- .../trino/plugin/hive/LegacyHiveViewReader.java | 3 ++- .../tests/product/hive/AbstractTestHiveViews.java | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/LegacyHiveViewReader.java b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/LegacyHiveViewReader.java index 622b1ff54fa8..ad8894147299 100644 --- a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/LegacyHiveViewReader.java +++ b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/LegacyHiveViewReader.java @@ -20,6 +20,7 @@ import io.trino.spi.type.TypeId; import java.util.Optional; +import java.util.stream.Stream; import static com.google.common.collect.ImmutableList.toImmutableList; import static io.trino.plugin.hive.HiveErrorCode.HIVE_INVALID_METADATA; @@ -45,7 +46,7 @@ public ConnectorViewDefinition decodeViewData(String viewData, Table table, Cata translateHiveViewToTrino(viewText), Optional.of(catalogName.toString()), Optional.ofNullable(table.getDatabaseName()), - table.getDataColumns().stream() + Stream.concat(table.getDataColumns().stream(), table.getPartitionColumns().stream()) .map(column -> new ConnectorViewDefinition.ViewColumn(column.getName(), TypeId.of(column.getType().getTypeSignature().toString()))) .collect(toImmutableList()), Optional.ofNullable(table.getParameters().get(TABLE_COMMENT)), diff --git a/testing/trino-product-tests/src/main/java/io/trino/tests/product/hive/AbstractTestHiveViews.java b/testing/trino-product-tests/src/main/java/io/trino/tests/product/hive/AbstractTestHiveViews.java index 41678914aa1c..e3294a375c75 100644 --- a/testing/trino-product-tests/src/main/java/io/trino/tests/product/hive/AbstractTestHiveViews.java +++ b/testing/trino-product-tests/src/main/java/io/trino/tests/product/hive/AbstractTestHiveViews.java @@ -575,6 +575,21 @@ public void testUnionDistinctViews() } } + @Test(groups = HIVE_VIEWS) + public void testHivePartitionViews() + { + onHive().executeQuery("DROP VIEW IF EXISTS test_view_partitioned_column"); + onHive().executeQuery("DROP TABLE IF EXISTS test_table_partitioned_column"); + onTrino().executeQuery("CREATE TABLE test_table_partitioned_column(some_id VARCHAR(25), ds VARCHAR(25)) WITH (partitioned_by=array['ds'])"); + onTrino().executeQuery("INSERT INTO test_table_partitioned_column VALUES ('1', '2022-09-17')"); + onHive().executeQuery("CREATE VIEW test_view_partitioned_column PARTITIONED ON (ds) AS SELECT some_id, ds FROM test_table_partitioned_column"); + + String testQuery = "SELECT some_id, ds FROM test_view_partitioned_column"; + assertThat(onTrino().executeQuery(testQuery)).containsOnly(row("1", "2022-09-17")); + onHive().executeQuery("DROP VIEW test_view_partitioned_column"); + onHive().executeQuery("DROP TABLE test_table_partitioned_column"); + } + /** * Test a Hive view that spans over Hive and Iceberg table when metastore does not contain an up to date information about table schema, requiring * any potential view translation to follow redirections.