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