This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push: new cbfb4a3115 [fix](materialized-view) fix bug that can not create mv for list partitioned table (#9281) cbfb4a3115 is described below commit cbfb4a311548d053c690f34a12aface9f4c6877c Author: Mingyu Chen <morningman....@gmail.com> AuthorDate: Fri Apr 29 10:45:09 2022 +0800 [fix](materialized-view) fix bug that can not create mv for list partitioned table (#9281) --- .../java/org/apache/doris/catalog/OlapTable.java | 20 ++++++----- .../org/apache/doris/alter/AlterJobV2Test.java | 41 +++++++++++++++++++++- .../doris/alter/MaterializedViewHandlerTest.java | 5 ++- 3 files changed, 53 insertions(+), 13 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java index 0038095af1..e108fb82d7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java @@ -21,10 +21,10 @@ import org.apache.doris.alter.MaterializedViewHandler; import org.apache.doris.analysis.AggregateInfo; import org.apache.doris.analysis.ColumnDef; import org.apache.doris.analysis.CreateTableStmt; +import org.apache.doris.analysis.DataSortInfo; import org.apache.doris.analysis.Expr; import org.apache.doris.analysis.SlotDescriptor; import org.apache.doris.analysis.SlotRef; -import org.apache.doris.analysis.DataSortInfo; import org.apache.doris.backup.Status; import org.apache.doris.backup.Status.ErrCode; import org.apache.doris.catalog.DistributionInfo.DistributionInfoType; @@ -49,12 +49,12 @@ import org.apache.doris.resource.Tag; import org.apache.doris.system.Backend; import org.apache.doris.system.SystemInfoService; import org.apache.doris.thrift.TOlapTable; +import org.apache.doris.thrift.TSortType; import org.apache.doris.thrift.TStorageFormat; import org.apache.doris.thrift.TStorageMedium; import org.apache.doris.thrift.TStorageType; import org.apache.doris.thrift.TTableDescriptor; import org.apache.doris.thrift.TTableType; -import org.apache.doris.thrift.TSortType; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; @@ -635,17 +635,19 @@ public class OlapTable extends Table { return partitionInfo; } - public Set<String> getPartitionColumnNames() { + public Set<String> getPartitionColumnNames() throws DdlException { Set<String> partitionColumnNames = Sets.newHashSet(); if (partitionInfo instanceof SinglePartitionInfo) { return partitionColumnNames; + } else if (partitionInfo instanceof RangePartitionInfo) { + RangePartitionInfo rangePartitionInfo = (RangePartitionInfo) partitionInfo; + return rangePartitionInfo.getPartitionColumns().stream().map(c -> c.getName().toLowerCase()).collect(Collectors.toSet()); + } else if (partitionInfo instanceof ListPartitionInfo) { + ListPartitionInfo listPartitionInfo = (ListPartitionInfo) partitionInfo; + return listPartitionInfo.getPartitionColumns().stream().map(c -> c.getName().toLowerCase()).collect(Collectors.toSet()); + } else { + throw new DdlException("Unknown partition info type: " + partitionInfo.getType().name()); } - RangePartitionInfo rangePartitionInfo = (RangePartitionInfo) partitionInfo; - List<Column> partitionColumns = rangePartitionInfo.getPartitionColumns(); - for (Column column : partitionColumns) { - partitionColumnNames.add(column.getName().toLowerCase()); - } - return partitionColumnNames; } public DistributionInfo getDefaultDistributionInfo() { diff --git a/fe/fe-core/src/test/java/org/apache/doris/alter/AlterJobV2Test.java b/fe/fe-core/src/test/java/org/apache/doris/alter/AlterJobV2Test.java index 6a25b72892..2bb1842b36 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/alter/AlterJobV2Test.java +++ b/fe/fe-core/src/test/java/org/apache/doris/alter/AlterJobV2Test.java @@ -19,6 +19,7 @@ package org.apache.doris.alter; import org.apache.doris.analysis.AlterTableStmt; import org.apache.doris.analysis.CreateDbStmt; +import org.apache.doris.analysis.CreateMaterializedViewStmt; import org.apache.doris.analysis.CreateTableStmt; import org.apache.doris.analysis.ShowAlterStmt; import org.apache.doris.catalog.Catalog; @@ -85,6 +86,11 @@ public class AlterJobV2Test { Catalog.getCurrentCatalog().getAlterInstance().processAlterTable(alterTableStmt); } + private static void createMaterializedView(String sql) throws Exception { + CreateMaterializedViewStmt stmt = (CreateMaterializedViewStmt) UtFrameUtils.parseAndAnalyzeStmt(sql, connectContext); + Catalog.getCurrentCatalog().getAlterInstance().processCreateMaterializedView(stmt); + } + @Test public void testSchemaChange() throws Exception { // 1. process a schema change job @@ -138,7 +144,7 @@ public class AlterJobV2Test { System.out.println(showResultSet.getMetaData()); System.out.println(showResultSet.getResultRows()); } - + @Test @Deprecated public void testAlterSegmentV2() throws Exception { @@ -217,4 +223,37 @@ public class AlterJobV2Test { waitAlterJobDone(alterJobs); ExceptionChecker.expectThrowsNoException(() -> alterTable("alter table test.dup_table modify column v2 varchar(2);")); } + + @Test + public void testCreateMVForListPartitionTable() throws Exception { + createTable("CREATE TABLE test.list_tbl (\n" + + "city VARCHAR(20) NOT NULL,\n" + + "user_id BIGINT NOT NULL,\n" + + "date DATE NOT NULL,\n" + + "age SMALLINT NOT NULL,\n" + + "sex TINYINT NOT NULL,\n" + + "cost BIGINT NOT NULL DEFAULT \"0\"\n" + + ") DUPLICATE KEY(city) PARTITION BY LIST(city) (\n" + + "PARTITION p_bj\n" + + "VALUES IN (\"beijing\"),\n" + + "PARTITION p_gz\n" + + "VALUES IN (\"guangzhou\"),\n" + + "PARTITION p_sz\n" + + "VALUES IN (\"shenzhen\")\n" + + ") DISTRIBUTED BY HASH(date) BUCKETS 1 PROPERTIES(\"replication_num\" = \"1\");"); + + createMaterializedView("create materialized view list_view as\n" + + "select city,\n" + + "user_id,\n" + + "date,\n" + + "sum(cost)\n" + + "from\n" + + "test.list_tbl\n" + + "group by\n" + + "city,\n" + + "user_id,\n" + + "date;"); + Map<Long, AlterJobV2> alterJobs = Catalog.getCurrentCatalog().getRollupHandler().getAlterJobsV2(); + waitAlterJobDone(alterJobs); + } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/alter/MaterializedViewHandlerTest.java b/fe/fe-core/src/test/java/org/apache/doris/alter/MaterializedViewHandlerTest.java index e33f840ffa..b852d64785 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/alter/MaterializedViewHandlerTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/alter/MaterializedViewHandlerTest.java @@ -27,6 +27,7 @@ import org.apache.doris.catalog.MaterializedIndex; import org.apache.doris.catalog.OlapTable; import org.apache.doris.catalog.Partition; import org.apache.doris.catalog.Type; +import org.apache.doris.common.DdlException; import org.apache.doris.common.jmockit.Deencapsulation; import com.google.common.collect.Lists; @@ -272,10 +273,9 @@ public class MaterializedViewHandlerTest { } } - @Test public void checkInvalidPartitionKeyMV(@Injectable CreateMaterializedViewStmt createMaterializedViewStmt, - @Injectable OlapTable olapTable) { + @Injectable OlapTable olapTable) throws DdlException { final String mvName = "mv1"; final String columnName1 = "k1"; Column baseColumn1 = new Column(columnName1, Type.VARCHAR, true, null, "", ""); @@ -308,7 +308,6 @@ public class MaterializedViewHandlerTest { } } - @Test public void testCheckDropMaterializedView(@Injectable OlapTable olapTable, @Injectable Partition partition, @Injectable MaterializedIndex materializedIndex) { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org