diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index 20d9649..1fbaf5b 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -4146,8 +4146,17 @@ static boolean isRegex(String pattern, HiveConf conf) { tabAlias = colRef[0]; colAlias = colRef[1]; if (hasAsClause) { - unparseTranslator.addIdentifierTranslation((ASTNode) child - .getChild(1)); + unparseTranslator.addIdentifierTranslation((ASTNode) child.getChild(1)); + } else { + // there is no hasAsClause, and it is creating a view, and view contains autogenColAliasPrfxLbl + if (expr.getType() != HiveParser.TOK_ALLCOLREF && unparseTranslator.isEnabled() + && colAlias.startsWith(autogenColAliasPrfxLbl)) { + unparseTranslator.addTranslation( + child, + ctx.getTokenRewriteStream().toString(child.getTokenStartIndex(), + child.getTokenStopIndex()) + + " as " + HiveUtils.unparseIdentifier(colAlias, conf)); + } } } exprs[i] = expr; @@ -10596,7 +10605,9 @@ private void walkASTMarkTABREF(ASTNode ast, Set cteAlias) for (HivePrivilegeObject privObj : needRewritePrivObjs) { MaskAndFilterInfo info = basicInfos.get(privObj); String replacementText = tableMask.create(privObj, info); - tableMask.addTableMasking(info.astNode, replacementText); + if (replacementText != null) { + tableMask.addTableMasking(info.astNode, replacementText); + } } } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/TableMask.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/TableMask.java index 1686f36..62c4853 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/TableMask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/TableMask.java @@ -23,6 +23,7 @@ import org.antlr.runtime.TokenRewriteStream; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.metastore.api.FieldSchema; +import org.apache.hadoop.hive.ql.metadata.HiveUtils; import org.apache.hadoop.hive.ql.metadata.Table; import org.apache.hadoop.hive.ql.security.authorization.plugin.HiveAuthorizer; import org.apache.hadoop.hive.ql.security.authorization.plugin.HivePrivilegeObject; @@ -46,10 +47,12 @@ private boolean enable; private boolean needsRewrite; private HiveAuthzContext queryContext; + private HiveConf conf; public TableMask(SemanticAnalyzer analyzer, HiveConf conf) throws SemanticException { try { authorizer = SessionState.get().getAuthorizerV2(); + this.conf = conf; String cmdString = analyzer.ctx.getCmd(); SessionState ss = SessionState.get(); HiveAuthzContext.Builder ctxBuilder = new HiveAuthzContext.Builder(); @@ -83,6 +86,8 @@ public boolean needTransform() throws SemanticException { public String create(HivePrivilegeObject privObject, MaskAndFilterInfo maskAndFilterInfo) throws SemanticException { + boolean doColumnMasking = false; + boolean doRowFiltering = false; StringBuilder sb = new StringBuilder(); sb.append("(SELECT "); boolean firstOne = true; @@ -107,31 +112,37 @@ public String create(HivePrivilegeObject privObject, MaskAndFilterInfo maskAndFi String colName = privObject.getColumns().get(index); if (!expr.equals(colName)) { // CAST(expr AS COLTYPE) AS COLNAME - sb.append("CAST(" + expr + " AS " + colTypes.get(index) + ") AS `" + colName + "`"); + sb.append("CAST(" + expr + " AS " + colTypes.get(index) + ") AS " + + HiveUtils.unparseIdentifier(colName, conf)); + doColumnMasking = true; } else { - sb.append(expr); + sb.append(HiveUtils.unparseIdentifier(colName, conf)); } } - } else { - for (int index = 0; index < privObject.getColumns().size(); index++) { - String expr = privObject.getColumns().get(index); - if (!firstOne) { - sb.append(", "); - } else { - firstOne = false; - } - sb.append(expr); - } + } + if (!doColumnMasking) { + sb = new StringBuilder(); + sb.append("(SELECT *"); } - sb.append(" FROM `" + privObject.getDbname() + "`.`" + privObject.getObjectName() + "`"); + sb.append(" FROM "); + sb.append(HiveUtils.unparseIdentifier(privObject.getDbname(), conf)); + sb.append("."); + sb.append(HiveUtils.unparseIdentifier(privObject.getObjectName(), conf)); sb.append(" " + maskAndFilterInfo.additionalTabInfo); String filter = privObject.getRowFilterExpression(); if (filter != null) { sb.append(" WHERE " + filter); + doRowFiltering = true; + } + sb.append(")" + HiveUtils.unparseIdentifier(maskAndFilterInfo.alias, conf)); + + if (!doColumnMasking && !doRowFiltering) { + // nothing to do + return null; + } else { + LOG.debug("TableMask creates `" + sb.toString() + "`"); + return sb.toString(); } - sb.append(")" + maskAndFilterInfo.alias); - LOG.debug("TableMask creates `" + sb.toString() + "`"); - return sb.toString(); } void addTableMasking(ASTNode node, String replacementText) throws SemanticException { diff --git a/ql/src/test/queries/clientpositive/masking_6.q b/ql/src/test/queries/clientpositive/masking_6.q new file mode 100644 index 0000000..e266741 --- /dev/null +++ b/ql/src/test/queries/clientpositive/masking_6.q @@ -0,0 +1,28 @@ +set hive.mapred.mode=nonstrict; +set hive.security.authorization.manager=org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactoryForTest; + +drop view masking_test; + +create view masking_test as select cast(key as int) as key, value, '12' from src; + +explain select * from masking_test; + +select * from masking_test; + +explain select * from masking_test where key > 0; + +select * from masking_test where key > 0; + +drop view masking_test; + +create view masking_test as select cast(key as int) as key, '12', +'12', '12', '12', '12', '12', '12', '12', '12', '12', '12' + from src; + +explain select * from masking_test; + +select * from masking_test; + +explain select * from masking_test where key > 0; + +select * from masking_test where key > 0; diff --git a/ql/src/test/queries/clientpositive/view_alias.q b/ql/src/test/queries/clientpositive/view_alias.q new file mode 100644 index 0000000..ed2b821 --- /dev/null +++ b/ql/src/test/queries/clientpositive/view_alias.q @@ -0,0 +1,24 @@ +drop view v; +create view v as select key, '12' from src; +desc formatted v; +select * from v order by `_c1` limit 5; + +drop view v; +create view v as select key as `_c1`, '12' from src; +desc formatted v; +select * from v order by `_c1` limit 5; + +drop view v; +create view v as select *, '12' from src; +desc formatted v; +select * from v order by `_c1` limit 5; + +drop view v; +create view v as select *, '12' as `_c121` from src; +desc formatted v; +select * from v order by `_c121` limit 5; + +drop view v; +create view v as select key, count(*) from src group by key; +desc formatted v; +select * from v order by `_c1` limit 5; diff --git a/ql/src/test/results/clientpositive/masking_6.q.out b/ql/src/test/results/clientpositive/masking_6.q.out new file mode 100644 index 0000000..fb8c90f --- /dev/null +++ b/ql/src/test/results/clientpositive/masking_6.q.out @@ -0,0 +1,238 @@ +PREHOOK: query: drop view masking_test +PREHOOK: type: DROPVIEW +POSTHOOK: query: drop view masking_test +POSTHOOK: type: DROPVIEW +PREHOOK: query: create view masking_test as select cast(key as int) as key, value, '12' from src +PREHOOK: type: CREATEVIEW +PREHOOK: Input: default@src +PREHOOK: Output: database:default +PREHOOK: Output: default@masking_test +POSTHOOK: query: create view masking_test as select cast(key as int) as key, value, '12' from src +POSTHOOK: type: CREATEVIEW +POSTHOOK: Input: default@src +POSTHOOK: Output: database:default +POSTHOOK: Output: default@masking_test +PREHOOK: query: explain select * from masking_test +PREHOOK: type: QUERY +POSTHOOK: query: explain select * from masking_test +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 depends on stages: Stage-1 + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Map Operator Tree: + TableScan + alias: src + Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE + Filter Operator + predicate: (((UDFToInteger(key) % 2) = 0) and (UDFToInteger(key) < 10)) (type: boolean) + Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE Column stats: NONE + Select Operator + expressions: UDFToInteger(key) (type: int), reverse(value) (type: string), '12' (type: string) + outputColumnNames: _col0, _col1, _col2 + Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE Column stats: NONE + File Output Operator + compressed: false + Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE Column stats: NONE + table: + input format: org.apache.hadoop.mapred.SequenceFileInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + ListSink + +PREHOOK: query: select * from masking_test +PREHOOK: type: QUERY +PREHOOK: Input: default@masking_test +PREHOOK: Input: default@src +#### A masked pattern was here #### +POSTHOOK: query: select * from masking_test +POSTHOOK: type: QUERY +POSTHOOK: Input: default@masking_test +POSTHOOK: Input: default@src +#### A masked pattern was here #### +0 0_lav 12 +4 4_lav 12 +8 8_lav 12 +0 0_lav 12 +0 0_lav 12 +2 2_lav 12 +PREHOOK: query: explain select * from masking_test where key > 0 +PREHOOK: type: QUERY +POSTHOOK: query: explain select * from masking_test where key > 0 +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 depends on stages: Stage-1 + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Map Operator Tree: + TableScan + alias: src + Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE + Filter Operator + predicate: (((UDFToInteger(key) % 2) = 0) and (UDFToInteger(key) < 10) and (UDFToInteger(key) > 0)) (type: boolean) + Statistics: Num rows: 27 Data size: 286 Basic stats: COMPLETE Column stats: NONE + Select Operator + expressions: UDFToInteger(key) (type: int), reverse(value) (type: string), '12' (type: string) + outputColumnNames: _col0, _col1, _col2 + Statistics: Num rows: 27 Data size: 286 Basic stats: COMPLETE Column stats: NONE + File Output Operator + compressed: false + Statistics: Num rows: 27 Data size: 286 Basic stats: COMPLETE Column stats: NONE + table: + input format: org.apache.hadoop.mapred.SequenceFileInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + ListSink + +PREHOOK: query: select * from masking_test where key > 0 +PREHOOK: type: QUERY +PREHOOK: Input: default@masking_test +PREHOOK: Input: default@src +#### A masked pattern was here #### +POSTHOOK: query: select * from masking_test where key > 0 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@masking_test +POSTHOOK: Input: default@src +#### A masked pattern was here #### +4 4_lav 12 +8 8_lav 12 +2 2_lav 12 +PREHOOK: query: drop view masking_test +PREHOOK: type: DROPVIEW +PREHOOK: Input: default@masking_test +PREHOOK: Output: default@masking_test +POSTHOOK: query: drop view masking_test +POSTHOOK: type: DROPVIEW +POSTHOOK: Input: default@masking_test +POSTHOOK: Output: default@masking_test +PREHOOK: query: create view masking_test as select cast(key as int) as key, '12', +'12', '12', '12', '12', '12', '12', '12', '12', '12', '12' + from src +PREHOOK: type: CREATEVIEW +PREHOOK: Input: default@src +PREHOOK: Output: database:default +PREHOOK: Output: default@masking_test +POSTHOOK: query: create view masking_test as select cast(key as int) as key, '12', +'12', '12', '12', '12', '12', '12', '12', '12', '12', '12' + from src +POSTHOOK: type: CREATEVIEW +POSTHOOK: Input: default@src +POSTHOOK: Output: database:default +POSTHOOK: Output: default@masking_test +PREHOOK: query: explain select * from masking_test +PREHOOK: type: QUERY +POSTHOOK: query: explain select * from masking_test +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 depends on stages: Stage-1 + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Map Operator Tree: + TableScan + alias: src + Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE + Filter Operator + predicate: (((UDFToInteger(key) % 2) = 0) and (UDFToInteger(key) < 10)) (type: boolean) + Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE Column stats: NONE + Select Operator + expressions: UDFToInteger(key) (type: int), '12' (type: string), '12' (type: string), '12' (type: string), '12' (type: string), '12' (type: string), '12' (type: string), '12' (type: string), '12' (type: string), '12' (type: string), '12' (type: string), '12' (type: string) + outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11 + Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE Column stats: NONE + File Output Operator + compressed: false + Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE Column stats: NONE + table: + input format: org.apache.hadoop.mapred.SequenceFileInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + ListSink + +PREHOOK: query: select * from masking_test +PREHOOK: type: QUERY +PREHOOK: Input: default@masking_test +PREHOOK: Input: default@src +#### A masked pattern was here #### +POSTHOOK: query: select * from masking_test +POSTHOOK: type: QUERY +POSTHOOK: Input: default@masking_test +POSTHOOK: Input: default@src +#### A masked pattern was here #### +0 12 12 12 12 12 12 12 12 12 12 12 +4 12 12 12 12 12 12 12 12 12 12 12 +8 12 12 12 12 12 12 12 12 12 12 12 +0 12 12 12 12 12 12 12 12 12 12 12 +0 12 12 12 12 12 12 12 12 12 12 12 +2 12 12 12 12 12 12 12 12 12 12 12 +PREHOOK: query: explain select * from masking_test where key > 0 +PREHOOK: type: QUERY +POSTHOOK: query: explain select * from masking_test where key > 0 +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 depends on stages: Stage-1 + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Map Operator Tree: + TableScan + alias: src + Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE + Filter Operator + predicate: (((UDFToInteger(key) % 2) = 0) and (UDFToInteger(key) < 10) and (UDFToInteger(key) > 0)) (type: boolean) + Statistics: Num rows: 27 Data size: 286 Basic stats: COMPLETE Column stats: NONE + Select Operator + expressions: UDFToInteger(key) (type: int), '12' (type: string), '12' (type: string), '12' (type: string), '12' (type: string), '12' (type: string), '12' (type: string), '12' (type: string), '12' (type: string), '12' (type: string), '12' (type: string), '12' (type: string) + outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11 + Statistics: Num rows: 27 Data size: 286 Basic stats: COMPLETE Column stats: NONE + File Output Operator + compressed: false + Statistics: Num rows: 27 Data size: 286 Basic stats: COMPLETE Column stats: NONE + table: + input format: org.apache.hadoop.mapred.SequenceFileInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + ListSink + +PREHOOK: query: select * from masking_test where key > 0 +PREHOOK: type: QUERY +PREHOOK: Input: default@masking_test +PREHOOK: Input: default@src +#### A masked pattern was here #### +POSTHOOK: query: select * from masking_test where key > 0 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@masking_test +POSTHOOK: Input: default@src +#### A masked pattern was here #### +4 12 12 12 12 12 12 12 12 12 12 12 +8 12 12 12 12 12 12 12 12 12 12 12 +2 12 12 12 12 12 12 12 12 12 12 12 diff --git a/ql/src/test/results/clientpositive/view_alias.q.out b/ql/src/test/results/clientpositive/view_alias.q.out new file mode 100644 index 0000000..c7ce8c9 --- /dev/null +++ b/ql/src/test/results/clientpositive/view_alias.q.out @@ -0,0 +1,318 @@ +PREHOOK: query: drop view v +PREHOOK: type: DROPVIEW +POSTHOOK: query: drop view v +POSTHOOK: type: DROPVIEW +PREHOOK: query: create view v as select key, '12' from src +PREHOOK: type: CREATEVIEW +PREHOOK: Input: default@src +PREHOOK: Output: database:default +PREHOOK: Output: default@v +POSTHOOK: query: create view v as select key, '12' from src +POSTHOOK: type: CREATEVIEW +POSTHOOK: Input: default@src +POSTHOOK: Output: database:default +POSTHOOK: Output: default@v +PREHOOK: query: desc formatted v +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@v +POSTHOOK: query: desc formatted v +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@v +# col_name data_type comment + +key string +_c1 string + +# Detailed Table Information +Database: default +#### A masked pattern was here #### +Retention: 0 +Table Type: VIRTUAL_VIEW +Table Parameters: +#### A masked pattern was here #### + +# Storage Information +SerDe Library: null +InputFormat: org.apache.hadoop.mapred.TextInputFormat +OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat +Compressed: No +Num Buckets: -1 +Bucket Columns: [] +Sort Columns: [] + +# View Information +View Original Text: select key, '12' from src +View Expanded Text: select `src`.`key`, '12' as `_c1` from `default`.`src` +PREHOOK: query: select * from v order by `_c1` limit 5 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Input: default@v +#### A masked pattern was here #### +POSTHOOK: query: select * from v order by `_c1` limit 5 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Input: default@v +#### A masked pattern was here #### +165 12 +27 12 +311 12 +97 12 +238 12 +PREHOOK: query: drop view v +PREHOOK: type: DROPVIEW +PREHOOK: Input: default@v +PREHOOK: Output: default@v +POSTHOOK: query: drop view v +POSTHOOK: type: DROPVIEW +POSTHOOK: Input: default@v +POSTHOOK: Output: default@v +PREHOOK: query: create view v as select key as `_c1`, '12' from src +PREHOOK: type: CREATEVIEW +PREHOOK: Input: default@src +PREHOOK: Output: database:default +PREHOOK: Output: default@v +POSTHOOK: query: create view v as select key as `_c1`, '12' from src +POSTHOOK: type: CREATEVIEW +POSTHOOK: Input: default@src +POSTHOOK: Output: database:default +POSTHOOK: Output: default@v +PREHOOK: query: desc formatted v +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@v +POSTHOOK: query: desc formatted v +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@v +# col_name data_type comment + +key string +_c1 string + +# Detailed Table Information +Database: default +#### A masked pattern was here #### +Retention: 0 +Table Type: VIRTUAL_VIEW +Table Parameters: +#### A masked pattern was here #### + +# Storage Information +SerDe Library: null +InputFormat: org.apache.hadoop.mapred.TextInputFormat +OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat +Compressed: No +Num Buckets: -1 +Bucket Columns: [] +Sort Columns: [] + +# View Information +View Original Text: select key as _c1, '12' from src +View Expanded Text: select `src`.`key` as `_c1`, '12' as `_c1` from `default`.`src` +PREHOOK: query: select * from v order by `_c1` limit 5 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Input: default@v +#### A masked pattern was here #### +POSTHOOK: query: select * from v order by `_c1` limit 5 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Input: default@v +#### A masked pattern was here #### +165 12 +27 12 +311 12 +97 12 +238 12 +PREHOOK: query: drop view v +PREHOOK: type: DROPVIEW +PREHOOK: Input: default@v +PREHOOK: Output: default@v +POSTHOOK: query: drop view v +POSTHOOK: type: DROPVIEW +POSTHOOK: Input: default@v +POSTHOOK: Output: default@v +PREHOOK: query: create view v as select *, '12' from src +PREHOOK: type: CREATEVIEW +PREHOOK: Input: default@src +PREHOOK: Output: database:default +PREHOOK: Output: default@v +POSTHOOK: query: create view v as select *, '12' from src +POSTHOOK: type: CREATEVIEW +POSTHOOK: Input: default@src +POSTHOOK: Output: database:default +POSTHOOK: Output: default@v +PREHOOK: query: desc formatted v +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@v +POSTHOOK: query: desc formatted v +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@v +# col_name data_type comment + +key string +value string +_c1 string + +# Detailed Table Information +Database: default +#### A masked pattern was here #### +Retention: 0 +Table Type: VIRTUAL_VIEW +Table Parameters: +#### A masked pattern was here #### + +# Storage Information +SerDe Library: null +InputFormat: org.apache.hadoop.mapred.TextInputFormat +OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat +Compressed: No +Num Buckets: -1 +Bucket Columns: [] +Sort Columns: [] + +# View Information +View Original Text: select *, '12' from src +View Expanded Text: select `src`.`key`, `src`.`value`, '12' as `_c1` from `default`.`src` +PREHOOK: query: select * from v order by `_c1` limit 5 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Input: default@v +#### A masked pattern was here #### +POSTHOOK: query: select * from v order by `_c1` limit 5 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Input: default@v +#### A masked pattern was here #### +165 val_165 12 +27 val_27 12 +311 val_311 12 +97 val_97 12 +238 val_238 12 +PREHOOK: query: drop view v +PREHOOK: type: DROPVIEW +PREHOOK: Input: default@v +PREHOOK: Output: default@v +POSTHOOK: query: drop view v +POSTHOOK: type: DROPVIEW +POSTHOOK: Input: default@v +POSTHOOK: Output: default@v +PREHOOK: query: create view v as select *, '12' as `_c121` from src +PREHOOK: type: CREATEVIEW +PREHOOK: Input: default@src +PREHOOK: Output: database:default +PREHOOK: Output: default@v +POSTHOOK: query: create view v as select *, '12' as `_c121` from src +POSTHOOK: type: CREATEVIEW +POSTHOOK: Input: default@src +POSTHOOK: Output: database:default +POSTHOOK: Output: default@v +PREHOOK: query: desc formatted v +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@v +POSTHOOK: query: desc formatted v +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@v +# col_name data_type comment + +key string +value string +_c121 string + +# Detailed Table Information +Database: default +#### A masked pattern was here #### +Retention: 0 +Table Type: VIRTUAL_VIEW +Table Parameters: +#### A masked pattern was here #### + +# Storage Information +SerDe Library: null +InputFormat: org.apache.hadoop.mapred.TextInputFormat +OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat +Compressed: No +Num Buckets: -1 +Bucket Columns: [] +Sort Columns: [] + +# View Information +View Original Text: select *, '12' as _c121 from src +View Expanded Text: select `src`.`key`, `src`.`value`, '12' as `_c121` from `default`.`src` +PREHOOK: query: select * from v order by `_c121` limit 5 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Input: default@v +#### A masked pattern was here #### +POSTHOOK: query: select * from v order by `_c121` limit 5 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Input: default@v +#### A masked pattern was here #### +165 val_165 12 +27 val_27 12 +311 val_311 12 +97 val_97 12 +238 val_238 12 +PREHOOK: query: drop view v +PREHOOK: type: DROPVIEW +PREHOOK: Input: default@v +PREHOOK: Output: default@v +POSTHOOK: query: drop view v +POSTHOOK: type: DROPVIEW +POSTHOOK: Input: default@v +POSTHOOK: Output: default@v +PREHOOK: query: create view v as select key, count(*) from src group by key +PREHOOK: type: CREATEVIEW +PREHOOK: Input: default@src +PREHOOK: Output: database:default +PREHOOK: Output: default@v +POSTHOOK: query: create view v as select key, count(*) from src group by key +POSTHOOK: type: CREATEVIEW +POSTHOOK: Input: default@src +POSTHOOK: Output: database:default +POSTHOOK: Output: default@v +PREHOOK: query: desc formatted v +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@v +POSTHOOK: query: desc formatted v +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@v +# col_name data_type comment + +key string +_c1 bigint + +# Detailed Table Information +Database: default +#### A masked pattern was here #### +Retention: 0 +Table Type: VIRTUAL_VIEW +Table Parameters: +#### A masked pattern was here #### + +# Storage Information +SerDe Library: null +InputFormat: org.apache.hadoop.mapred.TextInputFormat +OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat +Compressed: No +Num Buckets: -1 +Bucket Columns: [] +Sort Columns: [] + +# View Information +View Original Text: select key, count(*) from src group by key +View Expanded Text: select `src`.`key`, count(*) as `_c1` from `default`.`src` group by `src`.`key` +PREHOOK: query: select * from v order by `_c1` limit 5 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Input: default@v +#### A masked pattern was here #### +POSTHOOK: query: select * from v order by `_c1` limit 5 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Input: default@v +#### A masked pattern was here #### +11 1 +105 1 +114 1 +96 1 +10 1