This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch dev-1.0.1 in repository https://gitbox.apache.org/repos/asf/doris.git
commit 36bbe02f96cf2dd6d8370b5ff7cc5cee0a924c5d Author: morningman <morning...@163.com> AuthorDate: Fri Jun 24 13:03:04 2022 +0800 [hotfix] change hive, broker, iceberg table query to non-vec engine --- .../java/org/apache/doris/analysis/FromClause.java | 37 +++++++++++++++++++++- ...ectorizedUtil.java => VecNotImplException.java} | 21 +++--------- .../apache/doris/common/util/VectorizedUtil.java | 19 +++++++++++ .../java/org/apache/doris/qe/StmtExecutor.java | 13 ++++++-- thirdparty/vars.sh | 2 +- 5 files changed, 70 insertions(+), 22 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/FromClause.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/FromClause.java index be71841967..e77fd6ac21 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FromClause.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FromClause.java @@ -20,11 +20,14 @@ package org.apache.doris.analysis; import org.apache.doris.catalog.Database; import org.apache.doris.catalog.Table; +import org.apache.doris.catalog.Table.TableType; import org.apache.doris.cluster.ClusterNamespace; import org.apache.doris.common.AnalysisException; import org.apache.doris.common.ErrorCode; import org.apache.doris.common.ErrorReport; import org.apache.doris.common.UserException; +import org.apache.doris.common.VecNotImplException; +import org.apache.doris.common.util.VectorizedUtil; import com.google.common.base.Preconditions; import com.google.common.base.Strings; @@ -145,15 +148,47 @@ public class FromClause implements ParseNode, Iterable<TableRef> { leftTblRef = tblRef; } + checkExternalTable(analyzer); // TODO: remove when query from hive table is supported checkFromHiveTable(analyzer); analyzed_ = true; } + private void checkExternalTable(Analyzer analyzer) throws UserException { + for (TableRef tblRef : tableRefs_) { + if (!(tblRef instanceof BaseTableRef)) { + continue; + } + + TableName tableName = tblRef.getName(); + String dbName = tableName.getDb(); + if (Strings.isNullOrEmpty(dbName)) { + dbName = analyzer.getDefaultDb(); + } else { + dbName = ClusterNamespace.getFullName(analyzer.getClusterName(), tblRef.getName().getDb()); + } + if (Strings.isNullOrEmpty(dbName)) { + ErrorReport.reportAnalysisException(ErrorCode.ERR_NO_DB_ERROR); + } + + Database db = analyzer.getCatalog().getDbOrAnalysisException(dbName); + String tblName = tableName.getTbl(); + Table table = db.getTableOrAnalysisException(tblName); + if (VectorizedUtil.isVectorized()) { + if (table.getType() == TableType.BROKER || table.getType() == TableType.HIVE + || table.getType() == TableType.ICEBERG) { + throw new VecNotImplException("Not support table type " + table.getType() + " in vec engine"); + } + } + } + } + public FromClause clone() { ArrayList<TableRef> clone = Lists.newArrayList(); - for (TableRef tblRef: tableRefs_) clone.add(tblRef.clone()); + for (TableRef tblRef : tableRefs_) { + clone.add(tblRef.clone()); + } return new FromClause(clone); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/VectorizedUtil.java b/fe/fe-core/src/main/java/org/apache/doris/common/VecNotImplException.java similarity index 53% copy from fe/fe-core/src/main/java/org/apache/doris/common/util/VectorizedUtil.java copy to fe/fe-core/src/main/java/org/apache/doris/common/VecNotImplException.java index 6146bbc5a8..2c5d12e7d8 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/util/VectorizedUtil.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/VecNotImplException.java @@ -15,23 +15,10 @@ // specific language governing permissions and limitations // under the License. -package org.apache.doris.common.util; +package org.apache.doris.common; -import org.apache.doris.qe.ConnectContext; - -public class VectorizedUtil { - /** - * 1. Return false if there is no current connection (Rule1 to be changed) - * 2. Returns the vectorized switch value of the query 'globalState.enableQueryVec' - * 3. If it is not currently a query, return the vectorized switch value of the session 'enableVectorizedEngine' - * @return true: vec. false: non-vec - */ - public static boolean isVectorized() { - ConnectContext connectContext = ConnectContext.get(); - if (connectContext == null) { - return false; - } - return connectContext.getSessionVariable().enableVectorizedEngine(); +public class VecNotImplException extends UserException { + public VecNotImplException(String msg) { + super(msg); } } - diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/VectorizedUtil.java b/fe/fe-core/src/main/java/org/apache/doris/common/util/VectorizedUtil.java index 6146bbc5a8..7e3a501ebd 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/util/VectorizedUtil.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/util/VectorizedUtil.java @@ -17,7 +17,12 @@ package org.apache.doris.common.util; +import org.apache.doris.analysis.SetVar; +import org.apache.doris.analysis.StringLiteral; +import org.apache.doris.common.DdlException; import org.apache.doris.qe.ConnectContext; +import org.apache.doris.qe.SessionVariable; +import org.apache.doris.qe.VariableMgr; public class VectorizedUtil { /** @@ -33,5 +38,19 @@ public class VectorizedUtil { } return connectContext.getSessionVariable().enableVectorizedEngine(); } + + public static void switchToQueryNonVec() { + ConnectContext connectContext = ConnectContext.get(); + if (connectContext == null) { + return; + } + SessionVariable sessionVariable = connectContext.getSessionVariable(); + sessionVariable.setIsSingleSetVar(true); + try { + VariableMgr.setVar(sessionVariable, new SetVar("enable_vectorized_engine", new StringLiteral("false"))); + } catch (DdlException e) { + // do nothing + } + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java index 7531f00e45..db4251206b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java @@ -67,6 +67,7 @@ import org.apache.doris.common.ErrorReport; import org.apache.doris.common.FeConstants; import org.apache.doris.common.MetaNotFoundException; import org.apache.doris.common.UserException; +import org.apache.doris.common.VecNotImplException; import org.apache.doris.common.Version; import org.apache.doris.common.util.DebugUtil; import org.apache.doris.common.util.MetaLockUtils; @@ -76,6 +77,7 @@ import org.apache.doris.common.util.QueryPlannerProfile; import org.apache.doris.common.util.RuntimeProfile; import org.apache.doris.common.util.SqlParserUtils; import org.apache.doris.common.util.TimeUtils; +import org.apache.doris.common.util.VectorizedUtil; import org.apache.doris.load.EtlJobType; import org.apache.doris.metric.MetricRepo; import org.apache.doris.mysql.MysqlChannel; @@ -118,7 +120,7 @@ import com.google.common.base.Strings; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; - +import com.google.protobuf.ByteString; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.thrift.TException; @@ -137,8 +139,6 @@ import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicLong; import java.util.stream.Collectors; -import com.google.protobuf.ByteString; - // Do one COM_QUERY process. // first: Parse receive byte array to statement struct. // second: Do handle function for statement. @@ -594,6 +594,13 @@ public class StmtExecutor implements ProfileWriter { } else { resetAnalyzerAndStmt(); } + } catch (VecNotImplException e) { + if (i == analyzeTimes) { + throw e; + } else { + resetAnalyzerAndStmt(); + VectorizedUtil.switchToQueryNonVec(); + } } catch (UserException e) { throw e; } catch (Exception e) { diff --git a/thirdparty/vars.sh b/thirdparty/vars.sh index d0121cfc95..8d9ce00628 100755 --- a/thirdparty/vars.sh +++ b/thirdparty/vars.sh @@ -45,7 +45,7 @@ export TP_LIB_DIR=$TP_INSTALL_DIR/lib export TP_JAR_DIR=$TP_INSTALL_DIR/lib/jar # source of all dependencies, default unuse it -export REPOSITORY_URL=https://doris-thirdparty-hk-1308700295.cos.ap-hongkong.myqcloud.com/thirdparty +export REPOSITORY_URL= ##################################################### # Download url, filename and unpaced filename --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org