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

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


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new 967801ca666 [feature](Nereids) support query on ES table in internal 
catalog (#40449) (#40754)
967801ca666 is described below

commit 967801ca666f84a60010bef1f6ca5ca777d5b901
Author: morrySnow <[email protected]>
AuthorDate: Thu Sep 12 20:01:48 2024 +0800

    [feature](Nereids) support query on ES table in internal catalog (#40449) 
(#40754)
    
    pick from master #40449
---
 .../glue/translator/PhysicalPlanTranslator.java    |  6 +-
 .../doris/nereids/rules/analysis/BindRelation.java | 11 +---
 .../nereids/trees/plans/logical/LogicalEsScan.java | 21 +++----
 .../trees/plans/physical/PhysicalEsScan.java       | 11 +---
 .../apache/doris/planner/StatisticDeriveTest.java  | 27 ---------
 .../test_push_conjunct_external_table.groovy       | 67 ----------------------
 6 files changed, 16 insertions(+), 127 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
index 129854b7ff9..78a6a083090 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
@@ -48,6 +48,7 @@ import org.apache.doris.catalog.TableIf;
 import org.apache.doris.catalog.Type;
 import org.apache.doris.datasource.ExternalTable;
 import org.apache.doris.datasource.FileQueryScanNode;
+import org.apache.doris.datasource.es.EsExternalTable;
 import org.apache.doris.datasource.es.source.EsScanNode;
 import org.apache.doris.datasource.hive.HMSExternalTable;
 import org.apache.doris.datasource.hive.HMSExternalTable.DLAType;
@@ -624,9 +625,10 @@ public class PhysicalPlanTranslator extends 
DefaultPlanVisitor<PlanFragment, Pla
     @Override
     public PlanFragment visitPhysicalEsScan(PhysicalEsScan esScan, 
PlanTranslatorContext context) {
         List<Slot> slots = esScan.getOutput();
-        ExternalTable table = esScan.getTable();
+        TableIf table = esScan.getTable();
         TupleDescriptor tupleDescriptor = generateTupleDesc(slots, table, 
context);
-        EsScanNode esScanNode = new EsScanNode(context.nextPlanNodeId(), 
tupleDescriptor, true);
+        EsScanNode esScanNode = new EsScanNode(context.nextPlanNodeId(), 
tupleDescriptor,
+                table instanceof EsExternalTable);
         esScanNode.setNereidsId(esScan.getId());
         
esScanNode.addConjuncts(translateToLegacyConjuncts(esScan.getConjuncts()));
         Utils.execWithUncheckedException(esScanNode::init);
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 67000b3fee9..4e18039c4b1 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
@@ -33,7 +33,6 @@ import org.apache.doris.common.Config;
 import org.apache.doris.common.Pair;
 import org.apache.doris.common.util.Util;
 import org.apache.doris.datasource.ExternalTable;
-import org.apache.doris.datasource.es.EsExternalTable;
 import org.apache.doris.datasource.hive.HMSExternalTable;
 import org.apache.doris.datasource.hive.HMSExternalTable.DLAType;
 import org.apache.doris.nereids.CTEContext;
@@ -416,17 +415,11 @@ public class BindRelation extends OneAnalysisRuleFactory {
                 case ODBC:
                     return new 
LogicalOdbcScan(unboundRelation.getRelationId(), table, 
qualifierWithoutTableName);
                 case ES_EXTERNAL_TABLE:
-                    return new LogicalEsScan(unboundRelation.getRelationId(), 
(EsExternalTable) table,
-                            qualifierWithoutTableName);
+                case ELASTICSEARCH:
+                    return new LogicalEsScan(unboundRelation.getRelationId(), 
table, qualifierWithoutTableName);
                 case TEST_EXTERNAL_TABLE:
                     return new 
LogicalTestScan(unboundRelation.getRelationId(), table, 
qualifierWithoutTableName);
                 default:
-                    try {
-                        // TODO: support other type table, such as 
ELASTICSEARCH
-                        
cascadesContext.getConnectContext().getSessionVariable().enableFallbackToOriginalPlannerOnce();
-                    } catch (Exception e) {
-                        // ignore
-                    }
                     throw new AnalysisException("Unsupported tableType " + 
table.getType());
             }
         } finally {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEsScan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEsScan.java
index ea278aa203c..58954694422 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEsScan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEsScan.java
@@ -17,7 +17,7 @@
 
 package org.apache.doris.nereids.trees.plans.logical;
 
-import org.apache.doris.datasource.ExternalTable;
+import org.apache.doris.catalog.TableIf;
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.trees.expressions.Expression;
@@ -27,7 +27,6 @@ import org.apache.doris.nereids.trees.plans.RelationId;
 import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
 import org.apache.doris.nereids.util.Utils;
 
-import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableSet;
 
 import java.util.List;
@@ -42,22 +41,16 @@ public class LogicalEsScan extends LogicalExternalRelation {
     /**
      * Constructor for LogicalEsScan.
      */
-    public LogicalEsScan(RelationId id, ExternalTable table, List<String> 
qualifier,
+    public LogicalEsScan(RelationId id, TableIf table, List<String> qualifier,
                            Optional<GroupExpression> groupExpression,
                            Optional<LogicalProperties> logicalProperties, 
Set<Expression> conjuncts) {
         super(id, PlanType.LOGICAL_ES_SCAN, table, qualifier, conjuncts, 
groupExpression, logicalProperties);
     }
 
-    public LogicalEsScan(RelationId id, ExternalTable table, List<String> 
qualifier) {
+    public LogicalEsScan(RelationId id, TableIf table, List<String> qualifier) 
{
         this(id, table, qualifier, Optional.empty(), Optional.empty(), 
ImmutableSet.of());
     }
 
-    @Override
-    public ExternalTable getTable() {
-        Preconditions.checkArgument(table instanceof ExternalTable);
-        return (ExternalTable) table;
-    }
-
     @Override
     public String toString() {
         return Utils.toSqlString("LogicalEsScan",
@@ -68,26 +61,26 @@ public class LogicalEsScan extends LogicalExternalRelation {
 
     @Override
     public LogicalEsScan withGroupExpression(Optional<GroupExpression> 
groupExpression) {
-        return new LogicalEsScan(relationId, (ExternalTable) table, qualifier, 
groupExpression,
+        return new LogicalEsScan(relationId, table, qualifier, groupExpression,
             Optional.of(getLogicalProperties()), conjuncts);
     }
 
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
-        return new LogicalEsScan(relationId, (ExternalTable) table, qualifier, 
groupExpression, logicalProperties,
+        return new LogicalEsScan(relationId, table, qualifier, 
groupExpression, logicalProperties,
                 conjuncts);
     }
 
     @Override
     public LogicalEsScan withConjuncts(Set<Expression> conjuncts) {
-        return new LogicalEsScan(relationId, (ExternalTable) table, qualifier, 
Optional.empty(),
+        return new LogicalEsScan(relationId, table, qualifier, 
Optional.empty(),
                 Optional.of(getLogicalProperties()), conjuncts);
     }
 
     @Override
     public LogicalEsScan withRelationId(RelationId relationId) {
-        return new LogicalEsScan(relationId, (ExternalTable) table, qualifier, 
Optional.empty(),
+        return new LogicalEsScan(relationId, table, qualifier, 
Optional.empty(),
                 Optional.empty(), conjuncts);
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalEsScan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalEsScan.java
index 2f3a399ee23..474436f1dbb 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalEsScan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalEsScan.java
@@ -17,7 +17,7 @@
 
 package org.apache.doris.nereids.trees.plans.physical;
 
-import org.apache.doris.datasource.ExternalTable;
+import org.apache.doris.catalog.TableIf;
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.DistributionSpec;
 import org.apache.doris.nereids.properties.LogicalProperties;
@@ -48,7 +48,7 @@ public class PhysicalEsScan extends PhysicalCatalogRelation {
     /**
      * Constructor for PhysicalEsScan.
      */
-    public PhysicalEsScan(RelationId id, ExternalTable table, List<String> 
qualifier,
+    public PhysicalEsScan(RelationId id, TableIf table, List<String> qualifier,
             DistributionSpec distributionSpec, Optional<GroupExpression> 
groupExpression,
             LogicalProperties logicalProperties, Set<Expression> conjuncts) {
         super(id, PlanType.PHYSICAL_ES_SCAN, table, qualifier, 
groupExpression, logicalProperties);
@@ -59,7 +59,7 @@ public class PhysicalEsScan extends PhysicalCatalogRelation {
     /**
      * Constructor for PhysicalEsScan.
      */
-    public PhysicalEsScan(RelationId id, ExternalTable table, List<String> 
qualifier,
+    public PhysicalEsScan(RelationId id, TableIf table, List<String> qualifier,
             DistributionSpec distributionSpec, Optional<GroupExpression> 
groupExpression,
             LogicalProperties logicalProperties, PhysicalProperties 
physicalProperties, Statistics statistics,
             Set<Expression> conjuncts) {
@@ -96,11 +96,6 @@ public class PhysicalEsScan extends PhysicalCatalogRelation {
                 groupExpression, logicalProperties.get(), conjuncts);
     }
 
-    @Override
-    public ExternalTable getTable() {
-        return (ExternalTable) table;
-    }
-
     @Override
     public PhysicalEsScan withPhysicalPropertiesAndStats(PhysicalProperties 
physicalProperties,
                                                            Statistics 
statsDeriveResult) {
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/planner/StatisticDeriveTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/planner/StatisticDeriveTest.java
index 0771508d49a..f66f9cb0777 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/planner/StatisticDeriveTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/planner/StatisticDeriveTest.java
@@ -61,18 +61,6 @@ public class StatisticDeriveTest extends TestWithFeService {
                         + "  \"replication_num\" = \"1\"\n"
                         + ");");
 
-        createTable("create external table test.mysql_table\n"
-                + "(k1 int, k2 int)\n"
-                + "ENGINE=MYSQL\n"
-                + "PROPERTIES (\n"
-                + "\"host\" = \"127.0.0.1\",\n"
-                + "\"port\" = \"3306\",\n"
-                + "\"user\" = \"root\",\n"
-                + "\"password\" = \"123\",\n"
-                + "\"database\" = \"db1\",\n"
-                + "\"table\" = \"tbl1\"\n"
-                + ");");
-
         createTable("create external table test.odbc_oracle\n"
                 + "(k1 float, k2 int)\n"
                 + "ENGINE=ODBC\n"
@@ -216,21 +204,6 @@ public class StatisticDeriveTest extends TestWithFeService 
{
         assertSQLPlanOrErrorMsgContains(sql, "HASH JOIN");
     }
 
-    @Test
-    public void testMysqlScanStatsDerive() throws Exception {
-        String sql = "select * from test.mysql_table";
-        SessionVariable sessionVariable = connectContext.getSessionVariable();
-        sessionVariable.setEnableJoinReorderBasedCost(true);
-        sessionVariable.setDisableJoinReorder(false);
-        StmtExecutor stmtExecutor = new StmtExecutor(connectContext, sql);
-        stmtExecutor.execute();
-        Assert.assertNotNull(stmtExecutor.planner());
-        Assert.assertNotNull(stmtExecutor.planner().getFragments());
-        Assert.assertNotEquals(0, 
stmtExecutor.planner().getFragments().size());
-        System.out.println(getSQLPlanOrErrorMsg("explain " + sql));
-        assertSQLPlanOrErrorMsgContains(sql, "SCAN MYSQL");
-    }
-
     @Test
     public void testOdbcScanStatsDerive() throws Exception {
         String sql = "select * from test.odbc_mysql";
diff --git 
a/regression-test/suites/correctness_p0/test_push_conjunct_external_table.groovy
 
b/regression-test/suites/correctness_p0/test_push_conjunct_external_table.groovy
deleted file mode 100644
index 008be4f11b9..00000000000
--- 
a/regression-test/suites/correctness_p0/test_push_conjunct_external_table.groovy
+++ /dev/null
@@ -1,67 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
- // or more contributor license agreements.  See the NOTICE file
- // distributed with this work for additional information
- // regarding copyright ownership.  The ASF licenses this file
- // to you under the Apache License, Version 2.0 (the
- // "License"); you may not use this file except in compliance
- // with the License.  You may obtain a copy of the License at
- //
- //   http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing,
- // software distributed under the License is distributed on an
- // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- // KIND, either express or implied.  See the License for the
- // specific language governing permissions and limitations
- // under the License.
-
-suite("test_push_conjunct_external_table") {
- sql """ DROP TABLE IF EXISTS dim_server; """
- sql """ admin set frontend config("enable_odbc_mysql_broker_table" = 
"true")"""
-
- sql """
-     CREATE EXTERNAL TABLE `dim_server` (
-    `col1` varchar(50) NOT NULL,
-    `col2` varchar(50) NOT NULL
-    ) ENGINE=mysql
-    PROPERTIES
-    (
-    "host" = "127.0.0.1",
-    "port" = "8239",
-    "user" = "mysql_user",
-    "password" = "mysql_passwd",
-    "database" = "mysql_db_test",
-    "table" = "mysql_table_test",
-    "charset" = "utf8mb4"
-    );
- """
-
- sql """
-     DROP view if exists ads_oreo_sid_report;
- """
-
- sql """
-     create view ads_oreo_sid_report
-    (
-    `col1` ,
-        `col2`
-    )
-    AS
-    select
-    tmp.col1,tmp.col2
-    from (
-    select 'abc' as col1,'def' as col2
-    ) tmp
-    inner join dim_server ds on tmp.col1 = ds.col1  and tmp.col2 = ds.col2;
- """
-
- explain {
-        sql """select * from ads_oreo_sid_report where col1='abc' and 
col2='def';"""
-        contains "`ds`.`col1` = 'abc'"
-        contains "`ds`.`col2` = 'def'"
-    }
-
-    sql """ DROP TABLE IF EXISTS dim_server; """
-    sql """ DROP view if exists ads_oreo_sid_report; """
-}
-


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

Reply via email to