You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jc...@apache.org on 2019/10/07 16:43:57 UTC

[hive] 02/02: HIVE-22281: Create table statement fails with 'not supported NULLS LAST for ORDER BY in ASC order' (Krisztian Kasa reviewed by Jesus Camacho Rodriguez)

This is an automated email from the ASF dual-hosted git repository.

jcamacho pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git

commit e16877ca39ab2aaef87636bcad6f78ae694c1460
Author: Krisztian Kasa <kk...@cloudera.com>
AuthorDate: Mon Oct 7 09:30:32 2019 -0700

    HIVE-22281: Create table statement fails with 'not supported NULLS LAST for ORDER BY in ASC order' (Krisztian Kasa reviewed by Jesus Camacho Rodriguez)
---
 .../hadoop/hive/ql/parse/BaseSemanticAnalyzer.java |   7 +-
 .../org/apache/hadoop/hive/ql/parse/HiveParser.g   |   4 +-
 ql/src/test/queries/clientpositive/nullshandling.q |  33 +++++++
 .../results/clientpositive/nullshandling.q.out     | 102 +++++++++++++++++++++
 4 files changed, 142 insertions(+), 4 deletions(-)

diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java
index 684dec3..2a1c502 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java
@@ -1347,8 +1347,13 @@ public abstract class BaseSemanticAnalyzer {
       ASTNode child = (ASTNode) ast.getChild(i);
       int directionCode = DirectionUtils.tokenToCode(child.getToken().getType());
       child = (ASTNode) child.getChild(0);
+      if (child.getToken().getType() != HiveParser.TOK_NULLS_FIRST && directionCode == DirectionUtils.ASCENDING_CODE) {
+        throw new SemanticException(
+                "create/alter bucketed table: not supported NULLS LAST for SORTED BY in ASC order");
+      }
       if (child.getToken().getType() != HiveParser.TOK_NULLS_LAST && directionCode == DirectionUtils.DESCENDING_CODE) {
-        throw new SemanticException("create/alter table: not supported NULLS FIRST for ORDER BY in DESC order");
+        throw new SemanticException(
+                "create/alter bucketed table: not supported NULLS FIRST for SORTED BY in DESC order");
       }
       colList.add(new Order(unescapeIdentifier(child.getChild(0).getText()).toLowerCase(), directionCode));
     }
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g b/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
index caee02d..d9ee40b 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
@@ -2471,9 +2471,7 @@ columnNameOrder
 @init { pushMsg("column name order", state); }
 @after { popMsg(state); }
     : identifier orderSpec=orderSpecification? nullSpec=nullOrdering?
-    -> {$orderSpec.tree == null && $nullSpec.tree == null && nullsLast()}?
-            ^(TOK_TABSORTCOLNAMEASC ^(TOK_NULLS_LAST identifier))
-    -> {$orderSpec.tree == null && $nullSpec.tree == null && !nullsLast()}?
+    -> {$orderSpec.tree == null && $nullSpec.tree == null}?
             ^(TOK_TABSORTCOLNAMEASC ^(TOK_NULLS_FIRST identifier))
     -> {$orderSpec.tree == null}?
             ^(TOK_TABSORTCOLNAMEASC ^($nullSpec identifier))
diff --git a/ql/src/test/queries/clientpositive/nullshandling.q b/ql/src/test/queries/clientpositive/nullshandling.q
new file mode 100644
index 0000000..ab2eb8b
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/nullshandling.q
@@ -0,0 +1,33 @@
+set hive.default.nulls.last=false;
+
+CREATE TABLE table1 (
+  k1 STRING,
+  f1 STRING,
+  sequence_num BIGINT,
+  create_bsk BIGINT,
+  change_bsk BIGINT,
+  op_code STRING )
+PARTITIONED BY (run_id BIGINT)
+CLUSTERED BY (k1) SORTED BY (k1, change_bsk, sequence_num) INTO 4 BUCKETS
+STORED AS ORC;
+
+DESCRIBE table1;
+
+DROP TABLE table1;
+
+set hive.default.nulls.last=true;
+
+CREATE TABLE table2 (
+  k1 STRING,
+  f1 STRING,
+  sequence_num BIGINT,
+  create_bsk BIGINT,
+  change_bsk BIGINT,
+  op_code STRING )
+PARTITIONED BY (run_id BIGINT)
+CLUSTERED BY (k1) SORTED BY (k1, change_bsk, sequence_num) INTO 4 BUCKETS
+STORED AS ORC;
+
+DESCRIBE table2;
+
+DROP TABLE table2;
\ No newline at end of file
diff --git a/ql/src/test/results/clientpositive/nullshandling.q.out b/ql/src/test/results/clientpositive/nullshandling.q.out
new file mode 100644
index 0000000..8a941c1
--- /dev/null
+++ b/ql/src/test/results/clientpositive/nullshandling.q.out
@@ -0,0 +1,102 @@
+PREHOOK: query: CREATE TABLE table1 (
+  k1 STRING,
+  f1 STRING,
+  sequence_num BIGINT,
+  create_bsk BIGINT,
+  change_bsk BIGINT,
+  op_code STRING )
+PARTITIONED BY (run_id BIGINT)
+CLUSTERED BY (k1) SORTED BY (k1, change_bsk, sequence_num) INTO 4 BUCKETS
+STORED AS ORC
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@table1
+POSTHOOK: query: CREATE TABLE table1 (
+  k1 STRING,
+  f1 STRING,
+  sequence_num BIGINT,
+  create_bsk BIGINT,
+  change_bsk BIGINT,
+  op_code STRING )
+PARTITIONED BY (run_id BIGINT)
+CLUSTERED BY (k1) SORTED BY (k1, change_bsk, sequence_num) INTO 4 BUCKETS
+STORED AS ORC
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@table1
+PREHOOK: query: DESCRIBE table1
+PREHOOK: type: DESCTABLE
+PREHOOK: Input: default@table1
+POSTHOOK: query: DESCRIBE table1
+POSTHOOK: type: DESCTABLE
+POSTHOOK: Input: default@table1
+k1                  	string              	                    
+f1                  	string              	                    
+sequence_num        	bigint              	                    
+create_bsk          	bigint              	                    
+change_bsk          	bigint              	                    
+op_code             	string              	                    
+run_id              	bigint              	                    
+	 	 
+# Partition Information	 	 
+# col_name            	data_type           	comment             
+run_id              	bigint              	                    
+PREHOOK: query: DROP TABLE table1
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@table1
+PREHOOK: Output: default@table1
+POSTHOOK: query: DROP TABLE table1
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@table1
+POSTHOOK: Output: default@table1
+PREHOOK: query: CREATE TABLE table2 (
+  k1 STRING,
+  f1 STRING,
+  sequence_num BIGINT,
+  create_bsk BIGINT,
+  change_bsk BIGINT,
+  op_code STRING )
+PARTITIONED BY (run_id BIGINT)
+CLUSTERED BY (k1) SORTED BY (k1, change_bsk, sequence_num) INTO 4 BUCKETS
+STORED AS ORC
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@table2
+POSTHOOK: query: CREATE TABLE table2 (
+  k1 STRING,
+  f1 STRING,
+  sequence_num BIGINT,
+  create_bsk BIGINT,
+  change_bsk BIGINT,
+  op_code STRING )
+PARTITIONED BY (run_id BIGINT)
+CLUSTERED BY (k1) SORTED BY (k1, change_bsk, sequence_num) INTO 4 BUCKETS
+STORED AS ORC
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@table2
+PREHOOK: query: DESCRIBE table2
+PREHOOK: type: DESCTABLE
+PREHOOK: Input: default@table2
+POSTHOOK: query: DESCRIBE table2
+POSTHOOK: type: DESCTABLE
+POSTHOOK: Input: default@table2
+k1                  	string              	                    
+f1                  	string              	                    
+sequence_num        	bigint              	                    
+create_bsk          	bigint              	                    
+change_bsk          	bigint              	                    
+op_code             	string              	                    
+run_id              	bigint              	                    
+	 	 
+# Partition Information	 	 
+# col_name            	data_type           	comment             
+run_id              	bigint              	                    
+PREHOOK: query: DROP TABLE table2
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@table2
+PREHOOK: Output: default@table2
+POSTHOOK: query: DROP TABLE table2
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@table2
+POSTHOOK: Output: default@table2