[
https://issues.apache.org/jira/browse/HIVE-25792?focusedWorklogId=696789&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-696789
]
ASF GitHub Bot logged work on HIVE-25792:
-----------------------------------------
Author: ASF GitHub Bot
Created on: 15/Dec/21 18:00
Start Date: 15/Dec/21 18:00
Worklog Time Spent: 10m
Work Description: zabetak commented on a change in pull request #2865:
URL: https://github.com/apache/hive/pull/2865#discussion_r769864327
##########
File path: ql/src/java/org/apache/hadoop/hive/ql/reexec/ReExecDriver.java
##########
@@ -56,73 +58,92 @@
* Covers the IDriver interface, handles query re-execution; and asks clear
questions from the underlying re-execution plugins.
*/
public class ReExecDriver implements IDriver {
+ private static final Logger LOG =
LoggerFactory.getLogger(ReExecDriver.class);
+ private static final SessionState.LogHelper CONSOLE = new
SessionState.LogHelper(LOG);
- private class HandleReOptimizationExplain implements
HiveSemanticAnalyzerHook {
-
- @Override
- public ASTNode preAnalyze(HiveSemanticAnalyzerHookContext context, ASTNode
ast) throws SemanticException {
- if (ast.getType() == HiveParser.TOK_EXPLAIN) {
- int childCount = ast.getChildCount();
- for (int i = 1; i < childCount; i++) {
- if (ast.getChild(i).getType() == HiveParser.KW_REOPTIMIZATION) {
- explainReOptimization = true;
- ast.deleteChild(i);
- break;
- }
- }
- if (explainReOptimization && firstExecution()) {
- Tree execTree = ast.getChild(0);
- execTree.setParent(ast.getParent());
- ast.getParent().setChild(0, execTree);
- return (ASTNode) execTree;
- }
- }
- return ast;
- }
-
- @Override
- public void postAnalyze(HiveSemanticAnalyzerHookContext context,
List<Task<?>> rootTasks)
- throws SemanticException {
- }
- }
+ private final Driver coreDriver;
+ private final QueryState queryState;
+ private final List<IReExecutionPlugin> plugins;
- private static final Logger LOG =
LoggerFactory.getLogger(ReExecDriver.class);
private boolean explainReOptimization;
- private Driver coreDriver;
- private QueryState queryState;
private String currentQuery;
private int executionIndex;
- private ArrayList<IReExecutionPlugin> plugins;
+ public ReExecDriver(QueryState queryState, QueryInfo queryInfo,
List<IReExecutionPlugin> plugins) {
+ this.queryState = queryState;
+ this.coreDriver = new Driver(queryState, queryInfo, null);
+ this.plugins = plugins;
- @Override
- public HiveConf getConf() {
- return queryState.getConf();
+ coreDriver.getHookRunner().addSemanticAnalyzerHook(new
HandleReOptimizationExplain());
+ plugins.forEach(p -> p.initialize(coreDriver));
+ }
+
+ @VisibleForTesting
+ public int compile(String command, boolean resetTaskIds) {
+ return coreDriver.compile(command, resetTaskIds);
}
private boolean firstExecution() {
return executionIndex == 0;
}
- public ReExecDriver(QueryState queryState, QueryInfo queryInfo,
ArrayList<IReExecutionPlugin> plugins) {
- this.queryState = queryState;
- coreDriver = new Driver(queryState, queryInfo, null);
- coreDriver.getHookRunner().addSemanticAnalyzerHook(new
HandleReOptimizationExplain());
- this.plugins = plugins;
-
- for (IReExecutionPlugin p : plugins) {
- p.initialize(coreDriver);
+ private void checkHookConfig() throws CommandProcessorException {
+ String strategies =
coreDriver.getConf().getVar(ConfVars.HIVE_QUERY_REEXECUTION_STRATEGIES);
+ CBOFallbackStrategy fallbackStrategy =
+
CBOFallbackStrategy.valueOf(coreDriver.getConf().getVar(ConfVars.HIVE_CBO_FALLBACK_STRATEGY));
+ if (fallbackStrategy.allowsRetry() &&
+ (strategies == null ||
!Arrays.stream(strategies.split(",")).anyMatch("recompile_without_cbo"::equals)))
{
+ String errorMsg = "Invalid configuration. If fallbackStrategy is set to
" + fallbackStrategy.name() + " then " +
+ ConfVars.HIVE_QUERY_REEXECUTION_STRATEGIES.varname + " should
contain 'recompile_without_cbo'";
+ CONSOLE.printError(errorMsg);
+ throw new CommandProcessorException(errorMsg);
Review comment:
It might not be necessary to add this check if we change the way these
properties interact with each other. For instance, we could drop/replace
`hive.cbo.fallback.strategy` with an alternative that fine tunes the
recompilation hook.
This is another element that points that keeping both as they are right now
complicates code and configuration by end users.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
Issue Time Tracking
-------------------
Worklog Id: (was: 696789)
Time Spent: 5.5h (was: 5h 20m)
> Multi Insert query fails on CBO path
> -------------------------------------
>
> Key: HIVE-25792
> URL: https://issues.apache.org/jira/browse/HIVE-25792
> Project: Hive
> Issue Type: Bug
> Reporter: Zoltan Haindrich
> Assignee: Peter Vary
> Priority: Major
> Labels: pull-request-available
> Time Spent: 5.5h
> Remaining Estimate: 0h
>
> {code}
> set hive.cbo.enable=true;
> drop table if exists aa1;
> drop table if exists bb1;
> drop table if exists cc1;
> drop table if exists dd1;
> drop table if exists ee1;
> drop table if exists ff1;
> create table aa1 ( stf_id string);
> create table bb1 ( stf_id string);
> create table cc1 ( stf_id string);
> create table ff1 ( x string);
> explain
> from ff1 as a join cc1 as b
> insert overwrite table aa1 select stf_id GROUP BY b.stf_id
> insert overwrite table bb1 select b.stf_id GROUP BY b.stf_id
> ;
> {code}
--
This message was sent by Atlassian Jira
(v8.20.1#820001)