You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by ad...@apache.org on 2023/01/13 17:29:42 UTC
[doris] branch master updated: [feature-wip](MTMV) Support table aliases when creating a materialized view with multiple tables (#15849)
This is an automated email from the ASF dual-hosted git repository.
adonisling pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new cedbed67be [feature-wip](MTMV) Support table aliases when creating a materialized view with multiple tables (#15849)
cedbed67be is described below
commit cedbed67be142d657984dcd36e539f9c65d39aae
Author: Adonis Ling <ad...@gmail.com>
AuthorDate: Sat Jan 14 01:29:32 2023 +0800
[feature-wip](MTMV) Support table aliases when creating a materialized view with multiple tables (#15849)
## Use Case
mysql> CREATE TABLE t_user (
-> event_day DATE,
-> id bigint,
-> username varchar(20)
-> )
-> DISTRIBUTED BY HASH(id) BUCKETS 10
-> PROPERTIES ('replication_num' = '1');
Query OK, 0 rows affected (0.07 sec)
mysql> CREATE TABLE t_user_pv(
-> event_day DATE,
-> id bigint,
-> pv bigint
-> )
-> DISTRIBUTED BY HASH(id) BUCKETS 10
-> PROPERTIES ('replication_num' = '1');
Query OK, 0 rows affected (0.09 sec)
mysql> CREATE MATERIALIZED VIEW mv
-> BUILD IMMEDIATE REFRESH COMPLETE
-> START WITH "2022-10-27 19:35:00"
-> NEXT 1 SECOND
-> KEY (username)
-> DISTRIBUTED BY HASH(username) BUCKETS 10
-> PROPERTIES ('replication_num' = '1')
-> AS SELECT t1.username ,t2.pv FROM t_user t1 LEFT JOIN t_user_pv t2 on t1.id = t2.id;
Query OK, 0 rows affected (0.10 sec)
mysql> DESC mv;
+----------+-------------+------+-------+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-------+---------+-------+
| username | VARCHAR(20) | Yes | true | NULL | |
| pv | BIGINT | Yes | false | NULL | NONE |
+----------+-------------+------+-------+---------+-------+
2 rows in set (0.02 sec)
---
.../CreateMultiTableMaterializedViewStmt.java | 12 +++++----
.../org/apache/doris/analysis/CreateTableStmt.java | 4 +--
.../catalog/MultiTableMaterializedViewTest.java | 29 ++++++++++++++++++++++
3 files changed, 38 insertions(+), 7 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMultiTableMaterializedViewStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMultiTableMaterializedViewStmt.java
index 55dc63a04c..31dfe1ae91 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMultiTableMaterializedViewStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMultiTableMaterializedViewStmt.java
@@ -57,6 +57,7 @@ public class CreateMultiTableMaterializedViewStmt extends CreateTableStmt {
this.partitionDesc = partitionDesc;
this.distributionDesc = distributionDesc;
this.properties = properties;
+ engineName = DEFAULT_ENGINE_NAME;
}
@Override
@@ -83,12 +84,13 @@ public class CreateMultiTableMaterializedViewStmt extends CreateTableStmt {
}
OlapTable table = (OlapTable) database.getTableOrAnalysisException(tableRef.getName().getTbl());
olapTables.put(table.getName(), table);
+ olapTables.put(tableRef.getAlias(), table);
}
columnDefs = generateColumnDefinitions(selectStmt.getSelectList());
}
private List<ColumnDef> generateColumnDefinitions(SelectList selectList) throws AnalysisException, DdlException {
- List<MVColumnItem> mvColumnItems = generateMVColumnItems(olapTables, selectList);
+ List<MVColumnItem> mvColumnItems = generateMVColumnItems(selectList);
List<Column> schema = generateSchema(mvColumnItems);
return schema.stream()
.map(column -> new ColumnDef(
@@ -111,7 +113,7 @@ public class CreateMultiTableMaterializedViewStmt extends CreateTableStmt {
return columns;
}
- private List<MVColumnItem> generateMVColumnItems(Map<String, OlapTable> olapTables, SelectList selectList)
+ private List<MVColumnItem> generateMVColumnItems(SelectList selectList)
throws AnalysisException {
Map<String, MVColumnItem> uniqueMVColumnItems = Maps.newLinkedHashMap();
for (SelectListItem item : selectList.getItems()) {
@@ -148,13 +150,13 @@ public class CreateMultiTableMaterializedViewStmt extends CreateTableStmt {
StringBuilder sb = new StringBuilder();
sb.append("CREATE MATERIALIZED VIEW ").append(mvName).append(" BUILD ").append(buildMode.toString());
if (refreshInfo != null) {
- sb.append(" ").append(refreshInfo.toString());
+ sb.append(" ").append(refreshInfo);
}
if (partitionDesc != null) {
- sb.append(" ").append(partitionDesc.toString());
+ sb.append(" ").append(partitionDesc);
}
if (distributionDesc != null) {
- sb.append(" ").append(distributionDesc.toString());
+ sb.append(" ").append(distributionDesc);
}
if (properties != null && !properties.isEmpty()) {
sb.append("\nPROPERTIES (");
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java
index 37d73d7bb0..aff4e92d9a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java
@@ -58,7 +58,7 @@ import java.util.stream.Collectors;
public class CreateTableStmt extends DdlStmt {
private static final Logger LOG = LogManager.getLogger(CreateTableStmt.class);
- private static final String DEFAULT_ENGINE_NAME = "olap";
+ protected static final String DEFAULT_ENGINE_NAME = "olap";
private boolean ifNotExists;
private boolean isExternal;
@@ -70,7 +70,7 @@ public class CreateTableStmt extends DdlStmt {
protected DistributionDesc distributionDesc;
protected Map<String, String> properties;
private Map<String, String> extProperties;
- private String engineName;
+ protected String engineName;
private String comment;
private List<AlterClause> rollupAlterClauseList = Lists.newArrayList();
diff --git a/fe/fe-core/src/test/java/org/apache/doris/catalog/MultiTableMaterializedViewTest.java b/fe/fe-core/src/test/java/org/apache/doris/catalog/MultiTableMaterializedViewTest.java
index d622a8d688..41150ecb76 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/catalog/MultiTableMaterializedViewTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/catalog/MultiTableMaterializedViewTest.java
@@ -304,4 +304,33 @@ public class MultiTableMaterializedViewTest extends TestWithFeService {
connectContext.getState().getErrorMessage()
.contains("The partition columns doesn't match the ones in base table"));
}
+
+ @Test
+ public void testCreateWithTableAliases() throws Exception {
+ createTable("CREATE TABLE t_user ("
+ + " event_day DATE,"
+ + " id bigint,"
+ + " username varchar(20)"
+ + ")"
+ + "DISTRIBUTED BY HASH(id) BUCKETS 10 "
+ + "PROPERTIES ('replication_num' = '1')"
+ );
+ createTable("CREATE TABLE t_user_pv("
+ + " event_day DATE,"
+ + " id bigint,"
+ + " pv bigint"
+ + ")"
+ + "DISTRIBUTED BY HASH(id) BUCKETS 10 "
+ + "PROPERTIES ('replication_num' = '1')"
+ );
+ new StmtExecutor(connectContext, "CREATE MATERIALIZED VIEW mv "
+ + "BUILD IMMEDIATE REFRESH COMPLETE "
+ + "START WITH \"2022-10-27 19:35:00\" "
+ + "NEXT 1 SECOND "
+ + "KEY (username) "
+ + "DISTRIBUTED BY HASH(username) BUCKETS 10 "
+ + "PROPERTIES ('replication_num' = '1') "
+ + "AS SELECT t1.username ,t2.pv FROM t_user t1 LEFT JOIN t_user_pv t2 on t1.id = t2.id").execute();
+ Assertions.assertNull(connectContext.getState().getErrorCode(), connectContext.getState().getErrorMessage());
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org