Skip to content

Commit

Permalink
[fix](materialized-view) fix bug that can not create mv for list part…
Browse files Browse the repository at this point in the history
…itioned table (apache#9281)
  • Loading branch information
morningman authored Apr 29, 2022
1 parent c077faf commit cbfb4a3
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 13 deletions.
20 changes: 11 additions & 9 deletions fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@
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;
Expand All @@ -49,12 +49,12 @@
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;
Expand Down Expand Up @@ -635,17 +635,19 @@ public PartitionInfo getPartitionInfo() {
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() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

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;
Expand Down Expand Up @@ -85,6 +86,11 @@ private static void alterTable(String sql) throws Exception {
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
Expand Down Expand Up @@ -138,7 +144,7 @@ public void testRollup() throws Exception {
System.out.println(showResultSet.getMetaData());
System.out.println(showResultSet.getResultRows());
}

@Test
@Deprecated
public void testAlterSegmentV2() throws Exception {
Expand Down Expand Up @@ -217,4 +223,37 @@ public void testDupTableSchemaChange() throws Exception {
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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
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;
Expand Down Expand Up @@ -272,10 +273,9 @@ public void testDuplicateTable(@Injectable CreateMaterializedViewStmt createMate
}
}


@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, "", "");
Expand Down Expand Up @@ -308,7 +308,6 @@ public void checkInvalidPartitionKeyMV(@Injectable CreateMaterializedViewStmt cr
}
}


@Test
public void testCheckDropMaterializedView(@Injectable OlapTable olapTable, @Injectable Partition partition,
@Injectable MaterializedIndex materializedIndex) {
Expand Down

0 comments on commit cbfb4a3

Please sign in to comment.