You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by pv...@apache.org on 2019/09/27 08:52:39 UTC
[hive] branch master updated: HIVE-22236: Fail to create View
selecting View containing NOT IN subquery (Zoltan Matyus,
reviewed by Zoltan Haindrich and Peter Vary)
This is an automated email from the ASF dual-hosted git repository.
pvary pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new 6ca8397 HIVE-22236: Fail to create View selecting View containing NOT IN subquery (Zoltan Matyus, reviewed by Zoltan Haindrich and Peter Vary)
6ca8397 is described below
commit 6ca839704c6c1c8f7f84a80373d0f81062b28f37
Author: Zoltan Matyus <zo...@cloudera.com>
AuthorDate: Fri Sep 27 10:39:56 2019 +0200
HIVE-22236: Fail to create View selecting View containing NOT IN subquery (Zoltan Matyus, reviewed by Zoltan Haindrich and Peter Vary)
---
.../apache/hadoop/hive/ql/parse/SubQueryUtils.java | 4 +-
.../clientpositive/create_view_disable_cbo.q | 34 ++++++
.../clientpositive/create_view_disable_cbo.q.out | 114 +++++++++++++++++++++
3 files changed, 150 insertions(+), 2 deletions(-)
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SubQueryUtils.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/SubQueryUtils.java
index b3df1ec..65bb13e 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SubQueryUtils.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SubQueryUtils.java
@@ -584,7 +584,7 @@ public class SubQueryUtils {
List<ASTNode> corrExprs,
RowResolver sqRR) {
- subQueryAST = (ASTNode) ParseDriver.adaptor.dupTree(subQueryAST);
+ subQueryAST = (ASTNode) SubQueryUtils.adaptor.dupTree(subQueryAST);
ASTNode qry = (ASTNode)
ParseDriver.adaptor.create(HiveParser.TOK_QUERY, "TOK_QUERY");
@@ -693,7 +693,7 @@ public class SubQueryUtils {
ASTNode searchCond = isNull(createColRefAST(sqAlias, colAlias));
for(ASTNode e : corrExprs ) {
- ASTNode p = (ASTNode) ParseDriver.adaptor.dupTree(e);
+ ASTNode p = (ASTNode) SubQueryUtils.adaptor.dupTree(e);
p = isNull(p);
searchCond = orAST(searchCond, p);
}
diff --git a/ql/src/test/queries/clientpositive/create_view_disable_cbo.q b/ql/src/test/queries/clientpositive/create_view_disable_cbo.q
new file mode 100644
index 0000000..0c686b9
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/create_view_disable_cbo.q
@@ -0,0 +1,34 @@
+set hive.cbo.enable = false;
+
+CREATE DATABASE IF NOT EXISTS cdh_82023_repro_db;
+
+CREATE TABLE IF NOT EXISTS `cdh_82023_repro_db`.`data` (
+ `text` string
+);
+
+CREATE VIEW IF NOT EXISTS `cdh_82023_repro_db`.`background` AS
+SELECT
+ *
+FROM
+ `cdh_82023_repro_db`.`data` `xouter`
+WHERE
+ `xouter`.`text` NOT IN (
+ SELECT
+ UPPER(`xinner`.`text`)
+ FROM
+ `cdh_82023_repro_db`.`data` `xinner`
+ GROUP BY
+ UPPER(`xinner`.`text`)
+ );
+
+SELECT * FROM `cdh_82023_repro_db`.`background`;
+
+CREATE VIEW IF NOT EXISTS `cdh_82023_repro_db`.`foreground`AS
+SELECT
+ *
+FROM
+ `cdh_82023_repro_db`.`background`;
+
+SELECT * FROM `cdh_82023_repro_db`.`foreground`;
+
+DROP DATABASE IF EXISTS `cdh_82023_repro_db` CASCADE;
diff --git a/ql/src/test/results/clientpositive/create_view_disable_cbo.q.out b/ql/src/test/results/clientpositive/create_view_disable_cbo.q.out
new file mode 100644
index 0000000..800d2fc
--- /dev/null
+++ b/ql/src/test/results/clientpositive/create_view_disable_cbo.q.out
@@ -0,0 +1,114 @@
+PREHOOK: query: CREATE DATABASE IF NOT EXISTS cdh_82023_repro_db
+PREHOOK: type: CREATEDATABASE
+PREHOOK: Output: database:cdh_82023_repro_db
+POSTHOOK: query: CREATE DATABASE IF NOT EXISTS cdh_82023_repro_db
+POSTHOOK: type: CREATEDATABASE
+POSTHOOK: Output: database:cdh_82023_repro_db
+PREHOOK: query: CREATE TABLE IF NOT EXISTS `cdh_82023_repro_db`.`data` (
+ `text` string
+)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: cdh_82023_repro_db@data
+PREHOOK: Output: database:cdh_82023_repro_db
+POSTHOOK: query: CREATE TABLE IF NOT EXISTS `cdh_82023_repro_db`.`data` (
+ `text` string
+)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: cdh_82023_repro_db@data
+POSTHOOK: Output: database:cdh_82023_repro_db
+PREHOOK: query: CREATE VIEW IF NOT EXISTS `cdh_82023_repro_db`.`background` AS
+SELECT
+ *
+FROM
+ `cdh_82023_repro_db`.`data` `xouter`
+WHERE
+ `xouter`.`text` NOT IN (
+ SELECT
+ UPPER(`xinner`.`text`)
+ FROM
+ `cdh_82023_repro_db`.`data` `xinner`
+ GROUP BY
+ UPPER(`xinner`.`text`)
+ )
+PREHOOK: type: CREATEVIEW
+PREHOOK: Input: cdh_82023_repro_db@data
+PREHOOK: Output: cdh_82023_repro_db@background
+PREHOOK: Output: database:cdh_82023_repro_db
+POSTHOOK: query: CREATE VIEW IF NOT EXISTS `cdh_82023_repro_db`.`background` AS
+SELECT
+ *
+FROM
+ `cdh_82023_repro_db`.`data` `xouter`
+WHERE
+ `xouter`.`text` NOT IN (
+ SELECT
+ UPPER(`xinner`.`text`)
+ FROM
+ `cdh_82023_repro_db`.`data` `xinner`
+ GROUP BY
+ UPPER(`xinner`.`text`)
+ )
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Input: cdh_82023_repro_db@data
+POSTHOOK: Output: cdh_82023_repro_db@background
+POSTHOOK: Output: database:cdh_82023_repro_db
+POSTHOOK: Lineage: background.text SIMPLE [(data)xouter.FieldSchema(name:text, type:string, comment:null), ]
+Warning: Shuffle Join JOIN[24][tables = [xouter, sq_1_notin_nullcheck]] in Stage 'Stage-1:MAPRED' is a cross product
+PREHOOK: query: SELECT * FROM `cdh_82023_repro_db`.`background`
+PREHOOK: type: QUERY
+PREHOOK: Input: cdh_82023_repro_db@background
+PREHOOK: Input: cdh_82023_repro_db@data
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT * FROM `cdh_82023_repro_db`.`background`
+POSTHOOK: type: QUERY
+POSTHOOK: Input: cdh_82023_repro_db@background
+POSTHOOK: Input: cdh_82023_repro_db@data
+#### A masked pattern was here ####
+PREHOOK: query: CREATE VIEW IF NOT EXISTS `cdh_82023_repro_db`.`foreground`AS
+SELECT
+ *
+FROM
+ `cdh_82023_repro_db`.`background`
+PREHOOK: type: CREATEVIEW
+PREHOOK: Input: cdh_82023_repro_db@background
+PREHOOK: Input: cdh_82023_repro_db@data
+PREHOOK: Output: cdh_82023_repro_db@foreground
+PREHOOK: Output: database:cdh_82023_repro_db
+POSTHOOK: query: CREATE VIEW IF NOT EXISTS `cdh_82023_repro_db`.`foreground`AS
+SELECT
+ *
+FROM
+ `cdh_82023_repro_db`.`background`
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Input: cdh_82023_repro_db@background
+POSTHOOK: Input: cdh_82023_repro_db@data
+POSTHOOK: Output: cdh_82023_repro_db@foreground
+POSTHOOK: Output: database:cdh_82023_repro_db
+POSTHOOK: Lineage: foreground.text SIMPLE [(data)xouter.FieldSchema(name:text, type:string, comment:null), ]
+Warning: Shuffle Join JOIN[24][tables = [xouter, sq_1_notin_nullcheck]] in Stage 'Stage-1:MAPRED' is a cross product
+PREHOOK: query: SELECT * FROM `cdh_82023_repro_db`.`foreground`
+PREHOOK: type: QUERY
+PREHOOK: Input: cdh_82023_repro_db@background
+PREHOOK: Input: cdh_82023_repro_db@data
+PREHOOK: Input: cdh_82023_repro_db@foreground
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT * FROM `cdh_82023_repro_db`.`foreground`
+POSTHOOK: type: QUERY
+POSTHOOK: Input: cdh_82023_repro_db@background
+POSTHOOK: Input: cdh_82023_repro_db@data
+POSTHOOK: Input: cdh_82023_repro_db@foreground
+#### A masked pattern was here ####
+PREHOOK: query: DROP DATABASE IF EXISTS `cdh_82023_repro_db` CASCADE
+PREHOOK: type: DROPDATABASE
+PREHOOK: Input: database:cdh_82023_repro_db
+PREHOOK: Output: cdh_82023_repro_db@background
+PREHOOK: Output: cdh_82023_repro_db@data
+PREHOOK: Output: cdh_82023_repro_db@foreground
+PREHOOK: Output: database:cdh_82023_repro_db
+POSTHOOK: query: DROP DATABASE IF EXISTS `cdh_82023_repro_db` CASCADE
+POSTHOOK: type: DROPDATABASE
+POSTHOOK: Input: database:cdh_82023_repro_db
+POSTHOOK: Output: cdh_82023_repro_db@background
+POSTHOOK: Output: cdh_82023_repro_db@data
+POSTHOOK: Output: cdh_82023_repro_db@foreground
+POSTHOOK: Output: database:cdh_82023_repro_db