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

panxiaolei 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 841f2485d1a [Bug](query) fix meet invalid column when direct scan on 
mow mv (#36483)
841f2485d1a is described below

commit 841f2485d1affd55e2ebba58f9ff1485df9edf91
Author: Pxl <pxl...@qq.com>
AuthorDate: Wed Jun 19 12:39:53 2024 +0800

    [Bug](query) fix meet invalid column when direct scan on mow mv (#36483)
    
    ## Proposed changes
    fix meet invalid column when direct scan on mow mv
    ```
    2024-06-11 18:01:14,079 [query] 
|Client=|User=root|Ctl=internal|Db=__internal_schema|State=OK|ErrorCode=0|ErrorMessage=|Time(ms)=3601|ScanBytes=57344|ScanRows=1|ReturnRows=0|StmtId=0|QueryId=67799c8ba77d4ffb-8a80c73b94bb784c|IsQuery=true|isNereids=true|feIp=10.16.10.8|Stmt=SELECT
 SUBSTRING(CAST(MIN(`mv_(k2 + k3)`) AS STRING), 1, 1024) as min, 
SUBSTRING(CAST(MAX(`mv_(k2 + k3)`) AS STRING), 1, 1024) as max FROM 
`regression_test_mv_p0_test_mv_mow`.`u_table` index `k123p`|CpuTimeMS=3544|S 
[...]
     2024-06-11 18:01:08,291 WARN (Analysis Job Executor-0|521) 
[Coordinator.getNext():1109] Query 67799c8ba77d4ffb-8a80c73b94bb784c 
coordinator get next fail, 
(hk2.dev.selectdb-in.cc)[INTERNAL_ERROR]SegmentIterator meet invalid column, 
id=1, name=mv_(k2 + k3), need cancel
    ```
---
 .../apache/doris/nereids/rules/analysis/BindRelation.java | 10 +++-------
 .../test_mv_mow.out => test_mv_mor/test_mv_mor.out}       | 12 ++++++++++++
 regression-test/data/mv_p0/test_mv_mow/test_mv_mow.out    | 12 ++++++++++++
 .../test_mv_mow.groovy => test_mv_mor/test_mv_mor.groovy} | 15 ++++++++++-----
 .../suites/mv_p0/test_mv_mow/test_mv_mow.groovy           |  8 ++++++--
 5 files changed, 43 insertions(+), 14 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java
index d66b20e36a8..47201680fea 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java
@@ -18,7 +18,6 @@
 package org.apache.doris.nereids.rules.analysis;
 
 import org.apache.doris.catalog.Column;
-import org.apache.doris.catalog.KeysType;
 import org.apache.doris.catalog.OlapTable;
 import org.apache.doris.catalog.Partition;
 import org.apache.doris.catalog.TableIf;
@@ -201,10 +200,8 @@ public class BindRelation extends OneAnalysisRuleFactory {
                     throw new AnalysisException("Table " + olapTable.getName()
                         + " doesn't have materialized view " + 
indexName.get());
                 }
-                PreAggStatus preAggStatus
-                        = 
olapTable.getIndexMetaByIndexId(indexId).getKeysType().equals(KeysType.DUP_KEYS)
-                        ? PreAggStatus.unset()
-                        : PreAggStatus.off("For direct index scan.");
+                PreAggStatus preAggStatus = 
olapTable.isDupKeysOrMergeOnWrite() ? PreAggStatus.unset()
+                        : PreAggStatus.off("For direct index scan on 
mor/agg.");
 
                 scan = new LogicalOlapScan(unboundRelation.getRelationId(),
                     (OlapTable) table, tableQualifier, tabletIds, indexId,
@@ -216,8 +213,7 @@ public class BindRelation extends OneAnalysisRuleFactory {
             }
         }
         if (!Util.showHiddenColumns() && scan.getTable().hasDeleteSign()
-                && !ConnectContext.get().getSessionVariable().skipDeleteSign()
-                && !scan.isDirectMvScan()) {
+                && 
!ConnectContext.get().getSessionVariable().skipDeleteSign()) {
             // table qualifier is catalog.db.table, we make db.table.column
             Slot deleteSlot = null;
             for (Slot slot : scan.getOutput()) {
diff --git a/regression-test/data/mv_p0/test_mv_mow/test_mv_mow.out 
b/regression-test/data/mv_p0/test_mv_mor/test_mv_mor.out
similarity index 63%
copy from regression-test/data/mv_p0/test_mv_mow/test_mv_mow.out
copy to regression-test/data/mv_p0/test_mv_mor/test_mv_mor.out
index 8f75424779a..fbf59000daf 100644
--- a/regression-test/data/mv_p0/test_mv_mow/test_mv_mow.out
+++ b/regression-test/data/mv_p0/test_mv_mor/test_mv_mor.out
@@ -3,3 +3,15 @@
 1      2
 1      3
 
+-- !select_mv --
+1      2
+1      3
+
+-- !select_mv --
+1
+1
+
+-- !select_mv --
+2
+3
+
diff --git a/regression-test/data/mv_p0/test_mv_mow/test_mv_mow.out 
b/regression-test/data/mv_p0/test_mv_mow/test_mv_mow.out
index 8f75424779a..fbf59000daf 100644
--- a/regression-test/data/mv_p0/test_mv_mow/test_mv_mow.out
+++ b/regression-test/data/mv_p0/test_mv_mow/test_mv_mow.out
@@ -3,3 +3,15 @@
 1      2
 1      3
 
+-- !select_mv --
+1      2
+1      3
+
+-- !select_mv --
+1
+1
+
+-- !select_mv --
+2
+3
+
diff --git a/regression-test/suites/mv_p0/test_mv_mow/test_mv_mow.groovy 
b/regression-test/suites/mv_p0/test_mv_mor/test_mv_mor.groovy
similarity index 74%
copy from regression-test/suites/mv_p0/test_mv_mow/test_mv_mow.groovy
copy to regression-test/suites/mv_p0/test_mv_mor/test_mv_mor.groovy
index dfe08f4dcd0..1ca52c75e86 100644
--- a/regression-test/suites/mv_p0/test_mv_mow/test_mv_mow.groovy
+++ b/regression-test/suites/mv_p0/test_mv_mor/test_mv_mor.groovy
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-suite ("test_mv_mow") {
+suite ("test_mv_mor") {
     sql """ drop table if exists u_table; """
 
     sql """
@@ -29,19 +29,24 @@ suite ("test_mv_mow") {
             distributed BY hash(k1) buckets 3
             properties(
                 "replication_num" = "1",
-                "enable_unique_key_merge_on_write" = "true"
+                "enable_unique_key_merge_on_write" = "false"
             );
         """
     sql "insert into u_table select 1,1,1,1;"
     sql "insert into u_table select 1,2,1,1;"
     createMV("create materialized view k123p as select k1,k2+k3 from u_table;")
 
-    sql "insert into u_table select 1,1,1,1;"
-    sql "insert into u_table select 1,2,1,1;"
+    sql "insert into u_table select 1,1,1,2;"
+    sql "insert into u_table select 1,2,1,2;"
 
+    // do not match mv coz preagg is off, mv need contains all key column to 
make row count correct
     explain {
         sql("select k1,k2+k3 from u_table order by k1;")
-        contains "(k123p)"
+        contains "(u_table)"
     }
     qt_select_mv "select k1,k2+k3 from u_table order by k1;"
+
+    qt_select_mv "select * from `u_table` index `k123p` order by 1,2;"
+    qt_select_mv "select mv_k1 from `u_table` index `k123p` order by 1;"
+    qt_select_mv "select `mv_(k2 + k3)` from `u_table` index `k123p` order by 
1;"
 }
diff --git a/regression-test/suites/mv_p0/test_mv_mow/test_mv_mow.groovy 
b/regression-test/suites/mv_p0/test_mv_mow/test_mv_mow.groovy
index dfe08f4dcd0..4187ed94431 100644
--- a/regression-test/suites/mv_p0/test_mv_mow/test_mv_mow.groovy
+++ b/regression-test/suites/mv_p0/test_mv_mow/test_mv_mow.groovy
@@ -36,12 +36,16 @@ suite ("test_mv_mow") {
     sql "insert into u_table select 1,2,1,1;"
     createMV("create materialized view k123p as select k1,k2+k3 from u_table;")
 
-    sql "insert into u_table select 1,1,1,1;"
-    sql "insert into u_table select 1,2,1,1;"
+    sql "insert into u_table select 1,1,1,2;"
+    sql "insert into u_table select 1,2,1,2;"
 
     explain {
         sql("select k1,k2+k3 from u_table order by k1;")
         contains "(k123p)"
     }
     qt_select_mv "select k1,k2+k3 from u_table order by k1;"
+
+    qt_select_mv "select * from `u_table` index `k123p` order by 1,2;"
+    qt_select_mv "select mv_k1 from `u_table` index `k123p` order by 1;"
+    qt_select_mv "select `mv_(k2 + k3)` from `u_table` index `k123p` order by 
1;"
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to