diff --git a/fe/src/main/java/com/cloudera/impala/analysis/DistributeParam.java b/fe/src/main/java/com/cloudera/impala/analysis/DistributeParam.java index 7c57593f3..e718d6b43 100644 --- a/fe/src/main/java/com/cloudera/impala/analysis/DistributeParam.java +++ b/fe/src/main/java/com/cloudera/impala/analysis/DistributeParam.java @@ -153,12 +153,12 @@ public class DistributeParam implements ParseNode { @Override public String toSql() { if (num_buckets_ == NO_BUCKETS) { - StringBuilder builder = new StringBuilder(); + List splitRowStrings = Lists.newArrayList(); for (ArrayList splitRow : splitRows_) { - splitRowToString(splitRow); + splitRowStrings.add(splitRowToString(splitRow)); } return String.format("RANGE(%s) INTO RANGES(%s)", Joiner.on(", ").join(columns_), - builder.toString()); + Joiner.on(", ").join(splitRowStrings)); } else { return String.format("HASH(%s) INTO %d BUCKETS", Joiner.on(", ").join(columns_), num_buckets_); @@ -167,13 +167,13 @@ public class DistributeParam implements ParseNode { private String splitRowToString(ArrayList splitRow) { StringBuilder builder = new StringBuilder(); - builder.append("["); + builder.append("("); List rangeElementStrings = Lists.newArrayList(); for (LiteralExpr rangeElement : splitRow) { - rangeElementStrings.add(rangeElement.getStringValue()); + rangeElementStrings.add(rangeElement.toSql()); } - builder.append(Joiner.on(",").join(rangeElementStrings)); - builder.append("]"); + builder.append(Joiner.on(", ").join(rangeElementStrings)); + builder.append(")"); return builder.toString(); } diff --git a/fe/src/test/java/com/cloudera/impala/analysis/AnalyzeDDLTest.java b/fe/src/test/java/com/cloudera/impala/analysis/AnalyzeDDLTest.java index 6e57ccbe9..f998e91b5 100644 --- a/fe/src/test/java/com/cloudera/impala/analysis/AnalyzeDDLTest.java +++ b/fe/src/test/java/com/cloudera/impala/analysis/AnalyzeDDLTest.java @@ -1811,7 +1811,20 @@ public class AnalyzeDDLTest extends FrontendTestBase { "'storage_handler'='com.cloudera.kudu.hive.KuduStorageHandler', " + "'kudu.table_name'='tab'," + "'kudu.master_addresses' = '127.0.0.1:8080', " + - "'kudu.key_columns' = 'a,b,c')"); + "'kudu.key_columns' = 'a,b,c'" + + ")"); + + // Each split row size should equals to the number of range columns. + AnalysisError("create table tab (a int, b int, c int, d int) " + + "distribute by range(a) split rows ((1,'extra_val'),(2),(3)) " + + "tblproperties (" + + "'storage_handler'='com.cloudera.kudu.hive.KuduStorageHandler', " + + "'kudu.table_name'='tab'," + + "'kudu.master_addresses' = '127.0.0.1:8080', " + + "'kudu.key_columns' = 'a,b,c'" + + ")", + "SPLIT ROWS has different size than number of projected key columns: 1. " + + "Split row: (1, 'extra_val')"); // No float split keys AnalysisError("create table tab (a int, b int, c int, d int) " + diff --git a/testdata/bin/run-hive-server.sh b/testdata/bin/run-hive-server.sh index 39b2ffd5a..530b804d8 100755 --- a/testdata/bin/run-hive-server.sh +++ b/testdata/bin/run-hive-server.sh @@ -51,7 +51,7 @@ do ;; -help|-h|*) echo "run-hive-server.sh : Starts the hive server and the metastore." - echo "[-metastore_only] : Only starts the hive metastore." + echo "[-only_metastore] : Only starts the hive metastore." exit 1; ;; esac diff --git a/testdata/workloads/functional-query/queries/QueryTest/kudu_partition_ddl.test b/testdata/workloads/functional-query/queries/QueryTest/kudu_partition_ddl.test index 96519795c..e5b2a95c6 100644 --- a/testdata/workloads/functional-query/queries/QueryTest/kudu_partition_ddl.test +++ b/testdata/workloads/functional-query/queries/QueryTest/kudu_partition_ddl.test @@ -38,19 +38,6 @@ TBLPROPERTIES( Expected int32 literal for column 'id' got 'abc' ==== ---- QUERY --- Test error handling for split rows with two many components -create table simple_hash ( id int, name string, valf float, vali bigint) -DISTRIBUTE BY RANGE(col_does_not_exist, id) SPLIT ROWS ((1, 'abc')) -TBLPROPERTIES( -'storage_handler' = 'com.cloudera.kudu.hive.KuduStorageHandler', -'kudu.table_name' = 'simple_hash', -'kudu.master_addresses' = '127.0.0.1', -'kudu.key_columns' = 'id, name' - ) ----- CATCH -Unknown column: col_does_not_exist -==== ----- QUERY -- Test error handling for distribute clauses create table simple_hash ( id int, name string, valf float, vali bigint) DISTRIBUTE BY RANGE(col_does_not_exist) SPLIT ROWS ((1))