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