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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]