You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by st...@apache.org on 2024/11/03 23:36:41 UTC
(impala) branch master updated (1f473f365 -> 5c9b82854)
This is an automated email from the ASF dual-hosted git repository.
stigahuang pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git
from 1f473f365 IMPALA-12390 (part 4): Enable unnecessary-value-param
new e8e8a5150 IMPALA-13441: Support explain statements in Impala planner
new 5c9b82854 IMPALA-13327: Fix wrong unpack dir name for Apache HBase
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
bin/bootstrap_toolchain.py | 2 +-
.../java/org/apache/impala/planner/Planner.java | 17 ++--
.../java/org/apache/impala/service/Frontend.java | 2 +-
.../src/main/codegen/templates/Parser.jj | 57 ++-----------
.../impala/calcite/service/CalciteJniFrontend.java | 54 +++++-------
.../impala/calcite/service/ExecRequestCreator.java | 23 +++---
.../queries/QueryTest/calcite.test | 95 ++++++++++++++++++++++
7 files changed, 145 insertions(+), 105 deletions(-)
(impala) 01/02: IMPALA-13441: Support explain statements in Impala planner
Posted by st...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
stigahuang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git
commit e8e8a5150e21c9b1f92ad5d04a94e8812cdd29dd
Author: Steve Carlin <sc...@cloudera.com>
AuthorDate: Fri May 17 10:35:02 2024 -0700
IMPALA-13441: Support explain statements in Impala planner
This adds support for explain statements for the Calcite planner.
This also fixes up the Parser.jj file so that statements not
processed by Calcite planner will fail, like "describe" and other
non-select statements. The parser will now only handle "select"
and "explain" as the first keyword.
If the parser fails, we need to do an additional check within Impala.
We run the statement through the Impala parser and check the statement
type. If the statement type is anything other than SelectStmt,
we run the query within the original Impala planner. If it is a SelectStmt,
we fail the query because we want all select statements to go through
the Calcite parser.
Change-Id: Iea6afaa1f1698a300ad047c8820691cf7e8eb44b
Reviewed-on: http://gerrit.cloudera.org:8080/21923
Reviewed-by: Impala Public Jenkins <im...@cloudera.com>
Tested-by: Impala Public Jenkins <im...@cloudera.com>
---
.../java/org/apache/impala/planner/Planner.java | 17 ++--
.../java/org/apache/impala/service/Frontend.java | 2 +-
.../src/main/codegen/templates/Parser.jj | 57 ++-----------
.../impala/calcite/service/CalciteJniFrontend.java | 54 +++++-------
.../impala/calcite/service/ExecRequestCreator.java | 23 +++---
.../queries/QueryTest/calcite.test | 95 ++++++++++++++++++++++
6 files changed, 144 insertions(+), 104 deletions(-)
diff --git a/fe/src/main/java/org/apache/impala/planner/Planner.java b/fe/src/main/java/org/apache/impala/planner/Planner.java
index 91c824ae3..131a268e6 100644
--- a/fe/src/main/java/org/apache/impala/planner/Planner.java
+++ b/fe/src/main/java/org/apache/impala/planner/Planner.java
@@ -361,7 +361,8 @@ public class Planner {
if (ctx_.getAnalysisResult().isExplainStmt() || RuntimeEnv.INSTANCE.isTestEnv()) {
explainLevel = ctx_.getQueryOptions().getExplain_level();
}
- return getExplainString(fragments, request, explainLevel);
+ return getExplainString(fragments, request, explainLevel, ctx_.getQueryOptions(),
+ ctx_.getQueryStmt());
}
/**
@@ -369,8 +370,9 @@ public class Planner {
* explicit explain level.
* Includes the estimated resource requirements from the request if set.
*/
- public String getExplainString(List<PlanFragment> fragments,
- TQueryExecRequest request, TExplainLevel explainLevel) {
+ public static String getExplainString(List<PlanFragment> fragments,
+ TQueryExecRequest request, TExplainLevel explainLevel,
+ TQueryOptions options, QueryStmt queryStmt) {
StringBuilder str = new StringBuilder();
boolean hasHeader = false;
@@ -452,9 +454,10 @@ public class Planner {
hasHeader = true;
}
- if (explainLevel.ordinal() >= TExplainLevel.EXTENDED.ordinal()) {
+ if (explainLevel.ordinal() >= TExplainLevel.EXTENDED.ordinal() &&
+ queryStmt != null) {
// In extended explain include the analyzed query text showing implicit casts
- String queryText = ctx_.getQueryStmt().toSql(SHOW_IMPLICIT_CASTS);
+ String queryText = queryStmt.toSql(SHOW_IMPLICIT_CASTS);
String wrappedText = PrintUtils.wrapString("Analyzed query: " + queryText, 80);
str.append(wrappedText).append("\n");
hasHeader = true;
@@ -467,12 +470,12 @@ public class Planner {
if (explainLevel.ordinal() < TExplainLevel.VERBOSE.ordinal()) {
// Print the non-fragmented parallel plan.
- str.append(fragments.get(0).getExplainString(ctx_.getQueryOptions(), explainLevel));
+ str.append(fragments.get(0).getExplainString(options, explainLevel));
} else {
// Print the fragmented parallel plan.
for (int i = 0; i < fragments.size(); ++i) {
PlanFragment fragment = fragments.get(i);
- str.append(fragment.getExplainString(ctx_.getQueryOptions(), explainLevel));
+ str.append(fragment.getExplainString(options, explainLevel));
if (i < fragments.size() - 1) str.append("\n");
}
}
diff --git a/fe/src/main/java/org/apache/impala/service/Frontend.java b/fe/src/main/java/org/apache/impala/service/Frontend.java
index 9b8dab55a..ae398128b 100644
--- a/fe/src/main/java/org/apache/impala/service/Frontend.java
+++ b/fe/src/main/java/org/apache/impala/service/Frontend.java
@@ -3017,7 +3017,7 @@ public class Frontend {
/**
* Attaches the explain result to the TExecRequest.
*/
- private void createExplainRequest(String explainString, TExecRequest result) {
+ public static void createExplainRequest(String explainString, TExecRequest result) {
// update the metadata - one string column
TColumn colDesc = new TColumn("Explain String", Type.STRING.toThrift());
TResultSetMetadata metadata = new TResultSetMetadata(Lists.newArrayList(colDesc));
diff --git a/java/calcite-planner/src/main/codegen/templates/Parser.jj b/java/calcite-planner/src/main/codegen/templates/Parser.jj
index 6a59388dd..f21f912c1 100644
--- a/java/calcite-planner/src/main/codegen/templates/Parser.jj
+++ b/java/calcite-planner/src/main/codegen/templates/Parser.jj
@@ -1132,43 +1132,9 @@ SqlNode SqlStmt() :
}
{
(
-<#-- Add methods to parse additional statements here -->
-<#list (parser.statementParserMethods!default.parser.statementParserMethods) as method>
- LOOKAHEAD(2) stmt = ${method}
- |
-</#list>
- stmt = SqlSetOption(Span.of(), null)
- |
- stmt = SqlAlter()
- |
-<#if (parser.createStatementParserMethods!default.parser.createStatementParserMethods)?size != 0>
- stmt = SqlCreate()
- |
-</#if>
-<#if (parser.dropStatementParserMethods!default.parser.dropStatementParserMethods)?size != 0>
- stmt = SqlDrop()
- |
-</#if>
-<#if (parser.truncateStatementParserMethods!default.parser.truncateStatementParserMethods)?size != 0>
- LOOKAHEAD(2)
- stmt = SqlTruncate()
- |
-</#if>
stmt = OrderedQueryOrExpr(ExprContext.ACCEPT_QUERY)
|
stmt = SqlExplain()
- |
- stmt = SqlDescribe()
- |
- stmt = SqlInsert()
- |
- stmt = SqlDelete()
- |
- stmt = SqlUpdate()
- |
- stmt = SqlMerge()
- |
- stmt = SqlProcedureCall()
)
{
return stmt;
@@ -1395,26 +1361,13 @@ SqlNode SqlExplain() :
final SqlExplainFormat format;
}
{
- <EXPLAIN> <PLAN>
- [ detailLevel = ExplainDetailLevel() ]
- depth = ExplainDepth()
- (
- LOOKAHEAD(2)
- <AS> <XML> { format = SqlExplainFormat.XML; }
- |
- LOOKAHEAD(2)
- <AS> <JSON> { format = SqlExplainFormat.JSON; }
- |
- <AS> <DOT_FORMAT> { format = SqlExplainFormat.DOT; }
- |
- { format = SqlExplainFormat.TEXT; }
- )
- <FOR> stmt = SqlQueryOrDml() {
+ <EXPLAIN>
+ stmt = SqlQueryOrDml() {
return new SqlExplain(getPos(),
stmt,
- detailLevel.symbol(SqlParserPos.ZERO),
- depth.symbol(SqlParserPos.ZERO),
- format.symbol(SqlParserPos.ZERO),
+ SqlExplainLevel.ALL_ATTRIBUTES.symbol(SqlParserPos.ZERO),
+ SqlExplain.Depth.PHYSICAL.symbol(SqlParserPos.ZERO),
+ SqlExplainFormat.TEXT.symbol(SqlParserPos.ZERO),
nDynamicParams);
}
}
diff --git a/java/calcite-planner/src/main/java/org/apache/impala/calcite/service/CalciteJniFrontend.java b/java/calcite-planner/src/main/java/org/apache/impala/calcite/service/CalciteJniFrontend.java
index 54b582a94..44708ac37 100644
--- a/java/calcite-planner/src/main/java/org/apache/impala/calcite/service/CalciteJniFrontend.java
+++ b/java/calcite-planner/src/main/java/org/apache/impala/calcite/service/CalciteJniFrontend.java
@@ -22,7 +22,11 @@ import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.metadata.DefaultRelMetadataProvider;
import org.apache.calcite.rel.metadata.JaninoRelMetadataProvider;
import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.calcite.sql.SqlExplain;
import org.apache.calcite.sql.SqlNode;
+import org.apache.calcite.sql.parser.SqlParseException;
+import org.apache.impala.analysis.Parser;
+import org.apache.impala.analysis.SelectStmt;
import org.apache.impala.calcite.functions.FunctionResolver;
import org.apache.impala.calcite.operators.ImpalaOperatorTable;
import org.apache.impala.calcite.rel.node.NodeWithExprs;
@@ -85,9 +89,6 @@ public class CalciteJniFrontend extends JniFrontend {
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
QueryContext queryCtx = new QueryContext(thriftQueryContext, getFrontend());
- if (!canStmtBePlannedThroughCalcite(queryCtx)) {
- return runThroughOriginalPlanner(thriftQueryContext, queryCtx);
- }
try (FrontendProfile.Scope scope = FrontendProfile.createNewWithScope()) {
LOG.info("Using Calcite Planner for the following query: " + queryCtx.getStmt());
@@ -104,6 +105,11 @@ public class CalciteJniFrontend extends JniFrontend {
new CalciteMetadataHandler(parsedSqlNode, queryCtx);
markEvent(mdHandler, null, queryCtx, "Loaded tables");
+ boolean isExplain = false;
+ if (parsedSqlNode instanceof SqlExplain) {
+ isExplain = true;
+ parsedSqlNode = ((SqlExplain) parsedSqlNode).getExplicandum();
+ }
// Validate the parsed query
CalciteValidator validator = new CalciteValidator(mdHandler, queryCtx);
SqlNode validatedNode = validator.validate(parsedSqlNode);
@@ -127,7 +133,7 @@ public class CalciteJniFrontend extends JniFrontend {
// Create exec request for the server
ExecRequestCreator execRequestCreator =
- new ExecRequestCreator(physPlanCreator, queryCtx, mdHandler);
+ new ExecRequestCreator(physPlanCreator, queryCtx, mdHandler, isExplain);
TExecRequest execRequest = execRequestCreator.create(rootNode);
markEvent(mdHandler, execRequest, queryCtx, "Created exec request");
@@ -136,6 +142,16 @@ public class CalciteJniFrontend extends JniFrontend {
queryCtx.getTimeline().markEvent("Serialized request");
return serializedRequest;
+ } catch (SqlParseException e) {
+ // do a quick parse just to make sure it's not a select stmt. If it is
+ // a select statement, we fail the query since all select statements
+ // should be run through the Calcite Planner.
+ if (Parser.parse(queryCtx.getStmt()) instanceof SelectStmt) {
+ throw new InternalException(e.getMessage());
+ }
+ LOG.info("Calcite planner failed to parse query: " + queryCtx.getStmt());
+ LOG.info("Going to use original Impala planner.");
+ return runThroughOriginalPlanner(thriftQueryContext, queryCtx);
} catch (Exception e) {
LOG.info("Calcite planner failed.");
LOG.info("Exception: " + e);
@@ -147,36 +163,6 @@ public class CalciteJniFrontend extends JniFrontend {
}
}
- /**
- * Use information about the query syntax to see if this can be handled
- * by Calcite
- */
- private boolean canStmtBePlannedThroughCalcite(QueryContext queryCtx) {
- String stringWithFirstRealWord = queryCtx.getStmt();
- String[] lines = stringWithFirstRealWord.split("\n");
- // Get rid of comments and blank lines which start the query. We need to find
- // the first real word.
- // TODO: IMPALA-12976: need to make this more generic. Certain patterns aren't caught
- // here like /* */
- for (String line : lines) {
- if (line.trim().startsWith("--") || line.trim().equals("")) {
- stringWithFirstRealWord = stringWithFirstRealWord.replaceFirst(line + "\n", "");
- } else {
- break;
- }
- }
- stringWithFirstRealWord = stringWithFirstRealWord.trim();
- String beforeStripString;
- do {
- beforeStripString = stringWithFirstRealWord;
- stringWithFirstRealWord = StringUtils.stripStart(stringWithFirstRealWord, "(");
- stringWithFirstRealWord = StringUtils.stripStart(stringWithFirstRealWord, null);
- } while (!stringWithFirstRealWord.equals(beforeStripString));
- return StringUtils.startsWithIgnoreCase(stringWithFirstRealWord, "select") ||
- StringUtils.startsWithIgnoreCase(stringWithFirstRealWord, "values") ||
- StringUtils.startsWithIgnoreCase(stringWithFirstRealWord, "with");
- }
-
/**
* Fallback planner method
*/
diff --git a/java/calcite-planner/src/main/java/org/apache/impala/calcite/service/ExecRequestCreator.java b/java/calcite-planner/src/main/java/org/apache/impala/calcite/service/ExecRequestCreator.java
index 96c0a990c..36cb3d9fc 100644
--- a/java/calcite-planner/src/main/java/org/apache/impala/calcite/service/ExecRequestCreator.java
+++ b/java/calcite-planner/src/main/java/org/apache/impala/calcite/service/ExecRequestCreator.java
@@ -87,12 +87,15 @@ public class ExecRequestCreator implements CompilerStep {
private final CalcitePhysPlanCreator physPlanCreator;
private final CalciteJniFrontend.QueryContext queryCtx;
private final CalciteMetadataHandler mdHandler;
+ private final boolean isExplain;
public ExecRequestCreator(CalcitePhysPlanCreator physPlanCreator,
- CalciteJniFrontend.QueryContext queryCtx, CalciteMetadataHandler mdHandler) {
+ CalciteJniFrontend.QueryContext queryCtx, CalciteMetadataHandler mdHandler,
+ boolean isExplain) {
this.physPlanCreator = physPlanCreator;
this.queryCtx = queryCtx;
this.mdHandler = mdHandler;
+ this.isExplain = isExplain;
}
/**
@@ -146,18 +149,15 @@ public class ExecRequestCreator implements CompilerStep {
List<PlanFragment> allFragments = planFragmentRoot.getNodesPreOrder();
// to mimic the original planner behavior, use EXTENDED mode explain except for
// EXPLAIN statements.
- // TODO: support explain plans
- // TExplainLevel explainLevel =
- // isExplain ? plannerContext.getQueryOptions().getExplain_level() :
- // TExplainLevel.EXTENDED;
- TExplainLevel explainLevel = TExplainLevel.EXTENDED;
- // if (isExplain) {
- // result.setStmt_type(TStmtType.EXPLAIN);
- // }
+ TExplainLevel explainLevel =
+ isExplain ? plannerContext.getQueryOptions().getExplain_level() :
+ TExplainLevel.EXTENDED;
+ if (isExplain) {
+ result.setStmt_type(TStmtType.EXPLAIN);
+ }
String explainString = getExplainString(allFragments, explainLevel, plannerContext);
queryExecRequest.setQuery_plan(explainString);
-
queryCtx.setDesc_tbl_serialized(
plannerContext.getRootAnalyzer().getDescTbl().toSerializedThrift());
@@ -170,6 +170,9 @@ public class ExecRequestCreator implements CompilerStep {
this.queryCtx.getFrontend().addPlannerToProfile("CalcitePlanner");
result.setProfile(FrontendProfile.getCurrent().emitAsThrift());
result.setProfile_children(FrontendProfile.getCurrent().emitChildrenAsThrift());
+ if (isExplain) {
+ this.queryCtx.getFrontend().createExplainRequest(explainString, result);
+ }
return result;
}
diff --git a/testdata/workloads/functional-query/queries/QueryTest/calcite.test b/testdata/workloads/functional-query/queries/QueryTest/calcite.test
index 05a4a8c93..207af6d07 100644
--- a/testdata/workloads/functional-query/queries/QueryTest/calcite.test
+++ b/testdata/workloads/functional-query/queries/QueryTest/calcite.test
@@ -132,6 +132,8 @@ select bigint_col, abs(cast(-3 as bigint)), abs(-3000000000) from functional.all
10,3,3000000000
---- TYPES
bigint,bigint,bigint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# Tiny test for Calcite. At the point of this commit, very few functions work. This
@@ -150,6 +152,8 @@ select cast(cast('2005-12-13 08:00:00' as string) AS TIMESTAMP) from functional
2005-12-13 08:00:00
---- TYPES
timestamp
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
select * from calcite_alltypes where bigint_col = 20;
@@ -157,6 +161,8 @@ select * from calcite_alltypes where bigint_col = 20;
2,true,2,2,2,20,2.200000047683716,20.2,'01/01/09','2',2009-01-01 00:02:00.100000000,2009,1
---- TYPES
int,boolean,tinyint,smallint,int,bigint,float,double,string,string,timestamp,int,int
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
select tinyint_col from calcite_alltypes where bigint_col = 20;
@@ -164,6 +170,8 @@ select tinyint_col from calcite_alltypes where bigint_col = 20;
2
---- TYPES
tinyint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# Values test
@@ -172,6 +180,8 @@ select abs(cast(-8 as bigint));
8
---- TYPES
bigint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
select 'hello'
@@ -179,6 +189,8 @@ select 'hello'
'hello'
---- TYPES
string
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# Union test
@@ -188,6 +200,8 @@ select 3 union select 4;
4
---- TYPES
tinyint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
select * from (values (1)) union (values (2), (3));
@@ -208,6 +222,8 @@ select id, abs(bigint_col) from functional.alltypestiny where id > 3 order by ab
7,10
---- TYPES
int, bigint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# sort test
@@ -220,6 +236,8 @@ select id, abs(bigint_col) from functional.alltypestiny where id >= 3 order by a
7,10
---- TYPES
int, bigint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# sort test
@@ -230,6 +248,8 @@ select id, abs(bigint_col) from functional.alltypestiny where id < 3 order by ab
1,10
---- TYPES
int, bigint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# sort test
@@ -241,6 +261,8 @@ select id, abs(bigint_col) from functional.alltypestiny where id <= 3 order by a
3,10
---- TYPES
int, bigint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# sort test
@@ -255,6 +277,8 @@ select id, abs(bigint_col) from functional.alltypestiny where id != 3 order by a
7,10
---- TYPES
int, bigint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# sort test
@@ -269,6 +293,8 @@ select id, abs(bigint_col) from functional.alltypestiny where id != 3 order by a
6,0
---- TYPES
int, bigint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# sort test
@@ -281,6 +307,8 @@ select group_str, some_nulls from functional.nullrows where group_str = 'a' orde
'a','a'
---- TYPES
string, string
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# sort test
@@ -293,6 +321,8 @@ select group_str, some_nulls from functional.nullrows where group_str = 'a' orde
'a','NULL'
---- TYPES
string, string
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# limit test
@@ -312,6 +342,8 @@ select id, abs(bigint_col) from functional.alltypestiny where id > 2 order by ab
3,10
---- TYPES
int, bigint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# aggregation test
@@ -320,6 +352,8 @@ select sum(bigint_col) from functional.alltypestiny;
40
---- TYPES
bigint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# aggregation test
@@ -335,6 +369,8 @@ select id, sum(bigint_col) from functional.alltypestiny group by id order by id;
7,10
---- TYPES
int, bigint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# aggregation test
@@ -347,6 +383,8 @@ having sum(bigint_col) > cast(5 as bigint) order by id;
7,10
---- TYPES
int, bigint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# aggregation test
@@ -375,6 +413,8 @@ NULL,0,0
NULL,10,40
---- TYPES
int, bigint, bigint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# having test
@@ -386,6 +426,8 @@ select id, sum(bigint_col) from functional.alltypestiny group by id having sum(b
7,10
---- TYPES
int, bigint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# join test
@@ -404,6 +446,8 @@ on (a.id = b.id) order by a.id;
7,10,70
---- TYPES
int, bigint, bigint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# join inequality test
@@ -423,6 +467,8 @@ order by a.id;
7,0,10,0
---- TYPES
int, int, bigint, bigint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# cross join test
@@ -449,6 +495,8 @@ order by a.id, b.id;
7,1,10,10
---- TYPES
int, int, bigint, bigint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# left outer join test
@@ -481,6 +529,8 @@ order by a.id
19,90,NULL
---- TYPES
int, bigint, bigint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
select bigint_col + bigint_col, int_col + int_col, smallint_col + smallint_col,
@@ -497,6 +547,8 @@ from functional.alltypestiny;
20,2,2,2,2
---- TYPES
bigint, bigint, int, smallint, int
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
select float_col + int_col, float_col + 3.0, 3.0 + 3.0
@@ -512,6 +564,8 @@ from functional.alltypestiny;
2.10000002384,4.10000002,6.0
---- TYPES
double, decimal, decimal
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
select bigint_col - bigint_col, int_col - int_col, smallint_col - smallint_col,
@@ -654,6 +708,8 @@ select 3 union select 458;
458
---- TYPES
smallint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# case test
@@ -669,6 +725,8 @@ select tinyint_col, case tinyint_col when 1 then 5 else 458 end from functional.
1,5
---- TYPES
tinyint,smallint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# case test
@@ -684,6 +742,8 @@ select tinyint_col, case tinyint_col when 1 then 5 when 2 then 7 else 458 end fr
1,5
---- TYPES
tinyint,smallint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# case test
@@ -699,6 +759,8 @@ select tinyint_col, case tinyint_col when 0 then 458 else 5 end from functional.
1,5
---- TYPES
tinyint,smallint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# case test
@@ -714,6 +776,8 @@ select tinyint_col, case tinyint_col when 0 then 458 end from functional.alltype
1,NULL
---- TYPES
tinyint,smallint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# case test other format (the calcite rexnode should be the same)
@@ -729,6 +793,8 @@ select tinyint_col, case when tinyint_col=00 then 458 else 5 end from functional
1,5
---- TYPES
tinyint,smallint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# or test
@@ -744,6 +810,8 @@ true
true
---- TYPES
boolean
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# and test
@@ -759,6 +827,8 @@ true
true
---- TYPES
boolean
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# sum cast tinyint agg test
@@ -767,6 +837,8 @@ select sum(tinyint_col) from functional.alltypestiny;
4
---- TYPES
bigint
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# duplicate test from analytics-fn.test, delete when it is activated.
@@ -801,6 +873,8 @@ order by date_part;
9999-12-31,2,9999-12-01,9999-12-31
---- TYPES
DATE, BIGINT, DATE, DATE
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# Test ROWS windows with start boundaries
@@ -846,3 +920,24 @@ select "1" as "hello";
'1'
---- TYPES
string
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
+====
+---- QUERY
+explain select * from functional.alltypestiny;
+---- RESULTS: VERIFY_IS_SUBSET
+row_regex:.*01:EXCHANGE.*
+row_regex:.*00:SCAN HDFS.*
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
+====
+---- QUERY
+set explain_level=3;
+explain select * from functional.alltypestiny;
+---- RESULTS: VERIFY_IS_SUBSET
+row_regex:.*01:EXCHANGE.*
+row_regex:.*00:SCAN HDFS.*
+row_regex:.*HDFS partitions=4/4.*
+---- RUNTIME_PROFILE
+row_regex: .*PlannerType: CalcitePlanner.*
+====
(impala) 02/02: IMPALA-13327: Fix wrong unpack dir name for Apache HBase
Posted by st...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
stigahuang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git
commit 5c9b82854a3397572c4adb3c6cebb2e7d1aaad9a
Author: Yubi Lee <eu...@gmail.com>
AuthorDate: Thu Aug 29 08:28:14 2024 +0900
IMPALA-13327: Fix wrong unpack dir name for Apache HBase
Due to wrong unpack dir name for Apache HBase,
it keeps downloading the same package which already exists
Change-Id: I16797cea260c5c6c3c78cf04a5bb6a564ef3504c
Reviewed-on: http://gerrit.cloudera.org:8080/21732
Reviewed-by: Impala Public Jenkins <im...@cloudera.com>
Tested-by: Impala Public Jenkins <im...@cloudera.com>
---
bin/bootstrap_toolchain.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/bin/bootstrap_toolchain.py b/bin/bootstrap_toolchain.py
index 950156565..593744abd 100755
--- a/bin/bootstrap_toolchain.py
+++ b/bin/bootstrap_toolchain.py
@@ -520,7 +520,7 @@ def get_hadoop_downloads():
hbase = ApacheComponent("hbase",
component_path_tmpl="${name}/${version}/",
archive_basename_tmpl="${name}-${version}-hadoop3-bin",
- unpack_directory_tmpl="${name}-${version}")
+ unpack_directory_tmpl="${name}-${version}-hadoop3")
else:
hbase = CdpComponent("hbase",
archive_basename_tmpl="hbase-${version}-bin",