This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push: new 2bb882bab2 [Fix](jdbc catalog) Pass conjuncts to JdbcScanNode and FileScanNode before doing finalize. (#21998) (#22260) 2bb882bab2 is described below commit 2bb882bab2f2c91b5595f6636a3cee38532e0583 Author: Jibing-Li <64681310+jibing...@users.noreply.github.com> AuthorDate: Wed Jul 26 20:09:26 2023 +0800 [Fix](jdbc catalog) Pass conjuncts to JdbcScanNode and FileScanNode before doing finalize. (#21998) (#22260) This is a cherry pick of master commit: #21998 --- .../glue/translator/PhysicalPlanTranslator.java | 16 +++-- .../doris/nereids/jobs/executor/Rewriter.java | 4 +- .../org/apache/doris/nereids/rules/RuleType.java | 1 + .../LogicalJdbcScanToPhysicalJdbcScan.java | 3 +- .../PushConjunctsIntoJdbcScan.java} | 28 ++++---- .../trees/plans/logical/LogicalJdbcScan.java | 29 +++++++-- .../trees/plans/physical/PhysicalJdbcScan.java | 36 ++++++---- .../test_mysql_jdbc_catalog_nereids.out | 76 ++++++++++++---------- .../test_mysql_jdbc_catalog_nereids.groovy | 2 + 9 files changed, 123 insertions(+), 72 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 e98890f4f1..725c2ef2cb 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 @@ -398,10 +398,7 @@ public class PhysicalPlanTranslator extends DefaultPlanVisitor<PlanFragment, Pla } else { throw new RuntimeException("do not support table type " + table.getType()); } - // TODO: should not translate conjunct here. need a new attr in FileScanNode to save push down conjuncts. - fileScan.getConjuncts().stream() - .map(e -> ExpressionTranslator.translate(e, context)) - .forEach(scanNode::addConjunct); + scanNode.addConjuncts(translateToLegacyConjuncts(fileScan.getConjuncts())); TableName tableName = new TableName(null, "", ""); TableRef ref = new TableRef(tableName, null, null); BaseTableRef tableRef = new BaseTableRef(ref, table, tableName); @@ -472,6 +469,7 @@ public class PhysicalPlanTranslator extends DefaultPlanVisitor<PlanFragment, Pla TupleDescriptor tupleDescriptor = generateTupleDesc(slots, table, context); JdbcScanNode jdbcScanNode = new JdbcScanNode(context.nextPlanNodeId(), tupleDescriptor, table instanceof JdbcExternalTable); + jdbcScanNode.addConjuncts(translateToLegacyConjuncts(jdbcScan.getConjuncts())); Utils.execWithUncheckedException(jdbcScanNode::init); context.addScanNode(jdbcScanNode); context.getRuntimeTranslator().ifPresent( @@ -2293,4 +2291,14 @@ public class PhysicalPlanTranslator extends DefaultPlanVisitor<PlanFragment, Pla return true; } + + private List<Expr> translateToLegacyConjuncts(Set<Expression> conjuncts) { + List<Expr> outputExprs = Lists.newArrayList(); + if (conjuncts != null) { + conjuncts.stream() + .map(e -> ExpressionTranslator.translate(e, context)) + .forEach(outputExprs::add); + } + return outputExprs; + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java index 80094100e4..ce3d8b35db 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java @@ -74,6 +74,7 @@ import org.apache.doris.nereids.rules.rewrite.NormalizeSort; import org.apache.doris.nereids.rules.rewrite.PruneFileScanPartition; import org.apache.doris.nereids.rules.rewrite.PruneOlapScanPartition; import org.apache.doris.nereids.rules.rewrite.PruneOlapScanTablet; +import org.apache.doris.nereids.rules.rewrite.PushConjunctsIntoJdbcScan; import org.apache.doris.nereids.rules.rewrite.PushFilterInsideJoin; import org.apache.doris.nereids.rules.rewrite.PushProjectIntoOneRowRelation; import org.apache.doris.nereids.rules.rewrite.PushProjectThroughUnion; @@ -256,7 +257,8 @@ public class Rewriter extends AbstractBatchJobExecutor { // PhysicalLimits with gather exchange new SplitLimit(), new PruneOlapScanPartition(), - new PruneFileScanPartition() + new PruneFileScanPartition(), + new PushConjunctsIntoJdbcScan() ) ), topic("MV optimization", diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java index 03aa1cf3e4..c3a6012b02 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java @@ -204,6 +204,7 @@ public enum RuleType { MATERIALIZED_INDEX_FILTER_PROJECT_SCAN(RuleTypeClass.REWRITE), OLAP_SCAN_PARTITION_PRUNE(RuleTypeClass.REWRITE), FILE_SCAN_PARTITION_PRUNE(RuleTypeClass.REWRITE), + PUSH_CONJUNCTS_INTO_JDBC_SCAN(RuleTypeClass.REWRITE), OLAP_SCAN_TABLET_PRUNE(RuleTypeClass.REWRITE), PUSH_AGGREGATE_TO_OLAP_SCAN(RuleTypeClass.REWRITE), EXTRACT_SINGLE_TABLE_EXPRESSION_FROM_DISJUNCTION(RuleTypeClass.REWRITE), diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalJdbcScanToPhysicalJdbcScan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalJdbcScanToPhysicalJdbcScan.java index 3bff1699ba..6172229525 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalJdbcScanToPhysicalJdbcScan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalJdbcScanToPhysicalJdbcScan.java @@ -37,7 +37,8 @@ public class LogicalJdbcScanToPhysicalJdbcScan extends OneImplementationRuleFact jdbcScan.getQualifier(), DistributionSpecAny.INSTANCE, Optional.empty(), - jdbcScan.getLogicalProperties()) + jdbcScan.getLogicalProperties(), + jdbcScan.getConjuncts()) ).toRule(RuleType.LOGICAL_JDBC_SCAN_TO_PHYSICAL_JDBC_SCAN_RULE); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalJdbcScanToPhysicalJdbcScan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushConjunctsIntoJdbcScan.java similarity index 55% copy from fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalJdbcScanToPhysicalJdbcScan.java copy to fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushConjunctsIntoJdbcScan.java index 3bff1699ba..21d723f956 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalJdbcScanToPhysicalJdbcScan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushConjunctsIntoJdbcScan.java @@ -15,29 +15,25 @@ // specific language governing permissions and limitations // under the License. -package org.apache.doris.nereids.rules.implementation; +package org.apache.doris.nereids.rules.rewrite; -import org.apache.doris.nereids.properties.DistributionSpecAny; import org.apache.doris.nereids.rules.Rule; import org.apache.doris.nereids.rules.RuleType; -import org.apache.doris.nereids.trees.plans.physical.PhysicalJdbcScan; - -import java.util.Optional; +import org.apache.doris.nereids.trees.plans.logical.LogicalFilter; +import org.apache.doris.nereids.trees.plans.logical.LogicalJdbcScan; /** - * Implementation rule that convert logical JdbcScan to physical JdbcScan. + * Rewrite jdbc plan to set the conjuncts. */ -public class LogicalJdbcScanToPhysicalJdbcScan extends OneImplementationRuleFactory { +public class PushConjunctsIntoJdbcScan extends OneRewriteRuleFactory { + @Override public Rule build() { - return logicalJdbcScan().then(jdbcScan -> - new PhysicalJdbcScan( - jdbcScan.getId(), - jdbcScan.getTable(), - jdbcScan.getQualifier(), - DistributionSpecAny.INSTANCE, - Optional.empty(), - jdbcScan.getLogicalProperties()) - ).toRule(RuleType.LOGICAL_JDBC_SCAN_TO_PHYSICAL_JDBC_SCAN_RULE); + return logicalFilter(logicalJdbcScan()).thenApply(ctx -> { + LogicalFilter<LogicalJdbcScan> filter = ctx.root; + LogicalJdbcScan scan = filter.child(); + LogicalJdbcScan rewrittenScan = scan.withConjuncts(filter.getConjuncts()); + return new LogicalFilter<>(filter.getConjuncts(), rewrittenScan); + }).toRule(RuleType.PUSH_CONJUNCTS_INTO_JDBC_SCAN); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJdbcScan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJdbcScan.java index ee12dc521a..358712c094 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJdbcScan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJdbcScan.java @@ -22,6 +22,7 @@ import org.apache.doris.catalog.TableIf; import org.apache.doris.catalog.external.ExternalTable; import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.properties.LogicalProperties; +import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.plans.ObjectId; import org.apache.doris.nereids.trees.plans.Plan; import org.apache.doris.nereids.trees.plans.PlanType; @@ -29,27 +30,34 @@ 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; +import java.util.Objects; import java.util.Optional; +import java.util.Set; /** * Logical scan for external jdbc catalog and jdbc table. */ public class LogicalJdbcScan extends LogicalRelation { + private final Set<Expression> conjuncts; + /** * Constructor for LogicalJdbcScan. */ public LogicalJdbcScan(ObjectId id, TableIf table, List<String> qualifier, Optional<GroupExpression> groupExpression, - Optional<LogicalProperties> logicalProperties) { + Optional<LogicalProperties> logicalProperties, + Set<Expression> conjuncts) { super(id, PlanType.LOGICAL_JDBC_SCAN, table, qualifier, groupExpression, logicalProperties); + this.conjuncts = ImmutableSet.copyOf(Objects.requireNonNull(conjuncts, "conjuncts should not be null")); } public LogicalJdbcScan(ObjectId id, TableIf table, List<String> qualifier) { - this(id, table, qualifier, Optional.empty(), Optional.empty()); + this(id, table, qualifier, Optional.empty(), Optional.empty(), ImmutableSet.of()); } @Override @@ -70,13 +78,18 @@ public class LogicalJdbcScan extends LogicalRelation { @Override public LogicalJdbcScan withGroupExpression(Optional<GroupExpression> groupExpression) { return new LogicalJdbcScan(id, table, qualifier, groupExpression, - Optional.of(getLogicalProperties())); + Optional.of(getLogicalProperties()), conjuncts); + } + + public LogicalJdbcScan withConjuncts(Set<Expression> conjuncts) { + return new LogicalJdbcScan(id, table, qualifier, groupExpression, + Optional.of(getLogicalProperties()), conjuncts); } @Override public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> groupExpression, Optional<LogicalProperties> logicalProperties, List<Plan> children) { - return new LogicalJdbcScan(id, table, qualifier, groupExpression, logicalProperties); + return new LogicalJdbcScan(id, table, qualifier, groupExpression, logicalProperties, conjuncts); } @Override @@ -84,4 +97,12 @@ public class LogicalJdbcScan extends LogicalRelation { return visitor.visitLogicalJdbcScan(this, context); } + @Override + public boolean equals(Object o) { + return super.equals(o) && Objects.equals(conjuncts, ((LogicalJdbcScan) o).conjuncts); + } + + public Set<Expression> getConjuncts() { + return this.conjuncts; + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalJdbcScan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalJdbcScan.java index dd98dd7452..ed17dd05d9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalJdbcScan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalJdbcScan.java @@ -22,6 +22,7 @@ import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.properties.DistributionSpec; import org.apache.doris.nereids.properties.LogicalProperties; import org.apache.doris.nereids.properties.PhysicalProperties; +import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.plans.ObjectId; import org.apache.doris.nereids.trees.plans.Plan; import org.apache.doris.nereids.trees.plans.PlanType; @@ -29,9 +30,12 @@ import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor; import org.apache.doris.nereids.util.Utils; import org.apache.doris.statistics.Statistics; +import com.google.common.collect.ImmutableSet; + import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.Set; /** * Physical jdbc scan for external catalog. @@ -40,29 +44,31 @@ public class PhysicalJdbcScan extends PhysicalRelation { private final TableIf table; private final DistributionSpec distributionSpec; + private final Set<Expression> conjuncts; /** * Constructor for PhysicalJdbcScan. */ - public PhysicalJdbcScan(ObjectId id, TableIf table, List<String> qualifier, - DistributionSpec distributionSpec, Optional<GroupExpression> groupExpression, - LogicalProperties logicalProperties) { + public PhysicalJdbcScan(ObjectId id, TableIf table, List<String> qualifier, DistributionSpec distributionSpec, + Optional<GroupExpression> groupExpression, LogicalProperties logicalProperties, Set<Expression> conjuncts) { super(id, PlanType.PHYSICAL_JDBC_SCAN, qualifier, groupExpression, logicalProperties); this.table = table; this.distributionSpec = distributionSpec; + this.conjuncts = ImmutableSet.copyOf(Objects.requireNonNull(conjuncts, "conjuncts should not be null")); } /** * Constructor for PhysicalJdbcScan. */ public PhysicalJdbcScan(ObjectId id, TableIf table, List<String> qualifier, - DistributionSpec distributionSpec, Optional<GroupExpression> groupExpression, - LogicalProperties logicalProperties, PhysicalProperties physicalProperties, - Statistics statistics) { - super(id, PlanType.PHYSICAL_JDBC_SCAN, qualifier, groupExpression, logicalProperties, - physicalProperties, statistics); + DistributionSpec distributionSpec, Optional<GroupExpression> groupExpression, + LogicalProperties logicalProperties, PhysicalProperties physicalProperties, Statistics statistics, + Set<Expression> conjuncts) { + super(id, PlanType.PHYSICAL_JDBC_SCAN, qualifier, groupExpression, + logicalProperties, physicalProperties, statistics); this.table = table; this.distributionSpec = distributionSpec; + this.conjuncts = ImmutableSet.copyOf(Objects.requireNonNull(conjuncts, "conjuncts should not be null")); } @Override @@ -98,13 +104,15 @@ public class PhysicalJdbcScan extends PhysicalRelation { @Override public PhysicalJdbcScan withGroupExpression(Optional<GroupExpression> groupExpression) { - return new PhysicalJdbcScan(id, table, qualifier, distributionSpec, groupExpression, getLogicalProperties()); + return new PhysicalJdbcScan(id, table, qualifier, distributionSpec, + groupExpression, getLogicalProperties(), conjuncts); } @Override public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> groupExpression, Optional<LogicalProperties> logicalProperties, List<Plan> children) { - return new PhysicalJdbcScan(id, table, qualifier, distributionSpec, groupExpression, logicalProperties.get()); + return new PhysicalJdbcScan(id, table, qualifier, distributionSpec, + groupExpression, logicalProperties.get(), conjuncts); } @Override @@ -115,7 +123,11 @@ public class PhysicalJdbcScan extends PhysicalRelation { @Override public PhysicalJdbcScan withPhysicalPropertiesAndStats(PhysicalProperties physicalProperties, Statistics statistics) { - return new PhysicalJdbcScan(id, table, qualifier, distributionSpec, groupExpression, getLogicalProperties(), - physicalProperties, statistics); + return new PhysicalJdbcScan(id, table, qualifier, distributionSpec, groupExpression, + getLogicalProperties(), physicalProperties, statistics, conjuncts); + } + + public Set<Expression> getConjuncts() { + return this.conjuncts; } } diff --git a/regression-test/data/jdbc_catalog_p0/test_mysql_jdbc_catalog_nereids.out b/regression-test/data/jdbc_catalog_p0/test_mysql_jdbc_catalog_nereids.out index 78eb61a46b..c1cfae034c 100644 --- a/regression-test/data/jdbc_catalog_p0/test_mysql_jdbc_catalog_nereids.out +++ b/regression-test/data/jdbc_catalog_p0/test_mysql_jdbc_catalog_nereids.out @@ -1,4 +1,30 @@ -- This file is automatically generated. You should know what you did if you want to edit this +-- !ex_tb0_explain -- +PLAN FRAGMENT 0 + OUTPUT EXPRS: + id[#0] + PARTITION: UNPARTITIONED + + VRESULT SINK + + 1:VEXCHANGE + offset: 0 + +PLAN FRAGMENT 1 + + PARTITION: RANDOM + + STREAM DATA SINK + EXCHANGE ID: 01 + UNPARTITIONED + + 0:VJdbcScanNode + TABLE: `doris_test`.`ex_tb0` + QUERY: SELECT `id` FROM `doris_test`.`ex_tb0` WHERE (`id`[#0] = 111) + +-- !ex_tb0_where -- +111 + -- !ex_tb0 -- 111 abc 112 abd @@ -157,52 +183,46 @@ bca 2022-11-02 2022-11-02 8012 vivo 123456789012345678901234567890123.12345 12345678901234567890123456789012.12345 1234567890123456789012345678901234.12345 123456789012345678901234567890123.12345 123456789012345678901234567890123456789012345678901234567890.12345 123456789012345678901234567890123456789012345678901234567890.12345 -- !information_schema -- -ADMINISTRABLE_ROLE_AUTHORIZATIONS -APPLICABLE_ROLES CHARACTER_SETS -CHECK_CONSTRAINTS COLLATIONS COLLATION_CHARACTER_SET_APPLICABILITY COLUMNS -COLUMNS_EXTENSIONS COLUMN_PRIVILEGES -COLUMN_STATISTICS -ENABLED_ROLES ENGINES EVENTS FILES +GLOBAL_STATUS +GLOBAL_VARIABLES INNODB_BUFFER_PAGE INNODB_BUFFER_PAGE_LRU INNODB_BUFFER_POOL_STATS -INNODB_CACHED_INDEXES INNODB_CMP INNODB_CMPMEM INNODB_CMPMEM_RESET INNODB_CMP_PER_INDEX INNODB_CMP_PER_INDEX_RESET INNODB_CMP_RESET -INNODB_COLUMNS -INNODB_DATAFILES -INNODB_FIELDS -INNODB_FOREIGN -INNODB_FOREIGN_COLS INNODB_FT_BEING_DELETED INNODB_FT_CONFIG INNODB_FT_DEFAULT_STOPWORD INNODB_FT_DELETED INNODB_FT_INDEX_CACHE INNODB_FT_INDEX_TABLE -INNODB_INDEXES +INNODB_LOCKS +INNODB_LOCK_WAITS INNODB_METRICS -INNODB_SESSION_TEMP_TABLESPACES -INNODB_TABLES -INNODB_TABLESPACES -INNODB_TABLESPACES_BRIEF -INNODB_TABLESTATS +INNODB_SYS_COLUMNS +INNODB_SYS_DATAFILES +INNODB_SYS_FIELDS +INNODB_SYS_FOREIGN +INNODB_SYS_FOREIGN_COLS +INNODB_SYS_INDEXES +INNODB_SYS_TABLES +INNODB_SYS_TABLESPACES +INNODB_SYS_TABLESTATS +INNODB_SYS_VIRTUAL INNODB_TEMP_TABLE_INFO INNODB_TRX -INNODB_VIRTUAL -KEYWORDS KEY_COLUMN_USAGE OPTIMIZER_TRACE PARAMETERS @@ -211,31 +231,19 @@ PLUGINS PROCESSLIST PROFILING REFERENTIAL_CONSTRAINTS -RESOURCE_GROUPS -ROLE_COLUMN_GRANTS -ROLE_ROUTINE_GRANTS -ROLE_TABLE_GRANTS ROUTINES SCHEMATA -SCHEMATA_EXTENSIONS SCHEMA_PRIVILEGES +SESSION_STATUS +SESSION_VARIABLES STATISTICS -ST_GEOMETRY_COLUMNS -ST_SPATIAL_REFERENCE_SYSTEMS -ST_UNITS_OF_MEASURE TABLES TABLESPACES -TABLESPACES_EXTENSIONS -TABLES_EXTENSIONS TABLE_CONSTRAINTS -TABLE_CONSTRAINTS_EXTENSIONS TABLE_PRIVILEGES TRIGGERS -USER_ATTRIBUTES USER_PRIVILEGES VIEWS -VIEW_ROUTINE_USAGE -VIEW_TABLE_USAGE -- !test_insert1 -- doris1 18 diff --git a/regression-test/suites/jdbc_catalog_p0/test_mysql_jdbc_catalog_nereids.groovy b/regression-test/suites/jdbc_catalog_p0/test_mysql_jdbc_catalog_nereids.groovy index a258f4d4f6..396c5bb7b9 100644 --- a/regression-test/suites/jdbc_catalog_p0/test_mysql_jdbc_catalog_nereids.groovy +++ b/regression-test/suites/jdbc_catalog_p0/test_mysql_jdbc_catalog_nereids.groovy @@ -74,6 +74,8 @@ suite("test_mysql_jdbc_catalog_nereids", "p0") { sql """switch ${catalog_name}""" sql """ use ${ex_db_name}""" + qt_ex_tb0_explain """explain select id from ${ex_tb0} where id = 111;""" + qt_ex_tb0_where """select id from ${ex_tb0} where id = 111;""" order_qt_ex_tb0 """ select id, name from ${ex_tb0} order by id; """ sql """ insert into internal.${internal_db_name}.${inDorisTable} select id, name from ${ex_tb0}; """ order_qt_in_tb """ select id, name from internal.${internal_db_name}.${inDorisTable} order by id; """ --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org