This is an automated email from the ASF dual-hosted git repository.

gsaihemanth pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new e39f67a958f HIVE-28511: add column access information to 
HivePrivilegeObject (#5440) (Jintong Jiang, Reviewed by Dmitriy Fingerman, 
Soumyakanti Das, Sai Hemanth Gantasala)
e39f67a958f is described below

commit e39f67a958f882a6d4e5e2bac165d6b83bc1640f
Author: Hazel Jiang <107082535+jjiang...@users.noreply.github.com>
AuthorDate: Wed Sep 18 10:51:01 2024 -0700

    HIVE-28511: add column access information to HivePrivilegeObject (#5440) 
(Jintong Jiang, Reviewed by Dmitriy Fingerman, Soumyakanti Das, Sai Hemanth 
Gantasala)
---
 .../negative/write_iceberg_branch_negative.q.out   |   2 +-
 .../hadoop/hive/ql/parse/SemanticAnalyzer.java     |  20 +-
 .../clientpositive/authorization_insert_column.q   |  67 +++
 .../llap/authorization_insert_column.q.out         | 633 +++++++++++++++++++++
 4 files changed, 718 insertions(+), 4 deletions(-)

diff --git 
a/iceberg/iceberg-handler/src/test/results/negative/write_iceberg_branch_negative.q.out
 
b/iceberg/iceberg-handler/src/test/results/negative/write_iceberg_branch_negative.q.out
index f24ab56e08c..07a8e5baa83 100644
--- 
a/iceberg/iceberg-handler/src/test/results/negative/write_iceberg_branch_negative.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/negative/write_iceberg_branch_negative.q.out
@@ -6,4 +6,4 @@ POSTHOOK: query: create external table ice01(a int, b string, c 
int) stored by i
 POSTHOOK: type: CREATETABLE
 POSTHOOK: Output: database:default
 POSTHOOK: Output: default@ice01
-FAILED: SemanticException Cannot use snapshotRef (does not exist): test1
+FAILED: SemanticException org.apache.hadoop.hive.ql.parse.SemanticException: 
Cannot use snapshotRef (does not exist): test1
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 a966ec8d0d9..4f0decbcf54 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
@@ -2143,12 +2143,15 @@ public class SemanticAnalyzer extends 
BaseSemanticAnalyzer {
    */
   private void handleInsertStatementSpecPhase1(ASTNode ast, QBParseInfo qbp, 
Phase1Ctx ctx_1) throws SemanticException {
     ASTNode tabColName = (ASTNode)ast.getChild(1);
-    if(ast.getType() == HiveParser.TOK_INSERT_INTO && tabColName != null && 
tabColName.getType() == HiveParser.TOK_TABCOLNAME) {
+    boolean hasSpecificColumns = tabColName != null && tabColName.getType() == 
HiveParser.TOK_TABCOLNAME;
+    if(ast.getType() == HiveParser.TOK_INSERT_INTO) {
       //we have "insert into foo(a,b)..."; parser will enforce that 1+ columns 
are listed if TOK_TABCOLNAME is present
       String fullTableName = getUnescapedName((ASTNode) 
ast.getChild(0).getChild(0),
           SessionState.get().getCurrentDatabase());
-      List<String> targetColumnNames = processTableColumnNames(tabColName, 
fullTableName);
-      qbp.setDestSchemaForClause(ctx_1.dest, targetColumnNames);
+      List<String> targetColumnNames = hasSpecificColumns ? 
processTableColumnNames(tabColName, fullTableName) : new ArrayList<>();
+      if (hasSpecificColumns) {
+        qbp.setDestSchemaForClause(ctx_1.dest, targetColumnNames);
+      }
       Table targetTable;
       try {
         targetTable = getTableObjectByName(fullTableName);
@@ -2160,6 +2163,17 @@ public class SemanticAnalyzer extends 
BaseSemanticAnalyzer {
         throw new SemanticException(generateErrorMessage(ast,
             "Unable to access metadata for table " + fullTableName));
       }
+      ColumnAccessInfo cai = new ColumnAccessInfo();
+      if (!hasSpecificColumns) {
+        for (FieldSchema col : targetTable.getCols()) {
+          targetColumnNames.add(col.getName());
+        }
+      }
+      String completeTableName = targetTable.getCompleteName();
+      for (String colName : targetColumnNames) {
+        cai.add(completeTableName, colName);
+      }
+      setUpdateColumnAccessInfo(cai);
       Set<String> targetColumns = new HashSet<>(targetColumnNames);
       for(FieldSchema f : targetTable.getCols()) {
         //parser only allows foo(a,b), not foo(foo.a, foo.b)
diff --git a/ql/src/test/queries/clientpositive/authorization_insert_column.q 
b/ql/src/test/queries/clientpositive/authorization_insert_column.q
new file mode 100644
index 00000000000..590487345f3
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/authorization_insert_column.q
@@ -0,0 +1,67 @@
+set 
hive.security.authorization.manager=org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactoryForTest;
+set test.hive.authz.sstd.validator.outputPrivObjs=true;
+set test.hive.authz.sstd.validator.bypassObjTypes=DATABASE;
+set hive.test.authz.sstd.hs2.mode=true;
+set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
+set hive.support.concurrency=true;
+set user.name=testuser;
+
+
+CREATE DATABASE IF NOT EXISTS test_insert_col_db;
+USE test_insert_col_db;
+
+-- Negative Case 1: Basic Table with Restricted Column
+CREATE TABLE test_basic_table (
+  id INT,
+  name STRING,
+  age INT
+);
+
+SHOW DATABASES LIKE 'test_insert_col_db';
+SHOW TABLES IN test_insert_col_db;
+EXPLAIN INSERT INTO test_insert_col_db.test_basic_table (id, name, age) VALUES 
(1, 'Dummy', 24);
+DROP TABLE test_basic_table;
+
+-- Negative Case 2: Partitioned Table with Restricted Column
+CREATE TABLE test_partitioned_table (
+  id INT,
+  name STRING,
+  age INT
+)
+PARTITIONED BY (year INT);
+
+ALTER TABLE test_partitioned_table ADD PARTITION (year=2024);
+
+SHOW DATABASES LIKE 'test_insert_col_db';
+SHOW TABLES IN test_insert_col_db;
+EXPLAIN INSERT INTO test_insert_col_db.test_partitioned_table (id, name, age) 
VALUES (2, 'Dummy2', 25);
+DROP TABLE test_partitioned_table;
+
+-- Negative Case 3: ACID Table with Restricted Column
+CREATE TABLE test_acid_table (
+  id INT,
+  name STRING,
+  age INT
+)
+STORED AS ORC
+TBLPROPERTIES ('transactional'='true');
+
+
+SHOW DATABASES LIKE 'test_insert_col_db';
+SHOW TABLES IN test_insert_col_db;
+EXPLAIN INSERT INTO test_insert_col_db.test_acid_table (id, name, age) VALUES 
(3, 'Dummy3', 26);
+DROP TABLE test_acid_table;
+
+-- Negative Case 4: Insert Without Specifying Column Names (Restricted Column)
+CREATE TABLE test_restricted_column_table (
+  id INT,
+  name STRING,
+  age INT
+);
+
+SHOW DATABASES LIKE 'test_insert_col_db';
+SHOW TABLES IN test_insert_col_db;
+EXPLAIN INSERT INTO test_insert_col_db.test_restricted_column_table VALUES (8, 
'Dummy4', 55);
+DROP TABLE test_restricted_column_table;
+
+DROP DATABASE test_insert_col_db;
diff --git 
a/ql/src/test/results/clientpositive/llap/authorization_insert_column.q.out 
b/ql/src/test/results/clientpositive/llap/authorization_insert_column.q.out
new file mode 100644
index 00000000000..d5f6175205d
--- /dev/null
+++ b/ql/src/test/results/clientpositive/llap/authorization_insert_column.q.out
@@ -0,0 +1,633 @@
+PREHOOK: query: CREATE DATABASE IF NOT EXISTS test_insert_col_db
+PREHOOK: type: CREATEDATABASE
+PREHOOK: Output: database:test_insert_col_db
+POSTHOOK: query: CREATE DATABASE IF NOT EXISTS test_insert_col_db
+POSTHOOK: type: CREATEDATABASE
+POSTHOOK: Output: database:test_insert_col_db
+PREHOOK: query: USE test_insert_col_db
+PREHOOK: type: SWITCHDATABASE
+PREHOOK: Input: database:test_insert_col_db
+POSTHOOK: query: USE test_insert_col_db
+POSTHOOK: type: SWITCHDATABASE
+POSTHOOK: Input: database:test_insert_col_db
+PREHOOK: query: CREATE TABLE test_basic_table (
+  id INT,
+  name STRING,
+  age INT
+)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:test_insert_col_db
+PREHOOK: Output: test_insert_col_db@test_basic_table
+POSTHOOK: query: CREATE TABLE test_basic_table (
+  id INT,
+  name STRING,
+  age INT
+)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:test_insert_col_db
+POSTHOOK: Output: test_insert_col_db@test_basic_table
+PREHOOK: query: SHOW DATABASES LIKE 'test_insert_col_db'
+PREHOOK: type: SHOWDATABASES
+filterListCmdObjects
+HIVE PRIVILEGE OBJECT { objectName: default type: DATABASE actionType: OTHER 
dbName: default}
+HIVE PRIVILEGE OBJECT { objectName: test_insert_col_db type: DATABASE 
actionType: OTHER dbName: test_insert_col_db}
+POSTHOOK: query: SHOW DATABASES LIKE 'test_insert_col_db'
+POSTHOOK: type: SHOWDATABASES
+test_insert_col_db
+PREHOOK: query: SHOW TABLES IN test_insert_col_db
+PREHOOK: type: SHOWTABLES
+PREHOOK: Input: database:test_insert_col_db
+filterListCmdObjects
+HIVE PRIVILEGE OBJECT { objectName: test_basic_table type: TABLE_OR_VIEW 
actionType: OTHER dbName: test_insert_col_db}
+POSTHOOK: query: SHOW TABLES IN test_insert_col_db
+POSTHOOK: type: SHOWTABLES
+POSTHOOK: Input: database:test_insert_col_db
+test_basic_table
+PREHOOK: query: EXPLAIN INSERT INTO test_insert_col_db.test_basic_table (id, 
name, age) VALUES (1, 'Dummy', 24)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: test_insert_col_db@test_basic_table
+POSTHOOK: query: EXPLAIN INSERT INTO test_insert_col_db.test_basic_table (id, 
name, age) VALUES (1, 'Dummy', 24)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: test_insert_col_db@test_basic_table
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-2 depends on stages: Stage-1
+  Stage-0 depends on stages: Stage-2
+  Stage-3 depends on stages: Stage-0
+
+STAGE PLANS:
+  Stage: Stage-1
+    Tez
+#### A masked pattern was here ####
+      Edges:
+        Reducer 2 <- Map 1 (CUSTOM_SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: _dummy_table
+                  Row Limit Per Split: 1
+                  Statistics: Num rows: 1 Data size: 10 Basic stats: COMPLETE 
Column stats: COMPLETE
+                  Select Operator
+                    expressions: array(const struct(1,'Dummy',24)) (type: 
array<struct<col1:int,col2:string,col3:int>>)
+                    outputColumnNames: _col0
+                    Statistics: Num rows: 1 Data size: 48 Basic stats: 
COMPLETE Column stats: COMPLETE
+                    UDTF Operator
+                      Statistics: Num rows: 1 Data size: 48 Basic stats: 
COMPLETE Column stats: COMPLETE
+                      function name: inline
+                      Select Operator
+                        expressions: col1 (type: int), col2 (type: string), 
col3 (type: int)
+                        outputColumnNames: _col0, _col1, _col2
+                        Statistics: Num rows: 1 Data size: 8 Basic stats: 
COMPLETE Column stats: COMPLETE
+                        File Output Operator
+                          compressed: false
+                          Statistics: Num rows: 1 Data size: 8 Basic stats: 
COMPLETE Column stats: COMPLETE
+                          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
+                              name: test_insert_col_db.test_basic_table
+                        Select Operator
+                          expressions: _col0 (type: int), _col1 (type: 
string), _col2 (type: int)
+                          outputColumnNames: id, name, age
+                          Statistics: Num rows: 1 Data size: 8 Basic stats: 
COMPLETE Column stats: COMPLETE
+                          Group By Operator
+                            aggregations: min(id), max(id), count(1), 
count(id), compute_bit_vector_hll(id), max(length(name)), 
avg(COALESCE(length(name),0)), count(name), compute_bit_vector_hll(name), 
min(age), max(age), count(age), compute_bit_vector_hll(age)
+                            minReductionHashAggr: 0.4
+                            mode: hash
+                            outputColumnNames: _col0, _col1, _col2, _col3, 
_col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12
+                            Statistics: Num rows: 1 Data size: 560 Basic 
stats: COMPLETE Column stats: COMPLETE
+                            Reduce Output Operator
+                              null sort order: 
+                              sort order: 
+                              Statistics: Num rows: 1 Data size: 560 Basic 
stats: COMPLETE Column stats: COMPLETE
+                              value expressions: _col0 (type: int), _col1 
(type: int), _col2 (type: bigint), _col3 (type: bigint), _col4 (type: binary), 
_col5 (type: int), _col6 (type: struct<count:bigint,sum:double,input:int>), 
_col7 (type: bigint), _col8 (type: binary), _col9 (type: int), _col10 (type: 
int), _col11 (type: bigint), _col12 (type: binary)
+            Execution mode: llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: vectorized, llap
+            Reduce Operator Tree:
+              Group By Operator
+                aggregations: min(VALUE._col0), max(VALUE._col1), 
count(VALUE._col2), count(VALUE._col3), compute_bit_vector_hll(VALUE._col4), 
max(VALUE._col5), avg(VALUE._col6), count(VALUE._col7), 
compute_bit_vector_hll(VALUE._col8), min(VALUE._col9), max(VALUE._col10), 
count(VALUE._col11), compute_bit_vector_hll(VALUE._col12)
+                mode: mergepartial
+                outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, 
_col6, _col7, _col8, _col9, _col10, _col11, _col12
+                Statistics: Num rows: 1 Data size: 492 Basic stats: COMPLETE 
Column stats: COMPLETE
+                Select Operator
+                  expressions: 'LONG' (type: string), UDFToLong(_col0) (type: 
bigint), UDFToLong(_col1) (type: bigint), (_col2 - _col3) (type: bigint), 
COALESCE(ndv_compute_bit_vector(_col4),0) (type: bigint), _col4 (type: binary), 
'STRING' (type: string), UDFToLong(COALESCE(_col5,0)) (type: bigint), 
COALESCE(_col6,0) (type: double), (_col2 - _col7) (type: bigint), 
COALESCE(ndv_compute_bit_vector(_col8),0) (type: bigint), _col8 (type: binary), 
'LONG' (type: string), UDFToLong(_col9) (typ [...]
+                  outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, 
_col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14, _col15, 
_col16, _col17
+                  Statistics: Num rows: 1 Data size: 794 Basic stats: COMPLETE 
Column stats: COMPLETE
+                  File Output Operator
+                    compressed: false
+                    Statistics: Num rows: 1 Data size: 794 Basic stats: 
COMPLETE Column stats: COMPLETE
+                    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-2
+    Dependency Collection
+
+  Stage: Stage-0
+    Move Operator
+      tables:
+          replace: 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
+              name: test_insert_col_db.test_basic_table
+
+  Stage: Stage-3
+    Stats Work
+      Basic Stats Work:
+      Column Stats Desc:
+          Columns: id, name, age
+          Column Types: int, string, int
+          Table: test_insert_col_db.test_basic_table
+
+PREHOOK: query: DROP TABLE test_basic_table
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: test_insert_col_db@test_basic_table
+PREHOOK: Output: database:test_insert_col_db
+PREHOOK: Output: test_insert_col_db@test_basic_table
+POSTHOOK: query: DROP TABLE test_basic_table
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: test_insert_col_db@test_basic_table
+POSTHOOK: Output: database:test_insert_col_db
+POSTHOOK: Output: test_insert_col_db@test_basic_table
+PREHOOK: query: CREATE TABLE test_partitioned_table (
+  id INT,
+  name STRING,
+  age INT
+)
+PARTITIONED BY (year INT)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:test_insert_col_db
+PREHOOK: Output: test_insert_col_db@test_partitioned_table
+POSTHOOK: query: CREATE TABLE test_partitioned_table (
+  id INT,
+  name STRING,
+  age INT
+)
+PARTITIONED BY (year INT)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:test_insert_col_db
+POSTHOOK: Output: test_insert_col_db@test_partitioned_table
+PREHOOK: query: ALTER TABLE test_partitioned_table ADD PARTITION (year=2024)
+PREHOOK: type: ALTERTABLE_ADDPARTS
+PREHOOK: Output: test_insert_col_db@test_partitioned_table
+POSTHOOK: query: ALTER TABLE test_partitioned_table ADD PARTITION (year=2024)
+POSTHOOK: type: ALTERTABLE_ADDPARTS
+POSTHOOK: Output: test_insert_col_db@test_partitioned_table
+POSTHOOK: Output: test_insert_col_db@test_partitioned_table@year=2024
+PREHOOK: query: SHOW DATABASES LIKE 'test_insert_col_db'
+PREHOOK: type: SHOWDATABASES
+filterListCmdObjects
+HIVE PRIVILEGE OBJECT { objectName: default type: DATABASE actionType: OTHER 
dbName: default}
+HIVE PRIVILEGE OBJECT { objectName: test_insert_col_db type: DATABASE 
actionType: OTHER dbName: test_insert_col_db}
+POSTHOOK: query: SHOW DATABASES LIKE 'test_insert_col_db'
+POSTHOOK: type: SHOWDATABASES
+test_insert_col_db
+PREHOOK: query: SHOW TABLES IN test_insert_col_db
+PREHOOK: type: SHOWTABLES
+PREHOOK: Input: database:test_insert_col_db
+filterListCmdObjects
+HIVE PRIVILEGE OBJECT { objectName: test_partitioned_table type: TABLE_OR_VIEW 
actionType: OTHER dbName: test_insert_col_db}
+POSTHOOK: query: SHOW TABLES IN test_insert_col_db
+POSTHOOK: type: SHOWTABLES
+POSTHOOK: Input: database:test_insert_col_db
+test_partitioned_table
+PREHOOK: query: EXPLAIN INSERT INTO test_insert_col_db.test_partitioned_table 
(id, name, age) VALUES (2, 'Dummy2', 25)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: test_insert_col_db@test_partitioned_table
+POSTHOOK: query: EXPLAIN INSERT INTO test_insert_col_db.test_partitioned_table 
(id, name, age) VALUES (2, 'Dummy2', 25)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: test_insert_col_db@test_partitioned_table
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-2 depends on stages: Stage-1
+  Stage-0 depends on stages: Stage-2
+  Stage-3 depends on stages: Stage-0
+
+STAGE PLANS:
+  Stage: Stage-1
+    Tez
+#### A masked pattern was here ####
+      Edges:
+        Reducer 2 <- Map 1 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: _dummy_table
+                  Row Limit Per Split: 1
+                  Statistics: Num rows: 1 Data size: 10 Basic stats: COMPLETE 
Column stats: COMPLETE
+                  Select Operator
+                    expressions: array(const struct(2,'Dummy2',25)) (type: 
array<struct<col1:int,col2:string,col3:int>>)
+                    outputColumnNames: _col0
+                    Statistics: Num rows: 1 Data size: 48 Basic stats: 
COMPLETE Column stats: COMPLETE
+                    UDTF Operator
+                      Statistics: Num rows: 1 Data size: 48 Basic stats: 
COMPLETE Column stats: COMPLETE
+                      function name: inline
+                      Select Operator
+                        expressions: col1 (type: int), col2 (type: string), 
col3 (type: int), null (type: int)
+                        outputColumnNames: _col0, _col1, _col2, _col3
+                        Statistics: Num rows: 1 Data size: 4 Basic stats: 
COMPLETE Column stats: COMPLETE
+                        File Output Operator
+                          compressed: false
+                          Statistics: Num rows: 1 Data size: 4 Basic stats: 
COMPLETE Column stats: COMPLETE
+                          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
+                              name: test_insert_col_db.test_partitioned_table
+                        Select Operator
+                          expressions: _col0 (type: int), _col1 (type: 
string), _col2 (type: int), _col3 (type: int)
+                          outputColumnNames: id, name, age, year
+                          Statistics: Num rows: 1 Data size: 4 Basic stats: 
COMPLETE Column stats: COMPLETE
+                          Group By Operator
+                            aggregations: min(id), max(id), count(1), 
count(id), compute_bit_vector_hll(id), max(length(name)), 
avg(COALESCE(length(name),0)), count(name), compute_bit_vector_hll(name), 
min(age), max(age), count(age), compute_bit_vector_hll(age)
+                            keys: year (type: int)
+                            minReductionHashAggr: 0.4
+                            mode: hash
+                            outputColumnNames: _col0, _col1, _col2, _col3, 
_col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13
+                            Statistics: Num rows: 1 Data size: 564 Basic 
stats: COMPLETE Column stats: COMPLETE
+                            Reduce Output Operator
+                              key expressions: _col0 (type: int)
+                              null sort order: z
+                              sort order: +
+                              Map-reduce partition columns: _col0 (type: int)
+                              Statistics: Num rows: 1 Data size: 564 Basic 
stats: COMPLETE Column stats: COMPLETE
+                              value expressions: _col1 (type: int), _col2 
(type: int), _col3 (type: bigint), _col4 (type: bigint), _col5 (type: binary), 
_col6 (type: int), _col7 (type: struct<count:bigint,sum:double,input:int>), 
_col8 (type: bigint), _col9 (type: binary), _col10 (type: int), _col11 (type: 
int), _col12 (type: bigint), _col13 (type: binary)
+            Execution mode: llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: vectorized, llap
+            Reduce Operator Tree:
+              Group By Operator
+                aggregations: min(VALUE._col0), max(VALUE._col1), 
count(VALUE._col2), count(VALUE._col3), compute_bit_vector_hll(VALUE._col4), 
max(VALUE._col5), avg(VALUE._col6), count(VALUE._col7), 
compute_bit_vector_hll(VALUE._col8), min(VALUE._col9), max(VALUE._col10), 
count(VALUE._col11), compute_bit_vector_hll(VALUE._col12)
+                keys: KEY._col0 (type: int)
+                mode: mergepartial
+                outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, 
_col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13
+                Statistics: Num rows: 1 Data size: 496 Basic stats: COMPLETE 
Column stats: COMPLETE
+                Select Operator
+                  expressions: 'LONG' (type: string), UDFToLong(_col1) (type: 
bigint), UDFToLong(_col2) (type: bigint), (_col3 - _col4) (type: bigint), 
COALESCE(ndv_compute_bit_vector(_col5),0) (type: bigint), _col5 (type: binary), 
'STRING' (type: string), UDFToLong(COALESCE(_col6,0)) (type: bigint), 
COALESCE(_col7,0) (type: double), (_col3 - _col8) (type: bigint), 
COALESCE(ndv_compute_bit_vector(_col9),0) (type: bigint), _col9 (type: binary), 
'LONG' (type: string), UDFToLong(_col10) (ty [...]
+                  outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, 
_col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14, _col15, 
_col16, _col17, _col18
+                  Statistics: Num rows: 1 Data size: 798 Basic stats: COMPLETE 
Column stats: COMPLETE
+                  File Output Operator
+                    compressed: false
+                    Statistics: Num rows: 1 Data size: 798 Basic stats: 
COMPLETE Column stats: COMPLETE
+                    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-2
+    Dependency Collection
+
+  Stage: Stage-0
+    Move Operator
+      tables:
+          partition:
+            year 
+          replace: 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
+              name: test_insert_col_db.test_partitioned_table
+
+  Stage: Stage-3
+    Stats Work
+      Basic Stats Work:
+      Column Stats Desc:
+          Columns: id, name, age
+          Column Types: int, string, int
+          Table: test_insert_col_db.test_partitioned_table
+
+PREHOOK: query: DROP TABLE test_partitioned_table
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: test_insert_col_db@test_partitioned_table
+PREHOOK: Output: database:test_insert_col_db
+PREHOOK: Output: test_insert_col_db@test_partitioned_table
+POSTHOOK: query: DROP TABLE test_partitioned_table
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: test_insert_col_db@test_partitioned_table
+POSTHOOK: Output: database:test_insert_col_db
+POSTHOOK: Output: test_insert_col_db@test_partitioned_table
+PREHOOK: query: CREATE TABLE test_acid_table (
+  id INT,
+  name STRING,
+  age INT
+)
+STORED AS ORC
+TBLPROPERTIES ('transactional'='true')
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:test_insert_col_db
+PREHOOK: Output: test_insert_col_db@test_acid_table
+POSTHOOK: query: CREATE TABLE test_acid_table (
+  id INT,
+  name STRING,
+  age INT
+)
+STORED AS ORC
+TBLPROPERTIES ('transactional'='true')
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:test_insert_col_db
+POSTHOOK: Output: test_insert_col_db@test_acid_table
+PREHOOK: query: SHOW DATABASES LIKE 'test_insert_col_db'
+PREHOOK: type: SHOWDATABASES
+filterListCmdObjects
+HIVE PRIVILEGE OBJECT { objectName: default type: DATABASE actionType: OTHER 
dbName: default}
+HIVE PRIVILEGE OBJECT { objectName: test_insert_col_db type: DATABASE 
actionType: OTHER dbName: test_insert_col_db}
+POSTHOOK: query: SHOW DATABASES LIKE 'test_insert_col_db'
+POSTHOOK: type: SHOWDATABASES
+test_insert_col_db
+PREHOOK: query: SHOW TABLES IN test_insert_col_db
+PREHOOK: type: SHOWTABLES
+PREHOOK: Input: database:test_insert_col_db
+filterListCmdObjects
+HIVE PRIVILEGE OBJECT { objectName: test_acid_table type: TABLE_OR_VIEW 
actionType: OTHER dbName: test_insert_col_db}
+POSTHOOK: query: SHOW TABLES IN test_insert_col_db
+POSTHOOK: type: SHOWTABLES
+POSTHOOK: Input: database:test_insert_col_db
+test_acid_table
+PREHOOK: query: EXPLAIN INSERT INTO test_insert_col_db.test_acid_table (id, 
name, age) VALUES (3, 'Dummy3', 26)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: test_insert_col_db@test_acid_table
+POSTHOOK: query: EXPLAIN INSERT INTO test_insert_col_db.test_acid_table (id, 
name, age) VALUES (3, 'Dummy3', 26)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: test_insert_col_db@test_acid_table
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-2 depends on stages: Stage-1
+  Stage-0 depends on stages: Stage-2
+  Stage-3 depends on stages: Stage-0
+
+STAGE PLANS:
+  Stage: Stage-1
+    Tez
+#### A masked pattern was here ####
+      Edges:
+        Reducer 2 <- Map 1 (CUSTOM_SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: _dummy_table
+                  Row Limit Per Split: 1
+                  Statistics: Num rows: 1 Data size: 10 Basic stats: COMPLETE 
Column stats: COMPLETE
+                  Select Operator
+                    expressions: array(const struct(3,'Dummy3',26)) (type: 
array<struct<col1:int,col2:string,col3:int>>)
+                    outputColumnNames: _col0
+                    Statistics: Num rows: 1 Data size: 48 Basic stats: 
COMPLETE Column stats: COMPLETE
+                    UDTF Operator
+                      Statistics: Num rows: 1 Data size: 48 Basic stats: 
COMPLETE Column stats: COMPLETE
+                      function name: inline
+                      Select Operator
+                        expressions: col1 (type: int), col2 (type: string), 
col3 (type: int)
+                        outputColumnNames: _col0, _col1, _col2
+                        Statistics: Num rows: 1 Data size: 8 Basic stats: 
COMPLETE Column stats: COMPLETE
+                        File Output Operator
+                          compressed: false
+                          Statistics: Num rows: 1 Data size: 8 Basic stats: 
COMPLETE Column stats: COMPLETE
+                          table:
+                              input format: 
org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
+                              output format: 
org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
+                              serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
+                              name: test_insert_col_db.test_acid_table
+                          Write Type: INSERT
+                        Select Operator
+                          expressions: _col0 (type: int), _col1 (type: 
string), _col2 (type: int)
+                          outputColumnNames: id, name, age
+                          Statistics: Num rows: 1 Data size: 8 Basic stats: 
COMPLETE Column stats: COMPLETE
+                          Group By Operator
+                            aggregations: min(id), max(id), count(1), 
count(id), compute_bit_vector_hll(id), max(length(name)), 
avg(COALESCE(length(name),0)), count(name), compute_bit_vector_hll(name), 
min(age), max(age), count(age), compute_bit_vector_hll(age)
+                            minReductionHashAggr: 0.4
+                            mode: hash
+                            outputColumnNames: _col0, _col1, _col2, _col3, 
_col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12
+                            Statistics: Num rows: 1 Data size: 560 Basic 
stats: COMPLETE Column stats: COMPLETE
+                            Reduce Output Operator
+                              null sort order: 
+                              sort order: 
+                              Statistics: Num rows: 1 Data size: 560 Basic 
stats: COMPLETE Column stats: COMPLETE
+                              value expressions: _col0 (type: int), _col1 
(type: int), _col2 (type: bigint), _col3 (type: bigint), _col4 (type: binary), 
_col5 (type: int), _col6 (type: struct<count:bigint,sum:double,input:int>), 
_col7 (type: bigint), _col8 (type: binary), _col9 (type: int), _col10 (type: 
int), _col11 (type: bigint), _col12 (type: binary)
+            Execution mode: llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: vectorized, llap
+            Reduce Operator Tree:
+              Group By Operator
+                aggregations: min(VALUE._col0), max(VALUE._col1), 
count(VALUE._col2), count(VALUE._col3), compute_bit_vector_hll(VALUE._col4), 
max(VALUE._col5), avg(VALUE._col6), count(VALUE._col7), 
compute_bit_vector_hll(VALUE._col8), min(VALUE._col9), max(VALUE._col10), 
count(VALUE._col11), compute_bit_vector_hll(VALUE._col12)
+                mode: mergepartial
+                outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, 
_col6, _col7, _col8, _col9, _col10, _col11, _col12
+                Statistics: Num rows: 1 Data size: 492 Basic stats: COMPLETE 
Column stats: COMPLETE
+                Select Operator
+                  expressions: 'LONG' (type: string), UDFToLong(_col0) (type: 
bigint), UDFToLong(_col1) (type: bigint), (_col2 - _col3) (type: bigint), 
COALESCE(ndv_compute_bit_vector(_col4),0) (type: bigint), _col4 (type: binary), 
'STRING' (type: string), UDFToLong(COALESCE(_col5,0)) (type: bigint), 
COALESCE(_col6,0) (type: double), (_col2 - _col7) (type: bigint), 
COALESCE(ndv_compute_bit_vector(_col8),0) (type: bigint), _col8 (type: binary), 
'LONG' (type: string), UDFToLong(_col9) (typ [...]
+                  outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, 
_col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14, _col15, 
_col16, _col17
+                  Statistics: Num rows: 1 Data size: 794 Basic stats: COMPLETE 
Column stats: COMPLETE
+                  File Output Operator
+                    compressed: false
+                    Statistics: Num rows: 1 Data size: 794 Basic stats: 
COMPLETE Column stats: COMPLETE
+                    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-2
+    Dependency Collection
+
+  Stage: Stage-0
+    Move Operator
+      tables:
+          replace: false
+          table:
+              input format: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
+              output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
+              serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
+              name: test_insert_col_db.test_acid_table
+          Write Type: INSERT
+
+  Stage: Stage-3
+    Stats Work
+      Basic Stats Work:
+      Column Stats Desc:
+          Columns: id, name, age
+          Column Types: int, string, int
+          Table: test_insert_col_db.test_acid_table
+
+PREHOOK: query: DROP TABLE test_acid_table
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: test_insert_col_db@test_acid_table
+PREHOOK: Output: database:test_insert_col_db
+PREHOOK: Output: test_insert_col_db@test_acid_table
+POSTHOOK: query: DROP TABLE test_acid_table
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: test_insert_col_db@test_acid_table
+POSTHOOK: Output: database:test_insert_col_db
+POSTHOOK: Output: test_insert_col_db@test_acid_table
+PREHOOK: query: CREATE TABLE test_restricted_column_table (
+  id INT,
+  name STRING,
+  age INT
+)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:test_insert_col_db
+PREHOOK: Output: test_insert_col_db@test_restricted_column_table
+POSTHOOK: query: CREATE TABLE test_restricted_column_table (
+  id INT,
+  name STRING,
+  age INT
+)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:test_insert_col_db
+POSTHOOK: Output: test_insert_col_db@test_restricted_column_table
+PREHOOK: query: SHOW DATABASES LIKE 'test_insert_col_db'
+PREHOOK: type: SHOWDATABASES
+filterListCmdObjects
+HIVE PRIVILEGE OBJECT { objectName: default type: DATABASE actionType: OTHER 
dbName: default}
+HIVE PRIVILEGE OBJECT { objectName: test_insert_col_db type: DATABASE 
actionType: OTHER dbName: test_insert_col_db}
+POSTHOOK: query: SHOW DATABASES LIKE 'test_insert_col_db'
+POSTHOOK: type: SHOWDATABASES
+test_insert_col_db
+PREHOOK: query: SHOW TABLES IN test_insert_col_db
+PREHOOK: type: SHOWTABLES
+PREHOOK: Input: database:test_insert_col_db
+filterListCmdObjects
+HIVE PRIVILEGE OBJECT { objectName: test_restricted_column_table type: 
TABLE_OR_VIEW actionType: OTHER dbName: test_insert_col_db}
+POSTHOOK: query: SHOW TABLES IN test_insert_col_db
+POSTHOOK: type: SHOWTABLES
+POSTHOOK: Input: database:test_insert_col_db
+test_restricted_column_table
+PREHOOK: query: EXPLAIN INSERT INTO 
test_insert_col_db.test_restricted_column_table VALUES (8, 'Dummy4', 55)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: test_insert_col_db@test_restricted_column_table
+POSTHOOK: query: EXPLAIN INSERT INTO 
test_insert_col_db.test_restricted_column_table VALUES (8, 'Dummy4', 55)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: test_insert_col_db@test_restricted_column_table
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-2 depends on stages: Stage-1
+  Stage-0 depends on stages: Stage-2
+  Stage-3 depends on stages: Stage-0
+
+STAGE PLANS:
+  Stage: Stage-1
+    Tez
+#### A masked pattern was here ####
+      Edges:
+        Reducer 2 <- Map 1 (CUSTOM_SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: _dummy_table
+                  Row Limit Per Split: 1
+                  Statistics: Num rows: 1 Data size: 10 Basic stats: COMPLETE 
Column stats: COMPLETE
+                  Select Operator
+                    expressions: array(const struct(8,'Dummy4',55)) (type: 
array<struct<col1:int,col2:string,col3:int>>)
+                    outputColumnNames: _col0
+                    Statistics: Num rows: 1 Data size: 48 Basic stats: 
COMPLETE Column stats: COMPLETE
+                    UDTF Operator
+                      Statistics: Num rows: 1 Data size: 48 Basic stats: 
COMPLETE Column stats: COMPLETE
+                      function name: inline
+                      Select Operator
+                        expressions: col1 (type: int), col2 (type: string), 
col3 (type: int)
+                        outputColumnNames: _col0, _col1, _col2
+                        Statistics: Num rows: 1 Data size: 8 Basic stats: 
COMPLETE Column stats: COMPLETE
+                        File Output Operator
+                          compressed: false
+                          Statistics: Num rows: 1 Data size: 8 Basic stats: 
COMPLETE Column stats: COMPLETE
+                          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
+                              name: 
test_insert_col_db.test_restricted_column_table
+                        Select Operator
+                          expressions: _col0 (type: int), _col1 (type: 
string), _col2 (type: int)
+                          outputColumnNames: id, name, age
+                          Statistics: Num rows: 1 Data size: 8 Basic stats: 
COMPLETE Column stats: COMPLETE
+                          Group By Operator
+                            aggregations: min(id), max(id), count(1), 
count(id), compute_bit_vector_hll(id), max(length(name)), 
avg(COALESCE(length(name),0)), count(name), compute_bit_vector_hll(name), 
min(age), max(age), count(age), compute_bit_vector_hll(age)
+                            minReductionHashAggr: 0.4
+                            mode: hash
+                            outputColumnNames: _col0, _col1, _col2, _col3, 
_col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12
+                            Statistics: Num rows: 1 Data size: 560 Basic 
stats: COMPLETE Column stats: COMPLETE
+                            Reduce Output Operator
+                              null sort order: 
+                              sort order: 
+                              Statistics: Num rows: 1 Data size: 560 Basic 
stats: COMPLETE Column stats: COMPLETE
+                              value expressions: _col0 (type: int), _col1 
(type: int), _col2 (type: bigint), _col3 (type: bigint), _col4 (type: binary), 
_col5 (type: int), _col6 (type: struct<count:bigint,sum:double,input:int>), 
_col7 (type: bigint), _col8 (type: binary), _col9 (type: int), _col10 (type: 
int), _col11 (type: bigint), _col12 (type: binary)
+            Execution mode: llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: vectorized, llap
+            Reduce Operator Tree:
+              Group By Operator
+                aggregations: min(VALUE._col0), max(VALUE._col1), 
count(VALUE._col2), count(VALUE._col3), compute_bit_vector_hll(VALUE._col4), 
max(VALUE._col5), avg(VALUE._col6), count(VALUE._col7), 
compute_bit_vector_hll(VALUE._col8), min(VALUE._col9), max(VALUE._col10), 
count(VALUE._col11), compute_bit_vector_hll(VALUE._col12)
+                mode: mergepartial
+                outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, 
_col6, _col7, _col8, _col9, _col10, _col11, _col12
+                Statistics: Num rows: 1 Data size: 492 Basic stats: COMPLETE 
Column stats: COMPLETE
+                Select Operator
+                  expressions: 'LONG' (type: string), UDFToLong(_col0) (type: 
bigint), UDFToLong(_col1) (type: bigint), (_col2 - _col3) (type: bigint), 
COALESCE(ndv_compute_bit_vector(_col4),0) (type: bigint), _col4 (type: binary), 
'STRING' (type: string), UDFToLong(COALESCE(_col5,0)) (type: bigint), 
COALESCE(_col6,0) (type: double), (_col2 - _col7) (type: bigint), 
COALESCE(ndv_compute_bit_vector(_col8),0) (type: bigint), _col8 (type: binary), 
'LONG' (type: string), UDFToLong(_col9) (typ [...]
+                  outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, 
_col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14, _col15, 
_col16, _col17
+                  Statistics: Num rows: 1 Data size: 794 Basic stats: COMPLETE 
Column stats: COMPLETE
+                  File Output Operator
+                    compressed: false
+                    Statistics: Num rows: 1 Data size: 794 Basic stats: 
COMPLETE Column stats: COMPLETE
+                    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-2
+    Dependency Collection
+
+  Stage: Stage-0
+    Move Operator
+      tables:
+          replace: 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
+              name: test_insert_col_db.test_restricted_column_table
+
+  Stage: Stage-3
+    Stats Work
+      Basic Stats Work:
+      Column Stats Desc:
+          Columns: id, name, age
+          Column Types: int, string, int
+          Table: test_insert_col_db.test_restricted_column_table
+
+PREHOOK: query: DROP TABLE test_restricted_column_table
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: test_insert_col_db@test_restricted_column_table
+PREHOOK: Output: database:test_insert_col_db
+PREHOOK: Output: test_insert_col_db@test_restricted_column_table
+POSTHOOK: query: DROP TABLE test_restricted_column_table
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: test_insert_col_db@test_restricted_column_table
+POSTHOOK: Output: database:test_insert_col_db
+POSTHOOK: Output: test_insert_col_db@test_restricted_column_table
+PREHOOK: query: DROP DATABASE test_insert_col_db
+PREHOOK: type: DROPDATABASE
+PREHOOK: Input: database:test_insert_col_db
+PREHOOK: Output: database:test_insert_col_db
+POSTHOOK: query: DROP DATABASE test_insert_col_db
+POSTHOOK: type: DROPDATABASE
+POSTHOOK: Input: database:test_insert_col_db
+POSTHOOK: Output: database:test_insert_col_db


Reply via email to