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