diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index 3f2aaaa..d4ebe05 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -2540,7 +2540,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { ASTNode value = entry.getValue(); // This is the GenericUDAF name - String aggName = value.getChild(0).getText(); + String aggName = unescapeIdentifier(value.getChild(0).getText()); boolean isDistinct = value.getType() == HiveParser.TOK_FUNCTIONDI; boolean isAllColumns = value.getType() == HiveParser.TOK_FUNCTIONSTAR; @@ -2663,7 +2663,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { int numDistinctUDFs = 0; for (Map.Entry entry : aggregationTrees.entrySet()) { ASTNode value = entry.getValue(); - String aggName = value.getChild(0).getText(); + String aggName = unescapeIdentifier(value.getChild(0).getText()); ArrayList aggParameters = new ArrayList(); boolean isDistinct = (value.getType() == HiveParser.TOK_FUNCTIONDI); diff --git ql/src/test/queries/clientpositive/create_view.q ql/src/test/queries/clientpositive/create_view.q index 0af3442..e08274c 100644 --- ql/src/test/queries/clientpositive/create_view.q +++ ql/src/test/queries/clientpositive/create_view.q @@ -120,6 +120,17 @@ SELECT * FROM view8; -- test usage of a UDAF within a view CREATE TEMPORARY FUNCTION test_max AS 'org.apache.hadoop.hive.ql.udf.UDAFTestMax'; +set hive.map.aggr=false; +-- disable map-side aggregation +CREATE VIEW view9(m) AS +SELECT test_max(length(value)) +FROM src; +DESCRIBE EXTENDED view9; +DESCRIBE FORMATTED view9; +SELECT * FROM view9; +DROP VIEW view9; +set hive.map.aggr=true; +-- enable map-side aggregation CREATE VIEW view9(m) AS SELECT test_max(length(value)) FROM src; diff --git ql/src/test/results/clientpositive/create_view.q.out ql/src/test/results/clientpositive/create_view.q.out index 3b78f1e..c390dcf 100644 --- ql/src/test/results/clientpositive/create_view.q.out +++ ql/src/test/results/clientpositive/create_view.q.out @@ -768,12 +768,91 @@ CREATE TEMPORARY FUNCTION test_max AS 'org.apache.hadoop.hive.ql.udf.UDAFTestMax' POSTHOOK: type: CREATEFUNCTION POSTHOOK: Lineage: table1.key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ] -PREHOOK: query: CREATE VIEW view9(m) AS +PREHOOK: query: -- disable map-side aggregation +CREATE VIEW view9(m) AS SELECT test_max(length(value)) FROM src PREHOOK: type: CREATEVIEW #### A masked pattern was here #### -POSTHOOK: query: CREATE VIEW view9(m) AS +POSTHOOK: query: -- disable map-side aggregation +CREATE VIEW view9(m) AS +SELECT test_max(length(value)) +FROM src +POSTHOOK: type: CREATEVIEW +POSTHOOK: Output: default@view9 +#### A masked pattern was here #### +POSTHOOK: Lineage: table1.key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ] +PREHOOK: query: DESCRIBE EXTENDED view9 +PREHOOK: type: DESCTABLE +POSTHOOK: query: DESCRIBE EXTENDED view9 +POSTHOOK: type: DESCTABLE +POSTHOOK: Lineage: table1.key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ] +m int + +#### A masked pattern was here #### +FROM src, viewExpandedText:SELECT `_c0` AS `m` FROM (SELECT `test_max`(length(`src`.`value`)) +FROM `default`.`src`) `view9`, tableType:VIRTUAL_VIEW) +PREHOOK: query: DESCRIBE FORMATTED view9 +PREHOOK: type: DESCTABLE +POSTHOOK: query: DESCRIBE FORMATTED view9 +POSTHOOK: type: DESCTABLE +POSTHOOK: Lineage: table1.key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ] +# col_name data_type comment + +m int None + +# Detailed Table Information +Database: default +#### A masked pattern was here #### +Protect Mode: None +Retention: 0 +Table Type: VIRTUAL_VIEW +Table Parameters: +#### A masked pattern was here #### + +# Storage Information +SerDe Library: null +InputFormat: org.apache.hadoop.mapred.SequenceFileInputFormat +OutputFormat: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat +Compressed: No +Num Buckets: -1 +Bucket Columns: [] +Sort Columns: [] + +# View Information +View Original Text: SELECT test_max(length(value)) +FROM src +View Expanded Text: SELECT `_c0` AS `m` FROM (SELECT `test_max`(length(`src`.`value`)) +FROM `default`.`src`) `view9` +PREHOOK: query: SELECT * FROM view9 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Input: default@view9 +#### A masked pattern was here #### +POSTHOOK: query: SELECT * FROM view9 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Input: default@view9 +#### A masked pattern was here #### +POSTHOOK: Lineage: table1.key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ] +7 +PREHOOK: query: DROP VIEW view9 +PREHOOK: type: DROPVIEW +PREHOOK: Input: default@view9 +PREHOOK: Output: default@view9 +POSTHOOK: query: DROP VIEW view9 +POSTHOOK: type: DROPVIEW +POSTHOOK: Input: default@view9 +POSTHOOK: Output: default@view9 +POSTHOOK: Lineage: table1.key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ] +PREHOOK: query: -- enable map-side aggregation +CREATE VIEW view9(m) AS +SELECT test_max(length(value)) +FROM src +PREHOOK: type: CREATEVIEW +#### A masked pattern was here #### +POSTHOOK: query: -- enable map-side aggregation +CREATE VIEW view9(m) AS SELECT test_max(length(value)) FROM src POSTHOOK: type: CREATEVIEW