From a6acb8ce283fae918f11f5ace853ec4209765517 Mon Sep 17 00:00:00 2001 From: Gopal V Date: Tue, 18 Aug 2015 01:47:41 -0700 Subject: [PATCH] HIVE-11594: Column Stats quoting --- .../hive/ql/parse/ColumnStatsSemanticAnalyzer.java | 6 +- .../queries/clientpositive/columnstats_quoting.q | 8 ++ .../clientpositive/columnstats_quoting.q.out | 114 +++++++++++++++++++++ 3 files changed, 125 insertions(+), 3 deletions(-) create mode 100644 ql/src/test/queries/clientpositive/columnstats_quoting.q create mode 100644 ql/src/test/results/clientpositive/columnstats_quoting.q.out diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java index a5f0a7f..8b7a2e8 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java @@ -175,7 +175,7 @@ private StringBuilder genPartitionClause(Map partSpec) throws Sem } else { whereClause.append(" and "); } - whereClause.append(partKey).append(" = ").append(genPartValueString(partKey, value)); + whereClause.append("`").append(partKey).append("` = ").append(genPartValueString(partKey, value)); } } @@ -308,9 +308,9 @@ private String genRewrittenQuery(List colNames, int numBitVectors, Map 0) { rewrittenQueryBuilder.append(" , "); } - rewrittenQueryBuilder.append("compute_stats("); + rewrittenQueryBuilder.append("compute_stats(`"); rewrittenQueryBuilder.append(colNames.get(i)); - rewrittenQueryBuilder.append(" , "); + rewrittenQueryBuilder.append("` , "); rewrittenQueryBuilder.append(numBitVectors); rewrittenQueryBuilder.append(" )"); } diff --git ql/src/test/queries/clientpositive/columnstats_quoting.q ql/src/test/queries/clientpositive/columnstats_quoting.q new file mode 100644 index 0000000..1bf4f91 --- /dev/null +++ ql/src/test/queries/clientpositive/columnstats_quoting.q @@ -0,0 +1,8 @@ +DROP TABLE IF EXISTS user_web_events; +create temporary table user_web_events(`user id` bigint, `user name` string); + +explain analyze table user_web_events compute statistics for columns; +analyze table user_web_events compute statistics for columns; + +explain analyze table user_web_events compute statistics for columns `user id`; +analyze table user_web_events compute statistics for columns `user id`; diff --git ql/src/test/results/clientpositive/columnstats_quoting.q.out ql/src/test/results/clientpositive/columnstats_quoting.q.out new file mode 100644 index 0000000..bd36ef0 --- /dev/null +++ ql/src/test/results/clientpositive/columnstats_quoting.q.out @@ -0,0 +1,114 @@ +PREHOOK: query: DROP TABLE IF EXISTS user_web_events +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE IF EXISTS user_web_events +POSTHOOK: type: DROPTABLE +PREHOOK: query: create temporary table user_web_events(`user id` bigint, `user name` string) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@user_web_events +POSTHOOK: query: create temporary table user_web_events(`user id` bigint, `user name` string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@user_web_events +PREHOOK: query: explain analyze table user_web_events compute statistics for columns +PREHOOK: type: QUERY +POSTHOOK: query: explain analyze table user_web_events compute statistics for columns +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-0 is a root stage + Stage-1 depends on stages: Stage-0 + +STAGE PLANS: + Stage: Stage-0 + Map Reduce + Map Operator Tree: + TableScan + alias: user_web_events + Select Operator + expressions: user id (type: bigint), user name (type: string) + outputColumnNames: user id, user name + Group By Operator + aggregations: compute_stats(user id, 16), compute_stats(user name, 16) + mode: hash + outputColumnNames: _col0, _col1 + Reduce Output Operator + sort order: + value expressions: _col0 (type: struct), _col1 (type: struct) + Reduce Operator Tree: + Group By Operator + aggregations: compute_stats(VALUE._col0), compute_stats(VALUE._col1) + mode: mergepartial + outputColumnNames: _col0, _col1 + File Output Operator + compressed: false + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + Stage: Stage-1 + Column Stats Work + Column Stats Desc: + Columns: user id, user name + Column Types: bigint, string + Table: default.user_web_events + +PREHOOK: query: analyze table user_web_events compute statistics for columns +PREHOOK: type: QUERY +PREHOOK: Input: default@user_web_events +#### A masked pattern was here #### +POSTHOOK: query: analyze table user_web_events compute statistics for columns +POSTHOOK: type: QUERY +POSTHOOK: Input: default@user_web_events +#### A masked pattern was here #### +PREHOOK: query: explain analyze table user_web_events compute statistics for columns `user id` +PREHOOK: type: QUERY +POSTHOOK: query: explain analyze table user_web_events compute statistics for columns `user id` +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-0 is a root stage + Stage-1 depends on stages: Stage-0 + +STAGE PLANS: + Stage: Stage-0 + Map Reduce + Map Operator Tree: + TableScan + alias: user_web_events + Select Operator + expressions: user id (type: bigint) + outputColumnNames: user id + Group By Operator + aggregations: compute_stats(user id, 16) + mode: hash + outputColumnNames: _col0 + Reduce Output Operator + sort order: + value expressions: _col0 (type: struct) + Reduce Operator Tree: + Group By Operator + aggregations: compute_stats(VALUE._col0) + mode: mergepartial + outputColumnNames: _col0 + File Output Operator + compressed: false + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + Stage: Stage-1 + Column Stats Work + Column Stats Desc: + Columns: user id + Column Types: bigint + Table: default.user_web_events + +PREHOOK: query: analyze table user_web_events compute statistics for columns `user id` +PREHOOK: type: QUERY +PREHOOK: Input: default@user_web_events +#### A masked pattern was here #### +POSTHOOK: query: analyze table user_web_events compute statistics for columns `user id` +POSTHOOK: type: QUERY +POSTHOOK: Input: default@user_web_events +#### A masked pattern was here #### -- 2.4.0