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 e8acabe..e6a19fa 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -3512,7 +3512,7 @@ Integer genColListRegex(String colRegex, String tabAlias, ASTNode sel, pos = Integer.valueOf(pos.intValue() + 1); matched++; - if (unparseTranslator.isEnabled() || tableMask.isEnabled()) { + if (unparseTranslator.isEnabled() || (tableMask.isEnabled() && analyzeRewrite == null)) { if (replacementText.length() > 0) { replacementText.append(", "); } @@ -11325,7 +11325,8 @@ void analyzeInternal(ASTNode ast, PlannerContext plannerCtx) throws SemanticExce // 2. Gen OP Tree from resolved Parse Tree Operator sinkOp = genOPTree(ast, plannerCtx); - if (!unparseTranslator.isEnabled() && tableMask.isEnabled()) { + if (!unparseTranslator.isEnabled() && + (tableMask.isEnabled() && analyzeRewrite == null)) { // Here we rewrite the * and also the masking table ASTNode tree = rewriteASTWithMaskAndFilter(ast); if (tree != ast) { diff --git ql/src/test/queries/clientpositive/masking_11.q ql/src/test/queries/clientpositive/masking_11.q new file mode 100644 index 0000000..dc46117 --- /dev/null +++ ql/src/test/queries/clientpositive/masking_11.q @@ -0,0 +1,6 @@ +set hive.mapred.mode=nonstrict; +set hive.security.authorization.manager=org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactoryForTest; + +create table `masking_test` as select cast(key as int) as key, value from src; + +analyze table `masking_test` compute statistics for columns; diff --git ql/src/test/results/clientpositive/masking_11.q.out ql/src/test/results/clientpositive/masking_11.q.out new file mode 100644 index 0000000..f29c51f --- /dev/null +++ ql/src/test/results/clientpositive/masking_11.q.out @@ -0,0 +1,20 @@ +PREHOOK: query: create table `masking_test` as select cast(key as int) as key, value from src +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@src +PREHOOK: Output: database:default +PREHOOK: Output: default@masking_test +POSTHOOK: query: create table `masking_test` as select cast(key as int) as key, value from src +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@src +POSTHOOK: Output: database:default +POSTHOOK: Output: default@masking_test +POSTHOOK: Lineage: masking_test.key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: masking_test.value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: analyze table `masking_test` compute statistics for columns +PREHOOK: type: QUERY +PREHOOK: Input: default@masking_test +#### A masked pattern was here #### +POSTHOOK: query: analyze table `masking_test` compute statistics for columns +POSTHOOK: type: QUERY +POSTHOOK: Input: default@masking_test +#### A masked pattern was here ####