This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 6af6997f1d2ff12a66555be5af3a694b23177396
Author: Pxl <[email protected]>
AuthorDate: Thu Feb 29 11:01:34 2024 +0800

    [Improvement](materialized-view) add approx_count_distinct/ndv to 
FunctionAlias rule (#31535)
    
    add approx_count_distinct/ndv to FunctionAlias rule
---
 .../src/main/java/org/apache/doris/rewrite/FunctionAlias.java  |  7 ++++---
 .../test_approx_count_distinct.out}                            |  4 ++++
 .../testNDVToHll/testNDVToHll.out => test_ndv/test_ndv.out}    |  4 ++++
 regression-test/data/mv_p0/ut/testNDVToHll/testNDVToHll.out    |  4 ++++
 .../test_approx_count_distinct.groovy}                         | 10 ++++++++--
 .../testNDVToHll.groovy => test_ndv/test_ndv.groovy}           | 10 ++++++++--
 .../suites/mv_p0/ut/testNDVToHll/testNDVToHll.groovy           |  6 ++++++
 7 files changed, 38 insertions(+), 7 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/rewrite/FunctionAlias.java 
b/fe/fe-core/src/main/java/org/apache/doris/rewrite/FunctionAlias.java
index b32cc9919b1..29cf2988cfd 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/rewrite/FunctionAlias.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/rewrite/FunctionAlias.java
@@ -27,8 +27,8 @@ import com.google.common.collect.ImmutableMap;
 import java.util.Map;
 
 /**
- * Change functio name to function class name on nereids
- * alias list: catalog/BuiltinScalarFunctions.java
+ * Change functio name to function class name on nereids alias list:
+ * catalog/BuiltinScalarFunctions.java
  */
 public final class FunctionAlias implements ExprRewriteRule {
     public static ExprRewriteRule INSTANCE = new FunctionAlias();
@@ -41,7 +41,8 @@ public final class FunctionAlias implements ExprRewriteRule {
             .put("inet_aton", "ipv4_string_to_num_or_null").put("inet6_ntoa", 
"ipv6_num_to_string")
             .put("inet6_aton", "ipv6_string_to_num_or_null").put("lcase", 
"lower").put("add_months", "months_add")
             .put("current_timestamp", "now").put("localtime", 
"now").put("localtimestamp", "now").put("ifnull", "nvl")
-            .put("rand", "random").put("sha", "sha1").put("substr", 
"substring").put("ucase", "upper").build();
+            .put("rand", "random").put("sha", "sha1").put("substr", 
"substring").put("ucase", "upper")
+            .put("approx_count_distinct", "ndv").build();
 
     @Override
     public Expr apply(Expr expr, Analyzer analyzer, ExprRewriter.ClauseType 
clauseType) throws AnalysisException {
diff --git a/regression-test/data/mv_p0/ut/testNDVToHll/testNDVToHll.out 
b/regression-test/data/mv_p0/test_approx_count_distinct/test_approx_count_distinct.out
similarity index 88%
copy from regression-test/data/mv_p0/ut/testNDVToHll/testNDVToHll.out
copy to 
regression-test/data/mv_p0/test_approx_count_distinct/test_approx_count_distinct.out
index 61924a11ab7..7afb3700d9e 100644
--- a/regression-test/data/mv_p0/ut/testNDVToHll/testNDVToHll.out
+++ 
b/regression-test/data/mv_p0/test_approx_count_distinct/test_approx_count_distinct.out
@@ -8,3 +8,7 @@
 1      2
 2      1
 
+-- !select_mv --
+1      2
+2      1
+
diff --git a/regression-test/data/mv_p0/ut/testNDVToHll/testNDVToHll.out 
b/regression-test/data/mv_p0/test_ndv/test_ndv.out
similarity index 88%
copy from regression-test/data/mv_p0/ut/testNDVToHll/testNDVToHll.out
copy to regression-test/data/mv_p0/test_ndv/test_ndv.out
index 61924a11ab7..7afb3700d9e 100644
--- a/regression-test/data/mv_p0/ut/testNDVToHll/testNDVToHll.out
+++ b/regression-test/data/mv_p0/test_ndv/test_ndv.out
@@ -8,3 +8,7 @@
 1      2
 2      1
 
+-- !select_mv --
+1      2
+2      1
+
diff --git a/regression-test/data/mv_p0/ut/testNDVToHll/testNDVToHll.out 
b/regression-test/data/mv_p0/ut/testNDVToHll/testNDVToHll.out
index 61924a11ab7..7afb3700d9e 100644
--- a/regression-test/data/mv_p0/ut/testNDVToHll/testNDVToHll.out
+++ b/regression-test/data/mv_p0/ut/testNDVToHll/testNDVToHll.out
@@ -8,3 +8,7 @@
 1      2
 2      1
 
+-- !select_mv --
+1      2
+2      1
+
diff --git a/regression-test/suites/mv_p0/ut/testNDVToHll/testNDVToHll.groovy 
b/regression-test/suites/mv_p0/test_approx_count_distinct/test_approx_count_distinct.groovy
similarity index 83%
copy from regression-test/suites/mv_p0/ut/testNDVToHll/testNDVToHll.groovy
copy to 
regression-test/suites/mv_p0/test_approx_count_distinct/test_approx_count_distinct.groovy
index cdd2978f071..900447d3e5c 100644
--- a/regression-test/suites/mv_p0/ut/testNDVToHll/testNDVToHll.groovy
+++ 
b/regression-test/suites/mv_p0/test_approx_count_distinct/test_approx_count_distinct.groovy
@@ -17,7 +17,7 @@
 
 import org.codehaus.groovy.runtime.IOGroovyMethods
 
-suite ("testNDVToHll") {
+suite ("test_approx_count_distinct") {
     sql """set enable_nereids_planner=true;"""
     sql """set enable_fallback_to_original_planner=false;"""
     sql """ DROP TABLE IF EXISTS user_tags; """
@@ -33,7 +33,7 @@ suite ("testNDVToHll") {
     sql """insert into user_tags values("2020-01-01",1,"a",1);"""
     sql """insert into user_tags values("2020-01-02",2,"b",2);"""
 
-    createMV("create materialized view user_tags_mv as select user_id, 
hll_union(hll_hash(tag_id)) from user_tags group by user_id;")
+    createMV("create materialized view user_tags_mv as select user_id, 
approx_count_distinct(tag_id) from user_tags group by user_id;")
 
     sql """insert into user_tags values("2020-01-01",1,"a",2);"""
 
@@ -48,4 +48,10 @@ suite ("testNDVToHll") {
         contains "(user_tags_mv)"
     }
     qt_select_mv "select user_id, ndv(tag_id) a from user_tags group by 
user_id order by user_id;"
+
+    explain {
+        sql("select user_id, approx_count_distinct(tag_id) a from user_tags 
group by user_id order by user_id;")
+        contains "(user_tags_mv)"
+    }
+    qt_select_mv "select user_id, approx_count_distinct(tag_id) a from 
user_tags group by user_id order by user_id;"
 }
diff --git a/regression-test/suites/mv_p0/ut/testNDVToHll/testNDVToHll.groovy 
b/regression-test/suites/mv_p0/test_ndv/test_ndv.groovy
similarity index 85%
copy from regression-test/suites/mv_p0/ut/testNDVToHll/testNDVToHll.groovy
copy to regression-test/suites/mv_p0/test_ndv/test_ndv.groovy
index cdd2978f071..b4be75f53ed 100644
--- a/regression-test/suites/mv_p0/ut/testNDVToHll/testNDVToHll.groovy
+++ b/regression-test/suites/mv_p0/test_ndv/test_ndv.groovy
@@ -17,7 +17,7 @@
 
 import org.codehaus.groovy.runtime.IOGroovyMethods
 
-suite ("testNDVToHll") {
+suite ("test_ndv") {
     sql """set enable_nereids_planner=true;"""
     sql """set enable_fallback_to_original_planner=false;"""
     sql """ DROP TABLE IF EXISTS user_tags; """
@@ -33,7 +33,7 @@ suite ("testNDVToHll") {
     sql """insert into user_tags values("2020-01-01",1,"a",1);"""
     sql """insert into user_tags values("2020-01-02",2,"b",2);"""
 
-    createMV("create materialized view user_tags_mv as select user_id, 
hll_union(hll_hash(tag_id)) from user_tags group by user_id;")
+    createMV("create materialized view user_tags_mv as select user_id, 
ndv(tag_id) from user_tags group by user_id;")
 
     sql """insert into user_tags values("2020-01-01",1,"a",2);"""
 
@@ -48,4 +48,10 @@ suite ("testNDVToHll") {
         contains "(user_tags_mv)"
     }
     qt_select_mv "select user_id, ndv(tag_id) a from user_tags group by 
user_id order by user_id;"
+
+    explain {
+        sql("select user_id, approx_count_distinct(tag_id) a from user_tags 
group by user_id order by user_id;")
+        contains "(user_tags_mv)"
+    }
+    qt_select_mv "select user_id, approx_count_distinct(tag_id) a from 
user_tags group by user_id order by user_id;"
 }
diff --git a/regression-test/suites/mv_p0/ut/testNDVToHll/testNDVToHll.groovy 
b/regression-test/suites/mv_p0/ut/testNDVToHll/testNDVToHll.groovy
index cdd2978f071..ec83e476ec8 100644
--- a/regression-test/suites/mv_p0/ut/testNDVToHll/testNDVToHll.groovy
+++ b/regression-test/suites/mv_p0/ut/testNDVToHll/testNDVToHll.groovy
@@ -48,4 +48,10 @@ suite ("testNDVToHll") {
         contains "(user_tags_mv)"
     }
     qt_select_mv "select user_id, ndv(tag_id) a from user_tags group by 
user_id order by user_id;"
+
+    explain {
+        sql("select user_id, approx_count_distinct(tag_id) a from user_tags 
group by user_id order by user_id;")
+        contains "(user_tags_mv)"
+    }
+    qt_select_mv "select user_id, approx_count_distinct(tag_id) a from 
user_tags group by user_id order by user_id;"
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to