You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by se...@apache.org on 2017/10/13 00:15:40 UTC
[01/50] [abbrv] hive git commit: HIVE-14671 : Merge branch 'master'
into hive-14535 (Wei Zheng)
Repository: hive
Updated Branches:
refs/heads/master 9375cf3c0 -> c1a1d5960
http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/ql/src/test/results/clientpositive/mm_all.q.out
----------------------------------------------------------------------
diff --cc ql/src/test/results/clientpositive/mm_all.q.out
index 6bed878,0000000..e08f1a8
mode 100644,000000..100644
--- a/ql/src/test/results/clientpositive/mm_all.q.out
+++ b/ql/src/test/results/clientpositive/mm_all.q.out
@@@ -1,2412 -1,0 +1,2443 @@@
+PREHOOK: query: drop table intermediate
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table intermediate
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table intermediate(key int) partitioned by (p int) stored as orc
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@intermediate
+POSTHOOK: query: create table intermediate(key int) partitioned by (p int) stored as orc
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@intermediate
+PREHOOK: query: insert into table intermediate partition(p='455') select distinct key from src where key >= 0 order by key desc limit 2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: default@intermediate@p=455
+POSTHOOK: query: insert into table intermediate partition(p='455') select distinct key from src where key >= 0 order by key desc limit 2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: default@intermediate@p=455
+POSTHOOK: Lineage: intermediate PARTITION(p=455).key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ]
+PREHOOK: query: insert into table intermediate partition(p='456') select distinct key from src where key is not null order by key asc limit 2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: default@intermediate@p=456
+POSTHOOK: query: insert into table intermediate partition(p='456') select distinct key from src where key is not null order by key asc limit 2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: default@intermediate@p=456
+POSTHOOK: Lineage: intermediate PARTITION(p=456).key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ]
+PREHOOK: query: insert into table intermediate partition(p='457') select distinct key from src where key >= 100 order by key asc limit 2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: default@intermediate@p=457
+POSTHOOK: query: insert into table intermediate partition(p='457') select distinct key from src where key >= 100 order by key asc limit 2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: default@intermediate@p=457
+POSTHOOK: Lineage: intermediate PARTITION(p=457).key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ]
+PREHOOK: query: drop table part_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table part_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table part_mm(key int) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@part_mm
+POSTHOOK: query: create table part_mm(key int) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@part_mm
+PREHOOK: query: explain insert into table part_mm partition(key_mm=455) select key from intermediate
+PREHOOK: type: QUERY
+POSTHOOK: query: explain insert into table part_mm partition(key_mm=455) select key from intermediate
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+ Stage-1 is a root stage
+ Stage-7 depends on stages: Stage-1 , consists of Stage-4, Stage-3, Stage-5
+ Stage-4
+ Stage-0 depends on stages: Stage-4, Stage-3, Stage-6
+ Stage-2 depends on stages: Stage-0
+ Stage-3
+ Stage-5
+ Stage-6 depends on stages: Stage-5
+
+STAGE PLANS:
+ Stage: Stage-1
+ Map Reduce
+ Map Operator Tree:
+ TableScan
+ alias: intermediate
+ Statistics: Num rows: 6 Data size: 24 Basic stats: COMPLETE Column stats: NONE
+ Select Operator
+ expressions: key (type: int)
+ outputColumnNames: _col0
+ Statistics: Num rows: 6 Data size: 24 Basic stats: COMPLETE Column stats: NONE
+ File Output Operator
+ compressed: false
+ Statistics: Num rows: 6 Data size: 24 Basic stats: COMPLETE Column stats: NONE
+ 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: default.part_mm
+ Write Type: INSERT
+
+ Stage: Stage-7
+ Conditional Operator
+
+ Stage: Stage-4
+ Move Operator
+ files:
+ hdfs directory: true
+#### A masked pattern was here ####
+
+ Stage: Stage-0
+ Move Operator
+ tables:
+ partition:
+ key_mm 455
+ 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: default.part_mm
+ micromanaged table: true
+
+ Stage: Stage-2
+ Stats-Aggr Operator
+
+ Stage: Stage-3
+ Merge File Operator
+ Map Operator Tree:
+ ORC File Merge Operator
+ merge level: stripe
+ input format: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
+
+ Stage: Stage-5
+ Merge File Operator
+ Map Operator Tree:
+ ORC File Merge Operator
+ merge level: stripe
+ input format: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
+
+ Stage: Stage-6
+ Move Operator
+ files:
+ hdfs directory: true
+#### A masked pattern was here ####
+
+PREHOOK: query: insert into table part_mm partition(key_mm=455) select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@part_mm@key_mm=455
+POSTHOOK: query: insert into table part_mm partition(key_mm=455) select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@part_mm@key_mm=455
+POSTHOOK: Lineage: part_mm PARTITION(key_mm=455).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: insert into table part_mm partition(key_mm=456) select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@part_mm@key_mm=456
+POSTHOOK: query: insert into table part_mm partition(key_mm=456) select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@part_mm@key_mm=456
+POSTHOOK: Lineage: part_mm PARTITION(key_mm=456).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: insert into table part_mm partition(key_mm=455) select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@part_mm@key_mm=455
+POSTHOOK: query: insert into table part_mm partition(key_mm=455) select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@part_mm@key_mm=455
+POSTHOOK: Lineage: part_mm PARTITION(key_mm=455).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from part_mm order by key, key_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part_mm
+PREHOOK: Input: default@part_mm@key_mm=455
+PREHOOK: Input: default@part_mm@key_mm=456
+#### A masked pattern was here ####
+POSTHOOK: query: select * from part_mm order by key, key_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part_mm
+POSTHOOK: Input: default@part_mm@key_mm=455
+POSTHOOK: Input: default@part_mm@key_mm=456
+#### A masked pattern was here ####
+0 455
+0 455
+0 456
+10 455
+10 455
+10 456
+97 455
+97 455
+97 456
+98 455
+98 455
+98 456
+100 455
+100 455
+100 456
+103 455
+103 455
+103 456
+PREHOOK: query: select * from part_mm order by key, key_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part_mm
+PREHOOK: Input: default@part_mm@key_mm=455
+PREHOOK: Input: default@part_mm@key_mm=456
+#### A masked pattern was here ####
+POSTHOOK: query: select * from part_mm order by key, key_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part_mm
+POSTHOOK: Input: default@part_mm@key_mm=455
+POSTHOOK: Input: default@part_mm@key_mm=456
+#### A masked pattern was here ####
+0 455
+0 455
+0 456
+10 455
+10 455
+10 456
+97 455
+97 455
+97 456
+98 455
+98 455
+98 456
+100 455
+100 455
+100 456
+103 455
+103 455
+103 456
+PREHOOK: query: truncate table part_mm
+PREHOOK: type: TRUNCATETABLE
+PREHOOK: Output: default@part_mm@key_mm=455
+PREHOOK: Output: default@part_mm@key_mm=456
+POSTHOOK: query: truncate table part_mm
+POSTHOOK: type: TRUNCATETABLE
+POSTHOOK: Output: default@part_mm@key_mm=455
+POSTHOOK: Output: default@part_mm@key_mm=456
+PREHOOK: query: select * from part_mm order by key, key_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part_mm
+PREHOOK: Input: default@part_mm@key_mm=455
+PREHOOK: Input: default@part_mm@key_mm=456
+#### A masked pattern was here ####
+POSTHOOK: query: select * from part_mm order by key, key_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part_mm
+POSTHOOK: Input: default@part_mm@key_mm=455
+POSTHOOK: Input: default@part_mm@key_mm=456
+#### A masked pattern was here ####
+PREHOOK: query: drop table part_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@part_mm
+PREHOOK: Output: default@part_mm
+POSTHOOK: query: drop table part_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@part_mm
+POSTHOOK: Output: default@part_mm
+PREHOOK: query: drop table simple_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table simple_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table simple_mm(key int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@simple_mm
+POSTHOOK: query: create table simple_mm(key int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@simple_mm
+PREHOOK: query: insert into table simple_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@simple_mm
+POSTHOOK: query: insert into table simple_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@simple_mm
+POSTHOOK: Lineage: simple_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from simple_mm order by key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@simple_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from simple_mm order by key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@simple_mm
+#### A masked pattern was here ####
+0
+10
+97
+98
+100
+103
+PREHOOK: query: insert into table simple_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@simple_mm
+POSTHOOK: query: insert into table simple_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@simple_mm
+POSTHOOK: Lineage: simple_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from simple_mm order by key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@simple_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from simple_mm order by key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@simple_mm
+#### A masked pattern was here ####
+0
+0
+10
+10
+97
+97
+98
+98
+100
+100
+103
+103
+PREHOOK: query: truncate table simple_mm
+PREHOOK: type: TRUNCATETABLE
+PREHOOK: Output: default@simple_mm
+POSTHOOK: query: truncate table simple_mm
+POSTHOOK: type: TRUNCATETABLE
+POSTHOOK: Output: default@simple_mm
+PREHOOK: query: select * from simple_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@simple_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from simple_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@simple_mm
+#### A masked pattern was here ####
+PREHOOK: query: drop table simple_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@simple_mm
+PREHOOK: Output: default@simple_mm
+POSTHOOK: query: drop table simple_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@simple_mm
+POSTHOOK: Output: default@simple_mm
+PREHOOK: query: drop table dp_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table dp_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table dp_mm (key int) partitioned by (key1 string, key2 int) stored as orc
+ tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@dp_mm
+POSTHOOK: query: create table dp_mm (key int) partitioned by (key1 string, key2 int) stored as orc
+ tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@dp_mm
+PREHOOK: query: insert into table dp_mm partition (key1='123', key2) select key, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@dp_mm@key1=123
+POSTHOOK: query: insert into table dp_mm partition (key1='123', key2) select key, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@dp_mm@key1=123/key2=0
+POSTHOOK: Output: default@dp_mm@key1=123/key2=10
+POSTHOOK: Output: default@dp_mm@key1=123/key2=100
+POSTHOOK: Output: default@dp_mm@key1=123/key2=103
+POSTHOOK: Output: default@dp_mm@key1=123/key2=97
+POSTHOOK: Output: default@dp_mm@key1=123/key2=98
+POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=0).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=100).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=103).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=10).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=97).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=98).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from dp_mm order by key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@dp_mm
+PREHOOK: Input: default@dp_mm@key1=123/key2=0
+PREHOOK: Input: default@dp_mm@key1=123/key2=10
+PREHOOK: Input: default@dp_mm@key1=123/key2=100
+PREHOOK: Input: default@dp_mm@key1=123/key2=103
+PREHOOK: Input: default@dp_mm@key1=123/key2=97
+PREHOOK: Input: default@dp_mm@key1=123/key2=98
+#### A masked pattern was here ####
+POSTHOOK: query: select * from dp_mm order by key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@dp_mm
+POSTHOOK: Input: default@dp_mm@key1=123/key2=0
+POSTHOOK: Input: default@dp_mm@key1=123/key2=10
+POSTHOOK: Input: default@dp_mm@key1=123/key2=100
+POSTHOOK: Input: default@dp_mm@key1=123/key2=103
+POSTHOOK: Input: default@dp_mm@key1=123/key2=97
+POSTHOOK: Input: default@dp_mm@key1=123/key2=98
+#### A masked pattern was here ####
+0 123 0
+10 123 10
+97 123 97
+98 123 98
+100 123 100
+103 123 103
+PREHOOK: query: drop table dp_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@dp_mm
+PREHOOK: Output: default@dp_mm
+POSTHOOK: query: drop table dp_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@dp_mm
+POSTHOOK: Output: default@dp_mm
+PREHOOK: query: create table union_mm(id int) tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@union_mm
+POSTHOOK: query: create table union_mm(id int) tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@union_mm
+PREHOOK: query: insert into table union_mm
+select temps.p from (
+select key as p from intermediate
+union all
+select key + 1 as p from intermediate ) temps
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@union_mm
+POSTHOOK: query: insert into table union_mm
+select temps.p from (
+select key as p from intermediate
+union all
+select key + 1 as p from intermediate ) temps
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@union_mm
+POSTHOOK: Lineage: union_mm.id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from union_mm order by id
+PREHOOK: type: QUERY
+PREHOOK: Input: default@union_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from union_mm order by id
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@union_mm
+#### A masked pattern was here ####
+0
+1
+10
+11
+97
+98
+98
+99
+100
+101
+103
+104
+PREHOOK: query: insert into table union_mm
+select p from
+(
+select key + 1 as p from intermediate
+union all
+select key from intermediate
+) tab group by p
+union all
+select key + 2 as p from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@union_mm
+POSTHOOK: query: insert into table union_mm
+select p from
+(
+select key + 1 as p from intermediate
+union all
+select key from intermediate
+) tab group by p
+union all
+select key + 2 as p from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@union_mm
+POSTHOOK: Lineage: union_mm.id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from union_mm order by id
+PREHOOK: type: QUERY
+PREHOOK: Input: default@union_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from union_mm order by id
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@union_mm
+#### A masked pattern was here ####
+0
+0
+1
+1
+2
+10
+10
+11
+11
+12
+97
+97
+98
+98
+98
+99
+99
+99
+100
+100
+100
+101
+101
+102
+103
+103
+104
+104
+105
+PREHOOK: query: insert into table union_mm
+SELECT p FROM
+(
+ SELECT key + 1 as p FROM intermediate
+ UNION ALL
+ SELECT key as p FROM (
+ SELECT distinct key FROM (
+ SELECT key FROM (
+ SELECT key + 2 as key FROM intermediate
+ UNION ALL
+ SELECT key FROM intermediate
+ )t1
+ group by key)t2
+ )t3
+)t4
+group by p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@union_mm
+POSTHOOK: query: insert into table union_mm
+SELECT p FROM
+(
+ SELECT key + 1 as p FROM intermediate
+ UNION ALL
+ SELECT key as p FROM (
+ SELECT distinct key FROM (
+ SELECT key FROM (
+ SELECT key + 2 as key FROM intermediate
+ UNION ALL
+ SELECT key FROM intermediate
+ )t1
+ group by key)t2
+ )t3
+)t4
+group by p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@union_mm
+POSTHOOK: Lineage: union_mm.id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from union_mm order by id
+PREHOOK: type: QUERY
+PREHOOK: Input: default@union_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from union_mm order by id
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@union_mm
+#### A masked pattern was here ####
+0
+0
+0
+1
+1
+1
+2
+2
+10
+10
+10
+11
+11
+11
+12
+12
+97
+97
+97
+98
+98
+98
+98
+99
+99
+99
+99
+100
+100
+100
+100
+101
+101
+101
+102
+102
+103
+103
+103
+104
+104
+104
+105
+105
+PREHOOK: query: drop table union_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@union_mm
+PREHOOK: Output: default@union_mm
+POSTHOOK: query: drop table union_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@union_mm
+POSTHOOK: Output: default@union_mm
+PREHOOK: query: create table partunion_mm(id int) partitioned by (key int) tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@partunion_mm
+POSTHOOK: query: create table partunion_mm(id int) partitioned by (key int) tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@partunion_mm
+PREHOOK: query: insert into table partunion_mm partition(key)
+select temps.* from (
+select key as p, key from intermediate
+union all
+select key + 1 as p, key + 1 from intermediate ) temps
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@partunion_mm
+POSTHOOK: query: insert into table partunion_mm partition(key)
+select temps.* from (
+select key as p, key from intermediate
+union all
+select key + 1 as p, key + 1 from intermediate ) temps
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@partunion_mm@key=0
+POSTHOOK: Output: default@partunion_mm@key=1
+POSTHOOK: Output: default@partunion_mm@key=10
+POSTHOOK: Output: default@partunion_mm@key=100
+POSTHOOK: Output: default@partunion_mm@key=101
+POSTHOOK: Output: default@partunion_mm@key=103
+POSTHOOK: Output: default@partunion_mm@key=104
+POSTHOOK: Output: default@partunion_mm@key=11
+POSTHOOK: Output: default@partunion_mm@key=97
+POSTHOOK: Output: default@partunion_mm@key=98
+POSTHOOK: Output: default@partunion_mm@key=99
+POSTHOOK: Lineage: partunion_mm PARTITION(key=0).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=100).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=101).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=103).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=104).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=10).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=11).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=1).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=97).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=98).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=99).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from partunion_mm order by id
+PREHOOK: type: QUERY
+PREHOOK: Input: default@partunion_mm
+PREHOOK: Input: default@partunion_mm@key=0
+PREHOOK: Input: default@partunion_mm@key=1
+PREHOOK: Input: default@partunion_mm@key=10
+PREHOOK: Input: default@partunion_mm@key=100
+PREHOOK: Input: default@partunion_mm@key=101
+PREHOOK: Input: default@partunion_mm@key=103
+PREHOOK: Input: default@partunion_mm@key=104
+PREHOOK: Input: default@partunion_mm@key=11
+PREHOOK: Input: default@partunion_mm@key=97
+PREHOOK: Input: default@partunion_mm@key=98
+PREHOOK: Input: default@partunion_mm@key=99
+#### A masked pattern was here ####
+POSTHOOK: query: select * from partunion_mm order by id
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@partunion_mm
+POSTHOOK: Input: default@partunion_mm@key=0
+POSTHOOK: Input: default@partunion_mm@key=1
+POSTHOOK: Input: default@partunion_mm@key=10
+POSTHOOK: Input: default@partunion_mm@key=100
+POSTHOOK: Input: default@partunion_mm@key=101
+POSTHOOK: Input: default@partunion_mm@key=103
+POSTHOOK: Input: default@partunion_mm@key=104
+POSTHOOK: Input: default@partunion_mm@key=11
+POSTHOOK: Input: default@partunion_mm@key=97
+POSTHOOK: Input: default@partunion_mm@key=98
+POSTHOOK: Input: default@partunion_mm@key=99
+#### A masked pattern was here ####
+0 0
+1 1
+10 10
+11 11
+97 97
+98 98
+98 98
+99 99
+100 100
+101 101
+103 103
+104 104
+PREHOOK: query: drop table partunion_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@partunion_mm
+PREHOOK: Output: default@partunion_mm
+POSTHOOK: query: drop table partunion_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@partunion_mm
+POSTHOOK: Output: default@partunion_mm
+PREHOOK: query: create table skew_mm(k1 int, k2 int, k4 int) skewed by (k1, k4) on ((0,0),(1,1),(2,2),(3,3))
+ stored as directories tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@skew_mm
+POSTHOOK: query: create table skew_mm(k1 int, k2 int, k4 int) skewed by (k1, k4) on ((0,0),(1,1),(2,2),(3,3))
+ stored as directories tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@skew_mm
+PREHOOK: query: insert into table skew_mm
+select key, key, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@skew_mm
+POSTHOOK: query: insert into table skew_mm
+select key, key, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@skew_mm
+POSTHOOK: Lineage: skew_mm.k1 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_mm.k2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_mm.k4 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from skew_mm order by k2, k1, k4
+PREHOOK: type: QUERY
+PREHOOK: Input: default@skew_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from skew_mm order by k2, k1, k4
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@skew_mm
+#### A masked pattern was here ####
+0 0 0
+10 10 10
+97 97 97
+98 98 98
+100 100 100
+103 103 103
+PREHOOK: query: drop table skew_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@skew_mm
+PREHOOK: Output: default@skew_mm
+POSTHOOK: query: drop table skew_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@skew_mm
+POSTHOOK: Output: default@skew_mm
+PREHOOK: query: create table skew_dp_union_mm(k1 int, k2 int, k4 int) partitioned by (k3 int)
+skewed by (k1, k4) on ((0,0),(1,1),(2,2),(3,3)) stored as directories tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@skew_dp_union_mm
+POSTHOOK: query: create table skew_dp_union_mm(k1 int, k2 int, k4 int) partitioned by (k3 int)
+skewed by (k1, k4) on ((0,0),(1,1),(2,2),(3,3)) stored as directories tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@skew_dp_union_mm
+PREHOOK: query: insert into table skew_dp_union_mm partition (k3)
+select key as i, key as j, key as k, key as l from intermediate
+union all
+select key +1 as i, key +2 as j, key +3 as k, key +4 as l from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@skew_dp_union_mm
+POSTHOOK: query: insert into table skew_dp_union_mm partition (k3)
+select key as i, key as j, key as k, key as l from intermediate
+union all
+select key +1 as i, key +2 as j, key +3 as k, key +4 as l from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@skew_dp_union_mm@k3=0
+POSTHOOK: Output: default@skew_dp_union_mm@k3=10
+POSTHOOK: Output: default@skew_dp_union_mm@k3=100
+POSTHOOK: Output: default@skew_dp_union_mm@k3=101
+POSTHOOK: Output: default@skew_dp_union_mm@k3=102
+POSTHOOK: Output: default@skew_dp_union_mm@k3=103
+POSTHOOK: Output: default@skew_dp_union_mm@k3=104
+POSTHOOK: Output: default@skew_dp_union_mm@k3=107
+POSTHOOK: Output: default@skew_dp_union_mm@k3=14
+POSTHOOK: Output: default@skew_dp_union_mm@k3=4
+POSTHOOK: Output: default@skew_dp_union_mm@k3=97
+POSTHOOK: Output: default@skew_dp_union_mm@k3=98
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=0).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=0).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=0).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=100).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=100).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=100).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=101).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=101).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=101).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=102).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=102).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=102).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=103).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=103).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=103).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=104).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=104).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=104).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=107).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=107).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=107).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=10).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=10).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=10).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=14).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=14).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=14).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=4).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=4).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=4).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=97).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=97).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=97).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=98).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=98).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=98).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from skew_dp_union_mm order by k2, k1, k4
+PREHOOK: type: QUERY
+PREHOOK: Input: default@skew_dp_union_mm
+PREHOOK: Input: default@skew_dp_union_mm@k3=0
+PREHOOK: Input: default@skew_dp_union_mm@k3=10
+PREHOOK: Input: default@skew_dp_union_mm@k3=100
+PREHOOK: Input: default@skew_dp_union_mm@k3=101
+PREHOOK: Input: default@skew_dp_union_mm@k3=102
+PREHOOK: Input: default@skew_dp_union_mm@k3=103
+PREHOOK: Input: default@skew_dp_union_mm@k3=104
+PREHOOK: Input: default@skew_dp_union_mm@k3=107
+PREHOOK: Input: default@skew_dp_union_mm@k3=14
+PREHOOK: Input: default@skew_dp_union_mm@k3=4
+PREHOOK: Input: default@skew_dp_union_mm@k3=97
+PREHOOK: Input: default@skew_dp_union_mm@k3=98
+#### A masked pattern was here ####
+POSTHOOK: query: select * from skew_dp_union_mm order by k2, k1, k4
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@skew_dp_union_mm
+POSTHOOK: Input: default@skew_dp_union_mm@k3=0
+POSTHOOK: Input: default@skew_dp_union_mm@k3=10
+POSTHOOK: Input: default@skew_dp_union_mm@k3=100
+POSTHOOK: Input: default@skew_dp_union_mm@k3=101
+POSTHOOK: Input: default@skew_dp_union_mm@k3=102
+POSTHOOK: Input: default@skew_dp_union_mm@k3=103
+POSTHOOK: Input: default@skew_dp_union_mm@k3=104
+POSTHOOK: Input: default@skew_dp_union_mm@k3=107
+POSTHOOK: Input: default@skew_dp_union_mm@k3=14
+POSTHOOK: Input: default@skew_dp_union_mm@k3=4
+POSTHOOK: Input: default@skew_dp_union_mm@k3=97
+POSTHOOK: Input: default@skew_dp_union_mm@k3=98
+#### A masked pattern was here ####
+0 0 0 0
+1 2 3 4
+10 10 10 10
+11 12 13 14
+97 97 97 97
+98 98 98 98
+98 99 100 101
+99 100 101 102
+100 100 100 100
+101 102 103 104
+103 103 103 103
+104 105 106 107
+PREHOOK: query: drop table skew_dp_union_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@skew_dp_union_mm
+PREHOOK: Output: default@skew_dp_union_mm
+POSTHOOK: query: drop table skew_dp_union_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@skew_dp_union_mm
+POSTHOOK: Output: default@skew_dp_union_mm
+PREHOOK: query: create table merge0_mm (id int) stored as orc tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@merge0_mm
+POSTHOOK: query: create table merge0_mm (id int) stored as orc tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@merge0_mm
+PREHOOK: query: insert into table merge0_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@merge0_mm
+POSTHOOK: query: insert into table merge0_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@merge0_mm
+POSTHOOK: Lineage: merge0_mm.id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from merge0_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@merge0_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from merge0_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@merge0_mm
+#### A masked pattern was here ####
+98
+97
+0
+10
+100
+103
+PREHOOK: query: insert into table merge0_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@merge0_mm
+POSTHOOK: query: insert into table merge0_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@merge0_mm
+POSTHOOK: Lineage: merge0_mm.id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from merge0_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@merge0_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from merge0_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@merge0_mm
+#### A masked pattern was here ####
+98
+97
+0
+10
+100
+103
+98
+97
+0
+10
+100
+103
+PREHOOK: query: drop table merge0_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@merge0_mm
+PREHOOK: Output: default@merge0_mm
+POSTHOOK: query: drop table merge0_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@merge0_mm
+POSTHOOK: Output: default@merge0_mm
+PREHOOK: query: create table merge2_mm (id int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@merge2_mm
+POSTHOOK: query: create table merge2_mm (id int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@merge2_mm
+PREHOOK: query: insert into table merge2_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@merge2_mm
+POSTHOOK: query: insert into table merge2_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@merge2_mm
+POSTHOOK: Lineage: merge2_mm.id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from merge2_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@merge2_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from merge2_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@merge2_mm
+#### A masked pattern was here ####
+98
+97
+0
+10
+100
+103
+PREHOOK: query: insert into table merge2_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@merge2_mm
+POSTHOOK: query: insert into table merge2_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@merge2_mm
+POSTHOOK: Lineage: merge2_mm.id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from merge2_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@merge2_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from merge2_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@merge2_mm
+#### A masked pattern was here ####
+98
+97
+0
+10
+100
+103
+98
+97
+0
+10
+100
+103
+PREHOOK: query: drop table merge2_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@merge2_mm
+PREHOOK: Output: default@merge2_mm
+POSTHOOK: query: drop table merge2_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@merge2_mm
+POSTHOOK: Output: default@merge2_mm
+PREHOOK: query: create table merge1_mm (id int) partitioned by (key int) stored as orc tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@merge1_mm
+POSTHOOK: query: create table merge1_mm (id int) partitioned by (key int) stored as orc tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@merge1_mm
+PREHOOK: query: insert into table merge1_mm partition (key) select key, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@merge1_mm
+POSTHOOK: query: insert into table merge1_mm partition (key) select key, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@merge1_mm@key=0
+POSTHOOK: Output: default@merge1_mm@key=10
+POSTHOOK: Output: default@merge1_mm@key=100
+POSTHOOK: Output: default@merge1_mm@key=103
+POSTHOOK: Output: default@merge1_mm@key=97
+POSTHOOK: Output: default@merge1_mm@key=98
+POSTHOOK: Lineage: merge1_mm PARTITION(key=0).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=100).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=103).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=10).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=97).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=98).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from merge1_mm order by id, key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@merge1_mm
+PREHOOK: Input: default@merge1_mm@key=0
+PREHOOK: Input: default@merge1_mm@key=10
+PREHOOK: Input: default@merge1_mm@key=100
+PREHOOK: Input: default@merge1_mm@key=103
+PREHOOK: Input: default@merge1_mm@key=97
+PREHOOK: Input: default@merge1_mm@key=98
+#### A masked pattern was here ####
+POSTHOOK: query: select * from merge1_mm order by id, key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@merge1_mm
+POSTHOOK: Input: default@merge1_mm@key=0
+POSTHOOK: Input: default@merge1_mm@key=10
+POSTHOOK: Input: default@merge1_mm@key=100
+POSTHOOK: Input: default@merge1_mm@key=103
+POSTHOOK: Input: default@merge1_mm@key=97
+POSTHOOK: Input: default@merge1_mm@key=98
+#### A masked pattern was here ####
+0 0
+10 10
+97 97
+98 98
+100 100
+103 103
+PREHOOK: query: insert into table merge1_mm partition (key) select key, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@merge1_mm
+POSTHOOK: query: insert into table merge1_mm partition (key) select key, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@merge1_mm@key=0
+POSTHOOK: Output: default@merge1_mm@key=10
+POSTHOOK: Output: default@merge1_mm@key=100
+POSTHOOK: Output: default@merge1_mm@key=103
+POSTHOOK: Output: default@merge1_mm@key=97
+POSTHOOK: Output: default@merge1_mm@key=98
+POSTHOOK: Lineage: merge1_mm PARTITION(key=0).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=100).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=103).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=10).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=97).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=98).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from merge1_mm order by id, key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@merge1_mm
+PREHOOK: Input: default@merge1_mm@key=0
+PREHOOK: Input: default@merge1_mm@key=10
+PREHOOK: Input: default@merge1_mm@key=100
+PREHOOK: Input: default@merge1_mm@key=103
+PREHOOK: Input: default@merge1_mm@key=97
+PREHOOK: Input: default@merge1_mm@key=98
+#### A masked pattern was here ####
+POSTHOOK: query: select * from merge1_mm order by id, key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@merge1_mm
+POSTHOOK: Input: default@merge1_mm@key=0
+POSTHOOK: Input: default@merge1_mm@key=10
+POSTHOOK: Input: default@merge1_mm@key=100
+POSTHOOK: Input: default@merge1_mm@key=103
+POSTHOOK: Input: default@merge1_mm@key=97
+POSTHOOK: Input: default@merge1_mm@key=98
+#### A masked pattern was here ####
+0 0
+0 0
+10 10
+10 10
+97 97
+97 97
+98 98
+98 98
+100 100
+100 100
+103 103
+103 103
+PREHOOK: query: drop table merge1_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@merge1_mm
+PREHOOK: Output: default@merge1_mm
+POSTHOOK: query: drop table merge1_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@merge1_mm
+POSTHOOK: Output: default@merge1_mm
+PREHOOK: query: drop table ctas0_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table ctas0_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table ctas0_mm tblproperties ("transactional"="true", "transactional_properties"="insert_only") as select * from intermediate
+PREHOOK: type: CREATETABLE_AS_SELECT
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: database:default
+PREHOOK: Output: default@ctas0_mm
+POSTHOOK: query: create table ctas0_mm tblproperties ("transactional"="true", "transactional_properties"="insert_only") as select * from intermediate
+POSTHOOK: type: CREATETABLE_AS_SELECT
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@ctas0_mm
+POSTHOOK: Lineage: ctas0_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: ctas0_mm.p SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+PREHOOK: query: select * from ctas0_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ctas0_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from ctas0_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ctas0_mm
+#### A masked pattern was here ####
+98 455
+97 455
+0 456
+10 456
+100 457
+103 457
+PREHOOK: query: drop table ctas0_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@ctas0_mm
+PREHOOK: Output: default@ctas0_mm
+POSTHOOK: query: drop table ctas0_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@ctas0_mm
+POSTHOOK: Output: default@ctas0_mm
+PREHOOK: query: drop table ctas1_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table ctas1_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table ctas1_mm tblproperties ("transactional"="true", "transactional_properties"="insert_only") as
+ select * from intermediate union all select * from intermediate
+PREHOOK: type: CREATETABLE_AS_SELECT
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: database:default
+PREHOOK: Output: default@ctas1_mm
+POSTHOOK: query: create table ctas1_mm tblproperties ("transactional"="true", "transactional_properties"="insert_only") as
+ select * from intermediate union all select * from intermediate
+POSTHOOK: type: CREATETABLE_AS_SELECT
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@ctas1_mm
+POSTHOOK: Lineage: ctas1_mm.key EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: ctas1_mm.p EXPRESSION [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+PREHOOK: query: select * from ctas1_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ctas1_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from ctas1_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ctas1_mm
+#### A masked pattern was here ####
+98 455
+98 455
+97 455
+97 455
+0 456
+0 456
+10 456
+10 456
+100 457
+100 457
+103 457
+103 457
+PREHOOK: query: drop table ctas1_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@ctas1_mm
+PREHOOK: Output: default@ctas1_mm
+POSTHOOK: query: drop table ctas1_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@ctas1_mm
+POSTHOOK: Output: default@ctas1_mm
+PREHOOK: query: drop table load0_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table load0_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table load0_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@load0_mm
+POSTHOOK: query: create table load0_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@load0_mm
+PREHOOK: query: load data local inpath '../../data/files/kv1.txt' into table load0_mm
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@load0_mm
+POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' into table load0_mm
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@load0_mm
+PREHOOK: query: select count(1) from load0_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@load0_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select count(1) from load0_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@load0_mm
+#### A masked pattern was here ####
+500
+PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table load0_mm
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@load0_mm
+POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table load0_mm
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@load0_mm
+PREHOOK: query: select count(1) from load0_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@load0_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select count(1) from load0_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@load0_mm
+#### A masked pattern was here ####
+1000
+PREHOOK: query: load data local inpath '../../data/files/kv2.txt' overwrite into table load0_mm
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@load0_mm
+POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' overwrite into table load0_mm
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@load0_mm
+PREHOOK: query: select count(1) from load0_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@load0_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select count(1) from load0_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@load0_mm
+#### A masked pattern was here ####
+500
+PREHOOK: query: drop table load0_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@load0_mm
+PREHOOK: Output: default@load0_mm
+POSTHOOK: query: drop table load0_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@load0_mm
+POSTHOOK: Output: default@load0_mm
+PREHOOK: query: drop table intermediate2
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table intermediate2
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table intermediate2 (key string, value string) stored as textfile
+#### A masked pattern was here ####
+PREHOOK: type: CREATETABLE
+#### A masked pattern was here ####
+PREHOOK: Output: database:default
+PREHOOK: Output: default@intermediate2
+POSTHOOK: query: create table intermediate2 (key string, value string) stored as textfile
+#### A masked pattern was here ####
+POSTHOOK: type: CREATETABLE
+#### A masked pattern was here ####
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@intermediate2
+PREHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@intermediate2
+POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@intermediate2
+PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@intermediate2
+POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@intermediate2
+PREHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@intermediate2
+POSTHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@intermediate2
+PREHOOK: query: drop table load1_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table load1_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table load1_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@load1_mm
+POSTHOOK: query: create table load1_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@load1_mm
+#### A masked pattern was here ####
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@load1_mm
+#### A masked pattern was here ####
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@load1_mm
+#### A masked pattern was here ####
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@load1_mm
+#### A masked pattern was here ####
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@load1_mm
+PREHOOK: query: select count(1) from load1_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@load1_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select count(1) from load1_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@load1_mm
+#### A masked pattern was here ####
+1000
+PREHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@intermediate2
+POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@intermediate2
+PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@intermediate2
+POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@intermediate2
+PREHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@intermediate2
+POSTHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@intermediate2
+#### A masked pattern was here ####
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@load1_mm
+#### A masked pattern was here ####
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@load1_mm
+PREHOOK: query: select count(1) from load1_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@load1_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select count(1) from load1_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@load1_mm
+#### A masked pattern was here ####
+1050
+PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@intermediate2
+POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@intermediate2
+#### A masked pattern was here ####
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@load1_mm
+#### A masked pattern was here ####
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@load1_mm
+PREHOOK: query: select count(1) from load1_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@load1_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select count(1) from load1_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@load1_mm
+#### A masked pattern was here ####
+500
+PREHOOK: query: drop table load1_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@load1_mm
+PREHOOK: Output: default@load1_mm
+POSTHOOK: query: drop table load1_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@load1_mm
+POSTHOOK: Output: default@load1_mm
+PREHOOK: query: drop table load2_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table load2_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table load2_mm (key string, value string)
+ partitioned by (k int, l int) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@load2_mm
+POSTHOOK: query: create table load2_mm (key string, value string)
+ partitioned by (k int, l int) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@load2_mm
+PREHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@intermediate2
+POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@intermediate2
+PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@intermediate2
+POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@intermediate2
+PREHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@intermediate2
+POSTHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@intermediate2
+#### A masked pattern was here ####
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@load2_mm
+#### A masked pattern was here ####
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@load2_mm
+POSTHOOK: Output: default@load2_mm@k=5/l=5
+PREHOOK: query: select count(1) from load2_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@load2_mm
+PREHOOK: Input: default@load2_mm@k=5/l=5
+#### A masked pattern was here ####
+POSTHOOK: query: select count(1) from load2_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@load2_mm
+POSTHOOK: Input: default@load2_mm@k=5/l=5
+#### A masked pattern was here ####
+1025
+PREHOOK: query: drop table load2_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@load2_mm
+PREHOOK: Output: default@load2_mm
+POSTHOOK: query: drop table load2_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@load2_mm
+POSTHOOK: Output: default@load2_mm
+PREHOOK: query: drop table intermediate2
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@intermediate2
+PREHOOK: Output: default@intermediate2
+POSTHOOK: query: drop table intermediate2
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@intermediate2
+POSTHOOK: Output: default@intermediate2
+PREHOOK: query: drop table multi0_1_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table multi0_1_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: drop table multi0_2_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table multi0_2_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table multi0_1_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@multi0_1_mm
+POSTHOOK: query: create table multi0_1_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@multi0_1_mm
+PREHOOK: query: create table multi0_2_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@multi0_2_mm
+POSTHOOK: query: create table multi0_2_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@multi0_2_mm
+PREHOOK: query: insert into table multi0_1_mm select key, p from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi0_1_mm
+POSTHOOK: query: insert into table multi0_1_mm select key, p from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi0_1_mm
+POSTHOOK: Lineage: multi0_1_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi0_1_mm.key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+PREHOOK: query: insert into table multi0_2_mm select p, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi0_2_mm
+POSTHOOK: query: insert into table multi0_2_mm select p, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi0_2_mm
+POSTHOOK: Lineage: multi0_2_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi0_2_mm.key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from multi0_1_mm order by key, key2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi0_1_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from multi0_1_mm order by key, key2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi0_1_mm
+#### A masked pattern was here ####
+0 456
+10 456
+97 455
+98 455
+100 457
+103 457
+PREHOOK: query: select * from multi0_2_mm order by key, key2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi0_2_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from multi0_2_mm order by key, key2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi0_2_mm
+#### A masked pattern was here ####
+455 97
+455 98
+456 0
+456 10
+457 100
+457 103
+PREHOOK: query: insert into table multi0_1_mm select p, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi0_1_mm
+POSTHOOK: query: insert into table multi0_1_mm select p, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi0_1_mm
+POSTHOOK: Lineage: multi0_1_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi0_1_mm.key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: insert into table multi0_2_mm select key, p from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi0_2_mm
+POSTHOOK: query: insert into table multi0_2_mm select key, p from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi0_2_mm
+POSTHOOK: Lineage: multi0_2_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi0_2_mm.key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+PREHOOK: query: select * from multi0_1_mm order by key, key2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi0_1_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from multi0_1_mm order by key, key2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi0_1_mm
+#### A masked pattern was here ####
+0 456
+10 456
+97 455
+98 455
+100 457
+103 457
+455 97
+455 98
+456 0
+456 10
+457 100
+457 103
+PREHOOK: query: select * from multi0_2_mm order by key, key2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi0_2_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from multi0_2_mm order by key, key2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi0_2_mm
+#### A masked pattern was here ####
+0 456
+10 456
+97 455
+98 455
+100 457
+103 457
+455 97
+455 98
+456 0
+456 10
+457 100
+457 103
+PREHOOK: query: drop table multi0_1_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@multi0_1_mm
+PREHOOK: Output: default@multi0_1_mm
+POSTHOOK: query: drop table multi0_1_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@multi0_1_mm
+POSTHOOK: Output: default@multi0_1_mm
+PREHOOK: query: drop table multi0_2_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@multi0_2_mm
+PREHOOK: Output: default@multi0_2_mm
+POSTHOOK: query: drop table multi0_2_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@multi0_2_mm
+POSTHOOK: Output: default@multi0_2_mm
+PREHOOK: query: drop table multi1_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table multi1_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table multi1_mm (key int, key2 int) partitioned by (p int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@multi1_mm
+POSTHOOK: query: create table multi1_mm (key int, key2 int) partitioned by (p int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@multi1_mm
+PREHOOK: query: from intermediate
+insert into table multi1_mm partition(p=1) select p, key
+insert into table multi1_mm partition(p=2) select key, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi1_mm@p=1
+PREHOOK: Output: default@multi1_mm@p=2
+POSTHOOK: query: from intermediate
+insert into table multi1_mm partition(p=1) select p, key
+insert into table multi1_mm partition(p=2) select key, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: Output: default@multi1_mm@p=2
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=2).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=2).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+PREHOOK: query: select * from multi1_mm order by key, key2, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi1_mm
+PREHOOK: Input: default@multi1_mm@p=1
+PREHOOK: Input: default@multi1_mm@p=2
+#### A masked pattern was here ####
+POSTHOOK: query: select * from multi1_mm order by key, key2, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi1_mm
+POSTHOOK: Input: default@multi1_mm@p=1
+POSTHOOK: Input: default@multi1_mm@p=2
+#### A masked pattern was here ####
+0 456 2
+10 456 2
+97 455 2
+98 455 2
+100 457 2
+103 457 2
+455 97 1
+455 98 1
+456 0 1
+456 10 1
+457 100 1
+457 103 1
+PREHOOK: query: insert into table multi1_mm partition(p=2) select p, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi1_mm@p=2
+POSTHOOK: query: insert into table multi1_mm partition(p=2) select p, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi1_mm@p=2
+POSTHOOK: Lineage: multi1_mm PARTITION(p=2).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=2).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: insert into table multi1_mm partition(p=1) select key, p from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: query: insert into table multi1_mm partition(p=1) select key, p from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+PREHOOK: query: select * from multi1_mm order by key, key2, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi1_mm
+PREHOOK: Input: default@multi1_mm@p=1
+PREHOOK: Input: default@multi1_mm@p=2
+#### A masked pattern was here ####
+POSTHOOK: query: select * from multi1_mm order by key, key2, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi1_mm
+POSTHOOK: Input: default@multi1_mm@p=1
+POSTHOOK: Input: default@multi1_mm@p=2
+#### A masked pattern was here ####
+0 456 1
+0 456 2
+10 456 1
+10 456 2
+97 455 1
+97 455 2
+98 455 1
+98 455 2
+100 457 1
+100 457 2
+103 457 1
+103 457 2
+455 97 1
+455 97 2
+455 98 1
+455 98 2
+456 0 1
+456 0 2
+456 10 1
+456 10 2
+457 100 1
+457 100 2
+457 103 1
+457 103 2
+PREHOOK: query: from intermediate
+insert into table multi1_mm partition(p) select p, key, p
+insert into table multi1_mm partition(p=1) select key, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi1_mm
+PREHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: query: from intermediate
+insert into table multi1_mm partition(p) select p, key, p
+insert into table multi1_mm partition(p=1) select key, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi1_mm@p=1
++POSTHOOK: Output: default@multi1_mm@p=455
++POSTHOOK: Output: default@multi1_mm@p=456
++POSTHOOK: Output: default@multi1_mm@p=457
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
- POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
- POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
++POSTHOOK: Lineage: multi1_mm PARTITION(p=455).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
++POSTHOOK: Lineage: multi1_mm PARTITION(p=455).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
++POSTHOOK: Lineage: multi1_mm PARTITION(p=456).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
++POSTHOOK: Lineage: multi1_mm PARTITION(p=456).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
++POSTHOOK: Lineage: multi1_mm PARTITION(p=457).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
++POSTHOOK: Lineage: multi1_mm PARTITION(p=457).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select key, key2, p from multi1_mm order by key, key2, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi1_mm
+PREHOOK: Input: default@multi1_mm@p=1
+PREHOOK: Input: default@multi1_mm@p=2
++PREHOOK: Input: default@multi1_mm@p=455
++PREHOOK: Input: default@multi1_mm@p=456
++PREHOOK: Input: default@multi1_mm@p=457
+#### A masked pattern was here ####
+POSTHOOK: query: select key, key2, p from multi1_mm order by key, key2, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi1_mm
+POSTHOOK: Input: default@multi1_mm@p=1
+POSTHOOK: Input: default@multi1_mm@p=2
++POSTHOOK: Input: default@multi1_mm@p=455
++POSTHOOK: Input: default@multi1_mm@p=456
++POSTHOOK: Input: default@multi1_mm@p=457
+#### A masked pattern was here ####
+0 456 1
+0 456 1
+0 456 2
+10 456 1
+10 456 1
+10 456 2
+97 455 1
+97 455 1
+97 455 2
+98 455 1
+98 455 1
+98 455 2
+100 457 1
+100 457 1
+100 457 2
+103 457 1
+103 457 1
+103 457 2
+455 97 1
+455 97 2
++455 97 455
+455 98 1
+455 98 2
++455 98 455
+456 0 1
+456 0 2
++456 0 456
+456 10 1
+456 10 2
++456 10 456
+457 100 1
+457 100 2
++457 100 457
+457 103 1
+457 103 2
++457 103 457
+PREHOOK: query: from intermediate
+insert into table multi1_mm partition(p) select p, key, 1
+insert into table multi1_mm partition(p=1) select key, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi1_mm
+PREHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: query: from intermediate
+insert into table multi1_mm partition(p) select p, key, 1
+insert into table multi1_mm partition(p=1) select key, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select key, key2, p from multi1_mm order by key, key2, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi1_mm
+PREHOOK: Input: default@multi1_mm@p=1
+PREHOOK: Input: default@multi1_mm@p=2
++PREHOOK: Input: default@multi1_mm@p=455
++PREHOOK: Input: default@multi1_mm@p=456
++PREHOOK: Input: default@multi1_mm@p=457
+#### A masked pattern was here ####
+POSTHOOK: query: select key, key2, p from multi1_mm order by key, key2, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi1_mm
+POSTHOOK: Input: default@multi1_mm@p=1
+POSTHOOK: Input: default@multi1_mm@p=2
++POSTHOOK: Input: default@multi1_mm@p=455
++POSTHOOK: Input: default@multi1_mm@p=456
++POSTHOOK: Input: default@multi1_mm@p=457
+#### A masked pattern was here ####
+0 456 1
+0 456 1
+0 456 1
+0 456 2
+10 456 1
+10 456 1
+10 456 1
+10 456 2
+97 455 1
+97 455 1
+97 455 1
+97 455 2
+98 455 1
+98 455 1
+98 455 1
+98 455 2
+100 457 1
+100 457 1
+100 457 1
+100 457 2
+103 457 1
+103 457 1
+103 457 1
+103 457 2
+455 97 1
+455 97 1
+455 97 2
++455 97 455
+455 98 1
+455 98 1
+455 98 2
++455 98 455
+456 0 1
+456 0 1
+456 0 2
++456 0 456
+456 10 1
+456 10 1
+456 10 2
++456 10 456
+457 100 1
+457 100 1
+457 100 2
++457 100 457
+457 103 1
+457 103 1
+457 103 2
++457 103 457
+PREHOOK: query: drop table multi1_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@multi1_mm
+PREHOOK: Output: default@multi1_mm
+POSTHOOK: query: drop table multi1_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@multi1_mm
+POSTHOOK: Output: default@multi1_mm
+PREHOOK: query: drop table stats_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table stats_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table stats_mm(key int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@stats_mm
+POSTHOOK: query: create table stats_mm(key int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@stats_mm
+PREHOOK: query: insert into table stats_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@stats_mm
+POSTHOOK: query: insert into table stats_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@stats_mm
+POSTHOOK: Lineage: stats_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: desc formatted stats_mm
+PREHOOK: type: DESCTABLE
+PREHOOK: Input: default@stats_mm
+POSTHOOK: query: desc formatted stats_mm
+POSTHOOK: type: DESCTABLE
+POSTHOOK: I
<TRUNCATED>
[47/50] [abbrv] hive git commit: HIVE-15212 : merge branch into
master - fix some tests (Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-15212 : merge branch into master - fix some tests (Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/98c5b637
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/98c5b637
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/98c5b637
Branch: refs/heads/master
Commit: 98c5b637df2df2ee8ada89a2862ce928ee074ebc
Parents: ae4ac4b
Author: sergey <se...@apache.org>
Authored: Tue Oct 10 15:21:27 2017 -0700
Committer: sergey <se...@apache.org>
Committed: Tue Oct 10 15:21:27 2017 -0700
----------------------------------------------------------------------
.../test/resources/testconfiguration.properties | 3 +-
.../queries/clientnegative/mm_bucket_convert.q | 18 ---------
ql/src/test/queries/clientnegative/mm_convert.q | 10 +++++
.../clientnegative/mm_bucket_convert.q.out | 41 --------------------
.../results/clientnegative/mm_convert.q.out | 17 ++++++++
ql/src/test/results/clientpositive/mm_all.q.out | 13 +------
6 files changed, 31 insertions(+), 71 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/98c5b637/itests/src/test/resources/testconfiguration.properties
----------------------------------------------------------------------
diff --git a/itests/src/test/resources/testconfiguration.properties b/itests/src/test/resources/testconfiguration.properties
index a72f66d..2fa5abd 100644
--- a/itests/src/test/resources/testconfiguration.properties
+++ b/itests/src/test/resources/testconfiguration.properties
@@ -34,7 +34,8 @@ disabled.query.files=ql_rewrite_gbtoidx.q,\
ql_rewrite_gbtoidx_cbo_2.q,\
rcfile_merge1.q,\
smb_mapjoin_8.q,\
- stats_filemetadata.q
+ stats_filemetadata.q,\
+ mm_exim.q
# NOTE: Add tests to minitez only if it is very
# specific to tez and cannot be added to minillap.
http://git-wip-us.apache.org/repos/asf/hive/blob/98c5b637/ql/src/test/queries/clientnegative/mm_bucket_convert.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientnegative/mm_bucket_convert.q b/ql/src/test/queries/clientnegative/mm_bucket_convert.q
deleted file mode 100644
index 2ded047..0000000
--- a/ql/src/test/queries/clientnegative/mm_bucket_convert.q
+++ /dev/null
@@ -1,18 +0,0 @@
-set hive.mapred.mode=nonstrict;
-set hive.explain.user=false;
-set hive.fetch.task.conversion=none;
-set hive.exec.dynamic.partition.mode=nonstrict;
-
-drop table bucket0_mm;
-drop table bucket1_mm;
-create table bucket0_mm(key int, id int) clustered by (key) into 2 buckets
- tblproperties("transactional"="true", "transactional_properties"="insert_only");
-create table bucket1_mm(key int, id int) clustered by (key) into 2 buckets
- tblproperties("transactional"="true", "transactional_properties"="insert_only");
-
-set hive.strict.checks.bucketing=false;
-alter table bucket0_mm unset tblproperties('transactional_properties', 'transactional');
-set hive.strict.checks.bucketing=true;
-alter table bucket1_mm unset tblproperties('transactional_properties', 'transactional');
-
-
http://git-wip-us.apache.org/repos/asf/hive/blob/98c5b637/ql/src/test/queries/clientnegative/mm_convert.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientnegative/mm_convert.q b/ql/src/test/queries/clientnegative/mm_convert.q
new file mode 100644
index 0000000..acbf4bb
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/mm_convert.q
@@ -0,0 +1,10 @@
+set hive.mapred.mode=nonstrict;
+set hive.explain.user=false;
+set hive.fetch.task.conversion=none;
+set hive.exec.dynamic.partition.mode=nonstrict;
+
+drop table convert_mm;
+create table convert_mm(key int, id int) tblproperties("transactional"="true", "transactional_properties"="insert_only");
+alter table convert_mm unset tblproperties('transactional_properties', 'transactional');
+
+
http://git-wip-us.apache.org/repos/asf/hive/blob/98c5b637/ql/src/test/results/clientnegative/mm_bucket_convert.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientnegative/mm_bucket_convert.q.out b/ql/src/test/results/clientnegative/mm_bucket_convert.q.out
deleted file mode 100644
index b732d3e..0000000
--- a/ql/src/test/results/clientnegative/mm_bucket_convert.q.out
+++ /dev/null
@@ -1,41 +0,0 @@
-PREHOOK: query: drop table bucket0_mm
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table bucket0_mm
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: drop table bucket1_mm
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table bucket1_mm
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: create table bucket0_mm(key int, id int) clustered by (key) into 2 buckets
- tblproperties("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@bucket0_mm
-POSTHOOK: query: create table bucket0_mm(key int, id int) clustered by (key) into 2 buckets
- tblproperties("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@bucket0_mm
-PREHOOK: query: create table bucket1_mm(key int, id int) clustered by (key) into 2 buckets
- tblproperties("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@bucket1_mm
-POSTHOOK: query: create table bucket1_mm(key int, id int) clustered by (key) into 2 buckets
- tblproperties("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@bucket1_mm
-PREHOOK: query: alter table bucket0_mm unset tblproperties('transactional_properties', 'transactional')
-PREHOOK: type: ALTERTABLE_PROPERTIES
-PREHOOK: Input: default@bucket0_mm
-PREHOOK: Output: default@bucket0_mm
-POSTHOOK: query: alter table bucket0_mm unset tblproperties('transactional_properties', 'transactional')
-POSTHOOK: type: ALTERTABLE_PROPERTIES
-POSTHOOK: Input: default@bucket0_mm
-POSTHOOK: Output: default@bucket0_mm
-PREHOOK: query: alter table bucket1_mm unset tblproperties('transactional_properties', 'transactional')
-PREHOOK: type: ALTERTABLE_PROPERTIES
-PREHOOK: Input: default@bucket1_mm
-PREHOOK: Output: default@bucket1_mm
-FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Converting bucketed tables from MM is not supported by default; copying files from multiple MM directories may potentially break the buckets. You can set hive.strict.checks.bucketing to false for this query if you want to force the conversion.
http://git-wip-us.apache.org/repos/asf/hive/blob/98c5b637/ql/src/test/results/clientnegative/mm_convert.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientnegative/mm_convert.q.out b/ql/src/test/results/clientnegative/mm_convert.q.out
new file mode 100644
index 0000000..496f8b5
--- /dev/null
+++ b/ql/src/test/results/clientnegative/mm_convert.q.out
@@ -0,0 +1,17 @@
+PREHOOK: query: drop table convert_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table convert_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table convert_mm(key int, id int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@convert_mm
+POSTHOOK: query: create table convert_mm(key int, id int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@convert_mm
+PREHOOK: query: alter table convert_mm unset tblproperties('transactional_properties', 'transactional')
+PREHOOK: type: ALTERTABLE_PROPERTIES
+PREHOOK: Input: default@convert_mm
+PREHOOK: Output: default@convert_mm
+FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Cannot convert an ACID table to non-ACID
http://git-wip-us.apache.org/repos/asf/hive/blob/98c5b637/ql/src/test/results/clientpositive/mm_all.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/mm_all.q.out b/ql/src/test/results/clientpositive/mm_all.q.out
index fa9e4a7..c943f01 100644
--- a/ql/src/test/results/clientpositive/mm_all.q.out
+++ b/ql/src/test/results/clientpositive/mm_all.q.out
@@ -88,10 +88,7 @@ STAGE PLANS:
Conditional Operator
Stage: Stage-4
- Move Operator
- files:
- hdfs directory: true
-#### A masked pattern was here ####
+ Dependency Collection
Stage: Stage-0
Move Operator
@@ -125,10 +122,7 @@ STAGE PLANS:
input format: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
Stage: Stage-6
- Move Operator
- files:
- hdfs directory: true
-#### A masked pattern was here ####
+ Dependency Collection
PREHOOK: query: insert into table part_mm partition(key_mm=455) select key from intermediate
PREHOOK: type: QUERY
@@ -1792,7 +1786,6 @@ POSTHOOK: query: desc formatted stats_mm
POSTHOOK: type: DESCTABLE
POSTHOOK: Input: default@stats_mm
# col_name data_type comment
-
key int
# Detailed Table Information
@@ -1843,7 +1836,6 @@ POSTHOOK: query: desc formatted stats_mm
POSTHOOK: type: DESCTABLE
POSTHOOK: Input: default@stats_mm
# col_name data_type comment
-
key int
# Detailed Table Information
@@ -1902,7 +1894,6 @@ POSTHOOK: query: desc formatted stats2_mm
POSTHOOK: type: DESCTABLE
POSTHOOK: Input: default@stats2_mm
# col_name data_type comment
-
_c0 array<string>
# Detailed Table Information
[19/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Wei Zheng)
Posted by se...@apache.org.
HIVE-14671 : merge master into hive-14535 (Wei Zheng)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/42a38577
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/42a38577
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/42a38577
Branch: refs/heads/master
Commit: 42a38577bc9d242bed040c503b0d1d46f74e0301
Parents: 81853c1 b82d38a
Author: Wei Zheng <we...@apache.org>
Authored: Wed Sep 6 21:24:02 2017 -0700
Committer: Wei Zheng <we...@apache.org>
Committed: Wed Sep 6 21:24:02 2017 -0700
----------------------------------------------------------------------
.gitignore | 1 +
LICENSE | 2 +-
.../accumulo/AccumuloConnectionParameters.java | 57 +-
.../hive/accumulo/AccumuloStorageHandler.java | 77 +-
.../hive/accumulo/HiveAccumuloHelper.java | 396 +-
.../org/apache/hadoop/hive/accumulo/Utils.java | 3 +-
.../mr/HiveAccumuloTableInputFormat.java | 244 +-
.../mr/HiveAccumuloTableOutputFormat.java | 84 +-
.../serde/CompositeAccumuloRowIdFactory.java | 3 +-
.../serde/DefaultAccumuloRowIdFactory.java | 5 +-
.../accumulo/TestAccumuloStorageHandler.java | 6 +-
.../hive/accumulo/TestHiveAccumuloHelper.java | 184 +-
.../mr/TestHiveAccumuloTableInputFormat.java | 37 +-
.../mr/TestHiveAccumuloTableOutputFormat.java | 29 +-
.../positive/accumulo_predicate_pushdown.q.out | 3 +-
.../results/positive/accumulo_queries.q.out | 2 +-
.../java/org/apache/hive/beeline/BeeLine.java | 4 +-
.../org/apache/hive/beeline/BeeLineOpts.java | 9 +
.../java/org/apache/hive/beeline/Commands.java | 32 +-
.../org/apache/hive/beeline/HiveSchemaTool.java | 58 +-
.../src/java/org/apache/hive/beeline/Rows.java | 21 +-
beeline/src/main/resources/BeeLine.properties | 1 +
.../apache/hive/beeline/TestBufferedRows.java | 2 +-
.../org/apache/hive/beeline/TestCommands.java | 29 +-
.../hive/beeline/TestIncrementalRows.java | 136 +
.../TestIncrementalRowsWithNormalization.java | 90 -
.../hive/beeline/TestTableOutputFormat.java | 2 +-
bin/ext/hbaseimport.sh | 27 -
bin/ext/hbaseschematool.sh | 27 -
bin/ext/metastore.sh | 2 +-
binary-package-licenses/org.json-LICENSE | 22 -
.../org/apache/hadoop/hive/cli/CliDriver.java | 10 +-
common/pom.xml | 8 +-
.../apache/hadoop/hive/common/FileUtils.java | 80 +-
.../org/apache/hadoop/hive/common/LogUtils.java | 41 +
.../hadoop/hive/common/jsonexplain/Vertex.java | 2 +-
.../common/jsonexplain/tez/TezJsonParser.java | 2 +
.../common/metrics/common/MetricsConstant.java | 14 -
.../common/ndv/NumDistinctValueEstimator.java | 51 +
.../ndv/NumDistinctValueEstimatorFactory.java | 74 +
.../hadoop/hive/common/ndv/fm/FMSketch.java | 359 +
.../hive/common/ndv/fm/FMSketchUtils.java | 132 +
.../hive/common/ndv/hll/HLLConstants.java | 929 +
.../hive/common/ndv/hll/HLLDenseRegister.java | 192 +
.../hadoop/hive/common/ndv/hll/HLLRegister.java | 50 +
.../hive/common/ndv/hll/HLLSparseRegister.java | 260 +
.../hadoop/hive/common/ndv/hll/HyperLogLog.java | 634 +
.../hive/common/ndv/hll/HyperLogLogUtils.java | 392 +
.../hadoop/hive/common/type/TimestampTZ.java | 122 +-
.../hive/common/type/TimestampTZUtil.java | 150 +
.../org/apache/hadoop/hive/conf/Constants.java | 2 +
.../org/apache/hadoop/hive/conf/HiveConf.java | 259 +-
.../apache/hadoop/hive/conf/HiveConfUtil.java | 20 +-
.../hive/common/util/HiveStringUtils.java | 92 +-
.../java/org/apache/hive/http/HttpServer.java | 1 +
.../java/org/apache/hive/http/StackServlet.java | 2 +-
.../src/main/resources/hive-log4j2.properties | 8 +-
.../hadoop/hive/common/TestFileUtils.java | 17 +-
.../ndv/fm/TestFMSketchSerialization.java | 98 +
.../hive/common/ndv/hll/TestHLLNoBias.java | 114 +
.../common/ndv/hll/TestHLLSerialization.java | 267 +
.../hive/common/ndv/hll/TestHyperLogLog.java | 227 +
.../common/ndv/hll/TestHyperLogLogDense.java | 82 +
.../common/ndv/hll/TestHyperLogLogSparse.java | 81 +
.../common/ndv/hll/TestSparseEncodeHash.java | 56 +
.../hive/common/type/TestTimestampTZ.java | 63 +-
.../apache/hadoop/hive/conf/TestHiveConf.java | 11 +
.../hive/conf/TestHiveConfRestrictList.java | 12 +-
.../hadoop/hive/conf/TestHiveConfUtil.java | 68 +
.../hive/common/util/TestHiveStringUtils.java | 51 +
.../clientpositive/udf_row_sequence.q.out | 6 +-
data/conf/hive-log4j2.properties | 11 +-
data/conf/hive-site.xml | 4 +
data/conf/llap/hive-site.xml | 9 +
data/conf/spark/standalone/hive-site.xml | 17 +-
data/conf/spark/yarn-client/hive-site.xml | 10 +
data/conf/tez/hive-site.xml | 10 +
data/files/having_data.txt | 8 +
data/files/impala_int96_timestamp.parq | Bin 241 -> 0 bytes
data/scripts/input20_script.py | 18 +-
dev-support/checkstyle_YETUS-484.sh | 406 +
dev-support/findbugs_YETUS-471.sh | 488 +
dev-support/hive-personality.sh | 100 +
dev-support/maven_YETUS-506.sh | 687 +
dev-support/smart-apply-patch.sh | 18 +
dev-support/test-patch.sh | 18 +
dev-support/yetus-wrapper.sh | 185 +
druid-handler/pom.xml | 4 +
.../hadoop/hive/druid/DruidStorageHandler.java | 189 +-
.../hive/druid/DruidStorageHandlerUtils.java | 378 +-
.../hadoop/hive/druid/io/DruidOutputFormat.java | 21 +-
.../hive/druid/security/DruidKerberosUtil.java | 126 +
.../hive/druid/security/KerberosHttpClient.java | 163 +
.../druid/security/ResponseCookieHandler.java | 92 +
.../RetryIfUnauthorizedResponseHandler.java | 104 +
.../druid/security/RetryResponseHolder.java | 46 +
.../serde/DruidGroupByQueryRecordReader.java | 44 +-
.../hadoop/hive/druid/serde/DruidSerDe.java | 42 +-
.../hive/druid/serde/DruidSerDeUtils.java | 26 +-
.../hadoop/hive/druid/TestDruidSerDe.java | 50 +-
.../hive/druid/TestDruidStorageHandler.java | 384 +-
.../hive/ql/io/TestDruidRecordWriter.java | 6 +-
errata.txt | 1 +
.../results/positive/hbase_ppd_key_range.q.out | 3 +-
.../test/results/positive/hbase_queries.q.out | 2 +-
.../test/results/positive/ppd_key_ranges.q.out | 34 +-
.../cli/SemanticAnalysis/HCatAuthUtil.java | 3 +-
.../mapreduce/FileRecordWriterContainer.java | 7 +-
.../hcatalog/mapreduce/HCatBaseInputFormat.java | 3 +
.../mapreduce/HCatBaseOutputFormat.java | 15 +-
.../hive/hcatalog/mapreduce/SpecialCases.java | 27 +
.../apache/hive/hcatalog/cli/TestPermsGrp.java | 4 +-
.../mapreduce/TestHCatOutputFormat.java | 43 +-
.../mapreduce/TestHCatPartitionPublish.java | 6 +-
.../apache/hive/hcatalog/pig/HCatLoader.java | 2 +-
.../pig/TestHCatLoaderComplexSchema.java | 3 -
.../hcatalog/pig/TestHCatLoaderEncryption.java | 9 +-
.../hive/hcatalog/pig/TestHCatStorerMulti.java | 10 +-
.../hcatalog/pig/TestParquetHCatLoader.java | 49 -
.../hcatalog/pig/TestParquetHCatStorer.java | 167 -
.../listener/DbNotificationListener.java | 101 +-
.../MetaStoreEventListenerConstants.java | 33 -
.../hcatalog/messaging/AddPartitionMessage.java | 2 +
.../messaging/AlterPartitionMessage.java | 2 +
.../hcatalog/messaging/AlterTableMessage.java | 1 +
.../hcatalog/messaging/CreateTableMessage.java | 2 +
.../messaging/DropPartitionMessage.java | 1 +
.../hcatalog/messaging/DropTableMessage.java | 1 +
.../hive/hcatalog/messaging/InsertMessage.java | 1 +
.../hive/hcatalog/messaging/MessageFactory.java | 12 +
.../messaging/json/JSONAddPartitionMessage.java | 15 +-
.../json/JSONAlterPartitionMessage.java | 19 +-
.../messaging/json/JSONAlterTableMessage.java | 18 +-
.../messaging/json/JSONCreateTableMessage.java | 16 +-
.../json/JSONDropPartitionMessage.java | 15 +-
.../messaging/json/JSONDropTableMessage.java | 11 +-
.../messaging/json/JSONInsertMessage.java | 14 +-
.../messaging/json/JSONMessageFactory.java | 28 +-
.../listener/TestNotificationListener.java | 7 +
hcatalog/src/test/e2e/hcatalog/tests/hcat.conf | 2 +-
.../streaming/AbstractRecordWriter.java | 44 +-
.../hive/hcatalog/streaming/HiveEndPoint.java | 4 +-
.../mutate/worker/BucketIdResolverImpl.java | 6 +-
.../mutate/worker/MutatorCoordinator.java | 7 +-
.../streaming/mutate/worker/MutatorImpl.java | 16 +-
.../apache/hive/hcatalog/streaming/package.html | 21 +-
.../hive/hcatalog/streaming/TestStreaming.java | 229 +-
.../streaming/mutate/StreamingAssert.java | 46 +-
.../streaming/mutate/TestMutations.java | 56 +-
.../mutate/worker/TestBucketIdResolverImpl.java | 6 +-
.../mutate/worker/TestMutatorImpl.java | 2 +-
.../hive/hcatalog/api/TestHCatClient.java | 118 +-
.../api/TestHCatClientNotification.java | 5 +
.../listener/DummyRawStoreFailEvent.java | 27 +-
.../listener/TestDbNotificationListener.java | 19 +-
.../src/test/queries/clientpositive/having.q | 12 +
...rt_overwrite_dynamic_partitions_merge_move.q | 37 +
...rt_overwrite_dynamic_partitions_merge_only.q | 37 +
...ert_overwrite_dynamic_partitions_move_only.q | 37 +
.../test/results/clientpositive/having.q.out | 59 +
.../insert_blobstore_to_blobstore.q.out | 6 +
.../insert_empty_into_blobstore.q.out | 3 +
.../clientpositive/insert_into_table.q.out | 2 +
...verwrite_dynamic_partitions_merge_move.q.out | 138 +
...verwrite_dynamic_partitions_merge_only.q.out | 128 +
...overwrite_dynamic_partitions_move_only.q.out | 158 +
.../clientpositive/insert_overwrite_table.q.out | 2 +
.../clientpositive/orc_format_nonpart.q.out | 6 +
.../clientpositive/orc_format_part.q.out | 16 +
.../orc_nonstd_partitions_loc.q.out | 24 +
.../clientpositive/rcfile_format_nonpart.q.out | 6 +
.../clientpositive/rcfile_format_part.q.out | 16 +
.../rcfile_nonstd_partitions_loc.q.out | 24 +
.../clientpositive/zero_rows_blobstore.q.out | 2 +
itests/hive-jmh/pom.xml | 6 +
.../benchmark/storage/ColumnarStorageBench.java | 3 +-
.../vectorization/mapjoin/AbstractMapJoin.java | 179 +
.../mapjoin/MapJoinMultiKeyBench.java | 313 +
.../mapjoin/MapJoinMultiKeyBenchBase.java | 68 +
.../mapjoin/MapJoinOneLongKeyBench.java | 313 +
.../mapjoin/MapJoinOneLongKeyBenchBase.java | 66 +
.../mapjoin/MapJoinOneStringKeyBench.java | 313 +
.../mapjoin/MapJoinOneStringKeyBenchBase.java | 66 +
.../hive/minikdc/TestHs2HooksWithMiniKdc.java | 28 +-
.../security/TestHadoopAuthBridge23.java | 416 +
.../hive/thrift/TestHadoopAuthBridge23.java | 417 -
itests/hive-unit/pom.xml | 6 +
.../apache/hadoop/hive/hooks/TestHs2Hooks.java | 27 +-
.../AbstractTestAuthorizationApiAuthorizer.java | 4 +-
.../hadoop/hive/metastore/TestFilterHooks.java | 4 +-
.../hive/metastore/TestHiveMetaStore.java | 144 +-
.../metastore/TestHiveMetaStoreStatsMerge.java | 199 -
...TestHiveMetaStoreWithEnvironmentContext.java | 4 +-
.../metastore/TestMetaStoreAuthorization.java | 4 +-
.../TestMetaStoreEndFunctionListener.java | 5 +-
.../metastore/TestMetaStoreEventListener.java | 72 +-
.../TestMetaStoreEventListenerOnlyOnCommit.java | 4 +-
.../metastore/TestMetaStoreInitListener.java | 5 +-
.../metastore/TestMetaStoreListenersError.java | 6 +-
.../hive/metastore/TestMetaStoreMetrics.java | 82 +-
.../hive/metastore/TestRemoteHiveMetaStore.java | 4 +-
.../TestRemoteHiveMetaStoreIpAddress.java | 4 +-
.../hive/metastore/TestReplChangeManager.java | 37 +-
.../hive/metastore/TestRetryingHMSHandler.java | 4 +-
.../metastore/hbase/HBaseIntegrationTests.java | 112 -
.../TestHBaseAggrStatsCacheIntegration.java | 691 -
.../hive/metastore/hbase/TestHBaseImport.java | 775 -
.../hbase/TestHBaseMetastoreMetrics.java | 130 -
.../metastore/hbase/TestHBaseMetastoreSql.java | 223 -
.../metastore/hbase/TestHBaseSchemaTool.java | 582 -
.../metastore/hbase/TestHBaseSchemaTool2.java | 59 -
.../hbase/TestHBaseStoreIntegration.java | 1801 -
.../hbase/TestStorageDescriptorSharing.java | 191 -
.../apache/hadoop/hive/ql/TestAcidOnTez.java | 367 +-
.../hive/ql/TestAcidOnTezWithSplitUpdate.java | 28 -
...estDDLWithRemoteMetastoreSecondNamenode.java | 4 +-
.../hadoop/hive/ql/TestLocationQueries.java | 2 +-
.../hadoop/hive/ql/parse/TestExportImport.java | 100 +
.../hive/ql/parse/TestReplicationScenarios.java | 2772 +-
...TestReplicationScenariosAcrossInstances.java | 91 +-
.../hadoop/hive/ql/parse/WarehouseInstance.java | 89 +-
.../security/StorageBasedMetastoreTestBase.java | 5 +-
.../TestAuthorizationPreEventListener.java | 23 +-
.../TestClientSideAuthorizationProvider.java | 4 +-
.../TestMetastoreAuthorizationProvider.java | 4 +-
.../TestMultiAuthorizationPreEventListener.java | 4 +-
.../TestHiveAuthorizerCheckInvocation.java | 38 +
.../hive/ql/txn/compactor/TestCompactor.java | 4 +-
.../org/apache/hive/beeline/TestSchemaTool.java | 22 +-
.../apache/hive/jdbc/TestJdbcWithMiniHS2.java | 36 +-
.../hive/service/TestDFSErrorHandling.java | 152 +
.../operation/TestOperationLoggingLayout.java | 52 +
.../service/cli/session/TestQueryDisplay.java | 3 +-
itests/pom.xml | 2 +-
itests/qtest-accumulo/pom.xml | 3 +-
.../test/resources/testconfiguration.properties | 38 +-
.../hadoop/hive/accumulo/AccumuloQTestUtil.java | 2 +-
.../hive/cli/control/AbstractCliConfig.java | 4 +-
.../control/AbstractCoreBlobstoreCliDriver.java | 3 +-
.../hadoop/hive/cli/control/CliConfigs.java | 4 +-
.../hadoop/hive/cli/control/CoreCliDriver.java | 4 +-
.../hive/cli/control/CoreCompareCliDriver.java | 2 +-
.../hive/cli/control/CoreNegativeCliDriver.java | 2 +-
.../hive/cli/control/CorePerfCliDriver.java | 2 +-
.../hadoop/hive/hbase/HBaseQTestUtil.java | 2 +-
.../metastore/hbase/HBaseStoreTestUtil.java | 45 -
.../org/apache/hadoop/hive/ql/QTestUtil.java | 87 +-
.../hadoop/hive/ql/parse/CoreParseNegative.java | 3 +-
.../org/apache/hive/beeline/Parallelized.java | 9 +-
.../org/apache/hive/jdbc/miniHS2/MiniHS2.java | 4 +-
.../hive/storage/jdbc/JdbcRecordReader.java | 7 +-
.../org/apache/hive/storage/jdbc/JdbcSerDe.java | 18 +-
.../storage/jdbc/dao/JdbcRecordIterator.java | 8 +-
.../src/test/java/org/apache/TestSuite.java | 29 -
.../org/apache/hive/storage/jdbc/TestSuite.java | 29 +
.../dao/GenericJdbcDatabaseAccessorTest.java | 8 +-
jdbc/pom.xml | 2 +-
.../org/apache/hive/jdbc/HiveBaseResultSet.java | 6 +-
.../org/apache/hive/jdbc/HiveConnection.java | 5 +-
.../java/org/apache/hive/jdbc/JdbcColumn.java | 8 +-
.../hadoop/hive/llap/LlapBaseRecordReader.java | 103 +-
.../apache/hadoop/hive/llap/SubmitWorkInfo.java | 16 +-
.../ext/LlapTaskUmbilicalExternalClient.java | 504 +-
.../apache/hadoop/hive/llap/io/api/LlapIo.java | 4 +-
.../hive/llap/registry/ServiceInstance.java | 2 +-
.../hive/llap/tez/LlapProtocolClientProxy.java | 423 +-
.../helpers/LlapTaskUmbilicalServer.java | 44 +-
.../hadoop/hive/llap/TestAsyncPbRpcProxy.java | 145 +
.../tez/TestLlapDaemonProtocolClientProxy.java | 144 -
.../daemon/rpc/LlapDaemonProtocolProtos.java | 1854 +-
.../hadoop/hive/llap/AsyncPbRpcProxy.java | 435 +
.../hive/llap/impl/LlapProtocolClientImpl.java | 20 +-
.../hadoop/hive/llap/io/ChunkedInputStream.java | 16 +-
.../hive/llap/io/ChunkedOutputStream.java | 9 +-
.../src/protobuf/LlapDaemonProtocol.proto | 16 +-
.../hive/llap/io/TestChunkedInputStream.java | 6 +-
.../hadoop/hive/llap/LlapBaseInputFormat.java | 2 -
llap-server/bin/llapDaemon.sh | 3 +
llap-server/pom.xml | 7 +-
.../hadoop/hive/llap/cache/BuddyAllocator.java | 1496 +-
.../hive/llap/cache/EvictionDispatcher.java | 23 +-
.../hive/llap/cache/LlapAllocatorBuffer.java | 414 +
.../hive/llap/cache/LlapCacheableBuffer.java | 6 +-
.../hadoop/hive/llap/cache/LlapDataBuffer.java | 119 +-
.../hive/llap/cache/LowLevelCacheImpl.java | 70 +-
.../llap/cache/LowLevelCacheMemoryManager.java | 7 -
.../hive/llap/cache/LowLevelCachePolicy.java | 2 -
.../llap/cache/LowLevelFifoCachePolicy.java | 16 +-
.../llap/cache/LowLevelLrfuCachePolicy.java | 95 +-
.../hadoop/hive/llap/cache/MemoryManager.java | 2 -
.../hive/llap/cache/SerDeLowLevelCacheImpl.java | 115 +-
.../hadoop/hive/llap/cache/SimpleAllocator.java | 22 +-
.../hive/llap/cache/SimpleBufferManager.java | 12 +-
.../hadoop/hive/llap/cli/LlapServiceDriver.java | 6 +-
.../configuration/LlapDaemonConfiguration.java | 9 +-
.../hive/llap/daemon/ContainerRunner.java | 7 +-
.../llap/daemon/impl/ContainerRunnerImpl.java | 26 +-
.../impl/EvictingPriorityBlockingQueue.java | 29 +-
.../hive/llap/daemon/impl/LlapDaemon.java | 8 +
.../daemon/impl/LlapProtocolServerImpl.java | 12 +
.../llap/daemon/impl/QueryFragmentInfo.java | 24 +-
.../hadoop/hive/llap/daemon/impl/QueryInfo.java | 7 +-
.../hadoop/hive/llap/daemon/impl/Scheduler.java | 6 +-
.../impl/StaticPermanentFunctionChecker.java | 3 +-
.../llap/daemon/impl/TaskExecutorService.java | 451 +-
.../llap/daemon/impl/TaskRunnerCallable.java | 22 +-
.../comparator/FirstInFirstOutComparator.java | 14 +-
.../comparator/LlapQueueComparatorBase.java | 48 +
.../comparator/ShortestJobFirstComparator.java | 17 +-
.../daemon/services/impl/LlapWebServices.java | 1 +
.../impl/SystemConfigurationServlet.java | 196 +
.../hive/llap/io/api/impl/LlapInputFormat.java | 63 +-
.../hive/llap/io/api/impl/LlapIoImpl.java | 108 +-
.../hive/llap/io/api/impl/LlapRecordReader.java | 88 +-
.../llap/io/decode/EncodedDataConsumer.java | 1 +
.../io/decode/GenericColumnVectorProducer.java | 9 +-
.../llap/io/decode/OrcColumnVectorProducer.java | 15 +-
.../llap/io/decode/OrcEncodedDataConsumer.java | 12 +
.../llap/io/encoded/OrcEncodedDataReader.java | 122 +-
.../llap/io/encoded/SerDeEncodedDataReader.java | 75 +-
.../io/encoded/VectorDeserializeOrcWriter.java | 3 +
.../llap/io/metadata/OrcFileEstimateErrors.java | 4 +-
.../hive/llap/io/metadata/OrcFileMetadata.java | 4 +-
.../llap/io/metadata/OrcStripeMetadata.java | 4 +-
.../io/metadata/ParquetMetadataCacheImpl.java | 353 +
.../hive/llap/metrics/LlapDaemonJvmInfo.java | 3 +-
.../hive/llap/metrics/LlapDaemonJvmMetrics.java | 7 +-
.../llap/shufflehandler/FadvisedFileRegion.java | 14 +-
.../llap/shufflehandler/ShuffleHandler.java | 23 +-
llap-server/src/main/resources/templates.py | 2 +-
.../hive/llap/cache/TestBuddyAllocator.java | 73 +-
.../cache/TestBuddyAllocatorForceEvict.java | 470 +
.../hive/llap/cache/TestLowLevelCacheImpl.java | 29 +-
.../llap/cache/TestLowLevelLrfuCachePolicy.java | 56 -
.../hive/llap/cache/TestOrcMetadataCache.java | 12 -
.../daemon/impl/TaskExecutorTestHelpers.java | 97 +-
.../impl/TestEvictingPriorityBlockingQueue.java | 12 +-
.../daemon/impl/TestTaskExecutorService.java | 165 +-
.../TestFirstInFirstOutComparator.java | 36 +-
.../TestShortestJobFirstComparator.java | 35 +-
metastore/if/hive_metastore.thrift | 1593 -
metastore/pom.xml | 90 +-
.../upgrade/derby/022-HIVE-11107.derby.sql | 2 +-
.../upgrade/derby/043-HIVE-16922.derby.sql | 3 +
.../upgrade/derby/044-HIVE-16997.derby.sql | 2 +
.../upgrade/derby/hive-schema-3.0.0.derby.sql | 2 +-
.../derby/upgrade-2.3.0-to-3.0.0.derby.sql | 2 +
.../upgrade/hive/hive-schema-3.0.0.hive.sql | 24 +
.../upgrade/mssql/028-HIVE-16922.mssql.sql | 3 +
.../upgrade/mssql/029-HIVE-16997.mssql.sql | 2 +
.../upgrade/mssql/hive-schema-3.0.0.mssql.sql | 2 +
.../mssql/upgrade-2.3.0-to-3.0.0.mssql.sql | 2 +
.../upgrade/mysql/043-HIVE-16922.mysql.sql | 3 +
.../upgrade/mysql/044-HIVE-16997.mysql.sql | 2 +
.../upgrade/mysql/hive-schema-3.0.0.mysql.sql | 4 +-
.../mysql/upgrade-2.3.0-to-3.0.0.mysql.sql | 2 +
.../upgrade/oracle/043-HIVE-16922.oracle.sql | 3 +
.../upgrade/oracle/044-HIVE-16997.oracle.sql | 2 +
.../upgrade/oracle/hive-schema-3.0.0.oracle.sql | 2 +
.../oracle/upgrade-2.3.0-to-3.0.0.oracle.sql | 2 +
.../postgres/042-HIVE-16922.postgres.sql | 3 +
.../postgres/043-HIVE-16997.postgres.sql | 2 +
.../postgres/hive-schema-3.0.0.postgres.sql | 2 +
.../upgrade-2.3.0-to-3.0.0.postgres.sql | 2 +
.../metastore/hbase/HbaseMetastoreProto.java | 46709 ----
.../gen/thrift/gen-cpp/ThriftHiveMetastore.cpp | 73240 ------
.../gen/thrift/gen-cpp/ThriftHiveMetastore.h | 23202 --
.../ThriftHiveMetastore_server.skeleton.cpp | 834 -
.../thrift/gen-cpp/hive_metastore_constants.cpp | 65 -
.../thrift/gen-cpp/hive_metastore_constants.h | 48 -
.../gen/thrift/gen-cpp/hive_metastore_types.cpp | 21453 --
.../gen/thrift/gen-cpp/hive_metastore_types.h | 8861 -
.../hive/metastore/api/AbortTxnRequest.java | 387 -
.../hive/metastore/api/AbortTxnsRequest.java | 438 -
.../metastore/api/AddDynamicPartitions.java | 864 -
.../metastore/api/AddForeignKeyRequest.java | 443 -
.../api/AddNotNullConstraintRequest.java | 443 -
.../metastore/api/AddPartitionsRequest.java | 849 -
.../hive/metastore/api/AddPartitionsResult.java | 447 -
.../metastore/api/AddPrimaryKeyRequest.java | 443 -
.../api/AddUniqueConstraintRequest.java | 443 -
.../hadoop/hive/metastore/api/AggrStats.java | 542 -
.../metastore/api/AlreadyExistsException.java | 395 -
.../metastore/api/BinaryColumnStatsData.java | 687 -
.../metastore/api/BooleanColumnStatsData.java | 687 -
.../metastore/api/CacheFileMetadataRequest.java | 703 -
.../metastore/api/CacheFileMetadataResult.java | 387 -
.../hive/metastore/api/CheckLockRequest.java | 589 -
.../metastore/api/ClearFileMetadataRequest.java | 438 -
.../metastore/api/ClearFileMetadataResult.java | 283 -
.../hive/metastore/api/ClientCapabilities.java | 441 -
.../hive/metastore/api/ClientCapability.java | 45 -
.../hive/metastore/api/ColumnStatistics.java | 549 -
.../metastore/api/ColumnStatisticsData.java | 675 -
.../metastore/api/ColumnStatisticsDesc.java | 798 -
.../hive/metastore/api/ColumnStatisticsObj.java | 593 -
.../hive/metastore/api/CommitTxnRequest.java | 387 -
.../hive/metastore/api/CompactionRequest.java | 977 -
.../hive/metastore/api/CompactionResponse.java | 583 -
.../hive/metastore/api/CompactionType.java | 45 -
.../api/ConfigValSecurityException.java | 395 -
.../api/CurrentNotificationEventId.java | 387 -
.../hive/metastore/api/DataOperationType.java | 57 -
.../hadoop/hive/metastore/api/Database.java | 1095 -
.../apache/hadoop/hive/metastore/api/Date.java | 387 -
.../hive/metastore/api/DateColumnStatsData.java | 814 -
.../hadoop/hive/metastore/api/Decimal.java | 497 -
.../metastore/api/DecimalColumnStatsData.java | 814 -
.../metastore/api/DoubleColumnStatsData.java | 790 -
.../metastore/api/DropConstraintRequest.java | 591 -
.../hive/metastore/api/DropPartitionsExpr.java | 505 -
.../metastore/api/DropPartitionsRequest.java | 1112 -
.../metastore/api/DropPartitionsResult.java | 447 -
.../hive/metastore/api/EnvironmentContext.java | 447 -
.../hive/metastore/api/EventRequestType.java | 48 -
.../hadoop/hive/metastore/api/FieldSchema.java | 603 -
.../metastore/api/FileMetadataExprType.java | 42 -
.../hive/metastore/api/FireEventRequest.java | 861 -
.../metastore/api/FireEventRequestData.java | 309 -
.../hive/metastore/api/FireEventResponse.java | 283 -
.../hive/metastore/api/ForeignKeysRequest.java | 707 -
.../hive/metastore/api/ForeignKeysResponse.java | 443 -
.../hadoop/hive/metastore/api/Function.java | 1199 -
.../hadoop/hive/metastore/api/FunctionType.java | 42 -
.../metastore/api/GetAllFunctionsResponse.java | 447 -
.../api/GetFileMetadataByExprRequest.java | 773 -
.../api/GetFileMetadataByExprResult.java | 553 -
.../metastore/api/GetFileMetadataRequest.java | 438 -
.../metastore/api/GetFileMetadataResult.java | 540 -
.../metastore/api/GetOpenTxnsInfoResponse.java | 542 -
.../hive/metastore/api/GetOpenTxnsResponse.java | 750 -
.../api/GetPrincipalsInRoleRequest.java | 389 -
.../api/GetPrincipalsInRoleResponse.java | 443 -
.../api/GetRoleGrantsForPrincipalRequest.java | 502 -
.../api/GetRoleGrantsForPrincipalResponse.java | 443 -
.../hive/metastore/api/GetTableRequest.java | 605 -
.../hive/metastore/api/GetTableResult.java | 394 -
.../hive/metastore/api/GetTablesRequest.java | 659 -
.../hive/metastore/api/GetTablesResult.java | 443 -
.../api/GrantRevokePrivilegeRequest.java | 620 -
.../api/GrantRevokePrivilegeResponse.java | 390 -
.../metastore/api/GrantRevokeRoleRequest.java | 1059 -
.../metastore/api/GrantRevokeRoleResponse.java | 390 -
.../hive/metastore/api/GrantRevokeType.java | 45 -
.../hive/metastore/api/HeartbeatRequest.java | 489 -
.../metastore/api/HeartbeatTxnRangeRequest.java | 482 -
.../api/HeartbeatTxnRangeResponse.java | 588 -
.../hive/metastore/api/HiveObjectPrivilege.java | 729 -
.../hive/metastore/api/HiveObjectRef.java | 872 -
.../hive/metastore/api/HiveObjectType.java | 54 -
.../apache/hadoop/hive/metastore/api/Index.java | 1374 -
.../api/IndexAlreadyExistsException.java | 395 -
.../metastore/api/InsertEventRequestData.java | 700 -
.../metastore/api/InvalidInputException.java | 395 -
.../metastore/api/InvalidObjectException.java | 395 -
.../api/InvalidOperationException.java | 395 -
.../api/InvalidPartitionException.java | 395 -
.../hive/metastore/api/LockComponent.java | 1158 -
.../hadoop/hive/metastore/api/LockLevel.java | 48 -
.../hadoop/hive/metastore/api/LockRequest.java | 861 -
.../hadoop/hive/metastore/api/LockResponse.java | 500 -
.../hadoop/hive/metastore/api/LockState.java | 51 -
.../hadoop/hive/metastore/api/LockType.java | 48 -
.../hive/metastore/api/LongColumnStatsData.java | 790 -
.../hive/metastore/api/MetaException.java | 395 -
.../hive/metastore/api/MetadataPpdResult.java | 517 -
.../hive/metastore/api/NoSuchLockException.java | 395 -
.../metastore/api/NoSuchObjectException.java | 395 -
.../hive/metastore/api/NoSuchTxnException.java | 395 -
.../api/NotNullConstraintsRequest.java | 490 -
.../api/NotNullConstraintsResponse.java | 443 -
.../hive/metastore/api/NotificationEvent.java | 1006 -
.../metastore/api/NotificationEventRequest.java | 490 -
.../api/NotificationEventResponse.java | 443 -
.../hive/metastore/api/OpenTxnRequest.java | 702 -
.../hive/metastore/api/OpenTxnsResponse.java | 438 -
.../apache/hadoop/hive/metastore/api/Order.java | 497 -
.../hadoop/hive/metastore/api/Partition.java | 1229 -
.../hive/metastore/api/PartitionEventType.java | 42 -
.../api/PartitionListComposingSpec.java | 449 -
.../hive/metastore/api/PartitionSpec.java | 826 -
.../api/PartitionSpecWithSharedSD.java | 558 -
.../hive/metastore/api/PartitionWithoutSD.java | 1016 -
.../metastore/api/PartitionsByExprRequest.java | 815 -
.../metastore/api/PartitionsByExprResult.java | 542 -
.../metastore/api/PartitionsStatsRequest.java | 790 -
.../metastore/api/PartitionsStatsResult.java | 490 -
.../hive/metastore/api/PrimaryKeysRequest.java | 490 -
.../hive/metastore/api/PrimaryKeysResponse.java | 443 -
.../metastore/api/PrincipalPrivilegeSet.java | 906 -
.../hive/metastore/api/PrincipalType.java | 48 -
.../hadoop/hive/metastore/api/PrivilegeBag.java | 449 -
.../hive/metastore/api/PrivilegeGrantInfo.java | 815 -
.../metastore/api/PutFileMetadataRequest.java | 710 -
.../metastore/api/PutFileMetadataResult.java | 283 -
.../hive/metastore/api/RequestPartsSpec.java | 438 -
.../hadoop/hive/metastore/api/ResourceType.java | 48 -
.../hadoop/hive/metastore/api/ResourceUri.java | 511 -
.../apache/hadoop/hive/metastore/api/Role.java | 601 -
.../hive/metastore/api/RolePrincipalGrant.java | 1035 -
.../hive/metastore/api/SQLForeignKey.java | 1715 -
.../metastore/api/SQLNotNullConstraint.java | 1005 -
.../hive/metastore/api/SQLPrimaryKey.java | 1103 -
.../hive/metastore/api/SQLUniqueConstraint.java | 1103 -
.../hadoop/hive/metastore/api/Schema.java | 605 -
.../hadoop/hive/metastore/api/SerDeInfo.java | 655 -
.../api/SetPartitionsStatsRequest.java | 550 -
.../hive/metastore/api/ShowCompactRequest.java | 283 -
.../hive/metastore/api/ShowCompactResponse.java | 443 -
.../api/ShowCompactResponseElement.java | 1641 -
.../hive/metastore/api/ShowLocksRequest.java | 710 -
.../hive/metastore/api/ShowLocksResponse.java | 449 -
.../metastore/api/ShowLocksResponseElement.java | 1929 -
.../hadoop/hive/metastore/api/SkewedInfo.java | 834 -
.../hive/metastore/api/StorageDescriptor.java | 1748 -
.../metastore/api/StringColumnStatsData.java | 782 -
.../apache/hadoop/hive/metastore/api/Table.java | 1948 -
.../hadoop/hive/metastore/api/TableMeta.java | 701 -
.../hive/metastore/api/TableStatsRequest.java | 640 -
.../hive/metastore/api/TableStatsResult.java | 443 -
.../hive/metastore/api/ThriftHiveMetastore.java | 186370 ---------------
.../hive/metastore/api/TxnAbortedException.java | 395 -
.../hadoop/hive/metastore/api/TxnInfo.java | 1220 -
.../hive/metastore/api/TxnOpenException.java | 395 -
.../hadoop/hive/metastore/api/TxnState.java | 48 -
.../apache/hadoop/hive/metastore/api/Type.java | 768 -
.../metastore/api/UniqueConstraintsRequest.java | 490 -
.../api/UniqueConstraintsResponse.java | 443 -
.../hive/metastore/api/UnknownDBException.java | 395 -
.../api/UnknownPartitionException.java | 395 -
.../metastore/api/UnknownTableException.java | 395 -
.../hive/metastore/api/UnlockRequest.java | 387 -
.../hadoop/hive/metastore/api/Version.java | 499 -
.../metastore/api/hive_metastoreConstants.java | 87 -
.../gen-php/metastore/ThriftHiveMetastore.php | 46667 ----
.../src/gen/thrift/gen-php/metastore/Types.php | 20941 --
.../hive_metastore/ThriftHiveMetastore-remote | 1291 -
.../hive_metastore/ThriftHiveMetastore.py | 37904 ----
.../thrift/gen-py/hive_metastore/__init__.py | 1 -
.../thrift/gen-py/hive_metastore/constants.py | 35 -
.../gen/thrift/gen-py/hive_metastore/ttypes.py | 14886 --
.../thrift/gen-rb/hive_metastore_constants.rb | 57 -
.../gen/thrift/gen-rb/hive_metastore_types.rb | 3444 -
.../gen/thrift/gen-rb/thrift_hive_metastore.rb | 10557 -
.../hadoop/hive/metastore/DatabaseProduct.java | 2 +-
.../apache/hadoop/hive/metastore/Deadline.java | 4 +-
.../hive/metastore/FileMetadataManager.java | 7 +-
.../hive/metastore/HMSMetricsListener.java | 47 +-
.../hadoop/hive/metastore/HiveAlterHandler.java | 22 +-
.../hadoop/hive/metastore/HiveMetaHook.java | 4 +
.../hadoop/hive/metastore/HiveMetaStore.java | 606 +-
.../hive/metastore/HiveMetaStoreClient.java | 78 +-
.../hadoop/hive/metastore/IMetaStoreClient.java | 89 +-
.../hive/metastore/IMetaStoreSchemaInfo.java | 2 +-
.../hive/metastore/MetaStoreDirectSql.java | 464 +-
.../hive/metastore/MetaStoreEventListener.java | 45 +-
.../MetaStoreEventListenerConstants.java | 41 +
.../hive/metastore/MetaStoreFilterHook.java | 5 +-
.../metastore/MetaStoreListenerNotifier.java | 52 +-
.../metastore/MetaStorePreEventListener.java | 5 +-
.../hive/metastore/MetaStoreSchemaInfo.java | 4 +-
.../hadoop/hive/metastore/MetaStoreThread.java | 2 +-
.../hadoop/hive/metastore/MetaStoreUtils.java | 314 +-
.../metastore/NumDistinctValueEstimator.java | 367 -
.../hadoop/hive/metastore/ObjectStore.java | 178 +-
.../hive/metastore/PartFilterExprUtil.java | 2 +-
.../apache/hadoop/hive/metastore/RawStore.java | 23 +-
.../hive/metastore/ReplChangeManager.java | 153 +-
.../hive/metastore/RetryingHMSHandler.java | 4 +-
.../hive/metastore/StatObjectConverter.java | 87 +-
.../hive/metastore/TUGIBasedProcessor.java | 2 +-
.../TransactionalMetaStoreEventListener.java | 39 +
.../TransactionalValidationListener.java | 44 +-
.../apache/hadoop/hive/metastore/Warehouse.java | 21 +-
.../hive/metastore/cache/CachedStore.java | 169 +-
.../hive/metastore/cache/SharedCache.java | 10 +-
.../aggr/BinaryColumnStatsAggregator.java | 64 +
.../aggr/BooleanColumnStatsAggregator.java | 65 +
.../columnstats/aggr/ColumnStatsAggregator.java | 33 +
.../aggr/ColumnStatsAggregatorFactory.java | 113 +
.../aggr/DateColumnStatsAggregator.java | 362 +
.../aggr/DecimalColumnStatsAggregator.java | 375 +
.../aggr/DoubleColumnStatsAggregator.java | 349 +
.../aggr/IExtrapolatePartStatus.java | 47 +
.../aggr/LongColumnStatsAggregator.java | 348 +
.../aggr/StringColumnStatsAggregator.java | 305 +
.../cache/DateColumnStatsDataInspector.java | 124 +
.../cache/DecimalColumnStatsDataInspector.java | 124 +
.../cache/DoubleColumnStatsDataInspector.java | 124 +
.../cache/LongColumnStatsDataInspector.java | 124 +
.../cache/StringColumnStatsDataInspector.java | 125 +
.../merge/BinaryColumnStatsMerger.java | 35 +
.../merge/BooleanColumnStatsMerger.java | 35 +
.../columnstats/merge/ColumnStatsMerger.java | 31 +
.../merge/ColumnStatsMergerFactory.java | 120 +
.../merge/DateColumnStatsMerger.java | 59 +
.../merge/DecimalColumnStatsMerger.java | 61 +
.../merge/DoubleColumnStatsMerger.java | 54 +
.../merge/LongColumnStatsMerger.java | 54 +
.../merge/StringColumnStatsMerger.java | 54 +
.../datasource/BoneCPDataSourceProvider.java | 95 +
.../datasource/DataSourceProvider.java | 79 +
.../datasource/DataSourceProviderFactory.java | 47 +
.../datasource/HikariCPDataSourceProvider.java | 97 +
.../hive/metastore/datasource/package-info.java | 23 +
.../metastore/events/AddForeignKeyEvent.java | 37 +
.../hive/metastore/events/AddIndexEvent.java | 4 +
.../events/AddNotNullConstraintEvent.java | 37 +
.../metastore/events/AddPartitionEvent.java | 4 +
.../metastore/events/AddPrimaryKeyEvent.java | 38 +
.../events/AddUniqueConstraintEvent.java | 37 +
.../hive/metastore/events/AlterIndexEvent.java | 4 +
.../metastore/events/AlterPartitionEvent.java | 4 +
.../hive/metastore/events/AlterTableEvent.java | 4 +
.../metastore/events/ConfigChangeEvent.java | 4 +
.../metastore/events/CreateDatabaseEvent.java | 4 +
.../metastore/events/CreateFunctionEvent.java | 4 +
.../hive/metastore/events/CreateTableEvent.java | 4 +
.../metastore/events/DropConstraintEvent.java | 47 +
.../metastore/events/DropDatabaseEvent.java | 4 +
.../metastore/events/DropFunctionEvent.java | 4 +
.../hive/metastore/events/DropIndexEvent.java | 4 +
.../metastore/events/DropPartitionEvent.java | 4 +
.../hive/metastore/events/DropTableEvent.java | 4 +
.../hive/metastore/events/InsertEvent.java | 6 +-
.../hive/metastore/events/ListenerEvent.java | 5 +-
.../events/LoadPartitionDoneEvent.java | 4 +
.../hive/metastore/events/PreAddIndexEvent.java | 4 +
.../metastore/events/PreAddPartitionEvent.java | 4 +
.../metastore/events/PreAlterDatabaseEvent.java | 47 +
.../metastore/events/PreAlterIndexEvent.java | 4 +
.../events/PreAlterPartitionEvent.java | 4 +
.../metastore/events/PreAlterTableEvent.java | 4 +
.../events/PreAuthorizationCallEvent.java | 4 +
.../events/PreCreateDatabaseEvent.java | 4 +
.../metastore/events/PreCreateTableEvent.java | 4 +
.../metastore/events/PreDropDatabaseEvent.java | 4 +
.../metastore/events/PreDropIndexEvent.java | 4 +
.../metastore/events/PreDropPartitionEvent.java | 4 +
.../metastore/events/PreDropTableEvent.java | 4 +
.../hive/metastore/events/PreEventContext.java | 8 +-
.../events/PreLoadPartitionDoneEvent.java | 4 +
.../metastore/events/PreReadDatabaseEvent.java | 4 +
.../metastore/events/PreReadTableEvent.java | 4 +
.../hbase/AggrStatsInvalidatorFilter.java | 121 -
.../hadoop/hive/metastore/hbase/Counter.java | 53 -
.../hive/metastore/hbase/HBaseConnection.java | 96 -
.../metastore/hbase/HBaseFilterPlanUtil.java | 612 -
.../hive/metastore/hbase/HBaseImport.java | 619 -
.../hive/metastore/hbase/HBaseReadWrite.java | 2943 -
.../hive/metastore/hbase/HBaseSchemaTool.java | 192 -
.../hadoop/hive/metastore/hbase/HBaseStore.java | 2964 -
.../hadoop/hive/metastore/hbase/HBaseUtils.java | 1781 -
.../hive/metastore/hbase/MetadataStore.java | 2 +-
.../hive/metastore/hbase/ObjectCache.java | 81 -
.../hive/metastore/hbase/PartitionCache.java | 168 -
.../metastore/hbase/PartitionKeyComparator.java | 292 -
.../hbase/SharedStorageDescriptor.java | 251 -
.../hadoop/hive/metastore/hbase/StatsCache.java | 323 -
.../metastore/hbase/TephraHBaseConnection.java | 127 -
.../metastore/hbase/VanillaHBaseConnection.java | 137 -
.../stats/BinaryColumnStatsAggregator.java | 64 -
.../stats/BooleanColumnStatsAggregator.java | 65 -
.../hbase/stats/ColumnStatsAggregator.java | 34 -
.../stats/ColumnStatsAggregatorFactory.java | 104 -
.../stats/DecimalColumnStatsAggregator.java | 351 -
.../stats/DoubleColumnStatsAggregator.java | 325 -
.../hbase/stats/IExtrapolatePartStatus.java | 47 -
.../hbase/stats/LongColumnStatsAggregator.java | 323 -
.../stats/StringColumnStatsAggregator.java | 105 -
.../stats/merge/BinaryColumnStatsMerger.java | 35 -
.../stats/merge/BooleanColumnStatsMerger.java | 35 -
.../hbase/stats/merge/ColumnStatsMerger.java | 34 -
.../stats/merge/ColumnStatsMergerFactory.java | 150 -
.../stats/merge/DateColumnStatsMerger.java | 55 -
.../stats/merge/DecimalColumnStatsMerger.java | 55 -
.../stats/merge/DoubleColumnStatsMerger.java | 48 -
.../stats/merge/LongColumnStatsMerger.java | 48 -
.../stats/merge/StringColumnStatsMerger.java | 49 -
.../metastore/hooks/JDOConnectionURLHook.java | 4 +
.../messaging/AddForeignKeyMessage.java | 36 +
.../messaging/AddNotNullConstraintMessage.java | 36 +
.../messaging/AddPartitionMessage.java | 2 +
.../messaging/AddPrimaryKeyMessage.java | 35 +
.../messaging/AddUniqueConstraintMessage.java | 36 +
.../messaging/AlterPartitionMessage.java | 2 +
.../metastore/messaging/AlterTableMessage.java | 2 +
.../metastore/messaging/CreateTableMessage.java | 2 +
.../messaging/DropConstraintMessage.java | 29 +
.../messaging/DropPartitionMessage.java | 2 +
.../metastore/messaging/DropTableMessage.java | 2 +
.../hive/metastore/messaging/EventMessage.java | 7 +-
.../hive/metastore/messaging/EventUtils.java | 13 +
.../hive/metastore/messaging/InsertMessage.java | 2 +
.../messaging/MessageDeserializer.java | 36 +-
.../metastore/messaging/MessageFactory.java | 53 +-
.../event/filters/DatabaseAndTableFilter.java | 2 +-
.../json/JSONAddForeignKeyMessage.java | 101 +
.../json/JSONAddNotNullConstraintMessage.java | 96 +
.../messaging/json/JSONAddPartitionMessage.java | 8 +-
.../json/JSONAddPrimaryKeyMessage.java | 101 +
.../json/JSONAddUniqueConstraintMessage.java | 98 +
.../json/JSONAlterPartitionMessage.java | 8 +-
.../messaging/json/JSONAlterTableMessage.java | 8 +-
.../messaging/json/JSONCreateTableMessage.java | 18 +-
.../json/JSONDropConstraintMessage.java | 90 +
.../json/JSONDropPartitionMessage.java | 15 +-
.../messaging/json/JSONDropTableMessage.java | 13 +-
.../messaging/json/JSONInsertMessage.java | 8 +-
.../messaging/json/JSONMessageDeserializer.java | 50 +
.../messaging/json/JSONMessageFactory.java | 61 +-
.../hive/metastore/parser/ExpressionTree.java | 4 +-
.../hive/metastore/tools/HiveSchemaHelper.java | 2 +-
.../hadoop/hive/metastore/txn/TxnDbUtil.java | 5 +-
.../hadoop/hive/metastore/txn/TxnHandler.java | 254 +-
.../hadoop/hive/metastore/txn/TxnStore.java | 2 +-
.../hadoop/hive/metastore/txn/TxnUtils.java | 2 +-
.../src/main/resources/thrift-replacements.txt | 60 -
.../hive/metastore/model/MColumnDescriptor.java | 51 -
.../hive/metastore/model/MConstraint.java | 188 -
.../hive/metastore/model/MDBPrivilege.java | 132 -
.../hadoop/hive/metastore/model/MDatabase.java | 128 -
.../hive/metastore/model/MDelegationToken.java | 45 -
.../hive/metastore/model/MFieldSchema.java | 80 -
.../hadoop/hive/metastore/model/MFunction.java | 119 -
.../hive/metastore/model/MGlobalPrivilege.java | 120 -
.../hadoop/hive/metastore/model/MIndex.java | 200 -
.../hadoop/hive/metastore/model/MMasterKey.java | 55 -
.../metastore/model/MMetastoreDBProperties.java | 56 -
.../hive/metastore/model/MNotificationLog.java | 98 -
.../metastore/model/MNotificationNextId.java | 42 -
.../hadoop/hive/metastore/model/MOrder.java | 62 -
.../hadoop/hive/metastore/model/MPartition.java | 155 -
.../model/MPartitionColumnPrivilege.java | 161 -
.../model/MPartitionColumnStatistics.java | 258 -
.../hive/metastore/model/MPartitionEvent.java | 90 -
.../metastore/model/MPartitionPrivilege.java | 139 -
.../hive/metastore/model/MPrincipalDesc.java | 59 -
.../hive/metastore/model/MResourceUri.java | 49 -
.../hadoop/hive/metastore/model/MRole.java | 80 -
.../hadoop/hive/metastore/model/MRoleMap.java | 120 -
.../hadoop/hive/metastore/model/MSerDeInfo.java | 81 -
.../metastore/model/MStorageDescriptor.java | 277 -
.../hive/metastore/model/MStringList.java | 62 -
.../hadoop/hive/metastore/model/MTable.java | 256 -
.../metastore/model/MTableColumnPrivilege.java | 160 -
.../metastore/model/MTableColumnStatistics.java | 249 -
.../hive/metastore/model/MTablePrivilege.java | 139 -
.../hadoop/hive/metastore/model/MType.java | 105 -
.../hive/metastore/model/MVersionTable.java | 57 -
metastore/src/model/package.jdo | 1081 -
.../metastore/hbase/hbase_metastore_proto.proto | 368 -
.../DummyRawStoreControlledCommit.java | 29 +-
.../DummyRawStoreForJdoConnection.java | 26 +-
.../InjectableBehaviourObjectStore.java | 26 +-
.../hadoop/hive/metastore/TestObjectStore.java | 25 +-
.../hadoop/hive/metastore/TestOldSchema.java | 220 +
.../hive/metastore/cache/TestCachedStore.java | 230 +-
.../TestDataSourceProviderFactory.java | 167 +
.../hadoop/hive/metastore/hbase/MockUtils.java | 219 -
.../hbase/TestHBaseAggregateStatsCache.java | 316 -
...stHBaseAggregateStatsCacheWithBitVector.java | 184 -
.../TestHBaseAggregateStatsExtrapolation.java | 716 -
.../TestHBaseAggregateStatsNDVUniformDist.java | 580 -
.../hbase/TestHBaseFilterPlanUtil.java | 483 -
.../hive/metastore/hbase/TestHBaseStore.java | 1978 -
.../hbase/TestHBaseStoreBitVector.java | 622 -
.../metastore/hbase/TestHBaseStoreCached.java | 365 -
.../hbase/TestSharedStorageDescriptor.java | 152 -
pom.xml | 55 +-
ql/if/queryplan.thrift | 3 +
ql/pom.xml | 10 +-
ql/src/gen/thrift/gen-cpp/queryplan_types.cpp | 12 +-
ql/src/gen/thrift/gen-cpp/queryplan_types.h | 5 +-
.../hadoop/hive/ql/plan/api/StageType.java | 11 +-
ql/src/gen/thrift/gen-php/Types.php | 6 +
ql/src/gen/thrift/gen-py/queryplan/ttypes.py | 9 +
ql/src/gen/thrift/gen-rb/queryplan_types.rb | 7 +-
.../UDAFTemplates/VectorUDAFAvg.txt | 255 +-
.../UDAFTemplates/VectorUDAFAvgDecimal.txt | 566 +
.../UDAFTemplates/VectorUDAFAvgDecimalMerge.txt | 597 +
.../UDAFTemplates/VectorUDAFAvgMerge.txt | 547 +
.../UDAFTemplates/VectorUDAFAvgTimestamp.txt | 517 +
.../UDAFTemplates/VectorUDAFMinMax.txt | 184 +-
.../UDAFTemplates/VectorUDAFMinMaxDecimal.txt | 30 +-
.../VectorUDAFMinMaxIntervalDayTime.txt | 26 +-
.../UDAFTemplates/VectorUDAFMinMaxString.txt | 29 +-
.../UDAFTemplates/VectorUDAFMinMaxTimestamp.txt | 26 +-
.../UDAFTemplates/VectorUDAFSum.txt | 139 +-
.../UDAFTemplates/VectorUDAFVar.txt | 194 +-
.../UDAFTemplates/VectorUDAFVarDecimal.txt | 219 +-
.../UDAFTemplates/VectorUDAFVarMerge.txt | 573 +
.../UDAFTemplates/VectorUDAFVarTimestamp.txt | 477 +
.../hadoop/hive/llap/ChannelOutputStream.java | 37 +-
.../hadoop/hive/llap/LlapCacheAwareFs.java | 422 +
.../hive/llap/LlapOutputFormatService.java | 4 +-
.../hadoop/hive/llap/LlapRecordWriter.java | 6 +-
.../hadoop/hive/ql/CompilationOpContext.java | 13 +-
.../java/org/apache/hadoop/hive/ql/Context.java | 2 +-
.../java/org/apache/hadoop/hive/ql/Driver.java | 12 +
.../org/apache/hadoop/hive/ql/ErrorMsg.java | 40 +-
.../hadoop/hive/ql/HiveDriverRunHook.java | 4 +
.../hive/ql/HiveDriverRunHookContext.java | 4 +
.../apache/hadoop/hive/ql/QueryProperties.java | 1 +
.../hadoop/hive/ql/exec/CollectOperator.java | 5 +
.../hadoop/hive/ql/exec/ColumnStatsTask.java | 46 +-
.../hive/ql/exec/ColumnStatsUpdateTask.java | 24 +-
.../hadoop/hive/ql/exec/CommonJoinOperator.java | 17 +-
.../org/apache/hadoop/hive/ql/exec/DDLTask.java | 152 +-
.../hadoop/hive/ql/exec/DemuxOperator.java | 5 +
.../apache/hadoop/hive/ql/exec/Description.java | 5 +
.../apache/hadoop/hive/ql/exec/ExplainTask.java | 27 +-
.../hadoop/hive/ql/exec/FetchOperator.java | 6 -
.../hadoop/hive/ql/exec/FileSinkOperator.java | 77 +-
.../hadoop/hive/ql/exec/ForwardOperator.java | 5 +
.../hadoop/hive/ql/exec/FunctionRegistry.java | 4 +-
.../hadoop/hive/ql/exec/FunctionTask.java | 28 +-
.../hadoop/hive/ql/exec/GroupByOperator.java | 2 +-
.../hive/ql/exec/HashTableDummyOperator.java | 5 +-
.../hive/ql/exec/HashTableSinkOperator.java | 10 +-
.../hadoop/hive/ql/exec/KeyWrapperFactory.java | 6 +
.../ql/exec/LateralViewForwardOperator.java | 5 +
.../hadoop/hive/ql/exec/ListSinkOperator.java | 5 +
.../hadoop/hive/ql/exec/MapJoinOperator.java | 18 +
.../apache/hadoop/hive/ql/exec/MapOperator.java | 3 +
.../hadoop/hive/ql/exec/MapredContext.java | 2 +
.../apache/hadoop/hive/ql/exec/MoveTask.java | 48 +-
.../apache/hadoop/hive/ql/exec/MuxOperator.java | 5 +
.../apache/hadoop/hive/ql/exec/NodeUtils.java | 68 +-
.../hadoop/hive/ql/exec/ObjectCacheFactory.java | 9 +-
.../apache/hadoop/hive/ql/exec/Operator.java | 75 +
.../hadoop/hive/ql/exec/OperatorFactory.java | 3 +
.../hadoop/hive/ql/exec/OperatorUtils.java | 39 +-
.../hive/ql/exec/OrcFileMergeOperator.java | 38 +-
.../hadoop/hive/ql/exec/ReplCopyTask.java | 157 +-
.../hive/ql/exec/SerializationUtilities.java | 7 +-
.../ql/exec/SparkHashTableSinkOperator.java | 17 +-
.../hadoop/hive/ql/exec/StatsNoJobTask.java | 5 -
.../hadoop/hive/ql/exec/TableScanOperator.java | 11 +-
.../apache/hadoop/hive/ql/exec/TaskFactory.java | 10 +-
.../org/apache/hadoop/hive/ql/exec/UDF.java | 3 +
.../hive/ql/exec/UDFArgumentException.java | 4 +
.../ql/exec/UDFArgumentLengthException.java | 5 +
.../hive/ql/exec/UDFArgumentTypeException.java | 6 +-
.../hadoop/hive/ql/exec/UDFMethodResolver.java | 1 +
.../hadoop/hive/ql/exec/UnionOperator.java | 5 +
.../apache/hadoop/hive/ql/exec/Utilities.java | 509 +-
.../hive/ql/exec/errors/ErrorAndSolution.java | 5 +-
.../hadoop/hive/ql/exec/mr/MapRedTask.java | 2 +-
.../ql/exec/persistence/FlatRowContainer.java | 2 +-
.../hive/ql/exec/persistence/RowContainer.java | 10 +-
.../hadoop/hive/ql/exec/repl/ReplDumpTask.java | 325 +
.../hadoop/hive/ql/exec/repl/ReplDumpWork.java | 75 +
.../hive/ql/exec/repl/ReplStateLogTask.java | 51 +
.../hive/ql/exec/repl/ReplStateLogWork.java | 100 +
.../ql/exec/repl/bootstrap/ReplLoadTask.java | 289 +
.../ql/exec/repl/bootstrap/ReplLoadWork.java | 70 +
.../repl/bootstrap/events/BootstrapEvent.java | 28 +
.../repl/bootstrap/events/DatabaseEvent.java | 34 +
.../repl/bootstrap/events/FunctionEvent.java | 33 +
.../repl/bootstrap/events/PartitionEvent.java | 26 +
.../exec/repl/bootstrap/events/TableEvent.java | 42 +
.../filesystem/BootstrapEventsIterator.java | 181 +
.../filesystem/DatabaseEventsIterator.java | 145 +
.../events/filesystem/FSDatabaseEvent.java | 88 +
.../events/filesystem/FSFunctionEvent.java | 39 +
.../events/filesystem/FSPartitionEvent.java | 84 +
.../events/filesystem/FSTableEvent.java | 123 +
.../exec/repl/bootstrap/load/LoadDatabase.java | 129 +
.../exec/repl/bootstrap/load/LoadFunction.java | 87 +
.../repl/bootstrap/load/ReplicationState.java | 58 +
.../exec/repl/bootstrap/load/TaskTracker.java | 120 +
.../bootstrap/load/table/LoadPartitions.java | 316 +
.../repl/bootstrap/load/table/LoadTable.java | 245 +
.../repl/bootstrap/load/table/TableContext.java | 49 +
.../exec/repl/bootstrap/load/util/Context.java | 37 +
.../repl/bootstrap/load/util/PathUtils.java | 105 +
.../hive/ql/exec/spark/HashTableLoader.java | 2 +-
.../ql/exec/spark/LocalHiveSparkClient.java | 2 +-
.../ql/exec/spark/RemoteHiveSparkClient.java | 19 +-
.../hive/ql/exec/spark/RepartitionShuffler.java | 42 -
.../exec/spark/SparkDynamicPartitionPruner.java | 13 +-
.../hive/ql/exec/spark/SparkPlanGenerator.java | 6 +-
.../ql/exec/spark/SparkReduceRecordHandler.java | 331 +-
.../hive/ql/exec/spark/SparkUtilities.java | 20 +
.../ql/exec/spark/session/SparkSessionImpl.java | 11 +-
.../hadoop/hive/ql/exec/tez/DagUtils.java | 36 +-
.../hive/ql/exec/tez/MapRecordSource.java | 12 +
.../hadoop/hive/ql/exec/tez/ObjectCache.java | 5 +
.../hive/ql/exec/tez/ReduceRecordSource.java | 80 +-
.../ql/exec/tez/RestrictedConfigChecker.java | 79 +
.../ql/exec/tez/SessionExpirationTracker.java | 235 +
.../hadoop/hive/ql/exec/tez/TezSessionPool.java | 165 +
.../hive/ql/exec/tez/TezSessionPoolManager.java | 551 +-
.../hive/ql/exec/tez/TezSessionPoolSession.java | 158 +
.../apache/hadoop/hive/ql/exec/tez/TezTask.java | 84 +-
.../ql/exec/tez/tools/KeyValueInputMerger.java | 50 +-
.../vector/VectorAppMasterEventOperator.java | 3 +-
.../hive/ql/exec/vector/VectorAssignRow.java | 410 +-
.../hive/ql/exec/vector/VectorBatchDebug.java | 105 +
.../ql/exec/vector/VectorDeserializeRow.java | 492 +-
.../hive/ql/exec/vector/VectorExtractRow.java | 40 +-
.../ql/exec/vector/VectorFilterOperator.java | 2 +-
.../ql/exec/vector/VectorGroupByOperator.java | 69 +-
.../ql/exec/vector/VectorLimitOperator.java | 2 +-
.../exec/vector/VectorMapJoinBaseOperator.java | 3 +-
.../hive/ql/exec/vector/VectorMapOperator.java | 48 +-
.../exec/vector/VectorSMBMapJoinOperator.java | 2 +-
.../ql/exec/vector/VectorSelectOperator.java | 12 +-
.../ql/exec/vector/VectorizationContext.java | 247 +-
.../ql/exec/vector/VectorizedBatchUtil.java | 61 +-
.../ql/exec/vector/VectorizedRowBatchCtx.java | 55 +-
.../vector/expressions/CastDateToTimestamp.java | 131 +
.../vector/expressions/IfExprColumnNull.java | 109 +
.../vector/expressions/IfExprNullColumn.java | 109 +
.../VectorExpressionWriterFactory.java | 188 +-
.../VectorInBloomFilterColDynamicValue.java | 18 +-
.../aggregates/VectorAggregateExpression.java | 17 +-
.../aggregates/VectorUDAFAvgDecimal.java | 521 -
.../aggregates/VectorUDAFAvgTimestamp.java | 488 -
.../aggregates/VectorUDAFBloomFilter.java | 60 +-
.../aggregates/VectorUDAFBloomFilterMerge.java | 43 +-
.../expressions/aggregates/VectorUDAFCount.java | 28 +-
.../aggregates/VectorUDAFCountMerge.java | 28 +-
.../aggregates/VectorUDAFCountStar.java | 20 +-
.../aggregates/VectorUDAFStdPopTimestamp.java | 533 -
.../aggregates/VectorUDAFStdSampTimestamp.java | 533 -
.../aggregates/VectorUDAFSumDecimal.java | 39 +-
.../aggregates/VectorUDAFSumTimestamp.java | 434 +
.../aggregates/VectorUDAFVarPopTimestamp.java | 533 -
.../aggregates/VectorUDAFVarSampTimestamp.java | 533 -
.../mapjoin/VectorMapJoinCommonOperator.java | 35 +-
.../VectorMapJoinGenerateResultOperator.java | 6 +-
.../fast/VectorMapJoinFastTableContainer.java | 8 +-
.../VectorMapJoinOptimizedCreateHashTable.java | 6 +-
.../exec/vector/ptf/VectorPTFEvaluatorBase.java | 122 +
.../vector/ptf/VectorPTFEvaluatorCount.java | 108 +
.../vector/ptf/VectorPTFEvaluatorCountStar.java | 79 +
.../ptf/VectorPTFEvaluatorDecimalAvg.java | 162 +
.../VectorPTFEvaluatorDecimalFirstValue.java | 117 +
.../ptf/VectorPTFEvaluatorDecimalLastValue.java | 113 +
.../ptf/VectorPTFEvaluatorDecimalMax.java | 146 +
.../ptf/VectorPTFEvaluatorDecimalMin.java | 146 +
.../ptf/VectorPTFEvaluatorDecimalSum.java | 140 +
.../vector/ptf/VectorPTFEvaluatorDenseRank.java | 77 +
.../vector/ptf/VectorPTFEvaluatorDoubleAvg.java | 153 +
.../ptf/VectorPTFEvaluatorDoubleFirstValue.java | 113 +
.../ptf/VectorPTFEvaluatorDoubleLastValue.java | 109 +
.../vector/ptf/VectorPTFEvaluatorDoubleMax.java | 136 +
.../vector/ptf/VectorPTFEvaluatorDoubleMin.java | 136 +
.../vector/ptf/VectorPTFEvaluatorDoubleSum.java | 134 +
.../vector/ptf/VectorPTFEvaluatorLongAvg.java | 153 +
.../ptf/VectorPTFEvaluatorLongFirstValue.java | 113 +
.../ptf/VectorPTFEvaluatorLongLastValue.java | 109 +
.../vector/ptf/VectorPTFEvaluatorLongMax.java | 136 +
.../vector/ptf/VectorPTFEvaluatorLongMin.java | 136 +
.../vector/ptf/VectorPTFEvaluatorLongSum.java | 134 +
.../exec/vector/ptf/VectorPTFEvaluatorRank.java | 81 +
.../vector/ptf/VectorPTFEvaluatorRowNumber.java | 77 +
.../exec/vector/ptf/VectorPTFGroupBatches.java | 216 +
.../ql/exec/vector/ptf/VectorPTFOperator.java | 570 +
.../ql/exec/vector/udf/VectorUDFAdaptor.java | 171 +-
.../hive/ql/hooks/ExecuteWithHookContext.java | 5 +
.../org/apache/hadoop/hive/ql/hooks/Hook.java | 6 +
.../hadoop/hive/ql/hooks/HookContext.java | 4 +
.../hadoop/hive/ql/hooks/PostExecute.java | 4 +
.../apache/hadoop/hive/ql/hooks/PreExecute.java | 4 +
.../hadoop/hive/ql/hooks/QueryLifeTimeHook.java | 5 +
.../hive/ql/hooks/QueryLifeTimeHookContext.java | 4 +
.../hooks/QueryLifeTimeHookWithParseHooks.java | 5 +
.../hadoop/hive/ql/io/AcidInputFormat.java | 11 +-
.../hadoop/hive/ql/io/AcidOutputFormat.java | 33 +-
.../org/apache/hadoop/hive/ql/io/AcidUtils.java | 152 +-
.../apache/hadoop/hive/ql/io/BucketCodec.java | 128 +
.../hive/ql/io/CombineHiveInputFormat.java | 2 +-
.../org/apache/hadoop/hive/ql/io/HdfsUtils.java | 40 +-
.../hadoop/hive/ql/io/HiveFileFormatUtils.java | 2 +-
.../hadoop/hive/ql/io/HiveInputFormat.java | 106 +-
.../io/LlapCacheOnlyInputFormatInterface.java | 28 +
.../hadoop/hive/ql/io/RecordIdentifier.java | 21 +-
.../hadoop/hive/ql/io/orc/ExternalCache.java | 2 +-
.../hive/ql/io/orc/OrcFileKeyWrapper.java | 36 +-
.../io/orc/OrcFileStripeMergeRecordReader.java | 5 +-
.../hadoop/hive/ql/io/orc/OrcInputFormat.java | 190 +-
.../hadoop/hive/ql/io/orc/OrcOutputFormat.java | 2 +-
.../hive/ql/io/orc/OrcRawRecordMerger.java | 773 +-
.../hadoop/hive/ql/io/orc/OrcRecordUpdater.java | 160 +-
.../apache/hadoop/hive/ql/io/orc/OrcSplit.java | 10 +-
.../io/orc/VectorizedOrcAcidRowBatchReader.java | 207 +-
.../hive/ql/io/orc/encoded/EncodedReader.java | 3 +-
.../ql/io/orc/encoded/EncodedReaderImpl.java | 538 +-
.../hive/ql/io/orc/encoded/IncompleteCb.java | 7 +
.../hadoop/hive/ql/io/orc/encoded/IoTrace.java | 478 +
.../hadoop/hive/ql/io/orc/encoded/Reader.java | 2 +-
.../hive/ql/io/orc/encoded/ReaderImpl.java | 6 +-
.../ql/io/parquet/MapredParquetInputFormat.java | 47 +-
.../io/parquet/MapredParquetOutputFormat.java | 30 +-
.../ql/io/parquet/ParquetRecordReaderBase.java | 54 +-
.../hive/ql/io/parquet/ProjectionPusher.java | 4 +-
.../parquet/VectorizedParquetInputFormat.java | 22 +-
.../ql/io/parquet/convert/ETypeConverter.java | 24 +-
.../hive/ql/io/parquet/convert/Repeated.java | 1 -
.../parquet/read/DataWritableReadSupport.java | 21 +-
.../read/ParquetFilterPredicateConverter.java | 13 +-
.../read/ParquetRecordReaderWrapper.java | 26 +-
.../ql/io/parquet/serde/ParquetTableUtils.java | 31 +-
.../ql/io/parquet/timestamp/NanoTimeUtils.java | 247 +-
.../vector/ParquetFooterInputFromCache.java | 196 +
.../vector/VectorizedParquetRecordReader.java | 202 +-
.../vector/VectorizedPrimitiveColumnReader.java | 21 +-
.../parquet/write/DataWritableWriteSupport.java | 14 +-
.../ql/io/parquet/write/DataWritableWriter.java | 10 +-
.../write/ParquetRecordWriterWrapper.java | 24 +
.../apache/hadoop/hive/ql/lib/RuleRegExp.java | 3 +
.../hadoop/hive/ql/lockmgr/DbTxnManager.java | 18 +-
.../hive/ql/lockmgr/EmbeddedLockManager.java | 22 +-
.../zookeeper/ZooKeeperHiveLockManager.java | 13 +-
.../hadoop/hive/ql/log/LogDivertAppender.java | 15 +-
.../hive/ql/log/LogDivertAppenderForTest.java | 8 +-
.../apache/hadoop/hive/ql/metadata/Hive.java | 174 +-
.../hadoop/hive/ql/metadata/HiveException.java | 38 +-
.../metadata/HiveMaterializedViewsRegistry.java | 9 +-
.../hive/ql/metadata/HiveStorageHandler.java | 4 +
.../metadata/HiveStoragePredicateHandler.java | 6 +
.../hadoop/hive/ql/metadata/InputEstimator.java | 4 +
.../ql/metadata/SessionHiveMetaStoreClient.java | 13 +
.../hadoop/hive/ql/metadata/VirtualColumn.java | 14 +
.../formatting/MetaDataFormatUtils.java | 35 +-
.../BucketingSortingReduceSinkOptimizer.java | 7 +-
.../optimizer/ConstantPropagateProcFactory.java | 6 +-
.../hive/ql/optimizer/ConvertJoinMapJoin.java | 89 +-
.../ql/optimizer/CountDistinctRewriteProc.java | 64 +-
.../DynamicPartitionPruningOptimization.java | 151 +-
.../hive/ql/optimizer/GenMapRedUtils.java | 5 +
.../hive/ql/optimizer/MapJoinProcessor.java | 5 +-
.../ql/optimizer/OperatorComparatorFactory.java | 552 -
.../hadoop/hive/ql/optimizer/Optimizer.java | 4 +-
.../ql/optimizer/ReduceSinkMapJoinProc.java | 6 +-
.../hive/ql/optimizer/SharedScanOptimizer.java | 626 -
.../hive/ql/optimizer/SharedWorkOptimizer.java | 1177 +
.../optimizer/SortedDynPartitionOptimizer.java | 1 +
.../ql/optimizer/SparkRemoveDynamicPruning.java | 80 +
.../SparkRemoveDynamicPruningBySize.java | 65 -
.../hive/ql/optimizer/StatsOptimizer.java | 17 +-
.../ql/optimizer/calcite/HiveCalciteUtil.java | 9 +-
.../calcite/HiveConfPlannerContext.java | 34 +
.../optimizer/calcite/HivePlannerContext.java | 7 +-
.../hive/ql/optimizer/calcite/HiveType.java | 48 +
.../optimizer/calcite/HiveTypeSystemImpl.java | 17 +-
.../ql/optimizer/calcite/RelOptHiveTable.java | 63 +-
.../calcite/cost/HiveAlgorithmsUtil.java | 10 +-
.../calcite/cost/HiveDefaultCostModel.java | 2 +-
.../calcite/cost/HiveOnTezCostModel.java | 35 +-
.../calcite/reloperators/HiveAggregate.java | 13 +-
.../calcite/reloperators/HiveIntersect.java | 10 +
.../calcite/reloperators/HiveJoin.java | 5 +-
.../calcite/reloperators/HiveTableScan.java | 50 +-
.../calcite/reloperators/HiveUnion.java | 9 +
.../rules/HiveAggregateJoinTransposeRule.java | 2 +-
.../calcite/rules/HiveAggregateReduceRule.java | 126 +
.../HiveDruidProjectFilterTransposeRule.java | 48 -
.../rules/HiveExpandDistinctAggregatesRule.java | 3 +-
.../rules/HiveFilterSetOpTransposeRule.java | 98 +-
.../calcite/rules/HiveJoinAddNotNullRule.java | 42 +-
.../HiveJoinPushTransitivePredicatesRule.java | 2 +-
.../rules/HiveReduceExpressionsRule.java | 2 +-
.../HiveReduceExpressionsWithStatsRule.java | 2 +-
.../calcite/rules/HiveRelDecorrelator.java | 306 +-
.../calcite/rules/HiveRelFieldTrimmer.java | 2 +-
.../calcite/rules/HiveRemoveSqCountCheck.java | 142 +
.../calcite/rules/HiveSemiJoinRule.java | 96 +-
.../calcite/rules/HiveSortJoinReduceRule.java | 3 +-
.../rules/HiveSortLimitPullUpConstantsRule.java | 2 +-
.../calcite/rules/HiveSortRemoveRule.java | 2 +-
.../calcite/rules/HiveSortUnionReduceRule.java | 2 +-
.../calcite/rules/HiveSubQueryRemoveRule.java | 620 +-
.../calcite/rules/HiveUnionMergeRule.java | 84 +
.../rules/HiveUnionPullUpConstantsRule.java | 2 +-
.../HiveMaterializedViewFilterScanRule.java | 92 -
.../rules/views/HiveMaterializedViewRule.java | 38 +
.../MaterializedViewSubstitutionVisitor.java | 292 -
.../rules/views/SubstitutionVisitor.java | 2458 -
.../calcite/stats/HiveRelMdSelectivity.java | 33 +-
.../calcite/translator/ASTBuilder.java | 31 +-
.../calcite/translator/ExprNodeConverter.java | 32 +-
.../calcite/translator/RexNodeConverter.java | 65 +-
.../translator/SqlFunctionConverter.java | 7 +-
.../calcite/translator/TypeConverter.java | 17 +-
.../correlation/CorrelationUtilities.java | 51 +-
.../correlation/ReduceSinkDeDuplication.java | 476 +-
.../ReduceSinkDeDuplicationUtils.java | 584 +
.../ReduceSinkJoinDeDuplication.java | 255 +
.../ql/optimizer/lineage/ExprProcFactory.java | 48 +-
.../hive/ql/optimizer/lineage/Generator.java | 27 +
.../ql/optimizer/lineage/OpProcFactory.java | 36 +-
.../hive/ql/optimizer/physical/LlapDecider.java | 2 +-
.../hive/ql/optimizer/physical/Vectorizer.java | 944 +-
.../hive/ql/optimizer/ppr/PartitionPruner.java | 23 +-
.../spark/CombineEquivalentWorkResolver.java | 79 +-
.../spark/SetSparkReducerParallelism.java | 141 +-
.../optimizer/spark/SparkMapJoinOptimizer.java | 50 +
.../spark/SparkPartitionPruningSinkDesc.java | 17 +-
.../stats/annotation/StatsRulesProcFactory.java | 263 +-
.../hadoop/hive/ql/parse/CalcitePlanner.java | 70 +-
.../hadoop/hive/ql/parse/ColumnStatsList.java | 64 +
.../ql/parse/ColumnStatsSemanticAnalyzer.java | 36 +-
.../hive/ql/parse/DDLSemanticAnalyzer.java | 49 +-
.../apache/hadoop/hive/ql/parse/EximUtil.java | 39 +-
.../hive/ql/parse/ExportSemanticAnalyzer.java | 243 +-
.../hive/ql/parse/FunctionSemanticAnalyzer.java | 4 +-
.../hadoop/hive/ql/parse/GenTezUtils.java | 232 +-
.../org/apache/hadoop/hive/ql/parse/HiveLexer.g | 2 +-
.../apache/hadoop/hive/ql/parse/HiveParser.g | 19 +-
.../hive/ql/parse/HiveSemanticAnalyzerHook.java | 4 +
.../parse/HiveSemanticAnalyzerHookContext.java | 9 +
.../HiveSemanticAnalyzerHookContextImpl.java | 12 +
.../hive/ql/parse/ImportSemanticAnalyzer.java | 177 +-
.../hive/ql/parse/LoadSemanticAnalyzer.java | 5 +
.../hadoop/hive/ql/parse/ParseContext.java | 30 +-
.../hive/ql/parse/PrunedPartitionList.java | 21 +-
.../apache/hadoop/hive/ql/parse/QBSubQuery.java | 23 +-
.../ql/parse/ReplicationSemanticAnalyzer.java | 782 +-
.../hadoop/hive/ql/parse/ReplicationSpec.java | 146 +-
.../hadoop/hive/ql/parse/SemanticAnalyzer.java | 158 +-
.../hive/ql/parse/SemanticAnalyzerFactory.java | 8 +-
.../hadoop/hive/ql/parse/SemanticException.java | 5 +-
.../hadoop/hive/ql/parse/SemiJoinHint.java | 13 +-
.../hadoop/hive/ql/parse/TezCompiler.java | 85 +-
.../hive/ql/parse/TypeCheckProcFactory.java | 21 +-
.../ql/parse/UpdateDeleteSemanticAnalyzer.java | 10 +-
.../hadoop/hive/ql/parse/repl/CopyUtils.java | 136 +
.../hadoop/hive/ql/parse/repl/DumpType.java | 35 +
.../hadoop/hive/ql/parse/repl/ReplLogger.java | 36 +
.../hadoop/hive/ql/parse/repl/ReplState.java | 57 +
.../dump/BootStrapReplicationSpecFunction.java | 5 +-
.../hive/ql/parse/repl/dump/HiveWrapper.java | 2 +-
.../ql/parse/repl/dump/PartitionExport.java | 119 +
.../hive/ql/parse/repl/dump/TableExport.java | 274 +
.../hadoop/hive/ql/parse/repl/dump/Utils.java | 32 +
.../repl/dump/events/AddForeignKeyHandler.java | 41 +
.../events/AddNotNullConstraintHandler.java | 41 +
.../repl/dump/events/AddPartitionHandler.java | 3 +-
.../repl/dump/events/AddPrimaryKeyHandler.java | 41 +
.../dump/events/AddUniqueConstraintHandler.java | 41 +
.../repl/dump/events/CreateTableHandler.java | 8 +-
.../repl/dump/events/DropConstraintHandler.java | 41 +
.../repl/dump/events/EventHandlerFactory.java | 5 +
.../ql/parse/repl/dump/io/FileOperations.java | 112 +
.../parse/repl/dump/io/FunctionSerializer.java | 2 +-
.../parse/repl/dump/io/PartitionSerializer.java | 11 +-
.../ql/parse/repl/dump/io/TableSerializer.java | 22 +-
.../repl/dump/log/BootstrapDumpLogger.java | 71 +
.../repl/dump/log/IncrementalDumpLogger.java | 55 +
.../repl/dump/log/state/BootstrapDumpBegin.java | 47 +
.../repl/dump/log/state/BootstrapDumpEnd.java | 59 +
.../dump/log/state/BootstrapDumpFunction.java | 44 +
.../repl/dump/log/state/BootstrapDumpTable.java | 52 +
.../dump/log/state/IncrementalDumpBegin.java | 43 +
.../repl/dump/log/state/IncrementalDumpEnd.java | 54 +
.../dump/log/state/IncrementalDumpEvent.java | 51 +
.../hive/ql/parse/repl/load/DumpMetaData.java | 11 +-
.../parse/repl/load/EventDumpDirComparator.java | 38 +
.../parse/repl/load/UpdatedMetaDataTracker.java | 76 +
.../repl/load/log/BootstrapLoadLogger.java | 66 +
.../repl/load/log/IncrementalLoadLogger.java | 55 +
.../repl/load/log/state/BootstrapLoadBegin.java | 51 +
.../repl/load/log/state/BootstrapLoadEnd.java | 59 +
.../load/log/state/BootstrapLoadFunction.java | 44 +
.../repl/load/log/state/BootstrapLoadTable.java | 52 +
.../load/log/state/IncrementalLoadBegin.java | 47 +
.../repl/load/log/state/IncrementalLoadEnd.java | 54 +
.../load/log/state/IncrementalLoadEvent.java | 51 +
.../load/message/AbstractMessageHandler.java | 25 +-
.../repl/load/message/AddForeignKeyHandler.java | 70 +
.../message/AddNotNullConstraintHandler.java | 71 +
.../repl/load/message/AddPrimaryKeyHandler.java | 68 +
.../message/AddUniqueConstraintHandler.java | 69 +
.../load/message/CreateFunctionHandler.java | 20 +-
.../load/message/DropConstraintHandler.java | 50 +
.../repl/load/message/DropFunctionHandler.java | 5 +-
.../repl/load/message/DropPartitionHandler.java | 5 +-
.../repl/load/message/DropTableHandler.java | 5 +-
.../parse/repl/load/message/InsertHandler.java | 3 +-
.../parse/repl/load/message/MessageHandler.java | 21 +-
.../load/message/RenamePartitionHandler.java | 15 +-
.../repl/load/message/RenameTableHandler.java | 24 +-
.../parse/repl/load/message/TableHandler.java | 23 +-
.../load/message/TruncatePartitionHandler.java | 11 +-
.../repl/load/message/TruncateTableHandler.java | 8 +-
.../ql/parse/spark/GenSparkProcContext.java | 5 +
.../hive/ql/parse/spark/GenSparkUtils.java | 124 +-
.../hive/ql/parse/spark/GenSparkWork.java | 2 +-
.../hive/ql/parse/spark/SparkCompiler.java | 32 +-
.../SparkPartitionPruningSinkOperator.java | 51 +-
.../parse/spark/SparkProcessAnalyzeTable.java | 17 +-
.../hive/ql/parse/spark/SplitOpTreeForDPP.java | 131 +-
.../hive/ql/plan/AbstractOperatorDesc.java | 9 +
.../hadoop/hive/ql/plan/AlterDatabaseDesc.java | 37 +-
.../hadoop/hive/ql/plan/AlterTableDesc.java | 48 +-
.../hadoop/hive/ql/plan/AppMasterEventDesc.java | 12 +
.../hadoop/hive/ql/plan/ColStatistics.java | 3 -
.../hive/ql/plan/CommonMergeJoinDesc.java | 9 +
.../ql/plan/ConditionalResolverMergeFiles.java | 11 +-
.../hadoop/hive/ql/plan/CreateFunctionDesc.java | 15 +-
.../hadoop/hive/ql/plan/DescTableDesc.java | 4 +-
.../hadoop/hive/ql/plan/DropFunctionDesc.java | 16 +-
.../hive/ql/plan/DynamicPruningEventDesc.java | 24 +
.../hadoop/hive/ql/plan/DynamicValue.java | 4 +
.../hadoop/hive/ql/plan/ExprNodeDescUtils.java | 21 +
.../hadoop/hive/ql/plan/FileSinkDesc.java | 29 +
.../apache/hadoop/hive/ql/plan/FilterDesc.java | 12 +
.../apache/hadoop/hive/ql/plan/GroupByDesc.java | 82 +-
.../hadoop/hive/ql/plan/HashTableSinkDesc.java | 10 +
.../hadoop/hive/ql/plan/HiveOperation.java | 4 +
.../hadoop/hive/ql/plan/ImportTableDesc.java | 71 +-
.../apache/hadoop/hive/ql/plan/JoinDesc.java | 15 +
.../hive/ql/plan/LateralViewJoinDesc.java | 11 +
.../apache/hadoop/hive/ql/plan/LimitDesc.java | 9 +
.../apache/hadoop/hive/ql/plan/MapJoinDesc.java | 19 +-
.../org/apache/hadoop/hive/ql/plan/MapWork.java | 49 +-
.../hadoop/hive/ql/plan/OperatorDesc.java | 1 +
.../org/apache/hadoop/hive/ql/plan/PTFDesc.java | 112 +
.../hadoop/hive/ql/plan/ReduceSinkDesc.java | 25 +
.../hive/ql/plan/RenamePartitionDesc.java | 22 +-
.../hadoop/hive/ql/plan/ReplCopyWork.java | 82 +-
.../apache/hadoop/hive/ql/plan/ScriptDesc.java | 11 +
.../apache/hadoop/hive/ql/plan/SelectDesc.java | 12 +
.../apache/hadoop/hive/ql/plan/Statistics.java | 23 +-
.../hadoop/hive/ql/plan/TableScanDesc.java | 26 +
.../hadoop/hive/ql/plan/TezEdgeProperty.java | 7 +-
.../hadoop/hive/ql/plan/TruncateTableDesc.java | 11 +-
.../apache/hadoop/hive/ql/plan/UDTFDesc.java | 12 +
.../hadoop/hive/ql/plan/VectorGroupByDesc.java | 18 +
.../hadoop/hive/ql/plan/VectorMapJoinDesc.java | 24 +-
.../hadoop/hive/ql/plan/VectorPTFDesc.java | 360 +
.../hadoop/hive/ql/plan/VectorPTFInfo.java | 161 +
.../hadoop/hive/ql/plan/ptf/WindowFrameDef.java | 6 +-
.../hive/ql/ppd/SyntheticJoinPredicate.java | 2 +-
.../hadoop/hive/ql/processors/DfsProcessor.java | 60 +-
.../hadoop/hive/ql/processors/SetProcessor.java | 11 +
.../AuthorizationPreEventListener.java | 19 +
.../authorization/plugin/HiveOperationType.java | 4 +
.../plugin/sqlstd/Operation2Privilege.java | 31 +
.../sqlstd/SQLStdHiveAccessController.java | 3 +-
.../SQLStdHiveAuthorizationValidator.java | 9 +
.../hadoop/hive/ql/session/LineageState.java | 14 +
.../hadoop/hive/ql/session/OperationLog.java | 6 +-
.../hive/ql/stats/ClientStatsPublisher.java | 6 +
.../hadoop/hive/ql/stats/StatsAggregator.java | 6 +-
.../hive/ql/stats/StatsCollectionContext.java | 5 +
.../hadoop/hive/ql/stats/StatsPublisher.java | 6 +-
.../apache/hadoop/hive/ql/stats/StatsUtils.java | 289 +-
.../hive/ql/txn/compactor/CompactorMR.java | 14 +-
.../apache/hadoop/hive/ql/udf/UDFToBoolean.java | 2 +-
.../apache/hadoop/hive/ql/udf/UDFToInteger.java | 5 +-
.../apache/hadoop/hive/ql/udf/UDFToString.java | 4 +-
.../generic/AbstractGenericUDAFResolver.java | 1 +
.../hadoop/hive/ql/udf/generic/Collector.java | 4 +
.../DecimalNumDistinctValueEstimator.java | 42 -
.../DoubleNumDistinctValueEstimator.java | 39 -
.../hive/ql/udf/generic/GenericUDAFAverage.java | 10 +-
.../ql/udf/generic/GenericUDAFBloomFilter.java | 32 +-
.../ql/udf/generic/GenericUDAFComputeStats.java | 381 +-
.../ql/udf/generic/GenericUDAFEvaluator.java | 8 +
.../GenericUDAFMkCollectionEvaluator.java | 2 +-
.../udf/generic/GenericUDAFParameterInfo.java | 4 +
.../ql/udf/generic/GenericUDAFResolver2.java | 1 +
.../ql/udf/generic/GenericUDAFStdSample.java | 13 +-
.../hive/ql/udf/generic/GenericUDAFSum.java | 25 +-
.../udf/generic/GenericUDAFVarianceSample.java | 13 +-
.../hadoop/hive/ql/udf/generic/GenericUDF.java | 12 +-
.../hive/ql/udf/generic/GenericUDFDate.java | 4 +-
.../ql/udf/generic/GenericUDFInBloomFilter.java | 16 +-
.../hive/ql/udf/generic/GenericUDFLeadLag.java | 4 +-
.../ql/udf/generic/GenericUDFTimestamp.java | 3 +-
.../generic/GenericUDFToTimestampLocalTZ.java | 113 +
.../ql/udf/generic/GenericUDFToTimestampTZ.java | 89 -
.../hadoop/hive/ql/udf/generic/GenericUDTF.java | 5 +-
.../ql/udf/generic/GenericUDTFGetSplits.java | 20 +-
.../generic/LongNumDistinctValueEstimator.java | 43 -
.../udf/generic/NumDistinctValueEstimator.java | 383 -
.../StringNumDistinctValueEstimator.java | 39 -
.../apache/hadoop/hive/ql/TestTxnCommands.java | 250 +-
.../apache/hadoop/hive/ql/TestTxnCommands2.java | 553 +-
.../ql/TestTxnCommands2WithSplitUpdate.java | 586 -
...ommands2WithSplitUpdateAndVectorization.java | 4 +-
.../hadoop/hive/ql/TestTxnCommandsBase.java | 162 +
.../apache/hadoop/hive/ql/TestTxnNoBuckets.java | 297 +
.../hive/ql/exec/TestKeyWrapperFactory.java | 113 +
.../hadoop/hive/ql/exec/TestUtilities.java | 224 +
.../ql/exec/persistence/TestRowContainer.java | 75 +
.../repl/bootstrap/load/TaskTrackerTest.java | 46 +
.../hive/ql/exec/spark/TestSparkTask.java | 49 +
.../hive/ql/exec/tez/SampleTezSessionState.java | 3 +-
.../hadoop/hive/ql/exec/tez/TestDagUtils.java | 69 +
.../hive/ql/exec/tez/TestTezSessionPool.java | 46 +-
.../hadoop/hive/ql/exec/tez/TestTezTask.java | 6 +-
.../hive/ql/exec/util/DescriptionTest.java | 31 +
.../CollectorTestOperator.java | 47 +
.../CountCollectorTestOperator.java | 48 +
.../CountVectorCollectorTestOperator.java | 47 +
.../RowCollectorTestOperator.java | 52 +
.../RowCollectorTestOperatorBase.java | 32 +
.../RowVectorCollectorTestOperator.java | 63 +
.../ql/exec/util/rowobjects/RowTestObjects.java | 100 +
.../exec/util/rowobjects/RowTestObjectsMap.java | 77 +
.../util/rowobjects/RowTestObjectsMultiSet.java | 91 +
.../exec/vector/TestVectorGroupByOperator.java | 2 +-
.../exec/vector/TestVectorSelectOperator.java | 3 +-
.../expressions/TestVectorMathFunctions.java | 22 +
.../vector/expressions/TestVectorTypeCasts.java | 16 +
.../exec/vector/mapjoin/MapJoinTestConfig.java | 658 +
.../ql/exec/vector/mapjoin/MapJoinTestData.java | 272 +
.../vector/mapjoin/MapJoinTestDescription.java | 239 +
.../vector/mapjoin/TestMapJoinOperator.java | 549 +
.../util/batchgen/TestVectorBatchGenerate.java | 57 +
.../batchgen/VectorBatchGenerateStream.java | 63 +
.../util/batchgen/VectorBatchGenerateUtil.java | 92 +
.../util/batchgen/VectorBatchGenerator.java | 306 +
.../batchgen/VectorColumnGroupGenerator.java | 494 +
.../apache/hadoop/hive/ql/io/TestAcidUtils.java | 64 +-
.../hive/ql/io/orc/TestInputOutputFormat.java | 772 +-
.../hive/ql/io/orc/TestOrcRawRecordMerger.java | 745 +-
.../hive/ql/io/orc/TestOrcRecordUpdater.java | 51 +-
.../TestVectorizedOrcAcidRowBatchReader.java | 8 +-
.../io/orc/encoded/TestEncodedReaderImpl.java | 14 +-
.../io/parquet/AbstractTestParquetDirect.java | 7 +-
.../ql/io/parquet/TestDataWritableWriter.java | 65 +-
.../parquet/TestMapredParquetOutputFormat.java | 10 -
.../io/parquet/TestParquetRowGroupFilter.java | 3 -
.../io/parquet/TestVectorizedColumnReader.java | 2 +-
.../parquet/VectorizedColumnReaderTestBase.java | 16 +-
.../io/parquet/convert/TestETypeConverter.java | 124 -
.../read/TestParquetFilterPredicate.java | 56 +-
.../serde/TestParquetTimestampUtils.java | 263 +
.../io/parquet/timestamp/TestNanoTimeUtils.java | 256 -
.../TestParquetTimestampConverter.java | 264 -
.../hive/ql/lockmgr/TestDbTxnManager2.java | 6 -
...TestGenMapRedUtilsCreateConditionalTask.java | 2 +
.../calcite/TestCBORuleFiredOnlyOnce.java | 2 +-
.../ql/optimizer/physical/TestVectorizer.java | 10 +-
.../parse/TestReplicationSemanticAnalyzer.java | 71 +-
.../hive/ql/parse/repl/CopyUtilsTest.java | 47 +
.../repl/load/TestEventDumpDirComparator.java | 44 +
.../PrimaryToReplicaResourceFunctionTest.java | 18 +
.../processors/TestCommandProcessorFactory.java | 2 +
.../hive/ql/txn/compactor/CompactorTest.java | 8 +
.../hive/ql/txn/compactor/TestWorker.java | 125 +-
.../queries/clientnegative/acid_overwrite.q | 8 -
.../alter_table_non_partitioned_table_cascade.q | 4 +
.../queries/clientnegative/create_not_acid.q | 2 +-
.../clientnegative/load_data_into_acid.q | 22 +
.../parquet_alter_part_table_drop_columns.q | 22 +
.../parquet_int96_alter_invalid_timezone.q | 5 -
.../parquet_int96_create_invalid_timezone.q | 3 -
.../clientnegative/repl_dump_requires_admin.q | 38 +
.../clientnegative/repl_load_requires_admin.q | 41 +
.../subquery_scalar_implicit_gby.q | 1 -
.../clientpositive/acid_bucket_pruning.q | 8 +-
.../clientpositive/acid_insert_overwrite.q | 73 +
.../queries/clientpositive/acid_no_buckets.q | 210 +
.../alter_partition_onto_nocurrent_db.q | 15 +
...lter_table_update_status_disable_bitvector.q | 139 +
.../clientpositive/authorization_view_8.q | 23 +
ql/src/test/queries/clientpositive/bitvector.q | 3 +
.../clientpositive/bucket_num_reducers_acid.q | 30 +
.../clientpositive/bucket_num_reducers_acid2.q | 33 +
ql/src/test/queries/clientpositive/char_udf1.q | 4 +-
.../queries/clientpositive/cmdwithcomments.q | 2 +
.../queries/clientpositive/compute_stats_date.q | 2 +-
.../clientpositive/compute_stats_decimal.q | 2 +-
.../clientpositive/compute_stats_double.q | 2 +-
.../queries/clientpositive/compute_stats_long.q | 2 +-
.../clientpositive/compute_stats_string.q | 2 +-
ql/src/test/queries/clientpositive/concat_op.q | 8 +-
.../queries/clientpositive/constprog_semijoin.q | 2 +
.../clientpositive/correlationoptimizer14.q | 1 +
.../queries/clientpositive/count_dist_rewrite.q | 2 +
ql/src/test/queries/clientpositive/dfscmd.q | 7 +
.../clientpositive/dynamic_semijoin_reduction.q | 22 +-
.../dynamic_semijoin_reduction_3.q | 2 +-
.../dynamic_semijoin_reduction_sw.q | 60 +
.../clientpositive/explaindenpendencydiffengs.q | 10 +
.../test/queries/clientpositive/filter_union.q | 56 +
ql/src/test/queries/clientpositive/fm-sketch.q | 58 +
.../clientpositive/groupby_distinct_samekey.q | 1 +
ql/src/test/queries/clientpositive/hll.q | 57 +
ql/src/test/queries/clientpositive/innerjoin1.q | 19 +
ql/src/test/queries/clientpositive/input20.q | 8 +-
ql/src/test/queries/clientpositive/input33.q | 8 +-
.../test/queries/clientpositive/input3_limit.q | 6 +-
.../queries/clientpositive/insert_orig_table.q | 20 +-
.../clientpositive/insert_overwrite_directory.q | 4 +-
.../clientpositive/insert_values_orig_table.q | 20 +-
.../insert_values_orig_table_use_metadata.q | 23 +-
.../test/queries/clientpositive/jdbc_handler.q | 7 +-
ql/src/test/queries/clientpositive/join47.q | 204 +
.../queries/clientpositive/join_max_hashtable.q | 13 +
ql/src/test/queries/clientpositive/llap_smb.q | 53 +
.../test/queries/clientpositive/localtimezone.q | 95 +
ql/src/test/queries/clientpositive/mapjoin47.q | 206 +
.../clientpositive/materialized_view_create.q | 6 +
.../materialized_view_create_rewrite.q | 2 +
ql/src/test/queries/clientpositive/mm_all.q | 45 -
.../test/queries/clientpositive/mm_loaddata.q | 53 +
.../queries/clientpositive/orc_empty_table.q | 11 +
.../clientpositive/orc_merge_incompat_schema.q | 47 +
.../orc_merge_incompat_writer_version.q | 30 +
.../clientpositive/parquet_int96_timestamp.q | 85 -
.../clientpositive/parquet_no_row_serde.q | 25 +
.../clientpositive/parquet_ppd_decimal.q | 1 +
.../clientpositive/parquet_predicate_pushdown.q | 1 +
.../parquet_predicate_pushdown_2.q | 7 +
.../parquet_timestamp_conversion.q | 13 -
.../test/queries/clientpositive/parquet_types.q | 1 +
.../parquet_types_vectorization.q | 1 +
ql/src/test/queries/clientpositive/partialdhj.q | 54 +
.../test/queries/clientpositive/perf/query11.q | 77 +
.../test/queries/clientpositive/perf/query28.q | 2 +
ql/src/test/queries/clientpositive/ppd2.q | 2 +
.../queries/clientpositive/ppd_join_filter.q | 2 +
.../reduceSinkDeDuplication_pRS_key_empty.q | 10 +-
.../reduce_deduplicate_extended.q | 1 +
.../test/queries/clientpositive/semijoin_hint.q | 32 +-
.../clientpositive/set_processor_namespaces.q | 8 +
ql/src/test/queries/clientpositive/skewjoin.q | 1 +
.../queries/clientpositive/smb_mapjoin_20.q | 13 +
.../queries/clientpositive/smb_mapjoin_47.q | 211 +
.../clientpositive/spark_constprog_dpp.q | 17 +
.../spark_dynamic_partition_pruning.q | 56 +-
.../spark_dynamic_partition_pruning_2.q | 16 +
.../spark_dynamic_partition_pruning_3.q | 228 +
...ark_dynamic_partition_pruning_mapjoin_only.q | 50 +
.../spark_explain_groupbyshuffle.q | 8 +
.../spark_multi_insert_parallel_orderby.q | 67 +
.../queries/clientpositive/spark_union_merge.q | 41 +
.../spark_use_ts_stats_for_mapjoin.q | 1 +
...spark_vectorized_dynamic_partition_pruning.q | 2 +-
.../test/queries/clientpositive/subquery_in.q | 50 +-
.../queries/clientpositive/subquery_scalar.q | 49 +
ql/src/test/queries/clientpositive/sysdb.q | 12 +-
.../test/queries/clientpositive/timestamptz.q | 16 +-
.../test/queries/clientpositive/timestamptz_1.q | 4 +-
.../test/queries/clientpositive/timestamptz_2.q | 3 +-
.../clientpositive/truncate_column_buckets.q | 4 +-
.../queries/clientpositive/udf_stddev_samp.q | 9 +
.../test/queries/clientpositive/udf_var_samp.q | 9 +
.../test/queries/clientpositive/varchar_udf1.q | 4 +-
.../queries/clientpositive/vector_aggregate_9.q | 16 +-
.../clientpositive/vector_between_columns.q | 1 +
.../queries/clientpositive/vector_complex_all.q | 41 +
.../clientpositive/vector_groupby_cube1.q | 17 +-
.../vector_groupby_grouping_id1.q | 21 +
.../vector_groupby_grouping_id2.q | 52 +
.../vector_groupby_grouping_window.q | 1 +
.../clientpositive/vector_groupby_reduce.q | 73 +-
.../vector_outer_reference_windowed.q | 91 +
.../clientpositive/vector_ptf_part_simple.q | 240 +-
.../clientpositive/vector_tablesample_rows.q | 8 +-
.../test/queries/clientpositive/vector_udf1.q | 74 +-
.../queries/clientpositive/vector_windowing.q | 791 +
.../vector_windowing_expressions.q | 94 +
.../clientpositive/vector_windowing_gby.q | 21 +
.../clientpositive/vector_windowing_gby2.q | 48 +
.../vector_windowing_multipartitioning.q | 73 +
.../clientpositive/vector_windowing_navfn.q | 2 +
.../vector_windowing_order_null.q | 58 +
.../vector_windowing_range_multiorder.q | 68 +
.../clientpositive/vector_windowing_rank.q | 117 +
.../clientpositive/vector_windowing_streaming.q | 85 +
.../vector_windowing_windowspec.q | 70 +
.../vector_windowing_windowspec4.q | 37 +
.../queries/clientpositive/vectorization_0.q | 15 +-
.../queries/clientpositive/vectorization_1.q | 22 +
.../queries/clientpositive/vectorization_10.q | 24 +
.../queries/clientpositive/vectorization_11.q | 15 +
.../queries/clientpositive/vectorization_12.q | 32 +
.../queries/clientpositive/vectorization_13.q | 2 +-
.../queries/clientpositive/vectorization_14.q | 2 +-
.../queries/clientpositive/vectorization_15.q | 5 +-
.../queries/clientpositive/vectorization_16.q | 2 +-
.../queries/clientpositive/vectorization_17.q | 2 +-
.../queries/clientpositive/vectorization_2.q | 23 +
.../queries/clientpositive/vectorization_3.q | 25 +
.../queries/clientpositive/vectorization_4.q | 23 +
.../queries/clientpositive/vectorization_5.q | 20 +
.../queries/clientpositive/vectorization_6.q | 21 +
.../queries/clientpositive/vectorization_7.q | 2 +-
.../queries/clientpositive/vectorization_8.q | 2 +-
.../queries/clientpositive/vectorization_9.q | 2 +-
.../queries/clientpositive/vectorized_casts.q | 4 +-
.../clientpositive/vectorized_distinct_gby.q | 7 +-
.../vectorized_multi_output_select.q | 28 +
.../queries/clientpositive/vectorized_parquet.q | 4 +
.../clientpositive/vectorized_parquet_types.q | 1 +
.../queries/clientpositive/vectorized_ptf.q | 1 +
.../clientpositive/vectorized_timestamp.q | 27 +-
.../results/clientnegative/acid_overwrite.q.out | 19 -
...er_table_non_partitioned_table_cascade.q.out | 21 +
.../authorization_uri_export.q.out | 1 +
.../clientnegative/create_not_acid.q.out | 4 +-
.../clientnegative/delete_non_acid_table.q.out | 2 +-
.../results/clientnegative/dyn_part_max.q.out | 1 -
.../clientnegative/load_data_into_acid.q.out | 33 +
.../parquet_alter_part_table_drop_columns.q.out | 53 +
.../parquet_int96_alter_invalid_timezone.q.out | 13 -
.../parquet_int96_create_invalid_timezone.q.out | 5 -
.../repl_dump_requires_admin.q.out | 69 +
.../repl_load_requires_admin.q.out | 80 +
.../set_hiveconf_internal_variable0.q.out | 2 +-
.../set_hiveconf_internal_variable1.q.out | 2 +-
.../subquery_scalar_implicit_gby.q.out | 1 -
.../clientnegative/update_non_acid_table.q.out | 2 +-
.../clientpositive/acid_insert_overwrite.q.out | 395 +
.../clientpositive/acid_table_stats.q.out | 14 +-
.../clientpositive/alterColumnStats.q.out | 16 +-
.../clientpositive/alterColumnStatsPart.q.out | 6 +-
.../alter_partition_onto_nocurrent_db.q.out | 78 +
.../alter_partition_update_status.q.out | 30 +-
.../alter_table_column_stats.q.out | 672 +-
.../alter_table_update_status.q.out | 384 +-
..._table_update_status_disable_bitvector.q.out | 708 +
.../clientpositive/analyze_tbl_part.q.out | 18 +-
.../annotate_stats_deep_filters.q.out | 4 +-
.../clientpositive/annotate_stats_groupby.q.out | 10 +-
.../clientpositive/annotate_stats_join.q.out | 44 +-
.../annotate_stats_join_pkfk.q.out | 28 +-
.../clientpositive/annotate_stats_select.q.out | 4 +-
.../clientpositive/autoColumnStats_4.q.out | 16 +-
.../clientpositive/autoColumnStats_5.q.out | 50 +-
.../clientpositive/autoColumnStats_6.q.out | 6 +-
.../clientpositive/autoColumnStats_7.q.out | 12 +-
.../clientpositive/autoColumnStats_8.q.out | 22 +-
.../clientpositive/autoColumnStats_9.q.out | 32 +-
.../results/clientpositive/auto_join0.q.out | 109 +-
.../results/clientpositive/auto_join12.q.out | 22 +-
.../results/clientpositive/auto_join15.q.out | 47 +-
.../results/clientpositive/auto_join16.q.out | 16 +-
.../results/clientpositive/auto_join20.q.out | 94 +-
.../results/clientpositive/auto_join26.q.out | 8 +-
.../results/clientpositive/auto_join27.q.out | 8 +-
.../results/clientpositive/auto_join31.q.out | 286 +-
.../results/clientpositive/auto_join4.q.out | 6 +-
.../results/clientpositive/auto_join5.q.out | 6 +-
.../results/clientpositive/auto_join8.q.out | 6 +-
.../auto_join_without_localtask.q.out | 74 +-
.../results/clientpositive/avro_decimal.q.out | 8 +-
.../clientpositive/avro_decimal_native.q.out | 8 +-
.../materialized_view_create_rewrite.q.out | 8 +
.../clientpositive/beeline/smb_mapjoin_12.q.out | 75 +-
.../test/results/clientpositive/bitvector.q.out | 10 +
.../bucket_num_reducers_acid.q.out | 33 +
.../bucket_num_reducers_acid2.q.out | 44 +
.../bucketsortoptimize_insert_8.q.out | 342 +-
.../cbo_rp_annotate_stats_groupby.q.out | 10 +-
.../clientpositive/cbo_rp_auto_join0.q.out | 98 +-
.../clientpositive/cbo_rp_auto_join1.q.out | 18 +-
.../results/clientpositive/cbo_rp_join0.q.out | 12 +-
.../clientpositive/cbo_rp_outer_join_ppr.q.out | 44 +-
.../test/results/clientpositive/char_udf1.q.out | 10 +-
.../clientpositive/cmdwithcomments.q.out | 17 +-
.../clientpositive/colstats_all_nulls.q.out | 16 +-
...names_with_leading_and_trailing_spaces.q.out | 16 +-
.../column_pruner_multiple_children.q.out | 22 +-
.../clientpositive/columnstats_partlvl.q.out | 92 +-
.../clientpositive/columnstats_partlvl_dp.q.out | 84 +-
.../clientpositive/columnstats_quoting.q.out | 24 +-
.../clientpositive/columnstats_tbllvl.q.out | 144 +-
.../test/results/clientpositive/combine2.q.out | 6 +-
.../results/clientpositive/compustat_avro.q.out | 16 +-
.../clientpositive/compute_stats_date.q.out | 34 +-
.../clientpositive/compute_stats_decimal.q.out | Bin 1633 -> 1512 bytes
.../clientpositive/compute_stats_double.q.out | Bin 1539 -> 1443 bytes
.../compute_stats_empty_table.q.out | 6 +-
.../clientpositive/compute_stats_long.q.out | Bin 1498 -> 1376 bytes
.../clientpositive/compute_stats_string.q.out | Bin 1517 -> 1448 bytes
.../test/results/clientpositive/concat_op.q.out | 24 +-
.../confirm_initial_tbl_stats.q.out | 86 +-
.../test/results/clientpositive/constGby.q.out | 2 +-
.../clientpositive/constant_prop_2.q.out | 6 +-
.../clientpositive/constantfolding.q.out | 4 +-
.../clientpositive/constprog_partitioner.q.out | 10 +-
.../clientpositive/correlated_join_keys.q.out | 10 +-
.../clientpositive/correlationoptimizer10.q.out | 4 +-
.../clientpositive/correlationoptimizer11.q.out | 8 +-
.../clientpositive/correlationoptimizer12.q.out | 4 +-
.../clientpositive/correlationoptimizer13.q.out | 32 +-
.../clientpositive/correlationoptimizer15.q.out | 4 +-
.../clientpositive/correlationoptimizer7.q.out | 24 +-
.../clientpositive/correlationoptimizer8.q.out | 252 +-
.../clientpositive/correlationoptimizer9.q.out | 156 +-
.../clientpositive/count_dist_rewrite.q.out | 12 +-
.../results/clientpositive/create_view.q.out | 4 +-
.../clientpositive/cross_join_merge.q.out | 80 +-
.../results/clientpositive/ctas_colname.q.out | 4 +-
.../results/clientpositive/decimal_stats.q.out | 8 +-
.../results/clientpositive/decimal_udf.q.out | 24 +-
.../results/clientpositive/deleteAnalyze.q.out | 8 +-
.../clientpositive/describe_syntax.q.out | 24 +-
.../results/clientpositive/describe_table.q.out | 32 +-
ql/src/test/results/clientpositive/dfscmd.q.out | 1 +
.../display_colstats_tbllvl.q.out | 128 +-
.../clientpositive/distinct_windowing.q.out | 8 +-
.../distinct_windowing_no_cbo.q.out | 12 +-
.../results/clientpositive/druid_basic2.q.out | 103 +-
.../clientpositive/druid_intervals.q.out | 130 +-
.../clientpositive/druid_timeseries.q.out | 6 +-
.../results/clientpositive/druid_topn.q.out | 268 +-
.../clientpositive/dynamic_rdd_cache.q.out | 1431 -
.../dynpart_sort_optimization_acid.q.out | 1475 -
.../encrypted/encryption_move_tbl.q.out | 36 +-
.../results/clientpositive/except_all.q.out | 48 +-
.../exec_parallel_column_stats.q.out | 12 +-
.../clientpositive/explain_logical.q.out | 32 +-
.../explaindenpendencydiffengs.q.out | 52 +
.../extrapolate_part_stats_full.q.out | 6 +-
.../extrapolate_part_stats_partial.q.out | 20 +-
.../results/clientpositive/filter_aggr.q.out | 228 +-
.../results/clientpositive/filter_union.q.out | 593 +
.../test/results/clientpositive/fm-sketch.q.out | 323 +
.../test/results/clientpositive/fold_case.q.out | 14 +-
.../clientpositive/fouter_join_ppr.q.out | 84 +-
.../results/clientpositive/groupby4_map.q.out | 4 +-
.../clientpositive/groupby4_map_skew.q.out | 4 +-
.../results/clientpositive/groupby_cube1.q.out | 20 +-
.../groupby_distinct_samekey.q.out | 45 +-
.../groupby_grouping_window.q.out | 2 +-
.../clientpositive/groupby_position.q.out | 56 +-
.../clientpositive/groupby_rollup1.q.out | 12 +-
.../clientpositive/groupby_sort_11.q.out | 18 +-
.../clientpositive/groupby_sort_1_23.q.out | 254 +-
.../results/clientpositive/groupby_sort_2.q.out | 6 +-
.../results/clientpositive/groupby_sort_3.q.out | 12 +-
.../results/clientpositive/groupby_sort_4.q.out | 12 +-
.../results/clientpositive/groupby_sort_5.q.out | 18 +-
.../results/clientpositive/groupby_sort_6.q.out | 20 +-
.../results/clientpositive/groupby_sort_7.q.out | 6 +-
.../results/clientpositive/groupby_sort_9.q.out | 6 +-
.../clientpositive/groupby_sort_skew_1_23.q.out | 254 +-
.../clientpositive/groupby_sort_test_1.q.out | 6 +-
ql/src/test/results/clientpositive/hll.q.out | 323 +
.../identity_project_remove_skip.q.out | 189 +-
.../clientpositive/index_auto_mult_tables.q.out | 52 +-
.../index_auto_mult_tables_compact.q.out | 52 +-
.../clientpositive/infer_bucket_sort.q.out | 4 +-
.../infer_bucket_sort_grouping_operators.q.out | 18 +-
.../results/clientpositive/innerjoin1.q.out | 214 +
.../test/results/clientpositive/input20.q.out | 21 +-
.../test/results/clientpositive/input30.q.out | 6 +-
.../test/results/clientpositive/input31.q.out | 4 +-
.../test/results/clientpositive/input32.q.out | 4 +-
.../test/results/clientpositive/input33.q.out | 21 +-
.../test/results/clientpositive/input39.q.out | 2 +-
.../results/clientpositive/input3_limit.q.out | 44 +-
.../test/results/clientpositive/input41.q.out | 2 +-
.../clientpositive/insert_orig_table.q.out | 68 +-
.../insert_overwrite_directory.q.out | 8 +-
.../insert_values_orig_table.q.out | 68 +-
.../insert_values_orig_table_use_metadata.q.out | 116 +-
ql/src/test/results/clientpositive/join12.q.out | 30 +-
ql/src/test/results/clientpositive/join16.q.out | 22 +-
ql/src/test/results/clientpositive/join29.q.out | 48 +-
ql/src/test/results/clientpositive/join30.q.out | 8 +-
ql/src/test/results/clientpositive/join31.q.out | 6 +-
ql/src/test/results/clientpositive/join32.q.out | 80 +-
ql/src/test/results/clientpositive/join33.q.out | 80 +-
ql/src/test/results/clientpositive/join35.q.out | 64 +-
ql/src/test/results/clientpositive/join38.q.out | 28 +-
ql/src/test/results/clientpositive/join4.q.out | 8 +-
ql/src/test/results/clientpositive/join40.q.out | 6 +-
ql/src/test/results/clientpositive/join47.q.out | 1715 +
ql/src/test/results/clientpositive/join5.q.out | 8 +-
ql/src/test/results/clientpositive/join8.q.out | 8 +-
.../clientpositive/join_alt_syntax.q.out | 272 +-
.../clientpositive/join_cond_pushdown_2.q.out | 112 +-
.../clientpositive/join_cond_pushdown_4.q.out | 112 +-
.../clientpositive/join_filters_overlap.q.out | 4 +-
.../results/clientpositive/join_parse.q.out | 102 +-
.../limit_pushdown_negative.q.out | 96 +-
.../list_bucket_query_oneskew_2.q.out | 10 +-
.../llap/acid_bucket_pruning.q.out | 30 +-
.../clientpositive/llap/acid_no_buckets.q.out | 1976 +
.../llap/authorization_view_8.q.out | 69 +
.../clientpositive/llap/autoColumnStats_2.q.out | 64 +-
.../clientpositive/llap/auto_join0.q.out | 51 +-
.../clientpositive/llap/auto_join1.q.out | 6 +-
.../clientpositive/llap/auto_join21.q.out | 10 +-
.../clientpositive/llap/auto_join29.q.out | 90 +-
.../clientpositive/llap/auto_join30.q.out | 630 +-
.../llap/auto_smb_mapjoin_14.q.out | 44 +-
.../llap/auto_sortmerge_join_9.q.out | 234 +-
.../clientpositive/llap/bucket_groupby.q.out | 72 +-
.../llap/bucket_map_join_tez1.q.out | 7 -
.../llap/bucket_map_join_tez2.q.out | 34 +-
.../results/clientpositive/llap/cluster.q.out | 40 +-
...names_with_leading_and_trailing_spaces.q.out | 16 +-
.../llap/column_table_stats.q.out | 68 +-
.../llap/column_table_stats_orc.q.out | 50 +-
.../llap/columnstats_part_coltype.q.out | 126 +-
.../llap/correlationoptimizer1.q.out | 376 +-
.../llap/correlationoptimizer2.q.out | 186 +-
.../llap/correlationoptimizer3.q.out | 296 +-
.../llap/correlationoptimizer4.q.out | 220 +-
.../llap/correlationoptimizer6.q.out | 532 +-
.../results/clientpositive/llap/count.q.out | 124 +-
.../llap/count_dist_rewrite.q.out | 66 +-
.../clientpositive/llap/cross_join.q.out | 8 +-
.../clientpositive/llap/deleteAnalyze.q.out | 8 +-
.../llap/dynamic_partition_pruning.q.out | 317 +-
.../llap/dynamic_semijoin_reduction.q.out | 863 +-
.../llap/dynamic_semijoin_reduction_3.q.out | 4 +-
.../llap/dynamic_semijoin_reduction_sw.q.out | 518 +
.../llap/dynamic_semijoin_user_level.q.out | 172 +-
.../llap/dynpart_sort_optimization2.q.out | 20 +-
.../clientpositive/llap/except_distinct.q.out | 52 +-
.../clientpositive/llap/explainuser_1.q.out | 1505 +-
.../clientpositive/llap/explainuser_2.q.out | 931 +-
.../clientpositive/llap/explainuser_4.q.out | 14 +-
.../extrapolate_part_stats_partial_ndv.q.out | 132 +-
.../clientpositive/llap/filter_union.q.out | 539 +
.../results/clientpositive/llap/groupby1.q.out | 6 +-
.../results/clientpositive/llap/groupby2.q.out | 6 +-
.../llap/groupby_resolution.q.out | 78 +-
.../results/clientpositive/llap/having.q.out | 66 +-
.../llap/hybridgrace_hashjoin_1.q.out | 12 +-
.../llap/hybridgrace_hashjoin_2.q.out | 24 +-
.../llap/identity_project_remove_skip.q.out | 71 +-
.../clientpositive/llap/insert_orig_table.q.out | 68 +-
.../clientpositive/llap/intersect_all.q.out | 40 +-
.../llap/intersect_distinct.q.out | 40 +-
.../clientpositive/llap/intersect_merge.q.out | 204 +-
.../clientpositive/llap/jdbc_handler.q.out | 32 +-
.../results/clientpositive/llap/join1.q.out | 6 +-
.../clientpositive/llap/join32_lessSize.q.out | 175 +-
.../llap/join_max_hashtable.q.out | 222 +-
.../llap/limit_join_transpose.q.out | 214 +-
.../clientpositive/llap/limit_pushdown.q.out | 68 +-
.../clientpositive/llap/limit_pushdown3.q.out | 64 +-
.../results/clientpositive/llap/lineage2.q.out | 4 +-
.../results/clientpositive/llap/lineage3.q.out | 4 +-
.../results/clientpositive/llap/llap_smb.q.out | 359 +
.../clientpositive/llap/llap_stats.q.out | 16 +-
.../llap/llap_vector_nohybridgrace.q.out | 12 +-
.../clientpositive/llap/llapdecider.q.out | 88 +-
.../results/clientpositive/llap/merge1.q.out | 16 +-
.../results/clientpositive/llap/merge2.q.out | 12 +-
.../results/clientpositive/llap/mergejoin.q.out | 16 +-
.../llap/metadata_only_queries.q.out | 112 +-
.../test/results/clientpositive/llap/mrr.q.out | 153 +-
.../clientpositive/llap/multiMapJoin2.q.out | 255 +-
.../clientpositive/llap/offset_limit.q.out | 10 +-
.../llap/offset_limit_ppd_optimizer.q.out | 58 +-
.../clientpositive/llap/orc_create.q.out | 2 +-
.../llap/orc_merge_incompat_schema.q.out | 161 +
.../orc_merge_incompat_writer_version.q.out | 108 +
.../clientpositive/llap/orc_ppd_basic.q.out | 234 +-
.../results/clientpositive/llap/parallel.q.out | 2 +-
.../clientpositive/llap/parallel_colstats.q.out | 26 +-
.../llap/parquet_predicate_pushdown.q.out | 18 +-
.../llap/parquet_types_vectorization.q.out | 849 +
.../clientpositive/llap/partialdhj.q.out | 460 +
.../llap/partition_shared_scan.q.out | 7 -
.../test/results/clientpositive/llap/ptf.q.out | 154 +-
.../clientpositive/llap/ptf_streaming.q.out | 96 +-
.../llap/reduce_deduplicate_extended.q.out | 74 +-
.../schema_evol_orc_vec_part_all_complex.q.out | 72 +-
.../schema_evol_text_vec_part_all_complex.q.out | 72 +-
...hema_evol_text_vecrow_part_all_complex.q.out | 72 +-
.../clientpositive/llap/semijoin_hint.q.out | 175 +-
.../results/clientpositive/llap/skewjoin.q.out | 12 +-
.../clientpositive/llap/skewjoinopt15.q.out | 4 +-
.../clientpositive/llap/smb_mapjoin_14.q.out | 54 +-
.../clientpositive/llap/smb_mapjoin_15.q.out | 4 +-
.../clientpositive/llap/stats_only_null.q.out | 6 +-
.../clientpositive/llap/subquery_exists.q.out | 22 +-
.../clientpositive/llap/subquery_in.q.out | 1015 +-
.../clientpositive/llap/subquery_multi.q.out | 531 +-
.../clientpositive/llap/subquery_notin.q.out | 740 +-
.../clientpositive/llap/subquery_null_agg.q.out | 55 +-
.../clientpositive/llap/subquery_scalar.q.out | 2227 +-
.../clientpositive/llap/subquery_select.q.out | 244 +-
.../clientpositive/llap/subquery_views.q.out | 111 +-
.../results/clientpositive/llap/sysdb.q.out | 252 +-
.../llap/table_access_keys_stats.q.out | 36 +-
.../results/clientpositive/llap/tez_dml.q.out | 12 +-
.../llap/tez_dynpart_hashjoin_1.q.out | 24 +-
.../llap/tez_dynpart_hashjoin_2.q.out | 24 +-
.../llap/tez_dynpart_hashjoin_3.q.out | 4 +-
.../clientpositive/llap/tez_join_hash.q.out | 20 +-
.../clientpositive/llap/tez_join_tests.q.out | 37 +-
.../clientpositive/llap/tez_joins_explain.q.out | 37 +-
.../clientpositive/llap/tez_smb_empty.q.out | 16 +-
.../clientpositive/llap/tez_smb_main.q.out | 4 +-
.../results/clientpositive/llap/tez_union.q.out | 64 +-
.../clientpositive/llap/tez_union2.q.out | 16 +-
.../llap/tez_union_group_by.q.out | 2 +-
.../llap/tez_union_multiinsert.q.out | 68 +-
.../llap/tez_vector_dynpart_hashjoin_1.q.out | 24 +-
.../llap/tez_vector_dynpart_hashjoin_2.q.out | 24 +-
.../results/clientpositive/llap/union2.q.out | 4 +-
.../results/clientpositive/llap/union4.q.out | 6 +-
.../results/clientpositive/llap/union5.q.out | 4 +-
.../results/clientpositive/llap/union6.q.out | 4 +-
.../results/clientpositive/llap/union7.q.out | 20 +-
.../results/clientpositive/llap/union9.q.out | 6 +-
.../clientpositive/llap/unionDistinct_1.q.out | 283 +-
.../clientpositive/llap/union_remove_26.q.out | 54 +-
.../clientpositive/llap/union_top_level.q.out | 30 +-
.../clientpositive/llap/varchar_udf1.q.out | 10 +-
.../llap/vector_adaptor_usage_mode.q.out | 43 +-
.../llap/vector_aggregate_9.q.out | 311 +-
.../llap/vector_auto_smb_mapjoin_14.q.out | 104 +-
.../clientpositive/llap/vector_between_in.q.out | 44 +-
.../llap/vector_binary_join_groupby.q.out | 8 +
.../llap/vector_cast_constant.q.out | 34 +-
.../clientpositive/llap/vector_char_2.q.out | 8 +
.../clientpositive/llap/vector_coalesce_2.q.out | 8 +
.../llap/vector_complex_all.q.out | 1209 +-
.../llap/vector_complex_join.q.out | 77 +-
.../clientpositive/llap/vector_count.q.out | 70 +-
.../llap/vector_count_distinct.q.out | 8 +
.../clientpositive/llap/vector_date_1.q.out | 2 +-
.../llap/vector_decimal_aggregate.q.out | 45 +-
.../llap/vector_decimal_precision.q.out | 32 +-
.../llap/vector_decimal_round.q.out | 44 +-
.../llap/vector_decimal_udf.q.out | 6 +-
.../clientpositive/llap/vector_distinct_2.q.out | 4 +
.../llap/vector_empty_where.q.out | 32 +
.../clientpositive/llap/vector_groupby4.q.out | 4 +
.../clientpositive/llap/vector_groupby6.q.out | 4 +
.../clientpositive/llap/vector_groupby_3.q.out | 4 +
.../llap/vector_groupby_cube1.q.out | 196 +-
.../llap/vector_groupby_grouping_id1.q.out | 800 +
.../llap/vector_groupby_grouping_id2.q.out | 2117 +
.../llap/vector_groupby_grouping_id3.q.out | 8 +
.../llap/vector_groupby_grouping_sets3.q.out | 8 +-
.../llap/vector_groupby_grouping_sets4.q.out | 27 -
.../vector_groupby_grouping_sets_grouping.q.out | 2 +-
.../llap/vector_groupby_grouping_window.q.out | 4 +-
.../llap/vector_groupby_mapjoin.q.out | 22 +-
.../llap/vector_groupby_reduce.q.out | 2568 +-
.../llap/vector_groupby_rollup1.q.out | 12 +-
.../llap/vector_grouping_sets.q.out | 8 +
.../llap/vector_include_no_sel.q.out | 4 +
.../clientpositive/llap/vector_inner_join.q.out | 2 +
.../llap/vector_interval_mapjoin.q.out | 8 +-
.../clientpositive/llap/vector_join30.q.out | 1170 +-
.../llap/vector_left_outer_join.q.out | 4 +-
.../llap/vector_leftsemi_mapjoin.q.out | 168 +
.../llap/vector_mapjoin_reduce.q.out | 52 +-
.../llap/vector_mr_diff_schema_alias.q.out | 34 +-
.../llap/vector_null_projection.q.out | 8 +-
.../llap/vector_number_compare_projection.q.out | 186 +-
.../clientpositive/llap/vector_nvl.q.out | 2 +-
.../clientpositive/llap/vector_orderby_5.q.out | 4 +
.../llap/vector_outer_join1.q.out | 16 +-
.../llap/vector_outer_join2.q.out | 8 +-
.../llap/vector_outer_reference_windowed.q.out | 1435 +
.../llap/vector_partition_diff_num_cols.q.out | 20 +
.../llap/vector_partitioned_date_time.q.out | 40 +-
.../llap/vector_ptf_part_simple.q.out | 3898 +-
.../llap/vector_reduce_groupby_decimal.q.out | 4 +
.../llap/vector_string_concat.q.out | 4 +
.../llap/vector_tablesample_rows.q.out | 93 +-
.../clientpositive/llap/vector_udf1.q.out | 1137 +-
.../llap/vector_when_case_null.q.out | 12 +-
.../clientpositive/llap/vector_windowing.q.out | 9768 +
.../llap/vector_windowing_expressions.q.out | 2022 +
.../llap/vector_windowing_gby.q.out | 314 +
.../llap/vector_windowing_gby2.q.out | 1158 +
.../vector_windowing_multipartitioning.q.out | 11587 +
.../llap/vector_windowing_navfn.q.out | 218 +-
.../llap/vector_windowing_order_null.q.out | 1232 +
.../vector_windowing_range_multiorder.q.out | 12584 ++
.../llap/vector_windowing_rank.q.out | 1860 +
.../llap/vector_windowing_streaming.q.out | 1036 +
.../llap/vector_windowing_windowspec.q.out | 2374 +
.../llap/vector_windowing_windowspec4.q.out | 223 +
.../clientpositive/llap/vectorization_0.q.out | 281 +-
.../clientpositive/llap/vectorization_1.q.out | 175 +
.../clientpositive/llap/vectorization_10.q.out | 118 +
.../clientpositive/llap/vectorization_11.q.out | 100 +
.../clientpositive/llap/vectorization_12.q.out | 240 +
.../clientpositive/llap/vectorization_13.q.out | 100 +-
.../clientpositive/llap/vectorization_14.q.out | 86 +-
.../clientpositive/llap/vectorization_15.q.out | 155 +-
.../clientpositive/llap/vectorization_16.q.out | 68 +-
.../clientpositive/llap/vectorization_17.q.out | 41 +-
.../clientpositive/llap/vectorization_2.q.out | 179 +
.../clientpositive/llap/vectorization_3.q.out | 184 +
.../clientpositive/llap/vectorization_4.q.out | 178 +
.../clientpositive/llap/vectorization_5.q.out | 173 +
.../clientpositive/llap/vectorization_6.q.out | 112 +
.../clientpositive/llap/vectorization_7.q.out | 18 +-
.../clientpositive/llap/vectorization_8.q.out | 34 +-
.../clientpositive/llap/vectorization_9.q.out | 68 +-
.../llap/vectorization_limit.q.out | 83 +-
.../llap/vectorization_pushdown.q.out | 10 +-
.../llap/vectorization_short_regress.q.out | 376 +-
.../llap/vectorized_bucketmapjoin1.q.out | 21 +-
.../clientpositive/llap/vectorized_case.q.out | 20 +-
.../clientpositive/llap/vectorized_casts.q.out | 89 +-
.../llap/vectorized_date_funcs.q.out | 4 +
.../llap/vectorized_distinct_gby.q.out | 150 +-
.../vectorized_dynamic_partition_pruning.q.out | 340 +-
.../vectorized_dynamic_semijoin_reduction.q.out | 60 +-
...vectorized_dynamic_semijoin_reduction2.q.out | 30 +-
.../llap/vectorized_mapjoin.q.out | 36 +-
.../llap/vectorized_mapjoin2.q.out | 8 +-
.../llap/vectorized_multi_output_select.q.out | 201 +
.../llap/vectorized_nested_mapjoin.q.out | 6 +-
.../llap/vectorized_parquet.q.out | 28 +-
.../llap/vectorized_parquet_types.q.out | 36 +-
.../clientpositive/llap/vectorized_ptf.q.out | 298 +-
.../llap/vectorized_shufflejoin.q.out | 26 +-
.../llap/vectorized_timestamp.q.out | 630 +-
.../llap/vectorized_timestamp_funcs.q.out | 70 +-
.../results/clientpositive/llap/windowing.q.out | 2 +-
.../clientpositive/llap/windowing_gby.q.out | 4 +-
.../llap/windowing_windowspec.q.out | 955 +
.../results/clientpositive/localtimezone.q.out | 558 +
.../clientpositive/louter_join_ppr.q.out | 84 +-
.../test/results/clientpositive/mapjoin47.q.out | 1790 +
.../test/results/clientpositive/masking_4.q.out | 16 +-
.../materialized_view_create.q.out | 40 +
.../materialized_view_create_rewrite.q.out | 8 +
ql/src/test/results/clientpositive/merge1.q.out | 6 +-
ql/src/test/results/clientpositive/merge2.q.out | 6 +-
.../clientpositive/metadata_only_queries.q.out | 112 +-
ql/src/test/results/clientpositive/mm_all.q.out | 296 -
.../results/clientpositive/mm_loaddata.q.out | 296 +
.../clientpositive/multi_insert_gby2.q.out | 40 +-
.../clientpositive/multi_insert_gby3.q.out | 189 +-
.../clientpositive/nested_column_pruning.q.out | 42 +-
.../results/clientpositive/notable_alias1.q.out | 24 +-
.../results/clientpositive/notable_alias2.q.out | 24 +-
.../test/results/clientpositive/nullgroup.q.out | 8 +-
.../results/clientpositive/nullgroup2.q.out | 76 +-
.../results/clientpositive/nullgroup3.q.out | 8 +-
.../results/clientpositive/nullgroup4.q.out | 26 +-
.../nullgroup4_multi_distinct.q.out | 12 +-
.../results/clientpositive/orc_create.q.out | 2 +-
.../clientpositive/orc_empty_table.q.out | 68 +
.../orc_merge_incompat_schema.q.out | 161 +
.../orc_merge_incompat_writer_version.q.out | 108 +
.../results/clientpositive/outer_join_ppr.q.out | 40 +-
.../outer_reference_windowed.q.out | 10 +-
.../clientpositive/parallel_colstats.q.out | 24 +-
.../clientpositive/parquet_analyze.q.out | 4 +-
.../parquet_int96_timestamp.q.out | 191 +-
.../parquet_mixed_partition_formats.q.out | 6 +-
.../clientpositive/parquet_no_row_serde.q.out | 190 +
.../parquet_predicate_pushdown_2.q.out | 38 +
.../parquet_timestamp_conversion.q.out | 68 -
.../clientpositive/partial_column_stats.q.out | 20 +-
.../clientpositive/partition_boolexpr.q.out | 4 +-
.../partition_coltype_literals.q.out | 44 +-
ql/src/test/results/clientpositive/pcs.q.out | 2 +-
.../results/clientpositive/perf/query1.q.out | 40 +-
.../results/clientpositive/perf/query10.q.out | 52 +-
.../results/clientpositive/perf/query11.q.out | 351 +
.../results/clientpositive/perf/query14.q.out | 1876 +-
.../results/clientpositive/perf/query16.q.out | 265 +-
.../results/clientpositive/perf/query17.q.out | 236 +-
.../results/clientpositive/perf/query2.q.out | 22 +-
.../results/clientpositive/perf/query23.q.out | 180 +-
.../results/clientpositive/perf/query24.q.out | 162 +-
.../results/clientpositive/perf/query25.q.out | 232 +-
.../results/clientpositive/perf/query28.q.out | 184 +-
.../results/clientpositive/perf/query29.q.out | 232 +-
.../results/clientpositive/perf/query30.q.out | 102 +-
.../results/clientpositive/perf/query31.q.out | 90 +-
.../results/clientpositive/perf/query32.q.out | 18 +-
.../results/clientpositive/perf/query33.q.out | 178 +-
.../results/clientpositive/perf/query35.q.out | 32 +-
.../results/clientpositive/perf/query38.q.out | 270 +-
.../results/clientpositive/perf/query39.q.out | 30 +-
.../results/clientpositive/perf/query4.q.out | 1118 +-
.../results/clientpositive/perf/query44.q.out | 29 +-
.../results/clientpositive/perf/query45.q.out | 6 +-
.../results/clientpositive/perf/query46.q.out | 6 +-
.../results/clientpositive/perf/query47.q.out | 222 +-
.../results/clientpositive/perf/query49.q.out | 22 +-
.../results/clientpositive/perf/query5.q.out | 122 +-
.../results/clientpositive/perf/query50.q.out | 72 +-
.../results/clientpositive/perf/query51.q.out | 6 +-
.../results/clientpositive/perf/query54.q.out | 458 +-
.../results/clientpositive/perf/query56.q.out | 178 +-
.../results/clientpositive/perf/query57.q.out | 222 +-
.../results/clientpositive/perf/query58.q.out | 96 +-
.../results/clientpositive/perf/query59.q.out | 20 +-
.../results/clientpositive/perf/query6.q.out | 306 +-
.../results/clientpositive/perf/query60.q.out | 178 +-
.../results/clientpositive/perf/query61.q.out | 30 +-
.../results/clientpositive/perf/query64.q.out | 734 +-
.../results/clientpositive/perf/query65.q.out | 6 +-
.../results/clientpositive/perf/query66.q.out | 40 +-
.../results/clientpositive/perf/query68.q.out | 6 +-
.../results/clientpositive/perf/query69.q.out | 32 +-
.../results/clientpositive/perf/query70.q.out | 22 +-
.../results/clientpositive/perf/query71.q.out | 80 +-
.../results/clientpositive/perf/query72.q.out | 270 +-
.../results/clientpositive/perf/query74.q.out | 544 +-
.../results/clientpositive/perf/query75.q.out | 110 +-
.../results/clientpositive/perf/query76.q.out | 84 +-
.../results/clientpositive/perf/query77.q.out | 188 +-
.../results/clientpositive/perf/query78.q.out | 104 +-
.../results/clientpositive/perf/query8.q.out | 10 +-
.../results/clientpositive/perf/query80.q.out | 172 +-
.../results/clientpositive/perf/query81.q.out | 104 +-
.../results/clientpositive/perf/query83.q.out | 311 +-
.../results/clientpositive/perf/query85.q.out | 148 +-
.../results/clientpositive/perf/query87.q.out | 248 +-
.../results/clientpositive/perf/query88.q.out | 138 +-
.../results/clientpositive/perf/query9.q.out | 90 +-
.../results/clientpositive/perf/query90.q.out | 30 +-
.../results/clientpositive/perf/query92.q.out | 18 +-
.../results/clientpositive/perf/query94.q.out | 265 +-
.../results/clientpositive/perf/query95.q.out | 80 +-
.../results/clientpositive/perf/query97.q.out | 16 +-
.../test/results/clientpositive/plan_json.q.out | 2 +-
ql/src/test/results/clientpositive/ppd2.q.out | 52 +-
.../test/results/clientpositive/ppd_gby.q.out | 32 +-
.../test/results/clientpositive/ppd_gby2.q.out | 44 +-
.../results/clientpositive/ppd_gby_join.q.out | 64 +-
.../test/results/clientpositive/ppd_join.q.out | 48 +-
.../test/results/clientpositive/ppd_join4.q.out | 23 +-
.../clientpositive/ppd_outer_join1.q.out | 40 +-
.../clientpositive/ppd_outer_join2.q.out | 40 +-
.../clientpositive/ppd_outer_join3.q.out | 40 +-
.../clientpositive/ppd_outer_join4.q.out | 60 +-
.../test/results/clientpositive/ppd_union.q.out | 82 +-
ql/src/test/results/clientpositive/ppd_vc.q.out | 18 +-
.../results/clientpositive/ppd_windowing1.q.out | 66 +-
.../results/clientpositive/ptfgroupbyjoin.q.out | 2 +-
.../results/clientpositive/quotedid_basic.q.out | 4 +-
.../clientpositive/rcfile_null_value.q.out | 8 +-
.../reduceSinkDeDuplication_pRS_key_empty.q.out | Bin 10132 -> 10596 bytes
.../reduce_deduplicate_extended2.q.out | 89 +-
.../clientpositive/remove_exprs_stats.q.out | 12 +-
.../rename_external_partition_location.q.out | 24 +-
.../rename_table_update_column_stats.q.out | 96 +-
.../clientpositive/router_join_ppr.q.out | 84 +-
.../test/results/clientpositive/row__id.q.out | 18 +-
.../test/results/clientpositive/semijoin2.q.out | 4 +-
.../test/results/clientpositive/semijoin4.q.out | 4 +-
.../test/results/clientpositive/semijoin5.q.out | 8 +-
.../set_processor_namespaces.q.out | 2 +
.../results/clientpositive/setop_subq.q.out | 36 +-
.../show_create_table_delimited.q.out | 2 +-
.../clientpositive/skewjoin_mapjoin1.q.out | 16 +-
.../clientpositive/skewjoin_mapjoin10.q.out | 16 +-
.../clientpositive/skewjoin_mapjoin5.q.out | 24 +-
.../results/clientpositive/skewjoinopt1.q.out | 8 +-
.../results/clientpositive/skewjoinopt2.q.out | 8 +-
.../results/clientpositive/skewjoinopt9.q.out | 24 +-
.../results/clientpositive/smb_mapjoin_12.q.out | 75 +-
.../results/clientpositive/smb_mapjoin_20.q.out | 1060 +-
.../results/clientpositive/smb_mapjoin_47.q.out | 1542 +
.../spark/annotate_stats_join.q.out | 44 +-
.../clientpositive/spark/auto_join0.q.out | 43 +-
.../clientpositive/spark/auto_join12.q.out | 22 +-
.../clientpositive/spark/auto_join15.q.out | 35 +-
.../clientpositive/spark/auto_join16.q.out | 16 +-
.../clientpositive/spark/auto_join20.q.out | 62 +-
.../clientpositive/spark/auto_join26.q.out | 4 +-
.../clientpositive/spark/auto_join27.q.out | 2 +-
.../clientpositive/spark/auto_join30.q.out | 793 +-
.../clientpositive/spark/auto_join31.q.out | 116 +-
.../clientpositive/spark/auto_join4.q.out | 6 +-
.../clientpositive/spark/auto_join5.q.out | 6 +-
.../clientpositive/spark/auto_join8.q.out | 6 +-
.../spark/auto_join_reordering_values.q.out | 10 +-
.../spark/auto_join_without_localtask.q.out | 28 +-
.../spark/auto_smb_mapjoin_14.q.out | 24 +-
.../spark/auto_sortmerge_join_1.q.out | 6 +-
.../spark/auto_sortmerge_join_12.q.out | 10 +-
.../spark/auto_sortmerge_join_3.q.out | 6 +-
.../spark/auto_sortmerge_join_4.q.out | 6 +-
.../spark/auto_sortmerge_join_5.q.out | 4 +-
.../spark/auto_sortmerge_join_7.q.out | 8 +-
.../spark/auto_sortmerge_join_8.q.out | 8 +-
.../spark/auto_sortmerge_join_9.q.out | 66 +-
.../spark/avro_decimal_native.q.out | 8 +-
.../spark/bucket_map_join_spark1.q.out | 8 +-
.../spark/bucket_map_join_spark2.q.out | 8 +-
.../spark/bucket_map_join_spark3.q.out | 8 +-
.../spark/bucket_map_join_spark4.q.out | 12 +-
.../spark/bucket_map_join_tez2.q.out | 28 +-
.../clientpositive/spark/bucketmapjoin1.q.out | 8 +-
.../clientpositive/spark/bucketmapjoin2.q.out | 14 +-
.../clientpositive/spark/bucketmapjoin3.q.out | 8 +-
.../clientpositive/spark/bucketmapjoin4.q.out | 8 +-
.../spark/constprog_partitioner.q.out | 10 +-
.../spark/constprog_semijoin.q.out | 20 +-
.../results/clientpositive/spark/count.q.out | 124 +-
.../spark/dynamic_rdd_cache.q.out | 75 +-
.../spark/explaindenpendencydiffengs.q.out | 52 +
.../spark/filter_join_breaktask.q.out | 6 +-
.../results/clientpositive/spark/groupby3.q.out | 2 +-
.../clientpositive/spark/groupby4_map.q.out | 4 +-
.../spark/groupby4_map_skew.q.out | 4 +-
.../clientpositive/spark/groupby_cube1.q.out | 20 +-
.../clientpositive/spark/groupby_map_ppr.q.out | 4 +-
.../spark/groupby_map_ppr_multi_distinct.q.out | 4 +-
.../clientpositive/spark/groupby_position.q.out | 62 +-
.../clientpositive/spark/groupby_ppr.q.out | 4 +-
.../spark/groupby_ppr_multi_distinct.q.out | 4 +-
.../spark/groupby_resolution.q.out | 2 +-
.../clientpositive/spark/groupby_rollup1.q.out | 12 +-
.../spark/groupby_sort_1_23.q.out | 240 +-
.../spark/groupby_sort_skew_1_23.q.out | 240 +-
.../spark/identity_project_remove_skip.q.out | 70 +-
.../clientpositive/spark/index_bitmap3.q.out | 4 +-
.../spark/index_bitmap_auto.q.out | 4 +-
.../spark/infer_bucket_sort_map_operators.q.out | 8 +-
.../infer_bucket_sort_reducers_power_two.q.out | 2 +-
.../results/clientpositive/spark/join12.q.out | 30 +-
.../results/clientpositive/spark/join16.q.out | 22 +-
.../results/clientpositive/spark/join17.q.out | 4 +-
.../results/clientpositive/spark/join26.q.out | 6 +-
.../results/clientpositive/spark/join29.q.out | 48 +-
.../results/clientpositive/spark/join30.q.out | 4 +-
.../results/clientpositive/spark/join31.q.out | 2 +-
.../results/clientpositive/spark/join32.q.out | 84 +-
.../clientpositive/spark/join32_lessSize.q.out | 104 +-
.../results/clientpositive/spark/join33.q.out | 84 +-
.../results/clientpositive/spark/join34.q.out | 6 +-
.../results/clientpositive/spark/join35.q.out | 66 +-
.../results/clientpositive/spark/join38.q.out | 24 +-
.../results/clientpositive/spark/join4.q.out | 8 +-
.../results/clientpositive/spark/join5.q.out | 8 +-
.../results/clientpositive/spark/join8.q.out | 8 +-
.../results/clientpositive/spark/join9.q.out | 4 +-
.../clientpositive/spark/join_alt_syntax.q.out | 220 +-
.../spark/join_cond_pushdown_2.q.out | 92 +-
.../spark/join_cond_pushdown_4.q.out | 92 +-
.../spark/join_filters_overlap.q.out | 38 +-
.../clientpositive/spark/limit_pushdown.q.out | 72 +-
.../clientpositive/spark/louter_join_ppr.q.out | 108 +-
.../clientpositive/spark/mapjoin_mapjoin.q.out | 12 +-
.../results/clientpositive/spark/merge1.q.out | 6 +-
.../results/clientpositive/spark/merge2.q.out | 6 +-
.../spark/metadata_only_queries.q.out | 112 +-
.../spark/multi_insert_gby2.q.out | 20 +-
.../spark/multi_insert_gby3.q.out | 126 +-
.../clientpositive/spark/nullgroup.q.out | 8 +-
.../clientpositive/spark/nullgroup2.q.out | 76 +-
.../clientpositive/spark/nullgroup4.q.out | 26 +-
.../spark/nullgroup4_multi_distinct.q.out | 12 +-
.../spark/optimize_nullscan.q.out | 58 +-
.../clientpositive/spark/outer_join_ppr.q.out | 52 +-
.../spark/parquet_int96_timestamp.q.out | 718 -
.../test/results/clientpositive/spark/pcr.q.out | 20 +-
.../clientpositive/spark/ppd_gby_join.q.out | 64 +-
.../results/clientpositive/spark/ppd_join.q.out | 48 +-
.../clientpositive/spark/ppd_join_filter.q.out | 16 +-
.../clientpositive/spark/ppd_outer_join1.q.out | 40 +-
.../clientpositive/spark/ppd_outer_join2.q.out | 40 +-
.../clientpositive/spark/ppd_outer_join3.q.out | 40 +-
.../clientpositive/spark/ppd_outer_join4.q.out | 60 +-
.../test/results/clientpositive/spark/ptf.q.out | 114 +-
.../clientpositive/spark/ptf_streaming.q.out | 62 +-
.../clientpositive/spark/router_join_ppr.q.out | 108 +-
.../clientpositive/spark/skewjoinopt1.q.out | 8 +-
.../clientpositive/spark/skewjoinopt15.q.out | 8 +-
.../clientpositive/spark/skewjoinopt2.q.out | 8 +-
.../clientpositive/spark/skewjoinopt9.q.out | 24 +-
.../clientpositive/spark/smb_mapjoin_14.q.out | 54 +-
.../clientpositive/spark/smb_mapjoin_15.q.out | 20 +-
.../clientpositive/spark/smb_mapjoin_20.q.out | 1063 +-
.../spark/spark_constprog_dpp.q.out | 138 +
.../spark/spark_dynamic_partition_pruning.q.out | 3343 +-
.../spark_dynamic_partition_pruning_2.q.out | 213 +-
.../spark_dynamic_partition_pruning_3.q.out | 1791 +
...dynamic_partition_pruning_mapjoin_only.q.out | 492 +
.../spark/spark_explain_groupbyshuffle.q.out | 116 +
.../spark/spark_explainuser_1.q.out | 1106 +-
.../spark_multi_insert_parallel_orderby.q.out | 2013 +
.../spark/spark_union_merge.q.out | 564 +
.../spark/spark_use_op_stats.q.out | 46 +-
.../spark/spark_use_ts_stats_for_mapjoin.q.out | 10 +-
.../results/clientpositive/spark/stats1.q.out | 4 +-
.../clientpositive/spark/stats_only_null.q.out | 6 +-
.../clientpositive/spark/subquery_exists.q.out | 10 +-
.../clientpositive/spark/subquery_in.q.out | 660 +-
.../spark/table_access_keys_stats.q.out | 36 +-
.../clientpositive/spark/tez_join_tests.q.out | 26 +-
.../spark/tez_joins_explain.q.out | 26 +-
.../clientpositive/spark/transform_ppr1.q.out | 8 +-
.../clientpositive/spark/transform_ppr2.q.out | 4 +-
.../spark/truncate_column_buckets.q.out | 8 +-
.../results/clientpositive/spark/union10.q.out | 8 +-
.../results/clientpositive/spark/union11.q.out | 6 +-
.../results/clientpositive/spark/union12.q.out | 8 +-
.../results/clientpositive/spark/union14.q.out | 4 +-
.../results/clientpositive/spark/union15.q.out | 6 +-
.../results/clientpositive/spark/union16.q.out | 2 +-
.../results/clientpositive/spark/union17.q.out | 8 +-
.../results/clientpositive/spark/union18.q.out | 8 +-
.../results/clientpositive/spark/union19.q.out | 8 +-
.../results/clientpositive/spark/union2.q.out | 4 +-
.../results/clientpositive/spark/union20.q.out | 4 +-
.../results/clientpositive/spark/union22.q.out | 6 +-
.../results/clientpositive/spark/union24.q.out | 56 +-
.../results/clientpositive/spark/union25.q.out | 4 +-
.../results/clientpositive/spark/union30.q.out | 46 +-
.../results/clientpositive/spark/union31.q.out | 18 +-
.../results/clientpositive/spark/union4.q.out | 6 +-
.../results/clientpositive/spark/union5.q.out | 4 +-
.../results/clientpositive/spark/union6.q.out | 4 +-
.../results/clientpositive/spark/union7.q.out | 4 +-
.../results/clientpositive/spark/union9.q.out | 6 +-
.../clientpositive/spark/union_ppr.q.out | 8 +-
.../clientpositive/spark/union_remove_1.q.out | 6 +-
.../clientpositive/spark/union_remove_10.q.out | 8 +-
.../clientpositive/spark/union_remove_13.q.out | 8 +-
.../clientpositive/spark/union_remove_15.q.out | 8 +-
.../clientpositive/spark/union_remove_16.q.out | 8 +-
.../clientpositive/spark/union_remove_18.q.out | 6 +-
.../clientpositive/spark/union_remove_19.q.out | 54 +-
.../clientpositive/spark/union_remove_2.q.out | 6 +-
.../clientpositive/spark/union_remove_20.q.out | 6 +-
.../clientpositive/spark/union_remove_22.q.out | 6 +-
.../clientpositive/spark/union_remove_23.q.out | 10 +-
.../clientpositive/spark/union_remove_24.q.out | 6 +-
.../clientpositive/spark/union_remove_25.q.out | 6 +-
.../clientpositive/spark/union_remove_4.q.out | 6 +-
.../clientpositive/spark/union_remove_5.q.out | 6 +-
.../clientpositive/spark/union_remove_6.q.out | 6 +-
.../spark/union_remove_6_subq.q.out | 16 +-
.../clientpositive/spark/union_remove_7.q.out | 8 +-
.../clientpositive/spark/union_remove_8.q.out | 8 +-
.../clientpositive/spark/union_remove_9.q.out | 8 +-
.../clientpositive/spark/union_view.q.out | 24 +-
.../spark/vector_between_in.q.out | 52 +-
.../spark/vector_cast_constant.q.out | 33 +-
.../spark/vector_count_distinct.q.out | 10 +-
.../spark/vector_decimal_aggregate.q.out | 46 +-
.../spark/vector_distinct_2.q.out | 6 +-
.../clientpositive/spark/vector_elt.q.out | 12 +-
.../clientpositive/spark/vector_groupby_3.q.out | 6 +-
.../spark/vector_inner_join.q.out | 2 +
.../spark/vector_left_outer_join.q.out | 16 +-
.../spark/vector_mapjoin_reduce.q.out | 26 +-
.../clientpositive/spark/vector_orderby_5.q.out | 6 +-
.../spark/vector_outer_join1.q.out | 44 +-
.../spark/vector_outer_join2.q.out | 20 +-
.../spark/vector_string_concat.q.out | 6 +-
.../spark/vector_tablesample_rows.q.out | 424 +
.../clientpositive/spark/vectorization_0.q.out | 365 +-
.../clientpositive/spark/vectorization_1.q.out | 173 +
.../clientpositive/spark/vectorization_10.q.out | 117 +
.../clientpositive/spark/vectorization_11.q.out | 99 +
.../clientpositive/spark/vectorization_12.q.out | 238 +
.../clientpositive/spark/vectorization_13.q.out | 142 +-
.../clientpositive/spark/vectorization_14.q.out | 105 +-
.../clientpositive/spark/vectorization_15.q.out | 174 +-
.../clientpositive/spark/vectorization_16.q.out | 83 +-
.../clientpositive/spark/vectorization_17.q.out | 53 +-
.../clientpositive/spark/vectorization_2.q.out | 177 +
.../clientpositive/spark/vectorization_3.q.out | 182 +
.../clientpositive/spark/vectorization_4.q.out | 176 +
.../clientpositive/spark/vectorization_5.q.out | 171 +
.../clientpositive/spark/vectorization_6.q.out | 111 +
.../clientpositive/spark/vectorization_7.q.out | 18 +-
.../clientpositive/spark/vectorization_8.q.out | 18 +-
.../clientpositive/spark/vectorization_9.q.out | 83 +-
.../spark/vectorization_div0.q.out | 36 +-
.../spark/vectorization_pushdown.q.out | 15 +-
.../spark/vectorization_short_regress.q.out | 490 +-
.../clientpositive/spark/vectorized_case.q.out | 44 +-
.../spark/vectorized_mapjoin.q.out | 47 +-
.../spark/vectorized_math_funcs.q.out | 8 +-
.../spark/vectorized_nested_mapjoin.q.out | 24 +-
.../clientpositive/spark/vectorized_ptf.q.out | 331 +-
.../spark/vectorized_shufflejoin.q.out | 43 +-
.../spark/vectorized_string_funcs.q.out | 8 +-
.../spark/vectorized_timestamp_funcs.q.out | 68 +-
.../clientpositive/spark/windowing.q.out | 2 +-
ql/src/test/results/clientpositive/stats1.q.out | 4 +-
.../clientpositive/stats_only_null.q.out | 6 +-
ql/src/test/results/clientpositive/subq2.q.out | 24 +-
.../clientpositive/subquery_exists.q.out | 10 +-
.../clientpositive/subquery_exists_having.q.out | 28 +-
.../clientpositive/subquery_in_having.q.out | 1439 +-
.../clientpositive/subquery_notexists.q.out | 32 +-
.../subquery_notexists_having.q.out | 32 +-
.../clientpositive/subquery_notin_having.q.out | 26 +-
.../subquery_unqualcolumnrefs.q.out | 86 +-
.../symlink_text_input_format.q.out | 4 +-
.../temp_table_display_colstats_tbllvl.q.out | 116 +-
.../clientpositive/tez/explainanalyze_1.q.out | 10 +-
.../clientpositive/tez/explainanalyze_2.q.out | 370 +-
.../clientpositive/tez/explainanalyze_3.q.out | 4 +-
.../clientpositive/tez/explainanalyze_4.q.out | 12 +-
.../clientpositive/tez/explainanalyze_5.q.out | 20 +-
.../clientpositive/tez/explainuser_3.q.out | 6 +-
.../tez/hybridgrace_hashjoin_1.q.out | 12 +-
.../tez/hybridgrace_hashjoin_2.q.out | 24 +-
.../tez/vectorization_limit.q.out | 82 +-
.../results/clientpositive/timestamptz.q.out | 48 +-
.../results/clientpositive/timestamptz_1.q.out | 26 +-
.../results/clientpositive/timestamptz_2.q.out | 34 +-
.../truncate_column_buckets.q.out | 8 +-
.../results/clientpositive/tunable_ndv.q.out | 60 +-
.../clientpositive/udf_stddev_samp.q.out | 66 +-
.../results/clientpositive/udf_var_samp.q.out | 66 +-
.../results/clientpositive/udtf_explode.q.out | 4 +-
.../test/results/clientpositive/union10.q.out | 8 +-
.../test/results/clientpositive/union11.q.out | 6 +-
.../test/results/clientpositive/union12.q.out | 8 +-
.../test/results/clientpositive/union14.q.out | 4 +-
.../test/results/clientpositive/union15.q.out | 6 +-
.../test/results/clientpositive/union16.q.out | 50 +-
.../test/results/clientpositive/union17.q.out | 8 +-
.../test/results/clientpositive/union18.q.out | 8 +-
.../test/results/clientpositive/union19.q.out | 8 +-
ql/src/test/results/clientpositive/union2.q.out | 4 +-
.../test/results/clientpositive/union20.q.out | 4 +-
.../test/results/clientpositive/union24.q.out | 56 +-
.../test/results/clientpositive/union25.q.out | 4 +-
.../test/results/clientpositive/union30.q.out | 52 +-
.../test/results/clientpositive/union31.q.out | 18 +-
.../test/results/clientpositive/union34.q.out | 4 +-
ql/src/test/results/clientpositive/union4.q.out | 6 +-
ql/src/test/results/clientpositive/union5.q.out | 4 +-
ql/src/test/results/clientpositive/union6.q.out | 4 +-
ql/src/test/results/clientpositive/union7.q.out | 4 +-
ql/src/test/results/clientpositive/union9.q.out | 6 +-
.../clientpositive/union_pos_alias.q.out | 10 +-
.../results/clientpositive/union_remove_1.q.out | 12 +-
.../clientpositive/union_remove_10.q.out | 6 +-
.../clientpositive/union_remove_13.q.out | 6 +-
.../clientpositive/union_remove_15.q.out | 12 +-
.../clientpositive/union_remove_16.q.out | 12 +-
.../clientpositive/union_remove_18.q.out | 12 +-
.../clientpositive/union_remove_19.q.out | 108 +-
.../results/clientpositive/union_remove_2.q.out | 6 +-
.../clientpositive/union_remove_20.q.out | 12 +-
.../clientpositive/union_remove_22.q.out | 12 +-
.../clientpositive/union_remove_23.q.out | 10 +-
.../clientpositive/union_remove_24.q.out | 12 +-
.../clientpositive/union_remove_25.q.out | 12 +-
.../results/clientpositive/union_remove_4.q.out | 12 +-
.../results/clientpositive/union_remove_5.q.out | 6 +-
.../results/clientpositive/union_remove_6.q.out | 12 +-
.../clientpositive/union_remove_6_subq.q.out | 30 +-
.../results/clientpositive/union_remove_7.q.out | 12 +-
.../results/clientpositive/union_remove_8.q.out | 6 +-
.../results/clientpositive/union_remove_9.q.out | 6 +-
.../results/clientpositive/union_view.q.out | 24 +-
.../clientpositive/unionall_unbalancedppd.q.out | 35 +-
.../clientpositive/vector_aggregate_9.q.out | 239 +-
.../vector_binary_join_groupby.q.out | 8 +
.../clientpositive/vector_cast_constant.q.out | 16 +-
.../results/clientpositive/vector_char_2.q.out | 8 +
.../clientpositive/vector_coalesce_2.q.out | 8 +
.../clientpositive/vector_complex_all.q.out | 6 +-
.../clientpositive/vector_complex_join.q.out | 28 +-
.../results/clientpositive/vector_count.q.out | 78 +-
.../results/clientpositive/vector_date_1.q.out | 2 +-
.../vector_decimal_aggregate.q.out | 20 +-
.../vector_decimal_precision.q.out | 16 +-
.../clientpositive/vector_decimal_round.q.out | 44 +-
.../clientpositive/vector_distinct_2.q.out | 4 +
.../clientpositive/vector_empty_where.q.out | 32 +
.../clientpositive/vector_groupby4.q.out | 4 +
.../clientpositive/vector_groupby6.q.out | 4 +
.../clientpositive/vector_groupby_3.q.out | 4 +
.../clientpositive/vector_groupby_mapjoin.q.out | 8 +
.../clientpositive/vector_groupby_reduce.q.out | 2522 +-
.../clientpositive/vector_grouping_sets.q.out | 8 +
.../clientpositive/vector_include_no_sel.q.out | 4 +
.../vector_interval_mapjoin.q.out | 6 +-
.../clientpositive/vector_mapjoin_reduce.q.out | 20 +-
.../vector_mr_diff_schema_alias.q.out | 26 +-
.../clientpositive/vector_null_projection.q.out | 8 +-
.../results/clientpositive/vector_nvl.q.out | 2 +-
.../clientpositive/vector_orderby_5.q.out | 4 +
.../clientpositive/vector_outer_join1.q.out | 4 +
.../clientpositive/vector_outer_join2.q.out | 4 +
.../clientpositive/vector_outer_join3.q.out | 6 +-
.../clientpositive/vector_outer_join4.q.out | 2 +-
.../vector_outer_reference_windowed.q.out | 1221 +
.../clientpositive/vector_ptf_part_simple.q.out | 2895 +
.../vector_reduce_groupby_decimal.q.out | 4 +
.../clientpositive/vector_string_concat.q.out | 4 +
.../vector_tablesample_rows.q.out | 100 +-
.../clientpositive/vector_when_case_null.q.out | 12 +-
.../clientpositive/vector_windowing.q.out | 9149 +
.../vector_windowing_expressions.q.out | 1822 +
.../clientpositive/vector_windowing_gby.q.out | 252 +
.../clientpositive/vector_windowing_gby2.q.out | 1015 +
.../vector_windowing_multipartitioning.q.out | 11288 +
.../vector_windowing_order_null.q.out | 989 +
.../vector_windowing_range_multiorder.q.out | 12239 +
.../clientpositive/vector_windowing_rank.q.out | 1543 +
.../vector_windowing_streaming.q.out | 836 +
.../vector_windowing_windowspec.q.out | 2060 +
.../vector_windowing_windowspec4.q.out | 211 +
.../clientpositive/vectorization_1.q.out | 146 +
.../clientpositive/vectorization_10.q.out | 114 +
.../clientpositive/vectorization_11.q.out | 96 +
.../clientpositive/vectorization_12.q.out | 1284 +-
.../clientpositive/vectorization_13.q.out | 43 +-
.../clientpositive/vectorization_14.q.out | 1301 +-
.../clientpositive/vectorization_15.q.out | 155 +-
.../clientpositive/vectorization_16.q.out | 364 +-
.../clientpositive/vectorization_17.q.out | 27 +-
.../clientpositive/vectorization_2.q.out | 150 +
.../clientpositive/vectorization_3.q.out | 155 +
.../clientpositive/vectorization_4.q.out | 149 +
.../clientpositive/vectorization_5.q.out | 144 +
.../clientpositive/vectorization_6.q.out | 108 +
.../clientpositive/vectorization_7.q.out | 10 +-
.../clientpositive/vectorization_8.q.out | 10 +-
.../clientpositive/vectorization_9.q.out | 364 +-
.../clientpositive/vectorization_limit.q.out | 28 +-
.../clientpositive/vectorization_pushdown.q.out | 2 +-
.../clientpositive/vectorized_case.q.out | 20 +-
.../clientpositive/vectorized_casts.q.out | 85 +-
.../clientpositive/vectorized_date_funcs.q.out | 4 +
.../vectorized_distinct_gby.q.out | 78 +-
.../clientpositive/vectorized_mapjoin.q.out | 16 +-
.../clientpositive/vectorized_mapjoin2.q.out | 12 +-
.../vectorized_parquet_types.q.out | 16 +-
.../clientpositive/vectorized_shufflejoin.q.out | 19 +-
.../clientpositive/vectorized_timestamp.q.out | 314 +-
.../vectorized_timestamp_funcs.q.out | 49 +-
.../test/results/clientpositive/view_cbo.q.out | 12 +-
.../results/clientpositive/windowing_gby2.q.out | 12 +-
.../clientpositive/windowing_navfn.q.out | 2 +-
.../clientpositive/windowing_streaming.q.out | 6 +-
serde/if/serde.thrift | 6 +-
.../src/gen/thrift/gen-cpp/serde_constants.cpp | 6 +-
serde/src/gen/thrift/gen-cpp/serde_constants.h | 2 +-
.../hadoop/hive/serde/serdeConstants.java | 6 +-
.../org/apache/hadoop/hive/serde/Types.php | 10 +-
.../org_apache_hadoop_hive_serde/constants.py | 6 +-
serde/src/gen/thrift/gen-rb/serde_constants.rb | 6 +-
.../apache/hadoop/hive/serde2/SerDeUtils.java | 6 +-
.../binarysortable/BinarySortableSerDe.java | 25 +-
.../serde2/io/TimestampLocalTZWritable.java | 449 +
.../hive/serde2/io/TimestampTZWritable.java | 427 -
.../hadoop/hive/serde2/lazy/LazyFactory.java | 6 +-
.../hive/serde2/lazy/LazySerDeParameters.java | 19 +-
.../hive/serde2/lazy/LazyTimestampLocalTZ.java | 102 +
.../hive/serde2/lazy/LazyTimestampTZ.java | 91 -
.../hadoop/hive/serde2/lazy/LazyUtils.java | 6 +-
.../lazy/fast/LazySimpleDeserializeRead.java | 14 +-
.../LazyPrimitiveObjectInspectorFactory.java | 8 +-
.../LazyTimestampLocalTZObjectInspector.java | 52 +
.../LazyTimestampTZObjectInspector.java | 43 -
.../serde2/lazybinary/LazyBinaryFactory.java | 6 +-
.../hive/serde2/lazybinary/LazyBinarySerDe.java | 8 +-
.../lazybinary/LazyBinaryTimestampLocalTZ.java | 43 +
.../lazybinary/LazyBinaryTimestampTZ.java | 36 -
.../hive/serde2/lazybinary/LazyBinaryUtils.java | 6 +-
.../ObjectInspectorConverters.java | 14 +-
.../objectinspector/ObjectInspectorUtils.java | 22 +-
.../PrimitiveObjectInspector.java | 6 +-
.../JavaTimestampLocalTZObjectInspector.java | 103 +
.../JavaTimestampTZObjectInspector.java | 76 -
.../PrimitiveObjectInspectorConverter.java | 23 +-
.../PrimitiveObjectInspectorFactory.java | 32 +-
.../PrimitiveObjectInspectorUtils.java | 123 +-
...SettableTimestampLocalTZObjectInspector.java | 34 +
.../SettableTimestampTZObjectInspector.java | 34 -
.../TimestampLocalTZObjectInspector.java | 29 +
.../primitive/TimestampTZObjectInspector.java | 29 -
...ConstantTimestampLocalTZObjectInspector.java | 40 +
...tableConstantTimestampTZObjectInspector.java | 36 -
...WritableTimestampLocalTZObjectInspector.java | 107 +
.../WritableTimestampTZObjectInspector.java | 79 -
.../serde2/thrift/ThriftJDBCBinarySerDe.java | 2 +-
.../apache/hadoop/hive/serde2/thrift/Type.java | 10 +-
.../typeinfo/TimestampLocalTZTypeInfo.java | 104 +
.../hive/serde2/typeinfo/TypeInfoFactory.java | 21 +-
.../hive/serde2/typeinfo/TypeInfoUtils.java | 28 +-
.../hive/serde2/io/TestTimestampTZWritable.java | 20 +-
.../hive/serde2/typeinfo/TestTypeInfoUtils.java | 34 +-
service-rpc/if/TCLIService.thrift | 8 +-
.../thrift/gen-cpp/TCLIService_constants.cpp | 2 +-
.../gen/thrift/gen-cpp/TCLIService_types.cpp | 4 +-
.../src/gen/thrift/gen-cpp/TCLIService_types.h | 2 +-
.../rpc/thrift/TCLIServiceConstants.java | 4 +-
.../apache/hive/service/rpc/thrift/TTypeId.java | 4 +-
service-rpc/src/gen/thrift/gen-php/Types.php | 6 +-
.../gen/thrift/gen-py/TCLIService/constants.py | 2 +-
.../src/gen/thrift/gen-py/TCLIService/ttypes.py | 6 +-
.../thrift/gen-rb/t_c_l_i_service_constants.rb | 2 +-
.../gen/thrift/gen-rb/t_c_l_i_service_types.rb | 6 +-
service/pom.xml | 11 +
.../org/apache/hive/tmpl/QueryProfileTmpl.jamon | 14 +-
.../apache/hive/service/cli/ColumnValue.java | 2 +-
.../apache/hive/service/cli/TypeDescriptor.java | 2 +-
.../operation/ExecuteStatementOperation.java | 8 +-
.../hive/service/cli/operation/Operation.java | 16 +-
.../service/cli/operation/SQLOperation.java | 5 +-
.../service/cli/session/HiveSessionHook.java | 4 +
.../service/cli/thrift/ThriftCLIService.java | 6 +-
.../cli/thrift/ThriftHttpCLIService.java | 19 +-
.../service/servlet/QueryProfileServlet.java | 4 +-
.../apache/hadoop/hive/shims/Hadoop23Shims.java | 60 +-
.../hadoop/hive/shims/TestHadoop23Shims.java | 14 +-
.../apache/hadoop/hive/shims/HadoopShims.java | 10 +-
.../hive/thrift/HadoopThriftAuthBridge.java | 16 +
.../apache/hive/spark/client/SparkClient.java | 9 +-
.../hive/spark/client/SparkClientFactory.java | 22 +-
.../hive/spark/client/SparkClientImpl.java | 68 +-
.../hive/spark/client/rpc/RpcConfiguration.java | 6 +-
.../hive/spark/client/rpc/RpcDispatcher.java | 7 +-
.../apache/hive/spark/client/rpc/RpcServer.java | 1 -
.../apache/hive/spark/client/rpc/TestRpc.java | 55 +-
standalone-metastore/pom.xml | 232 +
.../gen/thrift/gen-cpp/ThriftHiveMetastore.cpp | 74036 ++++++
.../gen/thrift/gen-cpp/ThriftHiveMetastore.h | 23462 ++
.../ThriftHiveMetastore_server.skeleton.cpp | 844 +
.../thrift/gen-cpp/hive_metastore_constants.cpp | 65 +
.../thrift/gen-cpp/hive_metastore_constants.h | 48 +
.../gen/thrift/gen-cpp/hive_metastore_types.cpp | 21819 ++
.../gen/thrift/gen-cpp/hive_metastore_types.h | 9034 +
.../hive/metastore/api/AbortTxnRequest.java | 387 +
.../hive/metastore/api/AbortTxnsRequest.java | 438 +
.../metastore/api/AddDynamicPartitions.java | 864 +
.../metastore/api/AddForeignKeyRequest.java | 443 +
.../api/AddNotNullConstraintRequest.java | 443 +
.../metastore/api/AddPartitionsRequest.java | 849 +
.../hive/metastore/api/AddPartitionsResult.java | 447 +
.../metastore/api/AddPrimaryKeyRequest.java | 443 +
.../api/AddUniqueConstraintRequest.java | 443 +
.../hadoop/hive/metastore/api/AggrStats.java | 542 +
.../metastore/api/AlreadyExistsException.java | 395 +
.../metastore/api/BinaryColumnStatsData.java | 696 +
.../metastore/api/BooleanColumnStatsData.java | 696 +
.../metastore/api/CacheFileMetadataRequest.java | 703 +
.../metastore/api/CacheFileMetadataResult.java | 387 +
.../hive/metastore/api/CheckLockRequest.java | 589 +
.../metastore/api/ClearFileMetadataRequest.java | 438 +
.../metastore/api/ClearFileMetadataResult.java | 283 +
.../hive/metastore/api/ClientCapabilities.java | 441 +
.../hive/metastore/api/ClientCapability.java | 45 +
.../hive/metastore/api/CmRecycleRequest.java | 488 +
.../hive/metastore/api/CmRecycleResponse.java | 283 +
.../hive/metastore/api/ColumnStatistics.java | 549 +
.../metastore/api/ColumnStatisticsData.java | 675 +
.../metastore/api/ColumnStatisticsDesc.java | 798 +
.../hive/metastore/api/ColumnStatisticsObj.java | 593 +
.../hive/metastore/api/CommitTxnRequest.java | 387 +
.../hive/metastore/api/CompactionRequest.java | 977 +
.../hive/metastore/api/CompactionResponse.java | 583 +
.../hive/metastore/api/CompactionType.java | 45 +
.../api/ConfigValSecurityException.java | 395 +
.../api/CurrentNotificationEventId.java | 387 +
.../hive/metastore/api/DataOperationType.java | 57 +
.../hadoop/hive/metastore/api/Database.java | 1095 +
.../apache/hadoop/hive/metastore/api/Date.java | 387 +
.../hive/metastore/api/DateColumnStatsData.java | 823 +
.../hadoop/hive/metastore/api/Decimal.java | 497 +
.../metastore/api/DecimalColumnStatsData.java | 823 +
.../metastore/api/DoubleColumnStatsData.java | 799 +
.../metastore/api/DropConstraintRequest.java | 591 +
.../hive/metastore/api/DropPartitionsExpr.java | 505 +
.../metastore/api/DropPartitionsRequest.java | 1112 +
.../metastore/api/DropPartitionsResult.java | 447 +
.../hive/metastore/api/EnvironmentContext.java | 447 +
.../hive/metastore/api/EventRequestType.java | 48 +
.../hadoop/hive/metastore/api/FieldSchema.java | 603 +
.../metastore/api/FileMetadataExprType.java | 42 +
.../hive/metastore/api/FireEventRequest.java | 861 +
.../metastore/api/FireEventRequestData.java | 309 +
.../hive/metastore/api/FireEventResponse.java | 283 +
.../hive/metastore/api/ForeignKeysRequest.java | 707 +
.../hive/metastore/api/ForeignKeysResponse.java | 443 +
.../hadoop/hive/metastore/api/Function.java | 1199 +
.../hadoop/hive/metastore/api/FunctionType.java | 42 +
.../metastore/api/GetAllFunctionsResponse.java | 447 +
.../api/GetFileMetadataByExprRequest.java | 773 +
.../api/GetFileMetadataByExprResult.java | 553 +
.../metastore/api/GetFileMetadataRequest.java | 438 +
.../metastore/api/GetFileMetadataResult.java | 540 +
.../metastore/api/GetOpenTxnsInfoResponse.java | 542 +
.../hive/metastore/api/GetOpenTxnsResponse.java | 750 +
.../api/GetPrincipalsInRoleRequest.java | 389 +
.../api/GetPrincipalsInRoleResponse.java | 443 +
.../api/GetRoleGrantsForPrincipalRequest.java | 502 +
.../api/GetRoleGrantsForPrincipalResponse.java | 443 +
.../hive/metastore/api/GetTableRequest.java | 605 +
.../hive/metastore/api/GetTableResult.java | 394 +
.../hive/metastore/api/GetTablesRequest.java | 659 +
.../hive/metastore/api/GetTablesResult.java | 443 +
.../api/GrantRevokePrivilegeRequest.java | 620 +
.../api/GrantRevokePrivilegeResponse.java | 390 +
.../metastore/api/GrantRevokeRoleRequest.java | 1059 +
.../metastore/api/GrantRevokeRoleResponse.java | 390 +
.../hive/metastore/api/GrantRevokeType.java | 45 +
.../hive/metastore/api/HeartbeatRequest.java | 489 +
.../metastore/api/HeartbeatTxnRangeRequest.java | 482 +
.../api/HeartbeatTxnRangeResponse.java | 588 +
.../hive/metastore/api/HiveObjectPrivilege.java | 729 +
.../hive/metastore/api/HiveObjectRef.java | 872 +
.../hive/metastore/api/HiveObjectType.java | 54 +
.../apache/hadoop/hive/metastore/api/Index.java | 1374 +
.../api/IndexAlreadyExistsException.java | 395 +
.../metastore/api/InsertEventRequestData.java | 700 +
.../metastore/api/InvalidInputException.java | 395 +
.../metastore/api/InvalidObjectException.java | 395 +
.../api/InvalidOperationException.java | 395 +
.../api/InvalidPartitionException.java | 395 +
.../hive/metastore/api/LockComponent.java | 1158 +
.../hadoop/hive/metastore/api/LockLevel.java | 48 +
.../hadoop/hive/metastore/api/LockRequest.java | 861 +
.../hadoop/hive/metastore/api/LockResponse.java | 500 +
.../hadoop/hive/metastore/api/LockState.java | 51 +
.../hadoop/hive/metastore/api/LockType.java | 48 +
.../hive/metastore/api/LongColumnStatsData.java | 799 +
.../hive/metastore/api/MetaException.java | 395 +
.../hive/metastore/api/MetadataPpdResult.java | 517 +
.../hive/metastore/api/NoSuchLockException.java | 395 +
.../metastore/api/NoSuchObjectException.java | 395 +
.../hive/metastore/api/NoSuchTxnException.java | 395 +
.../api/NotNullConstraintsRequest.java | 490 +
.../api/NotNullConstraintsResponse.java | 443 +
.../hive/metastore/api/NotificationEvent.java | 1006 +
.../metastore/api/NotificationEventRequest.java | 490 +
.../api/NotificationEventResponse.java | 443 +
.../api/NotificationEventsCountRequest.java | 488 +
.../api/NotificationEventsCountResponse.java | 387 +
.../hive/metastore/api/OpenTxnRequest.java | 702 +
.../hive/metastore/api/OpenTxnsResponse.java | 438 +
.../apache/hadoop/hive/metastore/api/Order.java | 497 +
.../hadoop/hive/metastore/api/Partition.java | 1229 +
.../hive/metastore/api/PartitionEventType.java | 42 +
.../api/PartitionListComposingSpec.java | 449 +
.../hive/metastore/api/PartitionSpec.java | 826 +
.../api/PartitionSpecWithSharedSD.java | 558 +
.../hive/metastore/api/PartitionWithoutSD.java | 1016 +
.../metastore/api/PartitionsByExprRequest.java | 815 +
.../metastore/api/PartitionsByExprResult.java | 542 +
.../metastore/api/PartitionsStatsRequest.java | 790 +
.../metastore/api/PartitionsStatsResult.java | 490 +
.../hive/metastore/api/PrimaryKeysRequest.java | 490 +
.../hive/metastore/api/PrimaryKeysResponse.java | 443 +
.../metastore/api/PrincipalPrivilegeSet.java | 906 +
.../hive/metastore/api/PrincipalType.java | 48 +
.../hadoop/hive/metastore/api/PrivilegeBag.java | 449 +
.../hive/metastore/api/PrivilegeGrantInfo.java | 815 +
.../metastore/api/PutFileMetadataRequest.java | 710 +
.../metastore/api/PutFileMetadataResult.java | 283 +
.../hive/metastore/api/RequestPartsSpec.java | 438 +
.../hadoop/hive/metastore/api/ResourceType.java | 48 +
.../hadoop/hive/metastore/api/ResourceUri.java | 511 +
.../apache/hadoop/hive/metastore/api/Role.java | 601 +
.../hive/metastore/api/RolePrincipalGrant.java | 1035 +
.../hive/metastore/api/SQLForeignKey.java | 1715 +
.../metastore/api/SQLNotNullConstraint.java | 1005 +
.../hive/metastore/api/SQLPrimaryKey.java | 1103 +
.../hive/metastore/api/SQLUniqueConstraint.java | 1103 +
.../hadoop/hive/metastore/api/Schema.java | 605 +
.../hadoop/hive/metastore/api/SerDeInfo.java | 655 +
.../api/SetPartitionsStatsRequest.java | 550 +
.../hive/metastore/api/ShowCompactRequest.java | 283 +
.../hive/metastore/api/ShowCompactResponse.java | 443 +
.../api/ShowCompactResponseElement.java | 1641 +
.../hive/metastore/api/ShowLocksRequest.java | 710 +
.../hive/metastore/api/ShowLocksResponse.java | 449 +
.../metastore/api/ShowLocksResponseElement.java | 1929 +
.../hadoop/hive/metastore/api/SkewedInfo.java | 834 +
.../hive/metastore/api/StorageDescriptor.java | 1748 +
.../metastore/api/StringColumnStatsData.java | 791 +
.../apache/hadoop/hive/metastore/api/Table.java | 1948 +
.../hadoop/hive/metastore/api/TableMeta.java | 701 +
.../hive/metastore/api/TableStatsRequest.java | 640 +
.../hive/metastore/api/TableStatsResult.java | 443 +
.../hive/metastore/api/ThriftHiveMetastore.java | 188205 ++++++++++++++++
.../hive/metastore/api/TxnAbortedException.java | 395 +
.../hadoop/hive/metastore/api/TxnInfo.java | 1220 +
.../hive/metastore/api/TxnOpenException.java | 395 +
.../hadoop/hive/metastore/api/TxnState.java | 48 +
.../apache/hadoop/hive/metastore/api/Type.java | 768 +
.../metastore/api/UniqueConstraintsRequest.java | 490 +
.../api/UniqueConstraintsResponse.java | 443 +
.../hive/metastore/api/UnknownDBException.java | 395 +
.../api/UnknownPartitionException.java | 395 +
.../metastore/api/UnknownTableException.java | 395 +
.../hive/metastore/api/UnlockRequest.java | 387 +
.../hadoop/hive/metastore/api/Version.java | 499 +
.../metastore/api/hive_metastoreConstants.java | 87 +
.../gen-php/metastore/ThriftHiveMetastore.php | 47128 ++++
.../src/gen/thrift/gen-php/metastore/Types.php | 21262 ++
.../hive_metastore/ThriftHiveMetastore-remote | 1305 +
.../hive_metastore/ThriftHiveMetastore.py | 38297 ++++
.../thrift/gen-py/hive_metastore/__init__.py | 1 +
.../thrift/gen-py/hive_metastore/constants.py | 35 +
.../gen/thrift/gen-py/hive_metastore/ttypes.py | 15163 ++
.../thrift/gen-rb/hive_metastore_constants.rb | 57 +
.../gen/thrift/gen-rb/hive_metastore_types.rb | 3516 +
.../gen/thrift/gen-rb/thrift_hive_metastore.rb | 10672 +
.../hadoop/hive/metastore/ThreadPool.java | 63 +
.../hive/metastore/conf/MetastoreConf.java | 1514 +
.../hive/metastore/metrics/JsonReporter.java | 166 +
.../hive/metastore/metrics/JvmPauseMonitor.java | 222 +
.../hadoop/hive/metastore/metrics/Metrics.java | 243 +
.../metastore/metrics/MetricsConstants.java | 46 +
.../hive/metastore/metrics/PerfLogger.java | 194 +
.../hive/metastore/model/MColumnDescriptor.java | 51 +
.../hive/metastore/model/MConstraint.java | 188 +
.../hive/metastore/model/MDBPrivilege.java | 132 +
.../hadoop/hive/metastore/model/MDatabase.java | 128 +
.../hive/metastore/model/MDelegationToken.java | 45 +
.../hive/metastore/model/MFieldSchema.java | 80 +
.../hadoop/hive/metastore/model/MFunction.java | 119 +
.../hive/metastore/model/MGlobalPrivilege.java | 120 +
.../hadoop/hive/metastore/model/MIndex.java | 200 +
.../hadoop/hive/metastore/model/MMasterKey.java | 55 +
.../metastore/model/MMetastoreDBProperties.java | 56 +
.../hive/metastore/model/MNotificationLog.java | 98 +
.../metastore/model/MNotificationNextId.java | 42 +
.../hadoop/hive/metastore/model/MOrder.java | 62 +
.../hadoop/hive/metastore/model/MPartition.java | 155 +
.../model/MPartitionColumnPrivilege.java | 161 +
.../model/MPartitionColumnStatistics.java | 272 +
.../hive/metastore/model/MPartitionEvent.java | 90 +
.../metastore/model/MPartitionPrivilege.java | 139 +
.../hive/metastore/model/MPrincipalDesc.java | 59 +
.../hive/metastore/model/MResourceUri.java | 49 +
.../hadoop/hive/metastore/model/MRole.java | 80 +
.../hadoop/hive/metastore/model/MRoleMap.java | 120 +
.../hadoop/hive/metastore/model/MSerDeInfo.java | 81 +
.../metastore/model/MStorageDescriptor.java | 277 +
.../hive/metastore/model/MStringList.java | 62 +
.../hadoop/hive/metastore/model/MTable.java | 256 +
.../metastore/model/MTableColumnPrivilege.java | 160 +
.../metastore/model/MTableColumnStatistics.java | 263 +
.../hive/metastore/model/MTablePrivilege.java | 139 +
.../hadoop/hive/metastore/model/MType.java | 105 +
.../hive/metastore/model/MVersionTable.java | 57 +
.../security/DelegationTokenIdentifier.java | 52 +
.../security/DelegationTokenSecretManager.java | 125 +
.../security/DelegationTokenStore.java | 118 +
.../security/HadoopThriftAuthBridge.java | 684 +
.../security/HadoopThriftAuthBridge23.java | 114 +
.../metastore/security/MemoryTokenStore.java | 136 +
.../MetastoreDelegationTokenManager.java | 172 +
.../metastore/security/TFilterTransport.java | 99 +
.../security/TUGIAssumingTransport.java | 73 +
.../security/TUGIContainingTransport.java | 96 +
.../TokenStoreDelegationTokenSecretManager.java | 333 +
.../hadoop/hive/metastore/utils/HdfsUtils.java | 125 +
.../hive/metastore/utils/SecurityUtils.java | 40 +
.../hive/metastore/utils/StringUtils.java | 112 +
.../MetastoreDelegationTokenSupport.java | 68 +
.../src/main/resources/package.jdo | 1087 +
.../src/main/resources/thrift-replacements.txt | 69 +
.../src/main/thrift/hive_metastore.thrift | 1613 +
.../hive/metastore/conf/TestMetastoreConf.java | 414 +
.../hive/metastore/metrics/TestMetrics.java | 200 +
.../hive/metastore/utils/TestHdfsUtils.java | 193 +
.../apache/hadoop/hive/common/io/Allocator.java | 17 +
.../apache/hadoop/hive/common/io/DataCache.java | 6 +
.../hadoop/hive/common/io/DiskRangeList.java | 80 +-
.../hive/common/io/FileMetadataCache.java | 51 +
.../io/encoded/MemoryBufferOrBuffers.java | 24 +
.../hive/common/type/FastHiveDecimal.java | 18 +
.../hive/common/type/FastHiveDecimalImpl.java | 71 +-
.../hive/ql/io/sarg/SearchArgumentImpl.java | 5 +-
.../hive/serde2/io/HiveDecimalWritable.java | 58 +
.../apache/hive/common/util/BloomFilter.java | 37 +-
.../apache/hive/common/util/BloomKFilter.java | 472 +
.../hive/common/io/TestDiskRangeList.java | 106 +
.../hive/common/type/HiveDecimalTestBase.java | 10 +
.../hive/common/type/TestHiveDecimal.java | 73 +
.../hive/common/util/TestBloomFilter.java | 136 +-
.../hive/common/util/TestBloomKFilter.java | 699 +
.../ptest2/conf/deployed/master-mr2.properties | 57 +-
.../ptest2/conf/server-env.properties.example | 23 +
.../ptest/api/server/ExecutionController.java | 5 +-
.../hive/ptest/api/server/TestExecutor.java | 16 +-
.../org/apache/hive/ptest/execution/PTest.java | 18 +-
.../hive/ptest/execution/conf/Context.java | 84 +
.../conf/ExecutionContextConfiguration.java | 20 +-
.../ptest/execution/conf/TestConfiguration.java | 20 +-
.../hive/ptest/execution/conf/TestParser.java | 3 +-
.../hive/ptest/execution/TestJIRAService.java | 6 +-
.../hive/ptest/execution/conf/TestContext.java | 68 +
.../execution/conf/TestTestConfiguration.java | 10 +-
.../apache/hadoop/hive/tools/GenVectorCode.java | 345 +-
2788 files changed, 803465 insertions(+), 684284 deletions(-)
----------------------------------------------------------------------
[38/50] [abbrv] hive git commit: HIVE-15212 : merge branch into
master - fix some tests (Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-15212 : merge branch into master - fix some tests (Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/a02a61b3
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/a02a61b3
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/a02a61b3
Branch: refs/heads/master
Commit: a02a61b3e242732cb57f21dc18358e205113da8a
Parents: a0c546f
Author: sergey <se...@apache.org>
Authored: Thu Sep 28 20:33:30 2017 -0700
Committer: sergey <se...@apache.org>
Committed: Thu Sep 28 20:33:30 2017 -0700
----------------------------------------------------------------------
ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java | 1 -
ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java | 5 +++++
2 files changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/a02a61b3/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java
index 1a9b39f..b7d65ec 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java
@@ -61,7 +61,6 @@ public class ReplCopyTask extends Task<ReplCopyWork> implements Serializable {
FileSystem dstFs = null;
Path toPath = null;
try {
- // TODO: merge with real CopyTask logic?
Path fromPath = work.getFromPaths()[0];
toPath = work.getToPaths()[0];
http://git-wip-us.apache.org/repos/asf/hive/blob/a02a61b3/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
index d4282ed..5fd4ecc 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
@@ -63,6 +63,7 @@ import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileChecksum;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.PathFilter;
import org.apache.hadoop.hive.common.BlobStorageUtils;
@@ -3895,6 +3896,9 @@ private void constructOneLBLocationMap(FileStatus fSta,
private void cleanUpOneDirectoryForReplace(Path path, FileSystem fs,
PathFilter pathFilter, HiveConf conf, boolean purge) throws IOException, HiveException {
+ if (conf.getBoolVar(HiveConf.ConfVars.REPLCMENABLED)) {
+ recycleDirToCmPath(path, purge);
+ }
FileStatus[] statuses = fs.listStatus(path, pathFilter);
if (statuses == null || statuses.length == 0) return;
if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
@@ -3904,6 +3908,7 @@ private void constructOneLBLocationMap(FileStatus fSta,
}
Utilities.FILE_OP_LOGGER.trace(s);
}
+
if (!trashFiles(fs, statuses, conf, purge)) {
throw new HiveException("Old path " + path + " has not been cleaned up.");
}
[26/50] [abbrv] hive git commit: HIVE-15212 : merge branch into
master - some initial cleanup and fixes (Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-15212 : merge branch into master - some initial cleanup and fixes (Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/543e0b01
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/543e0b01
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/543e0b01
Branch: refs/heads/master
Commit: 543e0b01a27fa5a51ac3adcfb6c878c403c6be7b
Parents: 9a9f254
Author: sergey <se...@apache.org>
Authored: Fri Sep 15 12:51:35 2017 -0700
Committer: sergey <se...@apache.org>
Committed: Fri Sep 15 12:51:35 2017 -0700
----------------------------------------------------------------------
.../hadoop/hive/metastore/MetaStoreUtils.java | 3 +-
.../hadoop/hive/metastore/TestObjectStore.java | 3 +-
.../hive/ql/exec/HashTableSinkOperator.java | 3 +-
.../apache/hadoop/hive/ql/exec/MoveTask.java | 2 +-
.../hadoop/hive/ql/exec/ReplCopyTask.java | 2 +-
.../apache/hadoop/hive/ql/exec/Utilities.java | 32 ++++++++++++--------
.../apache/hadoop/hive/ql/metadata/Hive.java | 2 +-
.../BucketingSortingReduceSinkOptimizer.java | 1 -
.../hive/ql/optimizer/GenMapRedUtils.java | 7 ++---
.../hive/ql/optimizer/StatsOptimizer.java | 6 ----
.../hive/ql/parse/ImportSemanticAnalyzer.java | 20 ++++++------
.../hive/ql/plan/BucketMapJoinContext.java | 1 -
.../apache/hadoop/hive/ql/plan/MoveWork.java | 1 -
.../apache/hadoop/hive/ql/TestTxnCommands2.java | 17 ++++++-----
14 files changed, 49 insertions(+), 51 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/543e0b01/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
----------------------------------------------------------------------
diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
index 49005b9..faec3a8 100644
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
@@ -1977,7 +1977,6 @@ public class MetaStoreUtils {
* @param params table properties
* @return true if table is an INSERT_ONLY table, false otherwise
*/
- // TODO# also check that transactional is true
public static boolean isInsertOnlyTable(Map<String, String> params) {
return isInsertOnlyTable(params, false);
}
@@ -1998,7 +1997,7 @@ public class MetaStoreUtils {
/** The method for altering table props; may set the table to MM, non-MM, or not affect MM. */
public static Boolean isToInsertOnlyTable(Map<String, String> props) {
- // TODO# Setting these separately is a very hairy issue in certain combinations, since we
+ // TODO: Setting these separately is a very hairy issue in certain combinations, since we
// cannot decide what type of table this becomes without taking both into account, and
// in many cases the conversion might be illegal.
// The only thing we allow is tx = true w/o tx-props, for backward compat.
http://git-wip-us.apache.org/repos/asf/hive/blob/543e0b01/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
----------------------------------------------------------------------
diff --git a/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java b/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
index 176fc4c..e6661f9 100644
--- a/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
+++ b/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
@@ -19,6 +19,7 @@ package org.apache.hadoop.hive.metastore;
import com.codahale.metrics.Counter;
+import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.metastore.api.CurrentNotificationEventId;
@@ -57,8 +58,6 @@ import org.mockito.Mockito;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.base.Supplier;
-import com.google.common.collect.ImmutableList;
import javax.jdo.Query;
import java.util.Arrays;
import java.util.HashMap;
http://git-wip-us.apache.org/repos/asf/hive/blob/543e0b01/ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableSinkOperator.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableSinkOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableSinkOperator.java
index f4f20f0..0b8045e 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableSinkOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableSinkOperator.java
@@ -301,9 +301,10 @@ public class HashTableSinkOperator extends TerminalOperator<HashTableSinkDesc> i
String bigBucketFileName = getExecContext().getCurrentBigBucketFile();
String fileName = getExecContext().getLocalWork().getBucketFileName(bigBucketFileName);
// get the tmp URI path; it will be a hdfs path if not local mode
- // TODO# this doesn't work... the path for writer and reader mismatch
+ // TODO: this doesn't work... the path for writer and reader mismatch
// Dump the side-table for tag ... -local-10004/HashTable-Stage-1/MapJoin-a-00-(ds%3D2008-04-08)mm_2.hashtable
// Load back 1 hashtable file -local-10004/HashTable-Stage-1/MapJoin-a-00-srcsortbucket3outof4.txt.hashtable
+ // Hive3 probably won't support MR so do we really care?
String dumpFilePrefix = conf.getDumpFilePrefix();
Path path = Utilities.generatePath(tmpURI, dumpFilePrefix, tag, fileName);
console.printInfo(Utilities.now() + "\tDump the side-table for tag: " + tag +
http://git-wip-us.apache.org/repos/asf/hive/blob/543e0b01/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
index 34d0598..739ce18 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
@@ -268,7 +268,7 @@ public class MoveTask extends Task<MoveWork> implements Serializable {
@Override
public int execute(DriverContext driverContext) {
- if (work.isNoop()) return 0; // TODO# temporary flag for HIVE-14990
+ if (work.isNoop()) return 0;
Utilities.LOG14535.info("Executing MoveWork " + System.identityHashCode(work)
+ " with " + work.getLoadFileWork() + "; " + work.getLoadTableWork() + "; "
+ work.getLoadMultiFilesWork());
http://git-wip-us.apache.org/repos/asf/hive/blob/543e0b01/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java
index 86e21cb..1a9b39f 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java
@@ -61,7 +61,7 @@ public class ReplCopyTask extends Task<ReplCopyWork> implements Serializable {
FileSystem dstFs = null;
Path toPath = null;
try {
- // TODO# merge with real CopyTask logic
+ // TODO: merge with real CopyTask logic?
Path fromPath = work.getFromPaths()[0];
toPath = work.getToPaths()[0];
http://git-wip-us.apache.org/repos/asf/hive/blob/543e0b01/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
index c6d4616..3f6fb36 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
@@ -1124,9 +1124,6 @@ public final class Utilities {
if (orig.getName().indexOf(tmpPrefix) == 0) {
return orig;
}
- if (orig.getName().contains("=1")) {
- LOG.error("TODO# creating tmp path from " + orig, new Exception());
- }
return new Path(orig.getParent(), tmpPrefix + orig.getName());
}
@@ -1466,7 +1463,8 @@ public final class Utilities {
Set<Path> filesKept = new HashSet<Path>();
perfLogger.PerfLogBegin("FileSinkOperator", "RemoveTempOrDuplicateFiles");
// remove any tmp file or double-committed output files
- List<Path> emptyBuckets = Utilities.removeTempOrDuplicateFiles(fs, statuses, dpCtx, conf, hconf, filesKept);
+ List<Path> emptyBuckets = Utilities.removeTempOrDuplicateFiles(
+ fs, statuses, dpCtx, conf, hconf, filesKept);
perfLogger.PerfLogEnd("FileSinkOperator", "RemoveTempOrDuplicateFiles");
// create empty buckets if necessary
if (emptyBuckets.size() > 0) {
@@ -1578,11 +1576,12 @@ public final class Utilities {
* @return a list of path names corresponding to should-be-created empty buckets.
*/
public static List<Path> removeTempOrDuplicateFiles(FileSystem fs, FileStatus[] fileStats,
- DynamicPartitionCtx dpCtx, FileSinkDesc conf, Configuration hconf, Set<Path> filesKept) throws IOException {
+ DynamicPartitionCtx dpCtx, FileSinkDesc conf, Configuration hconf, Set<Path> filesKept)
+ throws IOException {
int dpLevels = dpCtx == null ? 0 : dpCtx.getNumDPCols(),
- numBuckets = (conf != null && conf.getTable() != null)
- ? conf.getTable().getNumBuckets() : 0;
- return removeTempOrDuplicateFiles(fs, fileStats, dpLevels, numBuckets, hconf, null, 0, false);
+ numBuckets = (conf != null && conf.getTable() != null) ? conf.getTable().getNumBuckets() : 0;
+ return removeTempOrDuplicateFiles(
+ fs, fileStats, dpLevels, numBuckets, hconf, null, 0, false, filesKept);
}
private static boolean removeEmptyDpDirectory(FileSystem fs, Path path) throws IOException {
@@ -1598,7 +1597,8 @@ public final class Utilities {
}
public static List<Path> removeTempOrDuplicateFiles(FileSystem fs, FileStatus[] fileStats,
- int dpLevels, int numBuckets, Configuration hconf, Long txnId, int stmtId, boolean isMmTable) throws IOException {
+ int dpLevels, int numBuckets, Configuration hconf, Long txnId, int stmtId, boolean isMmTable,
+ Set<Path> filesKept) throws IOException {
if (fileStats == null) {
return null;
}
@@ -1625,6 +1625,9 @@ public final class Utilities {
Utilities.LOG14535.info("removeTempOrDuplicateFiles processing files in MM directory " + mmDir);
}
taskIDToFile = removeTempOrDuplicateFilesNonMm(items, fs);
+ if (filesKept != null && taskIDToFile != null) {
+ addFilesToPathSet(taskIDToFile.values(), filesKept);
+ }
// TODO: not clear why two if conditions are different. Preserve the existing logic for now.
addBucketFileToResults(taskIDToFile, numBuckets, hconf, result);
@@ -1636,6 +1639,9 @@ public final class Utilities {
}
if (!isMmTable) {
taskIDToFile = removeTempOrDuplicateFilesNonMm(items, fs);
+ if (filesKept != null && taskIDToFile != null) {
+ addFilesToPathSet(taskIDToFile.values(), filesKept);
+ }
} else {
if (items.length > 1) {
throw new IOException("Unexpected directories for non-DP MM: " + Arrays.toString(items));
@@ -1647,6 +1653,9 @@ public final class Utilities {
Utilities.LOG14535.info(
"removeTempOrDuplicateFiles processing files in MM directory " + mmDir);
taskIDToFile = removeTempOrDuplicateFilesNonMm(fs.listStatus(mmDir), fs);
+ if (filesKept != null && taskIDToFile != null) {
+ addFilesToPathSet(taskIDToFile.values(), filesKept);
+ }
}
// TODO: not clear why two if conditions are different. Preserve the existing logic for now.
addBucketFileToResults2(taskIDToFile, numBuckets, hconf, result);
@@ -4194,7 +4203,6 @@ public final class Utilities {
}
Utilities.LOG14535.info("Looking for manifests in: " + manifestDir + " (" + txnId + ")");
- // TODO# may be wrong if there are no splits (empty insert/CTAS)
List<Path> manifests = new ArrayList<>();
if (fs.exists(manifestDir)) {
FileStatus[] manifestFiles = fs.listStatus(manifestDir);
@@ -4275,8 +4283,8 @@ public final class Utilities {
for (int i = 0; i < mmDirectories.size(); ++i) {
finalResults[i] = new PathOnlyFileStatus(mmDirectories.get(i));
}
- List<Path> emptyBuckets = Utilities.removeTempOrDuplicateFiles(
- fs, finalResults, dpLevels, mbc == null ? 0 : mbc.numBuckets, hconf, txnId, stmtId, isMmTable);
+ List<Path> emptyBuckets = Utilities.removeTempOrDuplicateFiles(fs, finalResults, dpLevels,
+ mbc == null ? 0 : mbc.numBuckets, hconf, txnId, stmtId, isMmTable, null);
// create empty buckets if necessary
if (emptyBuckets.size() > 0) {
assert mbc != null;
http://git-wip-us.apache.org/repos/asf/hive/blob/543e0b01/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
index ff5ffe9..e51e648 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
@@ -1911,7 +1911,7 @@ public class Hive {
private void walkDirTree(FileStatus fSta, FileSystem fSys,
Map<List<String>, String> skewedColValueLocationMaps, Path newPartPath, SkewedInfo skewedInfo)
throws IOException {
- // TODO# HERE broken
+ // TODO: may be broken? no LB bugs for now but if any are found.
/* Base Case. It's leaf. */
if (!fSta.isDir()) {
http://git-wip-us.apache.org/repos/asf/hive/blob/543e0b01/ql/src/java/org/apache/hadoop/hive/ql/optimizer/BucketingSortingReduceSinkOptimizer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/BucketingSortingReduceSinkOptimizer.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/BucketingSortingReduceSinkOptimizer.java
index 09c3079..85dcdd7 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/BucketingSortingReduceSinkOptimizer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/BucketingSortingReduceSinkOptimizer.java
@@ -237,7 +237,6 @@ public class BucketingSortingReduceSinkOptimizer extends Transform {
Map<String, Integer> bucketFileNameMapping = new HashMap<String, Integer>();
for (int pos = 0; pos < srcs.length; pos++) {
if (ShimLoader.getHadoopShims().isDirectory(srcs[pos])) {
- // TODO# HERE
throw new RuntimeException("Was expecting '" + srcs[pos].getPath() + "' to be bucket file.");
}
bucketFileNameMapping.put(srcs[pos].getPath().getName(), pos);
http://git-wip-us.apache.org/repos/asf/hive/blob/543e0b01/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
index 02e6512..6dfa607 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
@@ -1371,7 +1371,7 @@ public final class GenMapRedUtils {
dummyMv = new MoveWork(null, null, null,
new LoadFileDesc(inputDirName, finalName, true, null, null, false), false);
} else {
- // TODO# create the noop MoveWork to avoid q file changes for now. Should be removed.
+ // TODO# create the noop MoveWork to avoid q file changes for now. Should be removed w/the flag just before merge
dummyMv = new MoveWork(null, null, null,
new LoadFileDesc(inputDirName, finalName, true, null, null, false), false);
dummyMv.setNoop(true);
@@ -1380,13 +1380,11 @@ public final class GenMapRedUtils {
// MM directory, the original MoveTask still commits based on the parent. Note that this path
// can only be triggered for a merge that's part of insert for now; MM tables do not support
// concatenate. Keeping the old logic for non-MM tables with temp directories and stuff.
- // TODO# is this correct?
Path fsopPath = srcMmWriteId != null ? fsInputDesc.getFinalDirName() : finalName;
Utilities.LOG14535.info("Looking for MoveTask to make it dependant on the conditional tasks");
Task<MoveWork> mvTask = GenMapRedUtils.findMoveTaskForFsopOutput(
mvTasks, fsopPath, fsInputDesc.isMmTable());
- // TODO# questionable master merge here
ConditionalTask cndTsk = GenMapRedUtils.createCondTask(conf, currTask, dummyMv, work,
fsInputDesc.getMergeInputDirName(), finalName, mvTask, dependencyTask);
@@ -1847,7 +1845,7 @@ public final class GenMapRedUtils {
srcDir = srcDir.getParent();
}
} else if (mvWork.getLoadTableWork() != null) {
- srcDir = mvWork.getLoadTableWork().getSourcePath(); // TODO# THIS
+ srcDir = mvWork.getLoadTableWork().getSourcePath();
}
Utilities.LOG14535.info("Observing MoveWork " + System.identityHashCode(mvWork)
+ " with " + srcDir + "(from " + (isLfd ? "LFD" : "LTD") + ") while looking for "
@@ -1970,7 +1968,6 @@ public final class GenMapRedUtils {
Task<MoveWork> mvTask = null;
if (!chDir) {
- // TODO# is it correct to always use MM dir in MM case here? Where does MoveTask point?
Utilities.LOG14535.info("Looking for MoveTask from createMoveTask");
mvTask = GenMapRedUtils.findMoveTaskForFsopOutput(
mvTasks, fsOp.getConf().getFinalDirName(), fsOp.getConf().isMmTable());
http://git-wip-us.apache.org/repos/asf/hive/blob/543e0b01/ql/src/java/org/apache/hadoop/hive/ql/optimizer/StatsOptimizer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/StatsOptimizer.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/StatsOptimizer.java
index 0fe1ea3..7b2a1a9 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/StatsOptimizer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/StatsOptimizer.java
@@ -342,12 +342,6 @@ public class StatsOptimizer extends Transform {
return null; // todo we can collapse this part of tree into single TS
}
- /* TODO# seems to be removed in master?
- Table tbl = tsOp.getConf().getTableMetadata();
- if (AcidUtils.isFullAcidTable(tbl)) {
- Logger.info("Table " + tbl.getTableName() + " is ACID table. Skip StatsOptimizer.");
- return null;
- }*/
List<Object> oneRow = new ArrayList<Object>();
Hive hive = Hive.get(pctx.getConf());
http://git-wip-us.apache.org/repos/asf/hive/blob/543e0b01/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
index a41cc8b..814910d 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
@@ -314,9 +314,9 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
Long txnId = SessionState.get().getTxnMgr().getCurrentTxnId();
int stmtId = 0;
- //todo due to the master merge, tblDesc is no longer CreateTableDesc, but ImportTableDesc
+ // TODO: due to the master merge, tblDesc is no longer CreateTableDesc, but ImportTableDesc
/*
- if (txnId != null) {
+ if (isAcid(txnId)) {
tblDesc.setInitialMmWriteId(txnId);
}
*/
@@ -374,10 +374,9 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
Task<?> copyTask = null;
if (replicationSpec.isInReplicationScope()) {
- if (isSourceMm || txnId != null) {
+ if (isSourceMm || isAcid(txnId)) {
// TODO: ReplCopyTask is completely screwed. Need to support when it's not as screwed.
- throw new RuntimeException(
- "Not supported right now because Replication is completely screwed");
+ throw new RuntimeException("Replicating MM and ACID tables is not supported");
}
copyTask = ReplCopyTask.getLoadCopyTask(replicationSpec, dataPath, destPath, x.getConf());
} else {
@@ -397,6 +396,10 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
return loadTableTask;
}
+ private static boolean isAcid(Long txnId) {
+ return (txnId != null) && (txnId != 0);
+ }
+
private static Task<?> createTableTask(ImportTableDesc tableDesc, EximUtil.SemanticAnalyzerWrapperContext x){
return tableDesc.getCreateTableTask(x.getInputs(), x.getOutputs(), x.getConf());
}
@@ -458,10 +461,9 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
Task<?> copyTask = null;
if (replicationSpec.isInReplicationScope()) {
- if (isSourceMm || txnId != null) {
+ if (isSourceMm || isAcid(txnId)) {
// TODO: ReplCopyTask is completely screwed. Need to support when it's not as screwed.
- throw new RuntimeException(
- "Not supported right now because Replication is completely screwed");
+ throw new RuntimeException("Replicating MM and ACID tables is not supported");
}
copyTask = ReplCopyTask.getLoadCopyTask(
replicationSpec, new Path(srcLocation), destPath, x.getConf());
@@ -480,7 +482,7 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
loadTableWork.setInheritTableSpecs(false);
// Do not commit the write ID from each task; need to commit once.
// TODO: we should just change the import to use a single MoveTask, like dynparts.
- loadTableWork.setIntermediateInMmWrite(txnId != null);
+ loadTableWork.setIntermediateInMmWrite(isAcid(txnId));
Task<?> loadPartTask = TaskFactory.get(new MoveWork(
x.getInputs(), x.getOutputs(), loadTableWork, null, false), x.getConf());
copyTask.addDependentTask(loadPartTask);
http://git-wip-us.apache.org/repos/asf/hive/blob/543e0b01/ql/src/java/org/apache/hadoop/hive/ql/plan/BucketMapJoinContext.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/BucketMapJoinContext.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/BucketMapJoinContext.java
index 96f722c..4587c32 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/BucketMapJoinContext.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/BucketMapJoinContext.java
@@ -39,7 +39,6 @@ public class BucketMapJoinContext implements Serializable {
private static final long serialVersionUID = 1L;
- // TODO# this is completely broken, esp. w/load into bucketed tables (should perhaps be forbidden for MM tables)
// table alias (small) --> input file name (big) --> target file names (small)
private Map<String, Map<String, List<String>>> aliasBucketFileNameMapping;
private String mapJoinBigTableAlias;
http://git-wip-us.apache.org/repos/asf/hive/blob/543e0b01/ql/src/java/org/apache/hadoop/hive/ql/plan/MoveWork.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/MoveWork.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/MoveWork.java
index 50adc42..8594edf 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/MoveWork.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/MoveWork.java
@@ -153,7 +153,6 @@ public class MoveWork implements Serializable {
this.srcLocal = srcLocal;
}
- // TODO# temporary test flag
public void setNoop(boolean b) {
this.isNoop = true;
}
http://git-wip-us.apache.org/repos/asf/hive/blob/543e0b01/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands2.java
----------------------------------------------------------------------
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands2.java b/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands2.java
index 9171e60..a8a1fd6 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands2.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands2.java
@@ -368,18 +368,19 @@ public class TestTxnCommands2 {
*/
String[][] expected = {
{"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":0}\t0\t13", "bucket_00000"},
- {"{\"transactionid\":18,\"bucketid\":536870912,\"rowid\":0}\t0\t15", "bucket_00000"},
- {"{\"transactionid\":20,\"bucketid\":536870912,\"rowid\":0}\t0\t17", "bucket_00000"},
- {"{\"transactionid\":19,\"bucketid\":536870912,\"rowid\":0}\t0\t120", "bucket_00000"},
+ {"{\"transactionid\":20,\"bucketid\":536870912,\"rowid\":0}\t0\t15", "bucket_00000"},
+ {"{\"transactionid\":22,\"bucketid\":536870912,\"rowid\":0}\t0\t17", "bucket_00000"},
+ {"{\"transactionid\":21,\"bucketid\":536870912,\"rowid\":0}\t0\t120", "bucket_00000"},
{"{\"transactionid\":0,\"bucketid\":536936448,\"rowid\":1}\t1\t2", "bucket_00001"},
{"{\"transactionid\":0,\"bucketid\":536936448,\"rowid\":3}\t1\t4", "bucket_00001"},
{"{\"transactionid\":0,\"bucketid\":536936448,\"rowid\":2}\t1\t5", "bucket_00001"},
{"{\"transactionid\":0,\"bucketid\":536936448,\"rowid\":4}\t1\t6", "bucket_00001"},
- {"{\"transactionid\":18,\"bucketid\":536936448,\"rowid\":0}\t1\t16", "bucket_00001"}
+ {"{\"transactionid\":20,\"bucketid\":536936448,\"rowid\":0}\t1\t16", "bucket_00001"}
};
Assert.assertEquals("Unexpected row count before compaction", expected.length, rs.size());
for(int i = 0; i < expected.length; i++) {
- Assert.assertTrue("Actual line " + i + " bc: " + rs.get(i), rs.get(i).startsWith(expected[i][0]));
+ Assert.assertTrue("Actual line " + i + " bc: " + rs.get(i) + "; expected " + expected[i][0],
+ rs.get(i).startsWith(expected[i][0]));
}
//run Compaction
runStatementOnDriver("alter table "+ TestTxnCommands2.Table.NONACIDORCTBL +" compact 'major'");
@@ -763,7 +764,7 @@ public class TestTxnCommands2 {
Assert.assertEquals(BUCKET_COUNT - 1, buckets.length);
Assert.assertEquals("bucket_00001", buckets[0].getPath().getName());
} else if (numDelta == 2) {
- Assert.assertEquals("delta_0000023_0000023_0000", status[i].getPath().getName());
+ Assert.assertEquals("delta_0000025_0000025_0000", status[i].getPath().getName());
Assert.assertEquals(1, buckets.length);
Assert.assertEquals("bucket_00001", buckets[0].getPath().getName());
}
@@ -772,7 +773,7 @@ public class TestTxnCommands2 {
FileStatus[] buckets = fs.listStatus(status[i].getPath(), FileUtils.STAGING_DIR_PATH_FILTER);
Arrays.sort(buckets);
if (numDeleteDelta == 1) {
- Assert.assertEquals("delete_delta_0000022_0000022_0000", status[i].getPath().getName());
+ Assert.assertEquals("delete_delta_0000024_0000024_0000", status[i].getPath().getName());
Assert.assertEquals(BUCKET_COUNT - 1, buckets.length);
Assert.assertEquals("bucket_00001", buckets[0].getPath().getName());
}
@@ -819,7 +820,7 @@ public class TestTxnCommands2 {
Assert.assertEquals("bucket_00001", buckets[0].getPath().getName());
} else if (numBase == 2) {
// The new base dir now has two bucket files, since the delta dir has two bucket files
- Assert.assertEquals("base_0000023", status[i].getPath().getName());
+ Assert.assertEquals("base_0000025", status[i].getPath().getName());
Assert.assertEquals(1, buckets.length);
Assert.assertEquals("bucket_00001", buckets[0].getPath().getName());
}
[36/50] [abbrv] hive git commit: HIVE-15212 : merge branch into
master - clean up some pre-merge TODOs (Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-15212 : merge branch into master - clean up some pre-merge TODOs (Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/55d9ceee
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/55d9ceee
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/55d9ceee
Branch: refs/heads/master
Commit: 55d9ceeea314763ff1db32be8f8c7452963ec831
Parents: 379d9ba
Author: sergey <se...@apache.org>
Authored: Wed Sep 27 14:20:46 2017 -0700
Committer: sergey <se...@apache.org>
Committed: Wed Sep 27 14:20:46 2017 -0700
----------------------------------------------------------------------
.../hive/ql/exec/AbstractFileMergeOperator.java | 14 ++-
.../apache/hadoop/hive/ql/exec/CopyTask.java | 4 +-
.../org/apache/hadoop/hive/ql/exec/DDLTask.java | 16 ++-
.../hadoop/hive/ql/exec/FetchOperator.java | 8 +-
.../hadoop/hive/ql/exec/FileSinkOperator.java | 56 ++++++----
.../hadoop/hive/ql/exec/ImportCommitTask.java | 5 +-
.../hadoop/hive/ql/exec/JoinOperator.java | 5 +-
.../apache/hadoop/hive/ql/exec/MoveTask.java | 32 +++---
.../hive/ql/exec/OrcFileMergeOperator.java | 2 +-
.../hadoop/hive/ql/exec/StatsNoJobTask.java | 11 +-
.../apache/hadoop/hive/ql/exec/StatsTask.java | 5 +-
.../apache/hadoop/hive/ql/exec/Utilities.java | 102 ++++++++++++-------
.../hive/ql/io/CombineHiveInputFormat.java | 8 +-
.../hadoop/hive/ql/io/HiveInputFormat.java | 26 ++---
.../apache/hadoop/hive/ql/metadata/Hive.java | 57 +++++++----
.../formatting/TextMetaDataFormatter.java | 1 -
.../ql/optimizer/AbstractBucketJoinProc.java | 2 +-
.../hive/ql/optimizer/GenMapRedUtils.java | 32 ++++--
.../optimizer/unionproc/UnionProcFactory.java | 5 +-
.../hadoop/hive/ql/parse/GenTezUtils.java | 6 +-
.../hive/ql/parse/ImportSemanticAnalyzer.java | 15 +--
.../hadoop/hive/ql/parse/SemanticAnalyzer.java | 15 ++-
.../hadoop/hive/ql/parse/TaskCompiler.java | 9 +-
.../ql/plan/ConditionalResolverMergeFiles.java | 15 ++-
.../hadoop/hive/ql/plan/LoadFileDesc.java | 4 +-
.../hadoop/hive/ql/plan/LoadTableDesc.java | 17 ++--
.../apache/hadoop/hive/ql/plan/MoveWork.java | 4 +-
.../hive/ql/stats/fs/FSStatsAggregator.java | 7 +-
.../hive/ql/stats/fs/FSStatsPublisher.java | 7 +-
29 files changed, 300 insertions(+), 190 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/exec/AbstractFileMergeOperator.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/AbstractFileMergeOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/AbstractFileMergeOperator.java
index 6b98ecd..b163a1e 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/AbstractFileMergeOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/AbstractFileMergeOperator.java
@@ -123,8 +123,10 @@ public abstract class AbstractFileMergeOperator<T extends FileMergeDesc>
finalPath = new Path(tp, taskId);
outPath = new Path(ttp, Utilities.toTempPath(taskId));
}
- Utilities.LOG14535.info("Paths for merge " + taskId + ": tmp " + tmpPath + ", task "
- + taskTmpPath + ", final " + finalPath + ", out " + outPath);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Paths for merge " + taskId + ": tmp " + tmpPath + ", task "
+ + taskTmpPath + ", final " + finalPath + ", out " + outPath);
+ }
}
/**
@@ -173,7 +175,9 @@ public abstract class AbstractFileMergeOperator<T extends FileMergeDesc>
Path newTmpPath = new Path(tmpPath, newPath);
if (!fs.exists(newTmpPath)) {
- Utilities.LOG14535.info("Creating " + newTmpPath);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Creating " + newTmpPath);
+ }
fs.mkdirs(newTmpPath);
}
@@ -199,7 +203,9 @@ public abstract class AbstractFileMergeOperator<T extends FileMergeDesc>
}
protected void fixTmpPath(Path path) throws IOException {
- Utilities.LOG14535.info("Calling fixTmpPath with " + path);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Calling fixTmpPath with " + path);
+ }
// Fix temp path for alter table ... concatenate
if (isListBucketingAlterTableConcatenate) {
if (this.tmpPathFixedConcatenate) {
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/exec/CopyTask.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/CopyTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/CopyTask.java
index 1f223f5..7299ed1 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/CopyTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/CopyTask.java
@@ -113,7 +113,9 @@ public class CopyTask extends Task<CopyWork> implements Serializable {
if (mmDirs == null || mmDirs.length == 0) return null;
List<FileStatus> allFiles = new ArrayList<FileStatus>();
for (FileStatus mmDir : mmDirs) {
- Utilities.LOG14535.info("Found source MM directory " + mmDir.getPath());
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Found source MM directory " + mmDir.getPath());
+ }
matchFilesOneDir(fs, mmDir.getPath(), allFiles);
}
return allFiles.toArray(new FileStatus[allFiles.size()]);
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
index 8414a78..9502635 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
@@ -4162,7 +4162,9 @@ public class DDLTask extends Task<DDLWork> implements Serializable {
Path src = allMmDirs.get(i);
Path tgt = src.getParent();
String prefix = src.getName().substring(prefixLen + 1) + "_";
- Utilities.LOG14535.info("Will move " + src + " to " + tgt + " (prefix " + prefix + ")");
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Will move " + src + " to " + tgt + " (prefix " + prefix + ")");
+ }
targetPaths.add(tgt);
targetPrefix.add(prefix);
}
@@ -4214,7 +4216,9 @@ public class DDLTask extends Task<DDLWork> implements Serializable {
}
private static void ensureDelete(FileSystem fs, Path path, String what) throws IOException {
- Utilities.LOG14535.info("Deleting " + what + " " + path);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Deleting " + what + " " + path);
+ }
try {
if (!fs.delete(path, true)) throw new IOException("delete returned false");
} catch (Exception ex) {
@@ -4255,14 +4259,18 @@ public class DDLTask extends Task<DDLWork> implements Serializable {
Path src = part.getDataLocation(), tgt = new Path(src, mmDir);
srcs.add(src);
tgts.add(tgt);
- Utilities.LOG14535.info("Will move " + src + " to " + tgt);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Will move " + src + " to " + tgt);
+ }
}
} else {
checkMmLb(tbl);
Path src = tbl.getDataLocation(), tgt = new Path(src, mmDir);
srcs.add(src);
tgts.add(tgt);
- Utilities.LOG14535.info("Will move " + src + " to " + tgt);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Will move " + src + " to " + tgt);
+ }
}
// Don't set inputs and outputs - the locks have already been taken so it's pointless.
MoveWork mw = new MoveWork(null, null, null, null, false, SessionState.get().getLineageState());
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java
index d2d9946..d09b12b 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java
@@ -269,7 +269,6 @@ public class FetchOperator implements Serializable {
while (iterPath.hasNext()) {
currPath = iterPath.next();
currDesc = iterPartDesc.next();
- Utilities.LOG14535.debug("Considering " + currPath);
if (isNonNativeTable) {
return true;
}
@@ -286,7 +285,6 @@ public class FetchOperator implements Serializable {
}
}
}
- Utilities.LOG14535.debug("Done with all the paths");
return false;
}
@@ -381,7 +379,9 @@ public class FetchOperator implements Serializable {
Utilities.copyTableJobPropertiesToConf(currDesc.getTableDesc(), job);
InputFormat inputFormat = getInputFormatFromCache(formatter, job);
String inputs = processCurrPathForMmWriteIds(inputFormat);
- Utilities.LOG14535.info("Setting fetch inputs to " + inputs);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Setting fetch inputs to " + inputs);
+ }
if (inputs == null) return null;
job.set("mapred.input.dir", inputs);
@@ -414,7 +414,7 @@ public class FetchOperator implements Serializable {
validTxnList = null; // non-MM case
}
if (validTxnList != null) {
- Utilities.LOG14535.info("Observing " + currDesc.getTableName() + ": " + validTxnList);
+ Utilities.FILE_OP_LOGGER.info("Processing " + currDesc.getTableName() + " for MM paths");
}
Path[] dirs = HiveInputFormat.processPathsForMmRead(Lists.newArrayList(currPath), job, validTxnList);
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java
index 3544884..280d3cf 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java
@@ -185,9 +185,11 @@ public class FileSinkOperator extends TerminalOperator<FileSinkDesc> implements
txnId = conf.getTransactionId();
stmtId = conf.getStatementId();
}
- Utilities.LOG14535.info("new FSPaths for " + numFiles + " files, dynParts = " + bDynParts
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("new FSPaths for " + numFiles + " files, dynParts = " + bDynParts
+ ": tmpPath " + tmpPath + ", task path " + taskOutputTempPath
+ " (spec path " + specPath + ")"/*, new Exception()*/);
+ }
outPaths = new Path[numFiles];
finalPaths = new Path[numFiles];
@@ -254,7 +256,9 @@ public class FileSinkOperator extends TerminalOperator<FileSinkDesc> implements
throws IOException, HiveException {
if ((bDynParts || isSkewedStoredAsSubDirectories)
&& !fs.exists(finalPaths[idx].getParent())) {
- Utilities.LOG14535.info("commit making path for dyn/skew: " + finalPaths[idx].getParent());
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("commit making path for dyn/skew: " + finalPaths[idx].getParent());
+ }
FileUtils.mkdir(fs, finalPaths[idx].getParent(), hconf);
}
// If we're updating or deleting there may be no file to close. This can happen
@@ -266,7 +270,10 @@ public class FileSinkOperator extends TerminalOperator<FileSinkDesc> implements
boolean needToRename = outPaths[idx] != null && ((acidOp != Operation.UPDATE
&& acidOp != Operation.DELETE) || fs.exists(outPaths[idx]));
if (needToRename && outPaths[idx] != null) {
- Utilities.LOG14535.info("committing " + outPaths[idx] + " to " + finalPaths[idx] + " (" + isMmTable + ")");
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("committing " + outPaths[idx] + " to "
+ + finalPaths[idx] + " (" + isMmTable + ")");
+ }
if (isMmTable) {
assert outPaths[idx].equals(finalPaths[idx]);
commitPaths.add(outPaths[idx]);
@@ -381,14 +388,10 @@ public class FileSinkOperator extends TerminalOperator<FileSinkDesc> implements
}
public void addToStat(String statType, long amount) {
- if ("rowCount".equals(statType)) {
- Utilities.LOG14535.info("Adding " + statType + " = " + amount + " to " + System.identityHashCode(this));
- }
stat.addToStat(statType, amount);
}
public Collection<String> getStoredStats() {
- Utilities.LOG14535.info("Getting stats from " + System.identityHashCode(this));
return stat.getStoredStats();
}
} // class FSPaths
@@ -459,8 +462,10 @@ public class FileSinkOperator extends TerminalOperator<FileSinkDesc> implements
unionPath = null;
}
}
- Utilities.LOG14535.info("Setting up FSOP " + System.identityHashCode(this) + " ("
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Setting up FSOP " + System.identityHashCode(this) + " ("
+ conf.isLinkedFileSink() + ") with " + taskId + " and " + specPath + " + " + unionPath);
+ }
}
/** Kryo ctor. */
@@ -544,9 +549,11 @@ public class FileSinkOperator extends TerminalOperator<FileSinkDesc> implements
if (!bDynParts) {
fsp = new FSPaths(specPath, conf.isMmTable());
- Utilities.LOG14535.info("creating new paths " + System.identityHashCode(fsp)
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("creating new paths " + System.identityHashCode(fsp)
+ " from ctor; childSpec " + unionPath + ": tmpPath " + fsp.getTmpPath()
+ ", task path " + fsp.getTaskOutputTempPath());
+ }
// Create all the files - this is required because empty files need to be created for
// empty buckets
@@ -719,10 +726,11 @@ public class FileSinkOperator extends TerminalOperator<FileSinkDesc> implements
throws HiveException {
try {
fsp.initializeBucketPaths(filesIdx, taskId, isNativeTable, isSkewedStoredAsSubDirectories);
- Utilities.LOG14535.info("createBucketForFileIdx " + filesIdx + ": final path " + fsp.finalPaths[filesIdx]
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("createBucketForFileIdx " + filesIdx + ": final path " + fsp.finalPaths[filesIdx]
+ "; out path " + fsp.outPaths[filesIdx] +" (spec path " + specPath + ", tmp path "
- + fsp.getTmpPath() + ", task " + taskId + ")"/*, new Exception()*/);
-
+ + fsp.getTmpPath() + ", task " + taskId + ")");
+ }
if (LOG.isInfoEnabled()) {
LOG.info("New Final Path: FS " + fsp.finalPaths[filesIdx]);
}
@@ -1002,7 +1010,6 @@ public class FileSinkOperator extends TerminalOperator<FileSinkDesc> implements
protected FSPaths lookupListBucketingPaths(String lbDirName) throws HiveException {
FSPaths fsp2 = valToPaths.get(lbDirName);
if (fsp2 == null) {
- Utilities.LOG14535.info("lookupListBucketingPaths for " + lbDirName);
fsp2 = createNewPaths(lbDirName);
}
return fsp2;
@@ -1018,9 +1025,11 @@ public class FileSinkOperator extends TerminalOperator<FileSinkDesc> implements
private FSPaths createNewPaths(String dirName) throws HiveException {
FSPaths fsp2 = new FSPaths(specPath, conf.isMmTable());
fsp2.configureDynPartPath(dirName, !conf.isMmTable() && isUnionDp ? unionPath : null);
- Utilities.LOG14535.info("creating new paths " + System.identityHashCode(fsp2) + " for "
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("creating new paths " + System.identityHashCode(fsp2) + " for "
+ dirName + ", childSpec " + unionPath + ": tmpPath " + fsp2.getTmpPath()
+ ", task path " + fsp2.getTaskOutputTempPath());
+ }
if(!conf.getDpSortState().equals(DPSortState.PARTITION_BUCKET_SORTED)) {
createBucketFiles(fsp2);
valToPaths.put(dirName, fsp2);
@@ -1286,7 +1295,9 @@ public class FileSinkOperator extends TerminalOperator<FileSinkDesc> implements
specPath = conf.getParentDir();
unionSuffix = conf.getDirName().getName();
}
- Utilities.LOG14535.info("jobCloseOp using specPath " + specPath);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("jobCloseOp using specPath " + specPath);
+ }
if (!conf.isMmTable()) {
Utilities.mvFileToFinalPath(specPath, hconf, success, LOG, dpCtx, conf, reporter);
} else {
@@ -1352,7 +1363,6 @@ public class FileSinkOperator extends TerminalOperator<FileSinkDesc> implements
}
private void publishStats() throws HiveException {
- Utilities.LOG14535.error("FSOP publishStats called.");
boolean isStatsReliable = conf.isStatsReliable();
// Initializing a stats publisher
@@ -1383,8 +1393,10 @@ public class FileSinkOperator extends TerminalOperator<FileSinkDesc> implements
for (Map.Entry<String, FSPaths> entry : valToPaths.entrySet()) {
String fspKey = entry.getKey(); // DP/LB
FSPaths fspValue = entry.getValue();
- Utilities.LOG14535.info("Observing entry for stats " + fspKey
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Observing entry for stats " + fspKey
+ " => FSP with tmpPath " + fspValue.getTmpPath());
+ }
// for bucketed tables, hive.optimize.sort.dynamic.partition optimization
// adds the taskId to the fspKey.
if (conf.getDpSortState().equals(DPSortState.PARTITION_BUCKET_SORTED)) {
@@ -1397,7 +1409,6 @@ public class FileSinkOperator extends TerminalOperator<FileSinkDesc> implements
// not be retrieved from staging table and hence not aggregated. To avoid this issue
// we will remove the taskId from the key which is redundant anyway.
fspKey = fspKey.split(taskID)[0];
- Utilities.LOG14535.info("Adjusting fspKey for stats to " + fspKey);
}
// split[0] = DP, split[1] = LB
@@ -1409,14 +1420,17 @@ public class FileSinkOperator extends TerminalOperator<FileSinkDesc> implements
String prefix = conf.getTableInfo().getTableName().toLowerCase();
prefix = Utilities.join(prefix, spSpec, dpSpec);
prefix = prefix.endsWith(Path.SEPARATOR) ? prefix : prefix + Path.SEPARATOR;
- Utilities.LOG14535.info("Prefix for stats " + prefix + " (from " + spSpec + ", " + dpSpec + ")");
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace(
+ "Prefix for stats " + prefix + " (from " + spSpec + ", " + dpSpec + ")");
+ }
Map<String, String> statsToPublish = new HashMap<String, String>();
for (String statType : fspValue.getStoredStats()) {
statsToPublish.put(statType, Long.toString(fspValue.stat.getStat(statType)));
}
if (!statsPublisher.publishStat(prefix, statsToPublish)) {
- Utilities.LOG14535.error("Failed to publish stats");
+ LOG.error("Failed to publish stats");
// The original exception is lost.
// Not changing the interface to maintain backward compatibility
if (isStatsReliable) {
@@ -1426,7 +1440,7 @@ public class FileSinkOperator extends TerminalOperator<FileSinkDesc> implements
}
sContext.setIndexForTezUnion(this.getIndexForTezUnion());
if (!statsPublisher.closeConnection(sContext)) {
- Utilities.LOG14535.error("Failed to close stats");
+ LOG.error("Failed to close stats");
// The original exception is lost.
// Not changing the interface to maintain backward compatibility
if (isStatsReliable) {
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/exec/ImportCommitTask.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/ImportCommitTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/ImportCommitTask.java
index 27db9a4..b54d457 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/ImportCommitTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/ImportCommitTask.java
@@ -33,11 +33,12 @@ public class ImportCommitTask extends Task<ImportCommitWork> {
@Override
public int execute(DriverContext driverContext) {
- Utilities.LOG14535.info("Executing ImportCommit for " + work.getTxnId());
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Executing ImportCommit for " + work.getTxnId());
+ }
try {
if (driverContext.getCtx().getExplainAnalyze() == AnalyzeState.RUNNING) {
- Utilities.LOG14535.info("Exiting due to explain");
return 0;
}
return 0;
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java
index 3f5cdf5..65b2f87 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java
@@ -231,13 +231,12 @@ public class JoinOperator extends CommonJoinOperator<JoinDesc> implements Serial
// Step1: rename tmp output folder to intermediate path. After this
// point, updates from speculative tasks still writing to tmpPath
// will not appear in finalPath.
- log.info("Moving tmp dir: " + tmpPath + " to: " + intermediatePath);
- Utilities.LOG14535.info("Moving tmp dir: " + tmpPath + " to: " + intermediatePath + "(spec " + specPath + ")");
+ Utilities.FILE_OP_LOGGER.info("Moving tmp dir: " + tmpPath + " to: " + intermediatePath + "(spec " + specPath + ")");
Utilities.rename(fs, tmpPath, intermediatePath);
// Step2: remove any tmp file or double-committed output files
Utilities.removeTempOrDuplicateFiles(fs, intermediatePath);
// Step3: move to the file destination
- log.info("Moving tmp dir: " + intermediatePath + " to: " + specPath);
+ Utilities.FILE_OP_LOGGER.info("Moving tmp dir: " + intermediatePath + " to: " + specPath);
Utilities.renameOrMoveFiles(fs, intermediatePath, specPath);
}
} else {
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
index ed527b8..e644845 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
@@ -267,9 +267,11 @@ public class MoveTask extends Task<MoveWork> implements Serializable {
@Override
public int execute(DriverContext driverContext) {
if (work.isNoop()) return 0;
- Utilities.LOG14535.info("Executing MoveWork " + System.identityHashCode(work)
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Executing MoveWork " + System.identityHashCode(work)
+ " with " + work.getLoadFileWork() + "; " + work.getLoadTableWork() + "; "
+ work.getLoadMultiFilesWork());
+ }
try {
if (driverContext.getCtx().getExplainAnalyze() == AnalyzeState.RUNNING) {
@@ -284,9 +286,9 @@ public class MoveTask extends Task<MoveWork> implements Serializable {
Path targetPath = lfd.getTargetDir();
Path sourcePath = lfd.getSourcePath();
if (targetPath.equals(sourcePath)) {
- Utilities.LOG14535.info("MoveTask not moving LFD " + sourcePath);
+ Utilities.FILE_OP_LOGGER.debug("MoveTask not moving " + sourcePath);
} else {
- Utilities.LOG14535.info("MoveTask moving LFD " + sourcePath + " to " + targetPath);
+ Utilities.FILE_OP_LOGGER.debug("MoveTask moving " + sourcePath + " to " + targetPath);
if(lfd.getWriteType() == AcidUtils.Operation.INSERT) {
//'targetPath' is table root of un-partitioned table/partition
//'sourcePath' result of 'select ...' part of CTAS statement
@@ -316,7 +318,7 @@ public class MoveTask extends Task<MoveWork> implements Serializable {
if (!destFs.exists(destPath.getParent())) {
destFs.mkdirs(destPath.getParent());
}
- Utilities.LOG14535.info("MoveTask moving LMFD " + srcPath + " to " + destPath);
+ Utilities.FILE_OP_LOGGER.debug("MoveTask moving (multi-file) " + srcPath + " to " + destPath);
moveFile(srcPath, destPath, isDfsDir);
} else {
if (!destFs.exists(destPath)) {
@@ -328,11 +330,11 @@ public class MoveTask extends Task<MoveWork> implements Serializable {
for (FileStatus child : children) {
Path childSrc = child.getPath();
Path childDest = new Path(destPath, filePrefix + childSrc.getName());
- Utilities.LOG14535.info("MoveTask moving LMFD " + childSrc + " to " + childDest);
+ Utilities.FILE_OP_LOGGER.debug("MoveTask moving (multi-file) " + childSrc + " to " + childDest);
moveFile(childSrc, childDest, isDfsDir);
}
} else {
- Utilities.LOG14535.info("MoveTask skipping empty directory LMFD " + srcPath);
+ Utilities.FILE_OP_LOGGER.debug("MoveTask skipping empty directory (multi-file) " + srcPath);
}
if (!srcFs.delete(srcPath, false)) {
throw new IOException("Couldn't delete " + srcPath + " after moving all the files");
@@ -356,7 +358,9 @@ public class MoveTask extends Task<MoveWork> implements Serializable {
mesg.append(')');
}
String mesg_detail = " from " + tbd.getSourcePath();
- Utilities.LOG14535.info("" + mesg.toString() + " " + mesg_detail);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace(mesg.toString() + " " + mesg_detail);
+ }
console.printInfo(mesg.toString(), mesg_detail);
Table table = db.getTable(tbd.getTable().getTableName());
@@ -369,10 +373,9 @@ public class MoveTask extends Task<MoveWork> implements Serializable {
DataContainer dc = null;
if (tbd.getPartitionSpec().size() == 0) {
dc = new DataContainer(table.getTTable());
- Utilities.LOG14535.info("loadTable called from " + tbd.getSourcePath() + " into " + tbd.getTable().getTableName());
- if (tbd.isMmTable() && !tbd.isCommitMmWrite()) {
- throw new HiveException(
- "Only single-partition LoadTableDesc can skip commiting write ID");
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("loadTable called from " + tbd.getSourcePath()
+ + " into " + tbd.getTable().getTableName());
}
db.loadTable(tbd.getSourcePath(), tbd.getTable().getTableName(), tbd.getReplace(),
work.isSrcLocal(), isSkewedStoredAsDirs(tbd), isFullAcidOp, hasFollowingStatsTask(),
@@ -448,8 +451,10 @@ public class MoveTask extends Task<MoveWork> implements Serializable {
TaskInformation ti) throws HiveException, IOException, InvalidOperationException {
List<String> partVals = MetaStoreUtils.getPvals(table.getPartCols(), tbd.getPartitionSpec());
db.validatePartitionNameCharacters(partVals);
- Utilities.LOG14535.info("loadPartition called from " + tbd.getSourcePath()
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("loadPartition called from " + tbd.getSourcePath()
+ " into " + tbd.getTable().getTableName());
+ }
db.loadPartition(tbd.getSourcePath(), tbd.getTable().getTableName(),
tbd.getPartitionSpec(), tbd.getReplace(),
tbd.getInheritTableSpecs(), isSkewedStoredAsDirs(tbd), work.isSrcLocal(),
@@ -488,9 +493,6 @@ public class MoveTask extends Task<MoveWork> implements Serializable {
// iterate over it and call loadPartition() here.
// The reason we don't do inside HIVE-1361 is the latter is large and we
// want to isolate any potential issue it may introduce.
- if (tbd.isMmTable() && !tbd.isCommitMmWrite()) {
- throw new HiveException("Only single-partition LoadTableDesc can skip commiting write ID");
- }
Map<Map<String, String>, Partition> dp =
db.loadDynamicPartitions(
tbd.getSourcePath(),
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/exec/OrcFileMergeOperator.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/OrcFileMergeOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/OrcFileMergeOperator.java
index a1ad243..50160a9 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/OrcFileMergeOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/OrcFileMergeOperator.java
@@ -96,7 +96,7 @@ public class OrcFileMergeOperator extends
filePath = k.getInputPath().toUri().getPath();
- Utilities.LOG14535.info("OrcFileMergeOperator processing " + filePath);
+ Utilities.FILE_OP_LOGGER.info("OrcFileMergeOperator processing " + filePath);
fixTmpPath(k.getInputPath().getParent());
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsNoJobTask.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsNoJobTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsNoJobTask.java
index 65363ed..ad5a96b 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsNoJobTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsNoJobTask.java
@@ -239,7 +239,7 @@ public class StatsNoJobTask extends Task<StatsNoJobWork> implements Serializable
Map<String, String> parameters = tTable.getParameters();
try {
Path dir = new Path(tTable.getSd().getLocation());
- Utilities.LOG14535.info("Aggregating stats for " + dir);
+ LOG.debug("Aggregating stats for " + dir);
long numRows = 0;
long rawDataSize = 0;
long fileSize = 0;
@@ -249,7 +249,7 @@ public class StatsNoJobTask extends Task<StatsNoJobWork> implements Serializable
boolean statsAvailable = false;
for(FileStatus file: fileList) {
- Utilities.LOG14535.info("Computing stats for " + file);
+ LOG.debug("Computing stats for " + file);
if (!file.isDir()) {
InputFormat<?, ?> inputFormat = ReflectionUtil.newInstance(
table.getInputFormatClass(), jc);
@@ -286,11 +286,10 @@ public class StatsNoJobTask extends Task<StatsNoJobWork> implements Serializable
db.alterTable(tableFullName, new Table(tTable), environmentContext);
String msg = "Table " + tableFullName + " stats: [" + toString(parameters) + ']';
- Utilities.LOG14535.debug(msg);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace(msg);
+ }
console.printInfo(msg);
- } else {
- String msg = "Table " + tableFullName + " does not provide stats.";
- Utilities.LOG14535.debug(msg);
}
} catch (Exception e) {
console.printInfo("[Warning] could not update stats for " + tableFullName + ".",
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsTask.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsTask.java
index 91a9c88..1725629 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsTask.java
@@ -217,7 +217,10 @@ public class StatsTask extends Task<StatsWork> implements Serializable {
if (conf.getBoolVar(ConfVars.TEZ_EXEC_SUMMARY)) {
console.printInfo("Table " + tableFullName + " stats: [" + toString(parameters) + ']');
}
- Utilities.LOG14535.info("Table " + tableFullName + " stats: [" + toString(parameters) + ']');
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace(
+ "Table " + tableFullName + " stats: [" + toString(parameters) + ']');
+ }
} else {
// Partitioned table:
// Need to get the old stats of the partition
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
index b1c7844..cb3cb03 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
@@ -220,9 +220,12 @@ import java.util.concurrent.Executors;
*/
@SuppressWarnings({ "nls", "deprecation" })
public final class Utilities {
-
- // TODO# remove when merging; convert some statements to local loggers, remove others
- public static final Logger LOG14535 = LoggerFactory.getLogger("Log14535");
+ /**
+ * A logger mostly used to trace-log the details of Hive table file operations. Filtering the
+ * logs for FileOperations (with trace logs present) allows one to debug what Hive has done with
+ * various files and directories while committing writes, as well as reading.
+ */
+ public static final Logger FILE_OP_LOGGER = LoggerFactory.getLogger("FileOperations");
/**
* The object in the reducer are composed of these top level fields.
@@ -1475,7 +1478,9 @@ public final class Utilities {
perfLogger.PerfLogEnd("FileSinkOperator", "CreateEmptyBuckets");
}
// move to the file destination
- Utilities.LOG14535.info("Moving tmp dir: " + tmpPath + " to: " + specPath);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Moving tmp dir: " + tmpPath + " to: " + specPath);
+ }
perfLogger.PerfLogBegin("FileSinkOperator", "RenameOrMoveFiles");
if (HiveConf.getBoolVar(hconf, HiveConf.ConfVars.HIVE_EXEC_MOVE_FILES_FROM_SOURCE_DIR)) {
// HIVE-17113 - avoid copying files that may have been written to the temp dir by runaway tasks,
@@ -1487,10 +1492,14 @@ public final class Utilities {
perfLogger.PerfLogEnd("FileSinkOperator", "RenameOrMoveFiles");
}
} else {
- Utilities.LOG14535.info("deleting tmpPath " + tmpPath);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("deleting tmpPath " + tmpPath);
+ }
fs.delete(tmpPath, true);
}
- Utilities.LOG14535.info("deleting taskTmpPath " + taskTmpPath);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("deleting taskTmpPath " + taskTmpPath);
+ }
fs.delete(taskTmpPath, true);
}
@@ -1533,7 +1542,9 @@ public final class Utilities {
}
for (Path path : paths) {
- Utilities.LOG14535.info("creating empty bucket for " + path);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("creating empty bucket for " + path);
+ }
RecordWriter writer = HiveFileFormatUtils.getRecordWriter(
jc, hiveOutputFormat, outputClass, isCompressed,
tableInfo.getProperties(), path, reporter);
@@ -1610,7 +1621,6 @@ public final class Utilities {
assert parts[i].isDirectory() : "dynamic partition " + parts[i].getPath()
+ " is not a directory";
Path path = parts[i].getPath();
- Utilities.LOG14535.info("removeTempOrDuplicateFiles looking at DP " + path);
if (removeEmptyDpDirectory(fs, path)) {
parts[i] = null;
continue;
@@ -1622,7 +1632,10 @@ public final class Utilities {
if (!mmDir.getName().equals(AcidUtils.deltaSubdir(txnId, txnId, stmtId))) {
throw new IOException("Unexpected non-MM directory name " + mmDir);
}
- Utilities.LOG14535.info("removeTempOrDuplicateFiles processing files in MM directory " + mmDir);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace(
+ "removeTempOrDuplicateFiles processing files in MM directory " + mmDir);
+ }
}
taskIDToFile = removeTempOrDuplicateFilesNonMm(items, fs);
if (filesKept != null && taskIDToFile != null) {
@@ -1650,8 +1663,10 @@ public final class Utilities {
if (!mmDir.getName().equals(AcidUtils.deltaSubdir(txnId, txnId, stmtId))) {
throw new IOException("Unexpected non-MM directory " + mmDir);
}
- Utilities.LOG14535.info(
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace(
"removeTempOrDuplicateFiles processing files in MM directory " + mmDir);
+ }
taskIDToFile = removeTempOrDuplicateFilesNonMm(fs.listStatus(mmDir), fs);
if (filesKept != null && taskIDToFile != null) {
addFilesToPathSet(taskIDToFile.values(), filesKept);
@@ -1687,7 +1702,6 @@ public final class Utilities {
HashMap<String, FileStatus> taskIDToFile, int numBuckets, List<Path> result) {
String taskID1 = taskIDToFile.keySet().iterator().next();
Path bucketPath = taskIDToFile.values().iterator().next().getPath();
- Utilities.LOG14535.info("Bucket path " + bucketPath);
for (int j = 0; j < numBuckets; ++j) {
addBucketFileIfMissing(result, taskIDToFile, taskID1, bucketPath, j);
}
@@ -1700,7 +1714,9 @@ public final class Utilities {
// create empty bucket, file name should be derived from taskID2
URI bucketUri = bucketPath.toUri();
String path2 = replaceTaskIdFromFilename(bucketUri.getPath().toString(), j);
- Utilities.LOG14535.info("Creating an empty bucket file " + path2);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Creating an empty bucket file " + path2);
+ }
result.add(new Path(bucketUri.getScheme(), bucketUri.getAuthority(), path2));
}
}
@@ -1714,7 +1730,9 @@ public final class Utilities {
for (FileStatus one : files) {
if (isTempPath(one)) {
- Utilities.LOG14535.info("removeTempOrDuplicateFiles deleting " + one.getPath()/*, new Exception()*/);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("removeTempOrDuplicateFiles deleting " + one.getPath());
+ }
if (!fs.delete(one.getPath(), true)) {
throw new IOException("Unable to delete tmp file: " + one.getPath());
}
@@ -1729,7 +1747,10 @@ public final class Utilities {
private static void ponderRemovingTempOrDuplicateFile(FileSystem fs,
FileStatus file, HashMap<String, FileStatus> taskIdToFile) throws IOException {
String taskId = getPrefixedTaskIdFromFilename(file.getPath().getName());
- Utilities.LOG14535.info("removeTempOrDuplicateFiles pondering " + file.getPath() + ", taskId " + taskId);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("removeTempOrDuplicateFiles looking at "
+ + file.getPath() + ", taskId " + taskId);
+ }
FileStatus otherFile = taskIdToFile.get(taskId);
taskIdToFile.put(taskId, (otherFile == null) ? file :
@@ -2601,10 +2622,13 @@ public final class Utilities {
// generate a full partition specification
LinkedHashMap<String, String> fullPartSpec = new LinkedHashMap<String, String>(partSpec);
if (!Warehouse.makeSpecFromName(fullPartSpec, partPath, new HashSet<String>(partSpec.keySet()))) {
- Utilities.LOG14535.warn("Ignoring invalid DP directory " + partPath);
+ Utilities.FILE_OP_LOGGER.warn("Ignoring invalid DP directory " + partPath);
continue;
}
- Utilities.LOG14535.info("Adding partition spec from " + partPath + ": " + fullPartSpec);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Adding partition spec from "
+ + partPath + ": " + fullPartSpec);
+ }
fullPartSpecs.add(fullPartSpec);
}
return fullPartSpecs;
@@ -4037,14 +4061,16 @@ public final class Utilities {
+ " (when shortened to " + dir + ")");
}
String subDir = dir.substring(relRoot.length());
- Utilities.LOG14535.info("Looking at " + subDir + " from " + lfs.getPath());
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Looking at " + subDir + " from " + lfs.getPath());
+ }
// If sorted, we'll skip a bunch of files.
if (lastRelDir != null && subDir.startsWith(lastRelDir)) continue;
int startIx = skipLevels > 0 ? -1 : 0;
for (int i = 0; i < skipLevels; ++i) {
startIx = subDir.indexOf(Path.SEPARATOR_CHAR, startIx + 1);
if (startIx == -1) {
- Utilities.LOG14535.info("Expected level of nesting (" + skipLevels + ") is not "
+ Utilities.FILE_OP_LOGGER.info("Expected level of nesting (" + skipLevels + ") is not "
+ " present in " + subDir + " (from " + lfs.getPath() + ")");
break;
}
@@ -4052,13 +4078,12 @@ public final class Utilities {
if (startIx == -1) continue;
int endIx = subDir.indexOf(Path.SEPARATOR_CHAR, startIx + 1);
if (endIx == -1) {
- Utilities.LOG14535.info("Expected level of nesting (" + (skipLevels + 1) + ") is not "
+ Utilities.FILE_OP_LOGGER.info("Expected level of nesting (" + (skipLevels + 1) + ") is not "
+ " present in " + subDir + " (from " + lfs.getPath() + ")");
continue;
}
lastRelDir = subDir = subDir.substring(0, endIx);
Path candidate = new Path(relRoot, subDir);
- Utilities.LOG14535.info("Considering MM directory candidate " + candidate);
if (!filter.accept(candidate)) continue;
results.add(fs.makeQualified(candidate));
}
@@ -4073,7 +4098,6 @@ public final class Utilities {
}
sb.append(Path.SEPARATOR).append(AcidUtils.deltaSubdir(txnId, txnId, stmtId));
Path pathPattern = new Path(path, sb.toString());
- Utilities.LOG14535.info("Looking for files via: " + pathPattern);
return statusToPath(fs.globStatus(pathPattern, filter));
}
@@ -4084,11 +4108,11 @@ public final class Utilities {
fs, specPath, dpLevels, lbLevels, filter, txnId, stmtId, conf);
if (files != null) {
for (Path path : files) {
- Utilities.LOG14535.info("Deleting " + path + " on failure");
+ Utilities.FILE_OP_LOGGER.info("Deleting " + path + " on failure");
tryDelete(fs, path);
}
}
- Utilities.LOG14535.info("Deleting " + manifestDir + " on failure");
+ Utilities.FILE_OP_LOGGER.info("Deleting " + manifestDir + " on failure");
fs.delete(manifestDir, true);
}
@@ -4099,7 +4123,7 @@ public final class Utilities {
// We assume one FSOP per task (per specPath), so we create it in specPath.
Path manifestPath = getManifestDir(specPath, txnId, stmtId, unionSuffix);
manifestPath = new Path(manifestPath, taskId + MANIFEST_EXTENSION);
- Utilities.LOG14535.info("Writing manifest to " + manifestPath + " with " + commitPaths);
+ Utilities.FILE_OP_LOGGER.info("Writing manifest to " + manifestPath + " with " + commitPaths);
try {
// Don't overwrite the manifest... should fail if we have collisions.
try (FSDataOutputStream out = fs.create(manifestPath, false)) {
@@ -4144,7 +4168,7 @@ public final class Utilities {
return;
}
- Utilities.LOG14535.info("Looking for manifests in: " + manifestDir + " (" + txnId + ")");
+ Utilities.FILE_OP_LOGGER.debug("Looking for manifests in: " + manifestDir + " (" + txnId + ")");
List<Path> manifests = new ArrayList<>();
if (fs.exists(manifestDir)) {
FileStatus[] manifestFiles = fs.listStatus(manifestDir);
@@ -4152,21 +4176,21 @@ public final class Utilities {
for (FileStatus status : manifestFiles) {
Path path = status.getPath();
if (path.getName().endsWith(MANIFEST_EXTENSION)) {
- Utilities.LOG14535.info("Reading manifest " + path);
+ Utilities.FILE_OP_LOGGER.info("Reading manifest " + path);
manifests.add(path);
}
}
}
} else {
- Utilities.LOG14535.info("No manifests found - query produced no output");
+ Utilities.FILE_OP_LOGGER.info("No manifests found - query produced no output");
manifestDir = null;
}
- Utilities.LOG14535.info("Looking for files in: " + specPath);
+ Utilities.FILE_OP_LOGGER.debug("Looking for files in: " + specPath);
JavaUtils.IdPathFilter filter = new JavaUtils.IdPathFilter(txnId, stmtId, true);
if (isMmCtas && !fs.exists(specPath)) {
// TODO: do we also need to do this when creating an empty partition from select?
- Utilities.LOG14535.info("Creating table directory for CTAS with no output at " + specPath);
+ Utilities.FILE_OP_LOGGER.info("Creating table directory for CTAS with no output at " + specPath);
FileUtils.mkdir(fs, specPath, hconf);
}
Path[] files = getMmDirectoryCandidates(
@@ -4174,7 +4198,9 @@ public final class Utilities {
ArrayList<Path> mmDirectories = new ArrayList<>();
if (files != null) {
for (Path path : files) {
- Utilities.LOG14535.info("Looking at path: " + path);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Looking at path: " + path);
+ }
mmDirectories.add(path);
}
}
@@ -4193,14 +4219,14 @@ public final class Utilities {
}
if (manifestDir != null) {
- Utilities.LOG14535.info("Deleting manifest directory " + manifestDir);
+ Utilities.FILE_OP_LOGGER.info("Deleting manifest directory " + manifestDir);
tryDelete(fs, manifestDir);
if (unionSuffix != null) {
// Also delete the parent directory if we are the last union FSOP to execute.
manifestDir = manifestDir.getParent();
FileStatus[] remainingFiles = fs.listStatus(manifestDir);
if (remainingFiles == null || remainingFiles.length == 0) {
- Utilities.LOG14535.info("Deleting manifest directory " + manifestDir);
+ Utilities.FILE_OP_LOGGER.info("Deleting manifest directory " + manifestDir);
tryDelete(fs, manifestDir);
}
}
@@ -4257,15 +4283,17 @@ public final class Utilities {
// Found the right union directory; treat it as "our" MM directory.
cleanMmDirectory(childPath, fs, null, committed);
} else {
- Utilities.LOG14535.info("FSOP for " + unionSuffix
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("FSOP for " + unionSuffix
+ " is ignoring the other side of the union " + childPath.getName());
+ }
}
}
}
private static void deleteUncommitedFile(Path childPath, FileSystem fs)
throws IOException, HiveException {
- Utilities.LOG14535.info("Deleting " + childPath + " that was not committed");
+ Utilities.FILE_OP_LOGGER.info("Deleting " + childPath + " that was not committed");
// We should actually succeed here - if we fail, don't commit the query.
if (!fs.delete(childPath, true)) {
throw new HiveException("Failed to delete an uncommitted path " + childPath);
@@ -4278,7 +4306,9 @@ public final class Utilities {
*/
public static List<Path> getValidMmDirectoriesFromTableOrPart(Path path, Configuration conf,
ValidTxnList validTxnList, int lbLevels) throws IOException {
- Utilities.LOG14535.info("Looking for valid MM paths under " + path);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Looking for valid MM paths under " + path);
+ }
// NULL means this directory is entirely valid.
List<Path> result = null;
FileSystem fs = path.getFileSystem(conf);
@@ -4289,7 +4319,7 @@ public final class Utilities {
Path childPath = file.getPath();
Long txnId = JavaUtils.extractTxnId(childPath);
if (!file.isDirectory() || txnId == null || !validTxnList.isTxnValid(txnId)) {
- Utilities.LOG14535.info("Skipping path " + childPath);
+ Utilities.FILE_OP_LOGGER.debug("Skipping path " + childPath);
if (result == null) {
result = new ArrayList<>(children.length - 1);
for (int j = 0; j < i; ++j) {
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/io/CombineHiveInputFormat.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/CombineHiveInputFormat.java b/ql/src/java/org/apache/hadoop/hive/ql/io/CombineHiveInputFormat.java
index 6f2aaf0..93de69f 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/io/CombineHiveInputFormat.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/io/CombineHiveInputFormat.java
@@ -121,14 +121,12 @@ public class CombineHiveInputFormat<K extends WritableComparable, V extends Writ
isMmNonMerge = !isMerge && MetaStoreUtils.isInsertOnlyTable(tbl.getProperties());
} else {
// This would be the case for obscure tasks like truncate column (unsupported for MM).
- Utilities.LOG14535.warn("Assuming not insert-only; no table in partition spec " + part);
+ Utilities.FILE_OP_LOGGER.warn("Assuming not insert-only; no table in partition spec " + part);
}
if (isAvoidSplitCombine || isMmNonMerge) {
- //if (LOG.isDebugEnabled()) {
- Utilities.LOG14535.info("The path [" + paths[i + start] +
- "] is being parked for HiveInputFormat.getSplits");
- //}
+ Utilities.FILE_OP_LOGGER.info("The path [" + paths[i + start] +
+ "] is being parked for HiveInputFormat.getSplits");
nonCombinablePathIndices.add(i + start);
}
}
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java b/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java
index c3b9190..fba5b7e 100755
--- a/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java
@@ -520,7 +520,9 @@ public class HiveInputFormat<K extends WritableComparable, V extends Writable>
private static void processForWriteIds(Path dir, JobConf conf,
ValidTxnList validTxnList, List<Path> finalPaths) throws IOException {
FileSystem fs = dir.getFileSystem(conf);
- Utilities.LOG14535.warn("Checking " + dir + " (root) for inputs");
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Checking " + dir + " (root) for inputs");
+ }
// Ignore nullscan-optimized paths.
if (fs instanceof NullScanFileSystem) {
finalPaths.add(dir);
@@ -537,20 +539,20 @@ public class HiveInputFormat<K extends WritableComparable, V extends Writable>
boolean hadAcidState = false; // whether getAcidState has been called for currDir
for (FileStatus file : files) {
Path path = file.getPath();
- Utilities.LOG14535.warn("Checking " + path + " for inputs");
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Checking " + path + " for inputs");
+ }
if (!file.isDirectory()) {
- Utilities.LOG14535.warn("Ignoring a file not in MM directory " + path);
+ Utilities.FILE_OP_LOGGER.warn("Ignoring a file not in MM directory " + path);
} else if (JavaUtils.extractTxnId(path) == null) {
subdirs.add(path);
- } else {
- if (!hadAcidState) {
- AcidUtils.Directory dirInfo = AcidUtils.getAcidState(currDir, conf, validTxnList, Ref.from(false), true, null);
- hadAcidState = true;
- // todo for IOW, we also need to count in base dir, if any
- for (AcidUtils.ParsedDelta delta : dirInfo.getCurrentDirectories()) {
- Utilities.LOG14535.info("Adding input " + delta.getPath());
- finalPaths.add(delta.getPath());
- }
+ } else if (!hadAcidState) {
+ AcidUtils.Directory dirInfo = AcidUtils.getAcidState(currDir, conf, validTxnList, Ref.from(false), true, null);
+ hadAcidState = true;
+ // TODO: for IOW, we also need to count in base dir, if any
+ for (AcidUtils.ParsedDelta delta : dirInfo.getCurrentDirectories()) {
+ Utilities.FILE_OP_LOGGER.debug("Adding input " + delta.getPath());
+ finalPaths.add(delta.getPath());
}
}
}
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
index 39808b2..d4282ed 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
@@ -1724,12 +1724,17 @@ public class Hive {
// TODO: this assumes both paths are qualified; which they are, currently.
if (isMmTableWrite && loadPath.equals(newPartPath)) {
// MM insert query, move itself is a no-op.
- Utilities.LOG14535.info("not moving " + loadPath + " to " + newPartPath + " (MM)");
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("not moving " + loadPath + " to " + newPartPath + " (MM)");
+ }
assert !isAcid;
if (areEventsForDmlNeeded(tbl, oldPart)) {
newFiles = listFilesCreatedByQuery(loadPath, txnId, stmtId);
}
- Utilities.LOG14535.info("maybe deleting stuff from " + oldPartPath + " (new " + newPartPath + ") for replace");
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("maybe deleting stuff from " + oldPartPath
+ + " (new " + newPartPath + ") for replace");
+ }
if (replace && oldPartPath != null) {
boolean isAutoPurge = "true".equalsIgnoreCase(tbl.getProperty("auto.purge"));
deleteOldPathForReplace(newPartPath, oldPartPath, getConf(), isAutoPurge,
@@ -1745,7 +1750,9 @@ public class Hive {
destPath = new Path(destPath, AcidUtils.deltaSubdir(txnId, txnId, stmtId));
filter = replace ? new JavaUtils.IdPathFilter(txnId, stmtId, false, true) : filter;
}
- Utilities.LOG14535.info("moving " + loadPath + " to " + destPath);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("moving " + loadPath + " to " + destPath);
+ }
if (replace || (oldPart == null && !isAcid)) {
boolean isAutoPurge = "true".equalsIgnoreCase(tbl.getProperty("auto.purge"));
replaceFiles(tbl.getPath(), loadPath, destPath, oldPartPath, getConf(),
@@ -1916,7 +1923,9 @@ private void walkDirTree(FileStatus fSta, FileSystem fSys,
/* Base Case. It's leaf. */
if (!fSta.isDir()) {
- Utilities.LOG14535.info("Processing LB leaf " + fSta.getPath());
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Processing LB leaf " + fSta.getPath());
+ }
/* construct one location map if not exists. */
constructOneLBLocationMap(fSta, skewedColValueLocationMaps, newPartPath, skewedInfo);
return;
@@ -1925,7 +1934,9 @@ private void walkDirTree(FileStatus fSta, FileSystem fSys,
/* dfs. */
FileStatus[] children = fSys.listStatus(fSta.getPath(), FileUtils.HIDDEN_FILES_PATH_FILTER);
if (children != null) {
- Utilities.LOG14535.info("Processing LB dir " + fSta.getPath());
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Processing LB dir " + fSta.getPath());
+ }
for (FileStatus child : children) {
walkDirTree(child, fSys, skewedColValueLocationMaps, newPartPath, skewedInfo);
}
@@ -1974,8 +1985,10 @@ private void constructOneLBLocationMap(FileStatus fSta,
for (int i = 0; i < (dirNames.length - dirsToTake); ++i) {
lbdPath = lbdPath.getParent();
}
- Utilities.LOG14535.info("Saving LB location " + lbdPath + " based on "
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Saving LB location " + lbdPath + " based on "
+ colCount + " keys and " + fSta.getPath());
+ }
if ((skewedValue.size() > 0) && (skewedValue.size() == colCount)
&& !skewedColValueLocationMaps.containsKey(skewedValue)) {
skewedColValueLocationMaps.put(skewedValue, lbdPath.toString());
@@ -1993,7 +2006,6 @@ private void constructOneLBLocationMap(FileStatus fSta,
*/
private Map<List<String>, String> constructListBucketingLocationMap(Path newPartPath,
SkewedInfo skewedInfo) throws IOException, FileNotFoundException {
- Utilities.LOG14535.info("Constructing list bucketing map for " + newPartPath);
Map<List<String>, String> skewedColValueLocationMaps = new HashMap<List<String>, String>();
FileSystem fSys = newPartPath.getFileSystem(conf);
walkDirTree(fSys.getFileStatus(newPartPath),
@@ -2021,7 +2033,6 @@ private void constructOneLBLocationMap(FileStatus fSta,
throw new HiveException("partition " + s.getPath() + " is not a directory!");
}
Path dpPath = s.getPath();
- Utilities.LOG14535.info("Found DP " + dpPath);
validPartitions.add(dpPath);
}
} else {
@@ -2034,7 +2045,9 @@ private void constructOneLBLocationMap(FileStatus fSta,
for (int i = 0; i < numLB; ++i) {
dpPath = dpPath.getParent(); // Now skip the LB directories, if any...
}
- Utilities.LOG14535.info("Found DP " + dpPath);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Found DP " + dpPath);
+ }
validPartitions.add(dpPath);
}
}
@@ -2111,7 +2124,7 @@ private void constructOneLBLocationMap(FileStatus fSta,
final LinkedHashMap<String, String> fullPartSpec = Maps.newLinkedHashMap(partSpec);
if (!Warehouse.makeSpecFromName(
fullPartSpec, partPath, new HashSet<String>(partSpec.keySet()))) {
- Utilities.LOG14535.warn("Ignoring invalid DP directory " + partPath);
+ Utilities.FILE_OP_LOGGER.warn("Ignoring invalid DP directory " + partPath);
continue;
}
futures.add(pool.submit(new Callable<Void>() {
@@ -2123,7 +2136,6 @@ private void constructOneLBLocationMap(FileStatus fSta,
LOG.info("New loading path = " + partPath + " with partSpec " + fullPartSpec);
// load the partition
- Utilities.LOG14535.info("loadPartition called for DPP from " + partPath + " to " + tbl.getTableName());
Partition newPartition = loadPartition(partPath, tbl, fullPartSpec,
replace, true, numLB > 0,
false, isAcid, hasFollowingStatsTask, txnId, stmtId);
@@ -2227,7 +2239,7 @@ private void constructOneLBLocationMap(FileStatus fSta,
}
// TODO: this assumes both paths are qualified; which they are, currently.
if (isMmTable && loadPath.equals(tbl.getPath())) {
- Utilities.LOG14535.info("not moving " + loadPath + " to " + tbl.getPath());
+ Utilities.FILE_OP_LOGGER.debug("not moving " + loadPath + " to " + tbl.getPath());
if (replace) {
Path tableDest = tbl.getPath();
boolean isAutopurge = "true".equalsIgnoreCase(tbl.getProperty("auto.purge"));
@@ -2245,7 +2257,7 @@ private void constructOneLBLocationMap(FileStatus fSta,
destPath = new Path(destPath, AcidUtils.deltaSubdir(txnId, txnId, stmtId));
filter = replace ? new JavaUtils.IdPathFilter(txnId, stmtId, false, true) : filter;
}
- Utilities.LOG14535.info("moving " + loadPath + " to " + tblPath + " (replace = " + replace + ")");
+ Utilities.FILE_OP_LOGGER.debug("moving " + loadPath + " to " + tblPath + " (replace = " + replace + ")");
if (replace) {
boolean isAutopurge = "true".equalsIgnoreCase(tbl.getProperty("auto.purge"));
replaceFiles(tblPath, loadPath, destPath, tblPath,
@@ -3431,7 +3443,9 @@ private void constructOneLBLocationMap(FileStatus fSta,
Executors.newFixedThreadPool(conf.getInt(ConfVars.HIVE_MOVE_FILES_THREAD_COUNT.varname, 25),
new ThreadFactoryBuilder().setDaemon(true).setNameFormat("Move-Thread-%d").build()) : null;
if (destIsSubDirOfSrc && !destFs.exists(destf)) {
- Utilities.LOG14535.info("Creating " + destf);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Creating " + destf);
+ }
destFs.mkdirs(destf);
}
/* Move files one by one because source is a subdirectory of destination */
@@ -3831,7 +3845,8 @@ private void constructOneLBLocationMap(FileStatus fSta,
private void deleteOldPathForReplace(Path destPath, Path oldPath, HiveConf conf, boolean purge,
PathFilter pathFilter, boolean isMmTable, int lbLevels) throws HiveException {
- Utilities.LOG14535.info("Deleting old paths for replace in " + destPath + " and old path " + oldPath);
+ Utilities.FILE_OP_LOGGER.debug("Deleting old paths for replace in " + destPath
+ + " and old path " + oldPath);
boolean isOldPathUnderDestf = false;
try {
FileSystem oldFs = oldPath.getFileSystem(conf);
@@ -3860,7 +3875,7 @@ private void constructOneLBLocationMap(FileStatus fSta,
if (!lbDir.isDirectory()) {
throw new HiveException("Unexpected path during overwrite: " + lbPath);
}
- Utilities.LOG14535.info("Cleaning up LB directory " + lbPath);
+ Utilities.FILE_OP_LOGGER.info("Cleaning up LB directory " + lbPath);
cleanUpOneDirectoryForReplace(lbPath, oldFs, pathFilter, conf, purge);
}
}
@@ -3882,11 +3897,13 @@ private void constructOneLBLocationMap(FileStatus fSta,
PathFilter pathFilter, HiveConf conf, boolean purge) throws IOException, HiveException {
FileStatus[] statuses = fs.listStatus(path, pathFilter);
if (statuses == null || statuses.length == 0) return;
- String s = "Deleting files under " + path + " for replace: ";
- for (FileStatus file : statuses) {
- s += file.getPath().getName() + ", ";
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ String s = "Deleting files under " + path + " for replace: ";
+ for (FileStatus file : statuses) {
+ s += file.getPath().getName() + ", ";
+ }
+ Utilities.FILE_OP_LOGGER.trace(s);
}
- Utilities.LOG14535.info(s);
if (!trashFiles(fs, statuses, conf, purge)) {
throw new HiveException("Old path " + path + " has not been cleaned up.");
}
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/TextMetaDataFormatter.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/TextMetaDataFormatter.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/TextMetaDataFormatter.java
index 41bbdfa..3c25896 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/TextMetaDataFormatter.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/TextMetaDataFormatter.java
@@ -407,7 +407,6 @@ class TextMetaDataFormatter implements MetaDataFormatter {
}
private void processDir(FileStatus status, FileSystem fs, FileData fd) throws IOException {
- Utilities.LOG14535.info("Processing dir for status: " + status.getPath());
long accessTime = status.getAccessTime();
long updateTime = status.getModificationTime();
if (accessTime > fd.lastAccessTime) {
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/optimizer/AbstractBucketJoinProc.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/AbstractBucketJoinProc.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/AbstractBucketJoinProc.java
index 02bdd91..66ea4e2 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/AbstractBucketJoinProc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/AbstractBucketJoinProc.java
@@ -265,7 +265,7 @@ abstract public class AbstractBucketJoinProc implements NodeProcessor {
Table tbl = tso.getConf().getTableMetadata();
if (MetaStoreUtils.isInsertOnlyTable(tbl.getParameters())) {
- Utilities.LOG14535.debug("No bucketed join on MM table " + tbl.getTableName());
+ Utilities.FILE_OP_LOGGER.debug("No bucketed join on MM table " + tbl.getTableName());
return false;
}
if (tbl.isPartitioned()) {
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
index 6a56407..9ffda7e 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
@@ -1266,9 +1266,11 @@ public final class GenMapRedUtils {
// 1. create the operator tree
//
FileSinkDesc fsInputDesc = fsInput.getConf();
- Utilities.LOG14535.info("Creating merge work from " + System.identityHashCode(fsInput)
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Creating merge work from " + System.identityHashCode(fsInput)
+ " with write ID " + (fsInputDesc.isMmTable() ? fsInputDesc.getTransactionId() : null)
+ " into " + finalName);
+ }
boolean isBlockMerge = (conf.getBoolVar(ConfVars.HIVEMERGERCFILEBLOCKLEVEL) &&
fsInputDesc.getTableInfo().getInputFileFormatClass().equals(RCFileInputFormat.class)) ||
@@ -1367,12 +1369,11 @@ public final class GenMapRedUtils {
MoveWork dummyMv = null;
if (srcMmWriteId == null) {
// Only create the movework for non-MM table. No action needed for a MM table.
- Utilities.LOG14535.info("creating dummy movetask for merge (with lfd)");
dummyMv = new MoveWork(null, null, null,
new LoadFileDesc(inputDirName, finalName, true, null, null, false), false,
SessionState.get().getLineageState());
} else {
- // TODO# create the noop MoveWork to avoid q file changes for now. Should be removed w/the flag just before merge
+ // TODO# noop MoveWork to avoid q file changes in HIVE-14990. Remove (w/the flag) after merge.
dummyMv = new MoveWork(null, null, null,
new LoadFileDesc(inputDirName, finalName, true, null, null, false), false,
SessionState.get().getLineageState());
@@ -1383,7 +1384,6 @@ public final class GenMapRedUtils {
// can only be triggered for a merge that's part of insert for now; MM tables do not support
// concatenate. Keeping the old logic for non-MM tables with temp directories and stuff.
Path fsopPath = srcMmWriteId != null ? fsInputDesc.getFinalDirName() : finalName;
- Utilities.LOG14535.info("Looking for MoveTask to make it dependant on the conditional tasks");
Task<MoveWork> mvTask = GenMapRedUtils.findMoveTaskForFsopOutput(
mvTasks, fsopPath, fsInputDesc.isMmTable());
@@ -1565,7 +1565,6 @@ public final class GenMapRedUtils {
TableDesc tblDesc = fsDesc.getTableInfo();
aliases.add(inputDirStr); // dummy alias: just use the input path
- Utilities.LOG14535.info("createMRWorkForMergingFiles for " + inputDir);
// constructing the default MapredWork
MapredWork cMrPlan = GenMapRedUtils.getMapRedWorkFromConf(conf);
MapWork cplan = cMrPlan.getMapWork();
@@ -1616,7 +1615,9 @@ public final class GenMapRedUtils {
+ " format other than RCFile or ORCFile");
}
- Utilities.LOG14535.info("creating mergefilework from " + inputDirs + " to " + finalName);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("creating mergefilework from " + inputDirs + " to " + finalName);
+ }
// create the merge file work
MergeFileWork work = new MergeFileWork(inputDirs, finalName,
hasDynamicPartitions, tblDesc.getInputFileFormatClass().getName(), tblDesc);
@@ -1749,7 +1750,9 @@ public final class GenMapRedUtils {
Task<? extends Serializable> currTask, MoveWork mvWork, Serializable mergeWork,
Path condInputPath, Path condOutputPath, Task<MoveWork> moveTaskToLink,
DependencyCollectionTask dependencyTask) {
- Utilities.LOG14535.info("Creating conditional merge task for " + condInputPath);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Creating conditional merge task for " + condInputPath);
+ }
// Create a dummy task if no move is needed.
Serializable moveWork = mvWork != null ? mvWork : new DependencyCollectionWork();
@@ -1849,9 +1852,11 @@ public final class GenMapRedUtils {
} else if (mvWork.getLoadTableWork() != null) {
srcDir = mvWork.getLoadTableWork().getSourcePath();
}
- Utilities.LOG14535.info("Observing MoveWork " + System.identityHashCode(mvWork)
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Observing MoveWork " + System.identityHashCode(mvWork)
+ " with " + srcDir + "(from " + (isLfd ? "LFD" : "LTD") + ") while looking for "
+ fsopFinalDir + "(mm = " + isMmFsop + ")");
+ }
if ((srcDir != null) && srcDir.equals(fsopFinalDir)) {
return mvTsk;
@@ -1958,11 +1963,17 @@ public final class GenMapRedUtils {
if (fileSinkDesc.isLinkedFileSink()) {
for (FileSinkDesc fsConf : fileSinkDesc.getLinkedFileSinkDesc()) {
fsConf.setDirName(new Path(tmpDir, fsConf.getDirName().getName()));
- Utilities.LOG14535.info("createMoveTask setting tmpDir for LinkedFileSink chDir " + fsConf.getDirName() + "; dest was " + fileSinkDesc.getDestPath());
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("createMoveTask setting tmpDir for LinkedFileSink chDir "
+ + fsConf.getDirName() + "; dest was " + fileSinkDesc.getDestPath());
+ }
}
} else {
fileSinkDesc.setDirName(tmpDir);
- Utilities.LOG14535.info("createMoveTask setting tmpDir chDir " + tmpDir + "; dest was " + fileSinkDesc.getDestPath());
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("createMoveTask setting tmpDir chDir "
+ + tmpDir + "; dest was " + fileSinkDesc.getDestPath());
+ }
}
}
}
@@ -1970,7 +1981,6 @@ public final class GenMapRedUtils {
Task<MoveWork> mvTask = null;
if (!chDir) {
- Utilities.LOG14535.info("Looking for MoveTask from createMoveTask");
mvTask = GenMapRedUtils.findMoveTaskForFsopOutput(
mvTasks, fsOp.getConf().getFinalDirName(), fsOp.getConf().isMmTable());
}
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcFactory.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcFactory.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcFactory.java
index bc26c5e..3f38bd1 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcFactory.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcFactory.java
@@ -223,7 +223,10 @@ public final class UnionProcFactory {
FileSinkDesc fileSinkDesc = (FileSinkDesc) fileSinkOp.getConf().clone();
fileSinkDesc.setDirName(new Path(parentDirName, AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + parent.getIdentifier()));
fileSinkDesc.setLinkedFileSink(true);
- Utilities.LOG14535.info("Created LinkedFileSink for union " + fileSinkDesc.getDirName() + "; parent " + parentDirName);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Created LinkedFileSink for union " + fileSinkDesc.getDirName()
+ + "; parent " + parentDirName);
+ }
parent.setChildOperators(null);
Operator<? extends OperatorDesc> tmpFileSinkOp =
OperatorFactory.getAndMakeChild(fileSinkDesc, parent.getSchema(), parent);
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezUtils.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezUtils.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezUtils.java
index cf1d14c..01cb2b3 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezUtils.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezUtils.java
@@ -316,7 +316,8 @@ public class GenTezUtils {
linked.add(desc);
desc.setDirName(new Path(path, AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + linked.size()));
- Utilities.LOG14535.info("removing union - new desc with " + desc.getDirName() + "; parent " + path);
+ Utilities.FILE_OP_LOGGER.debug("removing union - new desc with "
+ + desc.getDirName() + "; parent " + path);
desc.setLinkedFileSink(true);
desc.setLinkedFileSinkDesc(linked);
}
@@ -384,7 +385,8 @@ public class GenTezUtils {
// If underlying data is RCFile or OrcFile, RCFileBlockMerge task or
// OrcFileStripeMerge task would be created.
LOG.info("using CombineHiveInputformat for the merge job");
- Utilities.LOG14535.info("will generate MR work for merging files from " + fileSink.getConf().getDirName() + " to " + finalName);
+ Utilities.FILE_OP_LOGGER.debug("will generate MR work for merging files from "
+ + fileSink.getConf().getDirName() + " to " + finalName);
GenMapRedUtils.createMRWorkForMergingFiles(fileSink, finalName,
context.dependencyTask, context.moveTask,
hconf, context.currentTask);
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
index b9f28eb..41b5156 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
@@ -367,9 +367,11 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
Path dataPath = new Path(fromURI.toString(), EximUtil.DATA_PATH_NAME);
Path destPath = !MetaStoreUtils.isInsertOnlyTable(table.getParameters()) ? x.getCtx().getExternalTmpPath(tgtPath)
: new Path(tgtPath, AcidUtils.deltaSubdir(txnId, txnId, stmtId));
- Utilities.LOG14535.info("adding import work for table with source location: "
- + dataPath + "; table: " + tgtPath + "; copy destination " + destPath + "; mm "
- + txnId + " (src " + isSourceMm + ") for " + (table == null ? "a new table" : table.getTableName()));
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("adding import work for table with source location: " +
+ dataPath + "; table: " + tgtPath + "; copy destination " + destPath + "; mm " + txnId +
+ " (src " + isSourceMm + ") for " + (table == null ? "a new table" : table.getTableName()));
+ }
Task<?> copyTask = null;
if (replicationSpec.isInReplicationScope()) {
@@ -458,9 +460,11 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
Path destPath = !MetaStoreUtils.isInsertOnlyTable(table.getParameters()) ? x.getCtx().getExternalTmpPath(tgtLocation)
: new Path(tgtLocation, AcidUtils.deltaSubdir(txnId, txnId, stmtId));
Path moveTaskSrc = !MetaStoreUtils.isInsertOnlyTable(table.getParameters()) ? destPath : tgtLocation;
- Utilities.LOG14535.info("adding import work for partition with source location: "
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("adding import work for partition with source location: "
+ srcLocation + "; target: " + tgtLocation + "; copy dest " + destPath + "; mm "
+ txnId + " (src " + isSourceMm + ") for " + partSpecToString(partSpec.getPartSpec()));
+ }
Task<?> copyTask = null;
@@ -484,9 +488,6 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
loadTableWork.setTxnId(txnId);
loadTableWork.setStmtId(stmtId);
loadTableWork.setInheritTableSpecs(false);
- // Do not commit the write ID from each task; need to commit once.
- // TODO: we should just change the import to use a single MoveTask, like dynparts.
- loadTableWork.setIntermediateInMmWrite(isAcid(txnId));
Task<?> loadPartTask = TaskFactory.get(new MoveWork(
x.getInputs(), x.getOutputs(), loadTableWork, null, false, SessionState.get().getLineageState()), x.getConf());
copyTask.addDependentTask(loadPartTask);
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
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 df50aab..29d6520 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
@@ -6834,7 +6834,10 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
} else {
queryTmpdir = ctx.getTempDirForPath(dest_path, true);
}
- Utilities.LOG14535.info("create filesink w/DEST_TABLE specifying " + queryTmpdir + " from " + dest_path);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("create filesink w/DEST_TABLE specifying " + queryTmpdir
+ + " from " + dest_path);
+ }
if (dpCtx != null) {
// set the root of the temporary path where dynamic partition columns will populate
dpCtx.setRootPath(queryTmpdir);
@@ -6914,7 +6917,10 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
isMmTable = MetaStoreUtils.isInsertOnlyTable(dest_tab.getParameters());
queryTmpdir = isMmTable ? dest_path : ctx.getTempDirForPath(dest_path, true);
- Utilities.LOG14535.info("create filesink w/DEST_PARTITION specifying " + queryTmpdir + " from " + dest_path);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("create filesink w/DEST_PARTITION specifying "
+ + queryTmpdir + " from " + dest_path);
+ }
table_desc = Utilities.getTableDesc(dest_tab);
// Add sorting/bucketing if needed
@@ -6996,7 +7002,10 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
try {
Path qPath = FileUtils.makeQualified(dest_path, conf);
queryTmpdir = isMmTable ? qPath : ctx.getTempDirForPath(qPath, true);
- Utilities.LOG14535.info("Setting query directory " + queryTmpdir + " from " + dest_path + " (" + isMmTable + ")");
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Setting query directory " + queryTmpdir
+ + " from " + dest_path + " (" + isMmTable + ")");
+ }
} catch (Exception e) {
throw new SemanticException("Error creating temporary folder on: "
+ dest_path, e);
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/parse/TaskCompiler.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/TaskCompiler.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/TaskCompiler.java
index 752a934..a63f709 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/TaskCompiler.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/TaskCompiler.java
@@ -342,9 +342,14 @@ public abstract class TaskCompiler {
dataSinkForCtas.setDirName(location);
location = new Path(location, AcidUtils.deltaSubdir(txnIdForCtas, txnIdForCtas, stmtId));
lfd.setSourcePath(location);
- Utilities.LOG14535.info("Setting MM CTAS to " + location);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Setting MM CTAS to " + location);
+ }
+ }
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Location for LFD is being set to "
+ + location + "; moving from " + lfd.getSourcePath());
}
- Utilities.LOG14535.info("Location for LFD is being set to " + location + "; moving from " + lfd.getSourcePath());
lfd.setTargetDir(location);
}
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/plan/ConditionalResolverMergeFiles.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/ConditionalResolverMergeFiles.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/ConditionalResolverMergeFiles.java
index a0e024c..129347b 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/ConditionalResolverMergeFiles.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/ConditionalResolverMergeFiles.java
@@ -171,7 +171,7 @@ public class ConditionalResolverMergeFiles implements ConditionalResolver,
if(lbLevel == 0) {
// static partition without list bucketing
long totalSz = getMergeSize(inpFs, dirPath, avgConditionSize);
- Utilities.LOG14535.info("merge resolve simple case - totalSz " + totalSz + " from " + dirPath);
+ Utilities.FILE_OP_LOGGER.debug("merge resolve simple case - totalSz " + totalSz + " from " + dirPath);
if (totalSz >= 0) { // add the merge job
setupMapRedWork(conf, work, trgtSize, totalSz);
@@ -186,7 +186,7 @@ public class ConditionalResolverMergeFiles implements ConditionalResolver,
}
}
} else {
- Utilities.LOG14535.info("Resolver returning movetask for " + dirPath);
+ Utilities.FILE_OP_LOGGER.info("Resolver returning movetask for " + dirPath);
resTsks.add(mvTask);
}
} catch (IOException e) {
@@ -229,7 +229,6 @@ public class ConditionalResolverMergeFiles implements ConditionalResolver,
Task<? extends Serializable> mrTask, Task<? extends Serializable> mrAndMvTask, Path dirPath,
FileSystem inpFs, ConditionalResolverMergeFilesCtx ctx, MapWork work, int dpLbLevel)
throws IOException {
- Utilities.LOG14535.info("generateActualTasks for " + dirPath);
DynamicPartitionCtx dpCtx = ctx.getDPCtx();
// get list of dynamic partitions
FileStatus[] status = HiveStatsUtils.getFileStatusRecurse(dirPath, dpLbLevel, inpFs);
@@ -240,7 +239,7 @@ public class ConditionalResolverMergeFiles implements ConditionalResolver,
Path path = ptpi.keySet().iterator().next();
PartitionDesc partDesc = ptpi.get(path);
TableDesc tblDesc = partDesc.getTableDesc();
- Utilities.LOG14535.info("merge resolver removing " + path);
+ Utilities.FILE_OP_LOGGER.debug("merge resolver removing " + path);
work.removePathToPartitionInfo(path); // the root path is not useful anymore
// cleanup pathToAliases
@@ -263,14 +262,14 @@ public class ConditionalResolverMergeFiles implements ConditionalResolver,
PartitionDesc pDesc = (dpCtx != null) ? generateDPFullPartSpec(dpCtx, status, tblDesc, i)
: partDesc;
if (pDesc == null) {
- Utilities.LOG14535.warn("merger ignoring invalid DP path " + status[i].getPath());
+ Utilities.FILE_OP_LOGGER.warn("merger ignoring invalid DP path " + status[i].getPath());
continue;
}
- Utilities.LOG14535.info("merge resolver will merge " + status[i].getPath());
+ Utilities.FILE_OP_LOGGER.debug("merge resolver will merge " + status[i].getPath());
work.resolveDynamicPartitionStoredAsSubDirsMerge(conf, status[i].getPath(), tblDesc,
aliases, pDesc);
} else {
- Utilities.LOG14535.info("merge resolver will move " + status[i].getPath());
+ Utilities.FILE_OP_LOGGER.debug("merge resolver will move " + status[i].getPath());
toMove.add(status[i].getPath());
}
@@ -375,7 +374,7 @@ public class ConditionalResolverMergeFiles implements ConditionalResolver,
long totalSz = 0;
int numFiles = 0;
for (FileStatus fStat : fStats) {
- Utilities.LOG14535.info("Resolver looking at " + fStat.getPath());
+ Utilities.FILE_OP_LOGGER.debug("Resolver looking at " + fStat.getPath());
if (fStat.isDir()) {
AverageSize avgSzDir = getAverageSize(inpFs, fStat.getPath());
if (avgSzDir.getTotalSize() < 0) {
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadFileDesc.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadFileDesc.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadFileDesc.java
index d90acce..30d9912 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadFileDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadFileDesc.java
@@ -73,7 +73,9 @@ public class LoadFileDesc extends LoadDesc implements Serializable {
final boolean isDfsDir, final String columns,
final String columnTypes, AcidUtils.Operation writeType, boolean isMmCtas) {
super(sourcePath, writeType);
- Utilities.LOG14535.info("creating LFD from " + sourcePath + " to " + targetDir);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("creating LFD from " + sourcePath + " to " + targetDir);
+ }
this.targetDir = targetDir;
this.isDfsDir = isDfsDir;
this.columns = columns;
[30/50] [abbrv] hive git commit: HIVE-15212 : merge branch into
master - some test/out fixes 3 (Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-15212 : merge branch into master - some test/out fixes 3 (Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/6f0be79b
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/6f0be79b
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/6f0be79b
Branch: refs/heads/master
Commit: 6f0be79ba93bac5469ceb003c224ed356507476c
Parents: 1fb04f3
Author: sergey <se...@apache.org>
Authored: Thu Sep 21 17:43:27 2017 +1000
Committer: sergey <se...@apache.org>
Committed: Thu Sep 21 17:43:27 2017 +1000
----------------------------------------------------------------------
ql/src/test/queries/clientpositive/mm_all.q | 31 +++----
ql/src/test/results/clientpositive/mm_all.q.out | 94 ++++++--------------
2 files changed, 42 insertions(+), 83 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/6f0be79b/ql/src/test/queries/clientpositive/mm_all.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/mm_all.q b/ql/src/test/queries/clientpositive/mm_all.q
index e23260f..b93e13e 100644
--- a/ql/src/test/queries/clientpositive/mm_all.q
+++ b/ql/src/test/queries/clientpositive/mm_all.q
@@ -209,11 +209,9 @@ drop table multi0_2_mm;
create table multi0_1_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only");
create table multi0_2_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only");
---from intermediate
---insert overwrite table multi0_1_mm select key, p
---insert overwrite table multi0_2_mm select p, key;
-insert into table multi0_1_mm select key, p from intermediate;
-insert into table multi0_2_mm select p, key from intermediate;
+from intermediate
+insert overwrite table multi0_1_mm select key, p
+insert overwrite table multi0_2_mm select p, key;
select * from multi0_1_mm order by key, key2;
select * from multi0_2_mm order by key, key2;
@@ -222,11 +220,10 @@ set hive.merge.mapredfiles=true;
set hive.merge.sparkfiles=true;
set hive.merge.tezfiles=true;
---from intermediate
---insert into table multi0_1_mm select p, key
---insert overwrite table multi0_2_mm select key, p;
-insert into table multi0_1_mm select p, key from intermediate;
-insert into table multi0_2_mm select key, p from intermediate;
+from intermediate
+insert into table multi0_1_mm select p, key
+insert overwrite table multi0_2_mm select key, p;
+
select * from multi0_1_mm order by key, key2;
select * from multi0_2_mm order by key, key2;
@@ -243,23 +240,27 @@ create table multi1_mm (key int, key2 int) partitioned by (p int) tblproperties(
from intermediate
insert into table multi1_mm partition(p=1) select p, key
insert into table multi1_mm partition(p=2) select key, p;
+
select * from multi1_mm order by key, key2, p;
---from intermediate
---insert into table multi1_mm partition(p=2) select p, key
---insert overwrite table multi1_mm partition(p=1) select key, p;
-insert into table multi1_mm partition(p=2) select p, key from intermediate;
-insert into table multi1_mm partition(p=1) select key, p from intermediate;
+
+from intermediate
+insert into table multi1_mm partition(p=2) select p, key
+insert overwrite table multi1_mm partition(p=1) select key, p;
+
select * from multi1_mm order by key, key2, p;
from intermediate
insert into table multi1_mm partition(p) select p, key, p
insert into table multi1_mm partition(p=1) select key, p;
+
select key, key2, p from multi1_mm order by key, key2, p;
from intermediate
insert into table multi1_mm partition(p) select p, key, 1
insert into table multi1_mm partition(p=1) select key, p;
+
select key, key2, p from multi1_mm order by key, key2, p;
+
drop table multi1_mm;
http://git-wip-us.apache.org/repos/asf/hive/blob/6f0be79b/ql/src/test/results/clientpositive/mm_all.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/mm_all.q.out b/ql/src/test/results/clientpositive/mm_all.q.out
index ea60414..4162ce9 100644
--- a/ql/src/test/results/clientpositive/mm_all.q.out
+++ b/ql/src/test/results/clientpositive/mm_all.q.out
@@ -1342,36 +1342,28 @@ POSTHOOK: query: create table multi0_2_mm (key int, key2 int) tblproperties("tr
POSTHOOK: type: CREATETABLE
POSTHOOK: Output: database:default
POSTHOOK: Output: default@multi0_2_mm
-PREHOOK: query: insert into table multi0_1_mm select key, p from intermediate
+PREHOOK: query: from intermediate
+insert overwrite table multi0_1_mm select key, p
+insert overwrite table multi0_2_mm select p, key
PREHOOK: type: QUERY
PREHOOK: Input: default@intermediate
PREHOOK: Input: default@intermediate@p=455
PREHOOK: Input: default@intermediate@p=456
PREHOOK: Input: default@intermediate@p=457
PREHOOK: Output: default@multi0_1_mm
-POSTHOOK: query: insert into table multi0_1_mm select key, p from intermediate
+PREHOOK: Output: default@multi0_2_mm
+POSTHOOK: query: from intermediate
+insert overwrite table multi0_1_mm select key, p
+insert overwrite table multi0_2_mm select p, key
POSTHOOK: type: QUERY
POSTHOOK: Input: default@intermediate
POSTHOOK: Input: default@intermediate@p=455
POSTHOOK: Input: default@intermediate@p=456
POSTHOOK: Input: default@intermediate@p=457
POSTHOOK: Output: default@multi0_1_mm
+POSTHOOK: Output: default@multi0_2_mm
POSTHOOK: Lineage: multi0_1_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
POSTHOOK: Lineage: multi0_1_mm.key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
-PREHOOK: query: insert into table multi0_2_mm select p, key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@multi0_2_mm
-POSTHOOK: query: insert into table multi0_2_mm select p, key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@multi0_2_mm
POSTHOOK: Lineage: multi0_2_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
POSTHOOK: Lineage: multi0_2_mm.key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
PREHOOK: query: select * from multi0_1_mm order by key, key2
@@ -1396,42 +1388,28 @@ POSTHOOK: query: select * from multi0_2_mm order by key, key2
POSTHOOK: type: QUERY
POSTHOOK: Input: default@multi0_2_mm
#### A masked pattern was here ####
-455 97
-455 98
-456 0
-456 10
-457 100
-457 103
-PREHOOK: query: insert into table multi0_1_mm select p, key from intermediate
+PREHOOK: query: from intermediate
+insert into table multi0_1_mm select p, key
+insert overwrite table multi0_2_mm select key, p
PREHOOK: type: QUERY
PREHOOK: Input: default@intermediate
PREHOOK: Input: default@intermediate@p=455
PREHOOK: Input: default@intermediate@p=456
PREHOOK: Input: default@intermediate@p=457
PREHOOK: Output: default@multi0_1_mm
-POSTHOOK: query: insert into table multi0_1_mm select p, key from intermediate
+PREHOOK: Output: default@multi0_2_mm
+POSTHOOK: query: from intermediate
+insert into table multi0_1_mm select p, key
+insert overwrite table multi0_2_mm select key, p
POSTHOOK: type: QUERY
POSTHOOK: Input: default@intermediate
POSTHOOK: Input: default@intermediate@p=455
POSTHOOK: Input: default@intermediate@p=456
POSTHOOK: Input: default@intermediate@p=457
POSTHOOK: Output: default@multi0_1_mm
+POSTHOOK: Output: default@multi0_2_mm
POSTHOOK: Lineage: multi0_1_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
POSTHOOK: Lineage: multi0_1_mm.key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: insert into table multi0_2_mm select key, p from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@multi0_2_mm
-POSTHOOK: query: insert into table multi0_2_mm select key, p from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@multi0_2_mm
POSTHOOK: Lineage: multi0_2_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
POSTHOOK: Lineage: multi0_2_mm.key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
PREHOOK: query: select * from multi0_1_mm order by key, key2
@@ -1462,18 +1440,6 @@ POSTHOOK: query: select * from multi0_2_mm order by key, key2
POSTHOOK: type: QUERY
POSTHOOK: Input: default@multi0_2_mm
#### A masked pattern was here ####
-0 456
-10 456
-97 455
-98 455
-100 457
-103 457
-455 97
-455 98
-456 0
-456 10
-457 100
-457 103
PREHOOK: query: drop table multi0_1_mm
PREHOOK: type: DROPTABLE
PREHOOK: Input: default@multi0_1_mm
@@ -1550,38 +1516,30 @@ POSTHOOK: Input: default@multi1_mm@p=2
456 10 1
457 100 1
457 103 1
-PREHOOK: query: insert into table multi1_mm partition(p=2) select p, key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@multi1_mm@p=2
-POSTHOOK: query: insert into table multi1_mm partition(p=2) select p, key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@multi1_mm@p=2
-POSTHOOK: Lineage: multi1_mm PARTITION(p=2).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
-POSTHOOK: Lineage: multi1_mm PARTITION(p=2).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: insert into table multi1_mm partition(p=1) select key, p from intermediate
+PREHOOK: query: from intermediate
+insert into table multi1_mm partition(p=2) select p, key
+insert overwrite table multi1_mm partition(p=1) select key, p
PREHOOK: type: QUERY
PREHOOK: Input: default@intermediate
PREHOOK: Input: default@intermediate@p=455
PREHOOK: Input: default@intermediate@p=456
PREHOOK: Input: default@intermediate@p=457
PREHOOK: Output: default@multi1_mm@p=1
-POSTHOOK: query: insert into table multi1_mm partition(p=1) select key, p from intermediate
+PREHOOK: Output: default@multi1_mm@p=2
+POSTHOOK: query: from intermediate
+insert into table multi1_mm partition(p=2) select p, key
+insert overwrite table multi1_mm partition(p=1) select key, p
POSTHOOK: type: QUERY
POSTHOOK: Input: default@intermediate
POSTHOOK: Input: default@intermediate@p=455
POSTHOOK: Input: default@intermediate@p=456
POSTHOOK: Input: default@intermediate@p=457
POSTHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: Output: default@multi1_mm@p=2
POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=2).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=2).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
PREHOOK: query: select * from multi1_mm order by key, key2, p
PREHOOK: type: QUERY
PREHOOK: Input: default@multi1_mm
[18/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Wei Zheng)
Posted by se...@apache.org.
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/common/src/java/org/apache/hadoop/hive/common/FileUtils.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
----------------------------------------------------------------------
diff --cc common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
index ff8a7aa,e4b09a2..21c4cc9
--- a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
+++ b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
@@@ -1864,14 -1855,9 +1857,16 @@@ public class HiveConf extends Configura
" of the lock manager is dumped to log file. This is for debugging. See also " +
"hive.lock.numretries and hive.lock.sleep.between.retries."),
- HIVE_TXN_OPERATIONAL_PROPERTIES("hive.txn.operational.properties", 0,
+ HIVE_TXN_OPERATIONAL_PROPERTIES("hive.txn.operational.properties", 1,
- "This is intended to be used as an internal property for future versions of ACID. (See\n" +
- "HIVE-14035 for details.)"),
+ "Sets the operational properties that control the appropriate behavior for various\n"
+ + "versions of the Hive ACID subsystem. Mostly it is intended to be used as an internal property\n"
+ + "for future versions of ACID. (See HIVE-14035 for details.)\n"
+ + "0: Turn on the legacy mode for ACID\n"
+ + "1: Enable split-update feature found in the newer version of Hive ACID subsystem\n"
+ + "2: Hash-based merge, which combines delta files using GRACE hash join based approach (not implemented)\n"
- + "3: Make the table 'quarter-acid' as it only supports insert. But it doesn't require ORC or bucketing."),
++ + "3: Make the table 'quarter-acid' as it only supports insert. But it doesn't require ORC or bucketing.\n"
++ + "This is intended to be used as an internal property for future versions of ACID. (See\n" +
++ "HIVE-14035 for details.)"),
HIVE_MAX_OPEN_TXNS("hive.max.open.txns", 100000, "Maximum number of open transactions. If \n" +
"current open transactions reach this limit, future open transaction requests will be \n" +
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/itests/hcatalog-unit/src/test/java/org/apache/hive/hcatalog/listener/DummyRawStoreFailEvent.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/itests/src/test/resources/testconfiguration.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/llap-server/src/java/org/apache/hadoop/hive/llap/io/encoded/VectorDeserializeOrcWriter.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
----------------------------------------------------------------------
diff --cc metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
index 913e333,5812a1b..ab5f7b7
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
@@@ -192,13 -194,14 +197,13 @@@ public class HiveMetaStore extends Thri
};
};
- /**
- * default port on which to start the Hive server
- */
public static final String ADMIN = "admin";
public static final String PUBLIC = "public";
+ /** MM write states. */
+ public static final char MM_WRITE_OPEN = 'o', MM_WRITE_COMMITTED = 'c', MM_WRITE_ABORTED = 'a';
private static HadoopThriftAuthBridge.Server saslServer;
- private static HiveDelegationTokenManager delegationTokenManager;
+ private static MetastoreDelegationTokenManager delegationTokenManager;
private static boolean useSasl;
public static final String NO_FILTER_STRING = "";
@@@ -437,41 -495,14 +497,15 @@@
}
}
- //Start Metrics for Embedded mode
+ //Start Metrics
if (hiveConf.getBoolVar(ConfVars.METASTORE_METRICS)) {
- try {
- MetricsFactory.init(hiveConf);
- } catch (Exception e) {
- // log exception, but ignore inability to start
- LOG.error("error in Metrics init: " + e.getClass().getName() + " "
- + e.getMessage(), e);
- }
- }
-
- Metrics metrics = MetricsFactory.getInstance();
- if (metrics != null && hiveConf.getBoolVar(ConfVars.METASTORE_INIT_METADATA_COUNT_ENABLED)) {
LOG.info("Begin calculating metadata count metrics.");
+ Metrics.initialize(hiveConf);
+ databaseCount = Metrics.getOrCreateGauge(MetricsConstants.TOTAL_DATABASES);
+ tableCount = Metrics.getOrCreateGauge(MetricsConstants.TOTAL_TABLES);
+ partCount = Metrics.getOrCreateGauge(MetricsConstants.TOTAL_PARTITIONS);
updateMetrics();
- LOG.info("Finished metadata count metrics: " + initDatabaseCount + " databases, " + initTableCount +
- " tables, " + initPartCount + " partitions.");
- metrics.addGauge(MetricsConstant.INIT_TOTAL_DATABASES, new MetricsVariable<Object>() {
- @Override
- public Object getValue() {
- return initDatabaseCount;
- }
- });
- metrics.addGauge(MetricsConstant.INIT_TOTAL_TABLES, new MetricsVariable<Object>() {
- @Override
- public Object getValue() {
- return initTableCount;
- }
- });
- metrics.addGauge(MetricsConstant.INIT_TOTAL_PARTITIONS, new MetricsVariable<Object>() {
- @Override
- public Object getValue() {
- return initPartCount;
- }
- });
++
}
preListeners = MetaStoreUtils.getMetaStoreListeners(MetaStorePreEventListener.class,
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
----------------------------------------------------------------------
diff --cc metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
index 8e89477,70451c4..37da2f8
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
@@@ -59,12 -60,11 +60,12 @@@ import org.apache.hadoop.hive.conf.Hive
import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
import org.apache.hadoop.hive.conf.HiveConfUtil;
import org.apache.hadoop.hive.metastore.api.*;
+import org.apache.hadoop.hive.metastore.TableType;
+ import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
import org.apache.hadoop.hive.metastore.partition.spec.PartitionSpecProxy;
+ import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge;
import org.apache.hadoop.hive.metastore.txn.TxnUtils;
- import org.apache.hadoop.hive.shims.ShimLoader;
import org.apache.hadoop.hive.shims.Utils;
- import org.apache.hadoop.hive.thrift.HadoopThriftAuthBridge;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.util.StringUtils;
import org.apache.thrift.TApplicationException;
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreThread.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
----------------------------------------------------------------------
diff --cc metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
index e7bbd62,bbe13fd..49005b9
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
@@@ -1981,59 -1967,156 +1970,212 @@@ public class MetaStoreUtils
return cols;
}
+ // TODO The following two utility methods can be moved to AcidUtils once no class in metastore is relying on them,
+ // right now ObjectStore.getAllMmTablesForCleanup is calling these method
+ /**
+ * Checks if a table is an ACID table that only supports INSERT, but not UPDATE/DELETE
+ * @param params table properties
+ * @return true if table is an INSERT_ONLY table, false otherwise
+ */
+ // TODO# also check that transactional is true
+ public static boolean isInsertOnlyTable(Map<String, String> params) {
+ return isInsertOnlyTable(params, false);
+ }
+
+ public static boolean isInsertOnlyTable(Map<String, String> params, boolean isCtas) {
+ String transactionalProp = params.get(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES);
+ return (transactionalProp != null && "insert_only".equalsIgnoreCase(transactionalProp));
+ }
+
+ public static boolean isInsertOnlyTable(Properties params) {
+ // TODO# redirect for now - fix before merge
+ HashMap<String, String> testMap = new HashMap<String, String>();
+ for (String n : params.stringPropertyNames()) {
+ testMap.put(n, params.getProperty(n));
+ }
+ return isInsertOnlyTable(testMap);
+ }
+
+ /** The method for altering table props; may set the table to MM, non-MM, or not affect MM. */
+ public static Boolean isToInsertOnlyTable(Map<String, String> props) {
+ // TODO# Setting these separately is a very hairy issue in certain combinations, since we
+ // cannot decide what type of table this becomes without taking both into account, and
+ // in many cases the conversion might be illegal.
+ // The only thing we allow is tx = true w/o tx-props, for backward compat.
+ String transactional = props.get(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL);
+ String transactionalProp = props.get(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES);
+ if (transactional == null && transactionalProp == null) return null; // Not affected.
+ boolean isSetToTxn = "true".equalsIgnoreCase(transactional);
+ if (transactionalProp == null) {
+ if (isSetToTxn) return false; // Assume the full ACID table.
+ throw new RuntimeException("Cannot change '" + hive_metastoreConstants.TABLE_IS_TRANSACTIONAL
+ + "' without '" + hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES + "'");
+ }
+ if (!"insert_only".equalsIgnoreCase(transactionalProp)) return false; // Not MM.
+ if (!isSetToTxn) {
+ throw new RuntimeException("Cannot set '"
+ + hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES + "' to 'insert_only' without "
+ + "setting '" + hive_metastoreConstants.TABLE_IS_TRANSACTIONAL + "' to 'true'");
+ }
+ return true;
+ }
+
+ public static boolean isRemovedInsertOnlyTable(Set<String> removedSet) {
+ boolean hasTxn = removedSet.contains(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL),
+ hasProps = removedSet.contains(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES);
+ return hasTxn || hasProps;
+ }
++
+ // given a list of partStats, this function will give you an aggr stats
+ public static List<ColumnStatisticsObj> aggrPartitionStats(List<ColumnStatistics> partStats,
+ String dbName, String tableName, List<String> partNames, List<String> colNames,
+ boolean useDensityFunctionForNDVEstimation, double ndvTuner)
+ throws MetaException {
+ // 1. group by the stats by colNames
+ // map the colName to List<ColumnStatistics>
+ Map<String, List<ColumnStatistics>> map = new HashMap<>();
+ for (ColumnStatistics css : partStats) {
+ List<ColumnStatisticsObj> objs = css.getStatsObj();
+ for (ColumnStatisticsObj obj : objs) {
+ List<ColumnStatisticsObj> singleObj = new ArrayList<>();
+ singleObj.add(obj);
+ ColumnStatistics singleCS = new ColumnStatistics(css.getStatsDesc(), singleObj);
+ if (!map.containsKey(obj.getColName())) {
+ map.put(obj.getColName(), new ArrayList<ColumnStatistics>());
+ }
+ map.get(obj.getColName()).add(singleCS);
+ }
+ }
+ return aggrPartitionStats(map,dbName,tableName,partNames,colNames,useDensityFunctionForNDVEstimation, ndvTuner);
+ }
+
+ public static List<ColumnStatisticsObj> aggrPartitionStats(
+ Map<String, List<ColumnStatistics>> map, String dbName, String tableName,
+ final List<String> partNames, List<String> colNames,
+ final boolean useDensityFunctionForNDVEstimation,final double ndvTuner) throws MetaException {
+ List<ColumnStatisticsObj> colStats = new ArrayList<>();
+ // 2. Aggregate stats for each column in a separate thread
+ if (map.size()< 1) {
+ //stats are absent in RDBMS
+ LOG.debug("No stats data found for: dbName=" +dbName +" tblName=" + tableName +
+ " partNames= " + partNames + " colNames=" + colNames );
+ return colStats;
+ }
+ final ExecutorService pool = Executors.newFixedThreadPool(Math.min(map.size(), 16),
+ new ThreadFactoryBuilder().setDaemon(true).setNameFormat("aggr-col-stats-%d").build());
+ final List<Future<ColumnStatisticsObj>> futures = Lists.newLinkedList();
+
+ long start = System.currentTimeMillis();
+ for (final Entry<String, List<ColumnStatistics>> entry : map.entrySet()) {
+ futures.add(pool.submit(new Callable<ColumnStatisticsObj>() {
+ @Override
+ public ColumnStatisticsObj call() throws Exception {
+ List<ColumnStatistics> css = entry.getValue();
+ ColumnStatsAggregator aggregator = ColumnStatsAggregatorFactory.getColumnStatsAggregator(css
+ .iterator().next().getStatsObj().iterator().next().getStatsData().getSetField(),
+ useDensityFunctionForNDVEstimation, ndvTuner);
+ ColumnStatisticsObj statsObj = aggregator.aggregate(entry.getKey(), partNames, css);
+ return statsObj;
+ }}));
+ }
+ pool.shutdown();
+ for (Future<ColumnStatisticsObj> future : futures) {
+ try {
+ colStats.add(future.get());
+ } catch (InterruptedException | ExecutionException e) {
+ pool.shutdownNow();
+ LOG.debug(e.toString());
+ throw new MetaException(e.toString());
+ }
+ }
+ LOG.debug("Time for aggr col stats in seconds: {} Threads used: {}",
+ ((System.currentTimeMillis() - (double)start))/1000, Math.min(map.size(), 16));
+ return colStats;
+ }
+
+
+ /**
+ * Produce a hash for the storage descriptor
+ * @param sd storage descriptor to hash
+ * @param md message descriptor to use to generate the hash
+ * @return the hash as a byte array
+ */
+ public static byte[] hashStorageDescriptor(StorageDescriptor sd, MessageDigest md) {
+ // Note all maps and lists have to be absolutely sorted. Otherwise we'll produce different
+ // results for hashes based on the OS or JVM being used.
+ md.reset();
+ for (FieldSchema fs : sd.getCols()) {
+ md.update(fs.getName().getBytes(ENCODING));
+ md.update(fs.getType().getBytes(ENCODING));
+ if (fs.getComment() != null) md.update(fs.getComment().getBytes(ENCODING));
+ }
+ if (sd.getInputFormat() != null) {
+ md.update(sd.getInputFormat().getBytes(ENCODING));
+ }
+ if (sd.getOutputFormat() != null) {
+ md.update(sd.getOutputFormat().getBytes(ENCODING));
+ }
+ md.update(sd.isCompressed() ? "true".getBytes(ENCODING) : "false".getBytes(ENCODING));
+ md.update(Integer.toString(sd.getNumBuckets()).getBytes(ENCODING));
+ if (sd.getSerdeInfo() != null) {
+ SerDeInfo serde = sd.getSerdeInfo();
+ if (serde.getName() != null) {
+ md.update(serde.getName().getBytes(ENCODING));
+ }
+ if (serde.getSerializationLib() != null) {
+ md.update(serde.getSerializationLib().getBytes(ENCODING));
+ }
+ if (serde.getParameters() != null) {
+ SortedMap<String, String> params = new TreeMap<>(serde.getParameters());
+ for (Entry<String, String> param : params.entrySet()) {
+ md.update(param.getKey().getBytes(ENCODING));
+ md.update(param.getValue().getBytes(ENCODING));
+ }
+ }
+ }
+ if (sd.getBucketCols() != null) {
+ List<String> bucketCols = new ArrayList<>(sd.getBucketCols());
+ for (String bucket : bucketCols) md.update(bucket.getBytes(ENCODING));
+ }
+ if (sd.getSortCols() != null) {
+ SortedSet<Order> orders = new TreeSet<>(sd.getSortCols());
+ for (Order order : orders) {
+ md.update(order.getCol().getBytes(ENCODING));
+ md.update(Integer.toString(order.getOrder()).getBytes(ENCODING));
+ }
+ }
+ if (sd.getSkewedInfo() != null) {
+ SkewedInfo skewed = sd.getSkewedInfo();
+ if (skewed.getSkewedColNames() != null) {
+ SortedSet<String> colnames = new TreeSet<>(skewed.getSkewedColNames());
+ for (String colname : colnames) md.update(colname.getBytes(ENCODING));
+ }
+ if (skewed.getSkewedColValues() != null) {
+ SortedSet<String> sortedOuterList = new TreeSet<>();
+ for (List<String> innerList : skewed.getSkewedColValues()) {
+ SortedSet<String> sortedInnerList = new TreeSet<>(innerList);
+ sortedOuterList.add(StringUtils.join(sortedInnerList, "."));
+ }
+ for (String colval : sortedOuterList) md.update(colval.getBytes(ENCODING));
+ }
+ if (skewed.getSkewedColValueLocationMaps() != null) {
+ SortedMap<String, String> sortedMap = new TreeMap<>();
+ for (Entry<List<String>, String> smap : skewed.getSkewedColValueLocationMaps().entrySet()) {
+ SortedSet<String> sortedKey = new TreeSet<>(smap.getKey());
+ sortedMap.put(StringUtils.join(sortedKey, "."), smap.getValue());
+ }
+ for (Entry<String, String> e : sortedMap.entrySet()) {
+ md.update(e.getKey().getBytes(ENCODING));
+ md.update(e.getValue().getBytes(ENCODING));
+ }
+ }
+ md.update(sd.isStoredAsSubDirectories() ? "true".getBytes(ENCODING) : "false".getBytes(ENCODING));
+ }
+
+ return md.digest();
+ }
+
+ public static double decimalToDouble(Decimal decimal) {
+ return new BigDecimal(new BigInteger(decimal.getUnscaled()), decimal.getScale()).doubleValue();
+ }
}
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
----------------------------------------------------------------------
diff --cc metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
index 88afe03,0db1bc0..903b2c7
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
@@@ -59,9 -58,11 +59,12 @@@ import javax.jdo.PersistenceManagerFact
import javax.jdo.Query;
import javax.jdo.Transaction;
import javax.jdo.datastore.DataStoreCache;
+import javax.jdo.datastore.JDOConnection;
import javax.jdo.identity.IntIdentity;
+ import javax.sql.DataSource;
+ import com.codahale.metrics.Counter;
+ import com.codahale.metrics.MetricRegistry;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.hadoop.conf.Configurable;
@@@ -415,10 -431,13 +434,14 @@@ public class ObjectStore implements Raw
pm = getPersistenceManager();
isInitialized = pm != null;
if (isInitialized) {
+ dbType = determineDatabaseProduct();
expressionProxy = createExpressionProxy(hiveConf);
if (HiveConf.getBoolVar(getConf(), ConfVars.METASTORE_TRY_DIRECT_SQL)) {
- directSql = new MetaStoreDirectSql(pm, hiveConf, dbType);
+ String schema = prop.getProperty("javax.jdo.mapping.Schema");
+ if (schema != null && schema.isEmpty()) {
+ schema = null;
+ }
+ directSql = new MetaStoreDirectSql(pm, hiveConf, schema);
}
}
LOG.debug("RawStore: " + this + ", with PersistenceManager: " + pm +
@@@ -2733,8 -2759,7 +2783,8 @@@
boolean isConfigEnabled = HiveConf.getBoolVar(getConf(), ConfVars.METASTORE_TRY_DIRECT_SQL)
&& (HiveConf.getBoolVar(getConf(), ConfVars.METASTORE_TRY_DIRECT_SQL_DDL) || !isInTxn);
if (isConfigEnabled && directSql == null) {
- directSql = new MetaStoreDirectSql(pm, getConf());
+ dbType = determineDatabaseProduct();
- directSql = new MetaStoreDirectSql(pm, getConf(), dbType);
++ directSql = new MetaStoreDirectSql(pm, getConf(), "");
}
if (!allowJdo && isConfigEnabled && !directSql.isCompatibleDatastore()) {
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/metastore/src/java/org/apache/hadoop/hive/metastore/RawStore.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/metastore/src/java/org/apache/hadoop/hive/metastore/TransactionalValidationListener.java
----------------------------------------------------------------------
diff --cc metastore/src/java/org/apache/hadoop/hive/metastore/TransactionalValidationListener.java
index ed05381,3a3d184..dabede4
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/TransactionalValidationListener.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/TransactionalValidationListener.java
@@@ -39,8 -39,6 +39,7 @@@ public final class TransactionalValidat
// These constants are also imported by org.apache.hadoop.hive.ql.io.AcidUtils.
public static final String DEFAULT_TRANSACTIONAL_PROPERTY = "default";
- public static final String LEGACY_TRANSACTIONAL_PROPERTY = "legacy";
+ public static final String INSERTONLY_TRANSACTIONAL_PROPERTY = "insert_only";
TransactionalValidationListener(Configuration conf) {
super(conf);
@@@ -104,13 -114,10 +115,13 @@@
//normalize prop name
parameters.put(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL, transactionalValue);
}
- if ("true".equalsIgnoreCase(transactionalValue)) {
+ if ("true".equalsIgnoreCase(transactionalValue) && !"true".equalsIgnoreCase(oldTransactionalValue)) {
+ //only need to check conformance if alter table enabled aicd
if (!conformToAcid(newTable)) {
- throw new MetaException("The table must be stored using an ACID compliant format (such as ORC)");
+ // INSERT_ONLY tables don't have to conform to ACID requirement like ORC or bucketing
+ if (transactionalPropertiesValue == null || !"insert_only".equalsIgnoreCase(transactionalPropertiesValue)) {
- throw new MetaException("The table must be bucketed and stored using an ACID compliant" +
- " format (such as ORC)");
++ throw new MetaException("The table must be stored using an ACID compliant format (such as ORC)");
+ }
}
if (newTable.getTableType().equals(TableType.EXTERNAL_TABLE.toString())) {
@@@ -204,13 -194,9 +204,12 @@@
return;
}
- if ("true".equalsIgnoreCase(transactionalValue)) {
+ if ("true".equalsIgnoreCase(transactional)) {
if (!conformToAcid(newTable)) {
- throw new MetaException("The table must be stored using an ACID compliant format (such as ORC)");
+ // INSERT_ONLY tables don't have to conform to ACID requirement like ORC or bucketing
+ if (transactionalProperties == null || !"insert_only".equalsIgnoreCase(transactionalProperties)) {
- throw new MetaException("The table must be bucketed and stored using an ACID compliant" +
- " format (such as ORC)");
++ throw new MetaException("The table must be stored using an ACID compliant format (such as ORC)");
+ }
}
if (newTable.getTableType().equals(TableType.EXTERNAL_TABLE.toString())) {
@@@ -289,8 -273,6 +286,7 @@@
boolean isValid = false;
switch (transactionalProperties) {
case DEFAULT_TRANSACTIONAL_PROPERTY:
- case LEGACY_TRANSACTIONAL_PROPERTY:
+ case INSERTONLY_TRANSACTIONAL_PROPERTY:
isValid = true;
break;
default:
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/metastore/src/java/org/apache/hadoop/hive/metastore/Warehouse.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/metastore/src/java/org/apache/hadoop/hive/metastore/cache/CachedStore.java
----------------------------------------------------------------------
diff --cc metastore/src/java/org/apache/hadoop/hive/metastore/cache/CachedStore.java
index 906591d,93d1ba6..a97ba1a
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/cache/CachedStore.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/cache/CachedStore.java
@@@ -18,7 -18,11 +18,16 @@@
package org.apache.hadoop.hive.metastore.cache;
import java.nio.ByteBuffer;
- import java.util.*;
+ import java.util.ArrayList;
++import java.util.ArrayList;
++import java.util.HashMap;
+ import java.util.HashMap;
+ import java.util.LinkedList;
++import java.util.LinkedList;
+ import java.util.List;
++import java.util.List;
++import java.util.Map;
+ import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ThreadFactory;
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/metastore/src/test/org/apache/hadoop/hive/metastore/DummyRawStoreControlledCommit.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/metastore/src/test/org/apache/hadoop/hive/metastore/DummyRawStoreForJdoConnection.java
----------------------------------------------------------------------
diff --cc metastore/src/test/org/apache/hadoop/hive/metastore/DummyRawStoreForJdoConnection.java
index 6d851a0,fb16cfc..0f7827b
--- a/metastore/src/test/org/apache/hadoop/hive/metastore/DummyRawStoreForJdoConnection.java
+++ b/metastore/src/test/org/apache/hadoop/hive/metastore/DummyRawStoreForJdoConnection.java
@@@ -110,7 -114,14 +112,12 @@@ public class DummyRawStoreForJdoConnect
}
@Override
+ public boolean isActiveTransaction() {
+ return false;
+ }
+
+ @Override
public void rollbackTransaction() {
-
-
}
@Override
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
----------------------------------------------------------------------
diff --cc metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
index 9542990,08228af..7573fb2
--- a/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
+++ b/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
@@@ -379,13 -362,14 +377,14 @@@ public class TestObjectStore
public void testDirectSqlErrorMetrics() throws Exception {
HiveConf conf = new HiveConf();
conf.setBoolVar(HiveConf.ConfVars.HIVE_SERVER2_METRICS_ENABLED, true);
- conf.setVar(HiveConf.ConfVars.HIVE_METRICS_REPORTER, MetricsReporting.JSON_FILE.name()
- + "," + MetricsReporting.JMX.name());
+ Metrics.initialize(conf);
- MetricsFactory.init(conf);
- CodahaleMetrics metrics = (CodahaleMetrics) MetricsFactory.getInstance();
+ // recall setup so that we get an object store with the metrics initalized
+ setUp();
+ Counter directSqlErrors =
+ Metrics.getRegistry().getCounters().get(MetricsConstants.DIRECTSQL_ERRORS);
- objectStore.new GetDbHelper("foo", null, true, true) {
+ objectStore.new GetDbHelper("foo", true, true) {
@Override
protected Database getSqlResult(ObjectStore.GetHelper<Database> ctx) throws MetaException {
return null;
@@@ -398,11 -382,9 +397,9 @@@
}
}.run(false);
- String json = metrics.dumpJson();
- MetricsTestUtils.verifyMetricsJson(json, MetricsTestUtils.COUNTER,
- MetricsConstant.DIRECTSQL_ERRORS, "");
+ Assert.assertEquals(0, directSqlErrors.getCount());
- objectStore.new GetDbHelper("foo", null, true, true) {
+ objectStore.new GetDbHelper("foo", true, true) {
@Override
protected Database getSqlResult(ObjectStore.GetHelper<Database> ctx) throws MetaException {
throw new RuntimeException();
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/Context.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
index 82a9fad,acc2390..b6eff94
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
@@@ -3846,11 -3867,42 +3884,22 @@@ public class DDLTask extends Task<DDLWo
throw new HiveException(ErrorMsg.REPLACE_CANNOT_DROP_COLUMNS, alterTbl.getOldName());
}
}
+
+ boolean partitioned = tbl.isPartitioned();
+ boolean droppingColumns = alterTbl.getNewCols().size() < sd.getCols().size();
+ if (ParquetHiveSerDe.isParquetTable(tbl) &&
+ isSchemaEvolutionEnabled(tbl) &&
+ !alterTbl.getIsCascade() &&
+ droppingColumns && partitioned) {
+ LOG.warn("Cannot drop columns from a partitioned parquet table without the CASCADE option");
+ throw new HiveException(ErrorMsg.REPLACE_CANNOT_DROP_COLUMNS,
+ alterTbl.getOldName());
+ }
sd.setCols(alterTbl.getNewCols());
} else if (alterTbl.getOp() == AlterTableDesc.AlterTableTypes.ADDPROPS) {
- if (StatsSetupConst.USER.equals(environmentContext.getProperties()
- .get(StatsSetupConst.STATS_GENERATED))) {
- environmentContext.getProperties().remove(StatsSetupConst.DO_NOT_UPDATE_STATS);
- }
- if (part != null) {
- part.getTPartition().getParameters().putAll(alterTbl.getProps());
- } else {
- tbl.getTTable().getParameters().putAll(alterTbl.getProps());
- }
+ return alterTableAddProps(alterTbl, tbl, part, environmentContext);
} else if (alterTbl.getOp() == AlterTableDesc.AlterTableTypes.DROPPROPS) {
- Iterator<String> keyItr = alterTbl.getProps().keySet().iterator();
- if (StatsSetupConst.USER.equals(environmentContext.getProperties()
- .get(StatsSetupConst.STATS_GENERATED))) {
- // drop a stats parameter, which triggers recompute stats update automatically
- environmentContext.getProperties().remove(StatsSetupConst.DO_NOT_UPDATE_STATS);
- }
- while (keyItr.hasNext()) {
- if (part != null) {
- part.getTPartition().getParameters().remove(keyItr.next());
- } else {
- tbl.getTTable().getParameters().remove(keyItr.next());
- }
- }
+ return alterTableDropProps(alterTbl, tbl, part, environmentContext);
} else if (alterTbl.getOp() == AlterTableDesc.AlterTableTypes.ADDSERDEPROPS) {
StorageDescriptor sd = retrieveStorageDescriptor(tbl, part);
sd.getSerdeInfo().getParameters().putAll(alterTbl.getProps());
@@@ -4002,219 -4054,7 +4051,215 @@@
throw new HiveException(ErrorMsg.UNSUPPORTED_ALTER_TBL_OP, alterTbl.getOp().toString());
}
- return 0;
+ return null;
+ }
+
+ private List<Task<?>> alterTableDropProps(AlterTableDesc alterTbl, Table tbl,
+ Partition part, EnvironmentContext environmentContext) throws HiveException {
+ if (StatsSetupConst.USER.equals(environmentContext.getProperties()
+ .get(StatsSetupConst.STATS_GENERATED))) {
+ // drop a stats parameter, which triggers recompute stats update automatically
+ environmentContext.getProperties().remove(StatsSetupConst.DO_NOT_UPDATE_STATS);
+ }
+
+ List<Task<?>> result = null;
+ if (part == null) {
+ Set<String> removedSet = alterTbl.getProps().keySet();
+ boolean isFromMmTable = MetaStoreUtils.isInsertOnlyTable(tbl.getParameters()),
+ isRemoved = MetaStoreUtils.isRemovedInsertOnlyTable(removedSet);
+ if (isFromMmTable && isRemoved) {
+ result = generateRemoveMmTasks(tbl);
+ }
+ }
+ Iterator<String> keyItr = alterTbl.getProps().keySet().iterator();
+ while (keyItr.hasNext()) {
+ if (part != null) {
+ part.getTPartition().getParameters().remove(keyItr.next());
+ } else {
+ tbl.getTTable().getParameters().remove(keyItr.next());
+ }
+ }
+ return result;
+ }
+
+ private List<Task<?>> generateRemoveMmTasks(Table tbl) throws HiveException {
+ // To avoid confusion from nested MM directories when table is converted back and forth, we
+ // want to rename mm_ dirs to remove the prefix; however, given the unpredictable nested
+ // directory handling in Hive/MR, we will instead move all the files into the root directory.
+ // We will also delete any directories that are not committed.
+ // Note that this relies on locks. Note also that we only do the renames AFTER the metastore
+ // operation commits. Deleting uncommitted things is safe, but moving stuff before we convert
+ // could cause data loss.
+ List<Path> allMmDirs = new ArrayList<>();
+ if (tbl.isStoredAsSubDirectories()) {
+ // TODO: support this? we only bail because it's a PITA and hardly anyone seems to care.
+ throw new HiveException("Converting list bucketed tables stored as subdirectories "
+ + " to and from MM is not supported");
+ }
+ List<String> bucketCols = tbl.getBucketCols();
+ if (bucketCols != null && !bucketCols.isEmpty()
+ && HiveConf.getBoolVar(conf, ConfVars.HIVE_STRICT_CHECKS_BUCKETING)) {
+ throw new HiveException("Converting bucketed tables from MM is not supported by default; "
+ + "copying files from multiple MM directories may potentially break the buckets. You "
+ + "can set " + ConfVars.HIVE_STRICT_CHECKS_BUCKETING.varname
+ + " to false for this query if you want to force the conversion.");
+ }
+ Hive db = getHive();
+ String value = conf.get(ValidTxnList.VALID_TXNS_KEY);
+ ValidTxnList validTxnList = value == null ? new ValidReadTxnList() : new ValidReadTxnList(value);
+ if (tbl.getPartitionKeys().size() > 0) {
+ PartitionIterable parts = new PartitionIterable(db, tbl, null,
+ HiveConf.getIntVar(conf, ConfVars.METASTORE_BATCH_RETRIEVE_MAX));
+ Iterator<Partition> partIter = parts.iterator();
+ while (partIter.hasNext()) {
+ Partition part = partIter.next();
+ checkMmLb(part);
+ handleRemoveMm(part.getDataLocation(), validTxnList, allMmDirs);
+ }
+ } else {
+ checkMmLb(tbl);
+ handleRemoveMm(tbl.getDataLocation(), validTxnList, allMmDirs);
+ }
+ List<Path> targetPaths = new ArrayList<>(allMmDirs.size());
+ List<String> targetPrefix = new ArrayList<>(allMmDirs.size());
+ int prefixLen = JavaUtils.DELTA_PREFIX.length();
+ for (int i = 0; i < allMmDirs.size(); ++i) {
+ Path src = allMmDirs.get(i);
+ Path tgt = src.getParent();
+ String prefix = src.getName().substring(prefixLen + 1) + "_";
+ Utilities.LOG14535.info("Will move " + src + " to " + tgt + " (prefix " + prefix + ")");
+ targetPaths.add(tgt);
+ targetPrefix.add(prefix);
+ }
+ // Don't set inputs and outputs - the locks have already been taken so it's pointless.
+ MoveWork mw = new MoveWork(null, null, null, null, false);
+ mw.setMultiFilesDesc(new LoadMultiFilesDesc(
+ allMmDirs, targetPaths, targetPrefix, true, null, null));
+ return Lists.<Task<?>>newArrayList(TaskFactory.get(mw, conf));
+ }
+
+ private void checkMmLb(Table tbl) throws HiveException {
+ if (!tbl.isStoredAsSubDirectories()) return;
+ // TODO: support this?
+ throw new HiveException("Converting list bucketed tables stored as subdirectories "
+ + " to and from MM is not supported");
+ }
+
+ private void checkMmLb(Partition part) throws HiveException {
+ if (!part.isStoredAsSubDirectories()) return;
+ // TODO: support this?
+ throw new HiveException("Converting list bucketed tables stored as subdirectories "
+ + " to and from MM is not supported. Please create a table in the desired format.");
+ }
+
+ private void handleRemoveMm(
+ Path path, ValidTxnList validTxnList, List<Path> result) throws HiveException {
+ // Note: doesn't take LB into account; that is not presently supported here (throws above).
+ try {
+ FileSystem fs = path.getFileSystem(conf);
+ for (FileStatus file : fs.listStatus(path)) {
+ Path childPath = file.getPath();
+ if (!file.isDirectory()) {
+ ensureDelete(fs, childPath, "a non-directory file");
+ continue;
+ }
+ Long writeId = JavaUtils.extractTxnId(childPath);
+ if (writeId == null) {
+ ensureDelete(fs, childPath, "an unknown directory");
+ } else if (!validTxnList.isTxnValid(writeId)) {
+ // Assume no concurrent active writes - we rely on locks here. We could check and fail.
+ ensureDelete(fs, childPath, "an uncommitted directory");
+ } else {
+ result.add(childPath);
+ }
+ }
+ } catch (IOException ex) {
+ throw new HiveException(ex);
+ }
+ }
+
+ private static void ensureDelete(FileSystem fs, Path path, String what) throws IOException {
+ Utilities.LOG14535.info("Deleting " + what + " " + path);
+ try {
+ if (!fs.delete(path, true)) throw new IOException("delete returned false");
+ } catch (Exception ex) {
+ String error = "Couldn't delete " + path + "; cannot remove MM setting from the table";
+ LOG.error(error, ex);
+ throw (ex instanceof IOException) ? (IOException)ex : new IOException(ex);
+ }
+ }
+
+ private List<Task<?>> generateAddMmTasks(Table tbl) throws HiveException {
+ // We will move all the files in the table/partition directories into the first MM
+ // directory, then commit the first write ID.
+ List<Path> srcs = new ArrayList<>(), tgts = new ArrayList<>();
+ long mmWriteId = 0;
+ try {
+ HiveTxnManager txnManager = SessionState.get().getTxnMgr();
+ if (txnManager.isTxnOpen()) {
+ mmWriteId = txnManager.getCurrentTxnId();
+ } else {
+ mmWriteId = txnManager.openTxn(new Context(conf), conf.getUser());
+ txnManager.commitTxn();
+ }
+ } catch (Exception e) {
+ String errorMessage = "FAILED: Error in acquiring locks: " + e.getMessage();
+ console.printError(errorMessage, "\n"
+ + org.apache.hadoop.util.StringUtils.stringifyException(e));
+ }
+ int stmtId = 0;
+ String mmDir = AcidUtils.deltaSubdir(mmWriteId, mmWriteId, stmtId);
+ Hive db = getHive();
+ if (tbl.getPartitionKeys().size() > 0) {
+ PartitionIterable parts = new PartitionIterable(db, tbl, null,
+ HiveConf.getIntVar(conf, ConfVars.METASTORE_BATCH_RETRIEVE_MAX));
+ Iterator<Partition> partIter = parts.iterator();
+ while (partIter.hasNext()) {
+ Partition part = partIter.next();
+ checkMmLb(part);
+ Path src = part.getDataLocation(), tgt = new Path(src, mmDir);
+ srcs.add(src);
+ tgts.add(tgt);
+ Utilities.LOG14535.info("Will move " + src + " to " + tgt);
+ }
+ } else {
+ checkMmLb(tbl);
+ Path src = tbl.getDataLocation(), tgt = new Path(src, mmDir);
+ srcs.add(src);
+ tgts.add(tgt);
+ Utilities.LOG14535.info("Will move " + src + " to " + tgt);
+ }
+ // Don't set inputs and outputs - the locks have already been taken so it's pointless.
+ MoveWork mw = new MoveWork(null, null, null, null, false);
+ mw.setMultiFilesDesc(new LoadMultiFilesDesc(srcs, tgts, true, null, null));
+ ImportCommitWork icw = new ImportCommitWork(tbl.getDbName(), tbl.getTableName(), mmWriteId, stmtId);
+ Task<?> mv = TaskFactory.get(mw, conf), ic = TaskFactory.get(icw, conf);
+ mv.addDependentTask(ic);
+ return Lists.<Task<?>>newArrayList(mv);
+ }
+
+ private List<Task<?>> alterTableAddProps(AlterTableDesc alterTbl, Table tbl,
+ Partition part, EnvironmentContext environmentContext) throws HiveException {
+ if (StatsSetupConst.USER.equals(environmentContext.getProperties()
+ .get(StatsSetupConst.STATS_GENERATED))) {
+ environmentContext.getProperties().remove(StatsSetupConst.DO_NOT_UPDATE_STATS);
+ }
- if(alterTbl.getProps().containsKey(ParquetTableUtils.PARQUET_INT96_WRITE_ZONE_PROPERTY)) {
- NanoTimeUtils.validateTimeZone(
- alterTbl.getProps().get(ParquetTableUtils.PARQUET_INT96_WRITE_ZONE_PROPERTY));
- }
+ List<Task<?>> result = null;
+ if (part != null) {
+ part.getTPartition().getParameters().putAll(alterTbl.getProps());
+ } else {
+ boolean isFromMmTable = MetaStoreUtils.isInsertOnlyTable(tbl.getParameters());
+ Boolean isToMmTable = MetaStoreUtils.isToInsertOnlyTable(alterTbl.getProps());
+ if (isToMmTable != null) {
+ if (!isFromMmTable && isToMmTable) {
+ result = generateAddMmTasks(tbl);
+ } else if (isFromMmTable && !isToMmTable) {
+ result = generateRemoveMmTasks(tbl);
+ }
+ }
+ tbl.getTTable().getParameters().putAll(alterTbl.getProps());
+ }
+ return result;
}
private int dropConstraint(Hive db, AlterTableDesc alterTbl)
@@@ -4583,22 -4426,8 +4631,8 @@@
}
}
- // If HIVE_PARQUET_INT96_DEFAULT_UTC_WRITE_ZONE is set to True, then set new Parquet tables timezone
- // to UTC by default (only if the table property is not set)
- if (ParquetHiveSerDe.isParquetTable(tbl)) {
- SessionState ss = SessionState.get();
- String parquetTimezone = tbl.getProperty(ParquetTableUtils.PARQUET_INT96_WRITE_ZONE_PROPERTY);
- if (parquetTimezone == null || parquetTimezone.isEmpty()) {
- if (ss.getConf().getBoolVar(ConfVars.HIVE_PARQUET_INT96_DEFAULT_UTC_WRITE_ZONE)) {
- tbl.setProperty(ParquetTableUtils.PARQUET_INT96_WRITE_ZONE_PROPERTY, ParquetTableUtils.PARQUET_INT96_NO_ADJUSTMENT_ZONE);
- }
- } else {
- NanoTimeUtils.validateTimeZone(parquetTimezone);
- }
- }
-
// create the table
- if (crtTbl.getReplaceMode()){
+ if (crtTbl.getReplaceMode()) {
// replace-mode creates are really alters using CreateTableDesc.
try {
db.alterTable(tbl.getDbName()+"."+tbl.getTableName(),tbl,null);
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java
index 0582f94,13750cd..d2d9946
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java
@@@ -382,14 -368,7 +379,11 @@@ public class FetchOperator implements S
Class<? extends InputFormat> formatter = currDesc.getInputFileFormatClass();
Utilities.copyTableJobPropertiesToConf(currDesc.getTableDesc(), job);
- if (ParquetHiveSerDe.class.getName().equals(currDesc.getTableDesc().getSerdeClassName())) {
- ParquetTableUtils.setParquetTimeZoneIfAbsent(job, currDesc.getTableDesc().getProperties());
- }
InputFormat inputFormat = getInputFormatFromCache(formatter, job);
+ String inputs = processCurrPathForMmWriteIds(inputFormat);
+ Utilities.LOG14535.info("Setting fetch inputs to " + inputs);
+ if (inputs == null) return null;
+ job.set("mapred.input.dir", inputs);
InputSplit[] splits = inputFormat.getSplits(job, 1);
FetchInputFormatSplit[] inputSplits = new FetchInputFormatSplit[splits.length];
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java
index 7e1b8fa,bc265eb..3544884
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java
@@@ -41,11 -28,11 +41,13 @@@ import org.apache.hadoop.hive.common.St
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.conf.HiveConfUtil;
import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
+ import org.apache.hadoop.hive.metastore.api.hive_metastoreConstants;
import org.apache.hadoop.hive.ql.CompilationOpContext;
import org.apache.hadoop.hive.ql.ErrorMsg;
+import org.apache.hadoop.hive.ql.exec.Utilities.MissingBucketsContext;
import org.apache.hadoop.hive.ql.io.AcidUtils;
+import org.apache.hadoop.hive.ql.io.AcidUtils.Operation;
+ import org.apache.hadoop.hive.ql.io.BucketCodec;
import org.apache.hadoop.hive.ql.io.HiveFileFormatUtils;
import org.apache.hadoop.hive.ql.io.HiveKey;
import org.apache.hadoop.hive.ql.io.HiveOutputFormat;
@@@ -165,28 -149,11 +167,28 @@@ public class FileSinkOperator extends T
Path[] finalPaths;
RecordWriter[] outWriters;
RecordUpdater[] updaters;
- private Stat stat;
+ Stat stat;
+ int acidLastBucket = -1;
+ int acidFileOffset = -1;
+ private boolean isMmTable;
+ private Long txnId;
+ private int stmtId;
+
+ public FSPaths(Path specPath, boolean isMmTable) {
+ this.isMmTable = isMmTable;
+ if (!isMmTable) {
+ tmpPath = Utilities.toTempPath(specPath);
+ taskOutputTempPath = Utilities.toTaskTempPath(specPath);
+ } else {
+ tmpPath = specPath;
+ taskOutputTempPath = null; // Should not be used.
+ txnId = conf.getTransactionId();
+ stmtId = conf.getStatementId();
+ }
+ Utilities.LOG14535.info("new FSPaths for " + numFiles + " files, dynParts = " + bDynParts
+ + ": tmpPath " + tmpPath + ", task path " + taskOutputTempPath
+ + " (spec path " + specPath + ")"/*, new Exception()*/);
- public FSPaths(Path specPath) {
- tmpPath = Utilities.toTempPath(specPath);
- taskOutputTempPath = Utilities.toTaskTempPath(specPath);
outPaths = new Path[numFiles];
finalPaths = new Path[numFiles];
outWriters = new RecordWriter[numFiles];
@@@ -881,10 -758,10 +885,10 @@@
// for a given operator branch prediction should work quite nicely on it.
// RecordUpdateer expects to get the actual row, not a serialized version of it. Thus we
// pass the row rather than recordValue.
- if (conf.getWriteType() == AcidUtils.Operation.NOT_ACID) {
+ if (conf.getWriteType() == AcidUtils.Operation.NOT_ACID || conf.isMmTable()) {
- rowOutWriters[writerOffset].write(recordValue);
+ rowOutWriters[findWriterOffset(row)].write(recordValue);
} else if (conf.getWriteType() == AcidUtils.Operation.INSERT) {
- fpaths.updaters[writerOffset].insert(conf.getTransactionId(), row);
+ fpaths.updaters[findWriterOffset(row)].insert(conf.getTransactionId(), row);
} else {
// TODO I suspect we could skip much of the stuff above this in the function in the case
// of update and delete. But I don't understand all of the side effects of the above
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableSinkOperator.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
index e86ca3a,cde2805..34d0598
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
@@@ -403,232 -579,6 +436,231 @@@ public class MoveTask extends Task<Move
return (1);
}
}
+
+ private DataContainer handleStaticParts(Hive db, Table table, LoadTableDesc tbd,
+ TaskInformation ti) throws HiveException, IOException, InvalidOperationException {
+ List<String> partVals = MetaStoreUtils.getPvals(table.getPartCols(), tbd.getPartitionSpec());
+ db.validatePartitionNameCharacters(partVals);
+ Utilities.LOG14535.info("loadPartition called from " + tbd.getSourcePath()
+ + " into " + tbd.getTable().getTableName());
+ db.loadPartition(tbd.getSourcePath(), tbd.getTable().getTableName(),
+ tbd.getPartitionSpec(), tbd.getReplace(),
+ tbd.getInheritTableSpecs(), isSkewedStoredAsDirs(tbd), work.isSrcLocal(),
+ work.getLoadTableWork().getWriteType() != AcidUtils.Operation.NOT_ACID &&
+ !tbd.isMmTable(),
+ hasFollowingStatsTask(), tbd.getTxnId(), tbd.getStmtId());
+ Partition partn = db.getPartition(table, tbd.getPartitionSpec(), false);
+
+ // See the comment inside updatePartitionBucketSortColumns.
+ if (!tbd.isMmTable() && (ti.bucketCols != null || ti.sortCols != null)) {
+ updatePartitionBucketSortColumns(db, table, partn, ti.bucketCols,
+ ti.numBuckets, ti.sortCols);
+ }
+
+ DataContainer dc = new DataContainer(table.getTTable(), partn.getTPartition());
+ // add this partition to post-execution hook
+ if (work.getOutputs() != null) {
+ DDLTask.addIfAbsentByName(new WriteEntity(partn,
+ getWriteType(tbd, work.getLoadTableWork().getWriteType())), work.getOutputs());
+ }
+ return dc;
+ }
+
+ private DataContainer handleDynParts(Hive db, Table table, LoadTableDesc tbd,
+ TaskInformation ti, DynamicPartitionCtx dpCtx) throws HiveException,
+ IOException, InvalidOperationException {
+ DataContainer dc;
+ List<LinkedHashMap<String, String>> dps = Utilities.getFullDPSpecs(conf, dpCtx);
+
+ console.printInfo(System.getProperty("line.separator"));
+ long startTime = System.currentTimeMillis();
+ // load the list of DP partitions and return the list of partition specs
+ // TODO: In a follow-up to HIVE-1361, we should refactor loadDynamicPartitions
+ // to use Utilities.getFullDPSpecs() to get the list of full partSpecs.
+ // After that check the number of DPs created to not exceed the limit and
+ // iterate over it and call loadPartition() here.
+ // The reason we don't do inside HIVE-1361 is the latter is large and we
+ // want to isolate any potential issue it may introduce.
+ if (tbd.isMmTable() && !tbd.isCommitMmWrite()) {
+ throw new HiveException("Only single-partition LoadTableDesc can skip commiting write ID");
+ }
+ Map<Map<String, String>, Partition> dp =
+ db.loadDynamicPartitions(
+ tbd.getSourcePath(),
+ tbd.getTable().getTableName(),
+ tbd.getPartitionSpec(),
+ tbd.getReplace(),
+ dpCtx.getNumDPCols(),
+ (tbd.getLbCtx() == null) ? 0 : tbd.getLbCtx().calculateListBucketingLevel(),
+ work.getLoadTableWork().getWriteType() != AcidUtils.Operation.NOT_ACID &&
+ !tbd.isMmTable(),
+ SessionState.get().getTxnMgr().getCurrentTxnId(), tbd.getStmtId(), hasFollowingStatsTask(),
+ work.getLoadTableWork().getWriteType());
+
+ // publish DP columns to its subscribers
+ if (dps != null && dps.size() > 0) {
+ pushFeed(FeedType.DYNAMIC_PARTITIONS, dp.values());
+ }
+
+ String loadTime = "\t Time taken to load dynamic partitions: " +
+ (System.currentTimeMillis() - startTime)/1000.0 + " seconds";
+ console.printInfo(loadTime);
+ LOG.info(loadTime);
+
+ if (dp.size() == 0 && conf.getBoolVar(HiveConf.ConfVars.HIVE_ERROR_ON_EMPTY_PARTITION)) {
+ throw new HiveException("This query creates no partitions." +
+ " To turn off this error, set hive.error.on.empty.partition=false.");
+ }
+
+ startTime = System.currentTimeMillis();
+ // for each partition spec, get the partition
+ // and put it to WriteEntity for post-exec hook
+ for(Map.Entry<Map<String, String>, Partition> entry : dp.entrySet()) {
+ Partition partn = entry.getValue();
+
+ // See the comment inside updatePartitionBucketSortColumns.
+ if (!tbd.isMmTable() && (ti.bucketCols != null || ti.sortCols != null)) {
+ updatePartitionBucketSortColumns(
+ db, table, partn, ti.bucketCols, ti.numBuckets, ti.sortCols);
+ }
+
+ WriteEntity enty = new WriteEntity(partn,
+ getWriteType(tbd, work.getLoadTableWork().getWriteType()));
+ if (work.getOutputs() != null) {
+ DDLTask.addIfAbsentByName(enty, work.getOutputs());
+ }
+ // Need to update the queryPlan's output as well so that post-exec hook get executed.
+ // This is only needed for dynamic partitioning since for SP the the WriteEntity is
+ // constructed at compile time and the queryPlan already contains that.
+ // For DP, WriteEntity creation is deferred at this stage so we need to update
+ // queryPlan here.
+ if (queryPlan.getOutputs() == null) {
+ queryPlan.setOutputs(new LinkedHashSet<WriteEntity>());
+ }
+ queryPlan.getOutputs().add(enty);
+
+ // update columnar lineage for each partition
+ dc = new DataContainer(table.getTTable(), partn.getTPartition());
+
+ // Don't set lineage on delete as we don't have all the columns
+ if (SessionState.get() != null &&
+ work.getLoadTableWork().getWriteType() != AcidUtils.Operation.DELETE &&
+ work.getLoadTableWork().getWriteType() != AcidUtils.Operation.UPDATE) {
+ SessionState.get().getLineageState().setLineage(tbd.getSourcePath(), dc,
+ table.getCols());
+ }
+ LOG.info("\tLoading partition " + entry.getKey());
+ }
+ console.printInfo("\t Time taken for adding to write entity : " +
+ (System.currentTimeMillis() - startTime)/1000.0 + " seconds");
+ dc = null; // reset data container to prevent it being added again.
+ return dc;
+ }
+
+ private void inferTaskInformation(TaskInformation ti) {
+ // Find the first ancestor of this MoveTask which is some form of map reduce task
+ // (Either standard, local, or a merge)
+ while (ti.task.getParentTasks() != null && ti.task.getParentTasks().size() == 1) {
+ ti.task = (Task)ti.task.getParentTasks().get(0);
+ // If it was a merge task or a local map reduce task, nothing can be inferred
+ if (ti.task instanceof MergeFileTask || ti.task instanceof MapredLocalTask) {
+ break;
+ }
+
+ // If it's a standard map reduce task, check what, if anything, it inferred about
+ // the directory this move task is moving
+ if (ti.task instanceof MapRedTask) {
+ MapredWork work = (MapredWork)ti.task.getWork();
+ MapWork mapWork = work.getMapWork();
+ ti.bucketCols = mapWork.getBucketedColsByDirectory().get(ti.path);
+ ti.sortCols = mapWork.getSortedColsByDirectory().get(ti.path);
+ if (work.getReduceWork() != null) {
+ ti.numBuckets = work.getReduceWork().getNumReduceTasks();
+ }
+
+ if (ti.bucketCols != null || ti.sortCols != null) {
+ // This must be a final map reduce task (the task containing the file sink
+ // operator that writes the final output)
+ assert work.isFinalMapRed();
+ }
+ break;
+ }
+
+ // If it's a move task, get the path the files were moved from, this is what any
+ // preceding map reduce task inferred information about, and moving does not invalidate
+ // those assumptions
+ // This can happen when a conditional merge is added before the final MoveTask, but the
+ // condition for merging is not met, see GenMRFileSink1.
+ if (ti.task instanceof MoveTask) {
+ MoveTask mt = (MoveTask)ti.task;
+ if (mt.getWork().getLoadFileWork() != null) {
+ ti.path = mt.getWork().getLoadFileWork().getSourcePath().toUri().toString();
+ }
+ }
+ }
+ }
+
+ private void checkFileFormats(Hive db, LoadTableDesc tbd, Table table)
+ throws HiveException {
+ if (work.getCheckFileFormat()) {
+ // Get all files from the src directory
+ FileStatus[] dirs;
+ ArrayList<FileStatus> files;
+ FileSystem srcFs; // source filesystem
+ try {
+ srcFs = tbd.getSourcePath().getFileSystem(conf);
+ dirs = srcFs.globStatus(tbd.getSourcePath());
+ files = new ArrayList<FileStatus>();
+ for (int i = 0; (dirs != null && i < dirs.length); i++) {
+ files.addAll(Arrays.asList(srcFs.listStatus(dirs[i].getPath(), FileUtils.HIDDEN_FILES_PATH_FILTER)));
+ // We only check one file, so exit the loop when we have at least
+ // one.
+ if (files.size() > 0) {
+ break;
+ }
+ }
+ } catch (IOException e) {
+ throw new HiveException(
+ "addFiles: filesystem error in check phase", e);
+ }
+
+ // handle file format check for table level
+ if (HiveConf.getBoolVar(conf, HiveConf.ConfVars.HIVECHECKFILEFORMAT)) {
+ boolean flag = true;
+ // work.checkFileFormat is set to true only for Load Task, so assumption here is
+ // dynamic partition context is null
+ if (tbd.getDPCtx() == null) {
+ if (tbd.getPartitionSpec() == null || tbd.getPartitionSpec().isEmpty()) {
+ // Check if the file format of the file matches that of the table.
+ flag = HiveFileFormatUtils.checkInputFormat(
+ srcFs, conf, tbd.getTable().getInputFileFormatClass(), files);
+ } else {
+ // Check if the file format of the file matches that of the partition
+ Partition oldPart = db.getPartition(table, tbd.getPartitionSpec(), false);
+ if (oldPart == null) {
+ // this means we have just created a table and are specifying partition in the
+ // load statement (without pre-creating the partition), in which case lets use
+ // table input format class. inheritTableSpecs defaults to true so when a new
+ // partition is created later it will automatically inherit input format
+ // from table object
+ flag = HiveFileFormatUtils.checkInputFormat(
+ srcFs, conf, tbd.getTable().getInputFileFormatClass(), files);
+ } else {
+ flag = HiveFileFormatUtils.checkInputFormat(
+ srcFs, conf, oldPart.getInputFormatClass(), files);
+ }
+ }
+ if (!flag) {
- throw new HiveException(
- "Wrong file format. Please check the file's format.");
++ throw new HiveException(ErrorMsg.WRONG_FILE_FORMAT);
+ }
+ } else {
+ LOG.warn("Skipping file format check as dpCtx is not null");
+ }
+ }
+ }
+ }
+
+
/**
* so to make sure we crate WriteEntity with the right WriteType. This is (at this point) only
* for consistency since LockManager (which is the only thing that pays attention to WriteType)
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/exec/OrcFileMergeOperator.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsNoJobTask.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/exec/TableScanOperator.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskFactory.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
index ea0a0fd,aca99f2..88f5a0d
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
@@@ -1445,14 -1447,21 +1471,21 @@@ public final class Utilities
// create empty buckets if necessary
if (emptyBuckets.size() > 0) {
perfLogger.PerfLogBegin("FileSinkOperator", "CreateEmptyBuckets");
- createEmptyBuckets(hconf, emptyBuckets, conf, reporter);
+ createEmptyBuckets(
+ hconf, emptyBuckets, conf.getCompressed(), conf.getTableInfo(), reporter);
+ filesKept.addAll(emptyBuckets);
perfLogger.PerfLogEnd("FileSinkOperator", "CreateEmptyBuckets");
}
-
// move to the file destination
- log.info("Moving tmp dir: " + tmpPath + " to: " + specPath);
+ Utilities.LOG14535.info("Moving tmp dir: " + tmpPath + " to: " + specPath);
perfLogger.PerfLogBegin("FileSinkOperator", "RenameOrMoveFiles");
- Utilities.renameOrMoveFiles(fs, tmpPath, specPath);
+ if (HiveConf.getBoolVar(hconf, HiveConf.ConfVars.HIVE_EXEC_MOVE_FILES_FROM_SOURCE_DIR)) {
+ // HIVE-17113 - avoid copying files that may have been written to the temp dir by runaway tasks,
+ // by moving just the files we've tracked from removeTempOrDuplicateFiles().
+ Utilities.moveSpecifiedFiles(fs, tmpPath, specPath, filesKept);
+ } else {
+ Utilities.renameOrMoveFiles(fs, tmpPath, specPath);
+ }
perfLogger.PerfLogEnd("FileSinkOperator", "RenameOrMoveFiles");
}
} else {
@@@ -1534,27 -1552,7 +1578,27 @@@
* @return a list of path names corresponding to should-be-created empty buckets.
*/
public static List<Path> removeTempOrDuplicateFiles(FileSystem fs, FileStatus[] fileStats,
- DynamicPartitionCtx dpCtx, FileSinkDesc conf, Configuration hconf) throws IOException {
+ DynamicPartitionCtx dpCtx, FileSinkDesc conf, Configuration hconf, Set<Path> filesKept) throws IOException {
+ int dpLevels = dpCtx == null ? 0 : dpCtx.getNumDPCols(),
+ numBuckets = (conf != null && conf.getTable() != null)
+ ? conf.getTable().getNumBuckets() : 0;
+ return removeTempOrDuplicateFiles(fs, fileStats, dpLevels, numBuckets, hconf, null, 0, false);
+ }
+
+ private static boolean removeEmptyDpDirectory(FileSystem fs, Path path) throws IOException {
+ FileStatus[] items = fs.listStatus(path);
+ // remove empty directory since DP insert should not generate empty partitions.
+ // empty directories could be generated by crashed Task/ScriptOperator
+ if (items.length != 0) return false;
+ if (!fs.delete(path, true)) {
+ LOG.error("Cannot delete empty directory " + path);
+ throw new IOException("Cannot delete empty directory " + path);
+ }
+ return true;
+ }
+
+ public static List<Path> removeTempOrDuplicateFiles(FileSystem fs, FileStatus[] fileStats,
+ int dpLevels, int numBuckets, Configuration hconf, Long txnId, int stmtId, boolean isMmTable) throws IOException {
if (fileStats == null) {
return null;
}
@@@ -3145,21 -3150,14 +3235,21 @@@
LOG.info("Processing alias " + alias);
// The alias may not have any path
+ Collection<Map.Entry<Path, ArrayList<String>>> pathToAliases =
+ work.getPathToAliases().entrySet();
+ if (!skipDummy) {
+ // ConcurrentModification otherwise if adding dummy.
+ pathToAliases = new ArrayList<>(pathToAliases);
+ }
boolean isEmptyTable = true;
boolean hasLogged = false;
- // Note: this copies the list because createDummyFileForEmptyPartition may modify the map.
- for (Path file : new LinkedList<Path>(work.getPathToAliases().keySet())) {
+ Path path = null;
+ for (Map.Entry<Path, ArrayList<String>> e : pathToAliases) {
if (lDrvStat != null && lDrvStat.driverState == DriverState.INTERRUPT)
- throw new IOException("Operation is Canceled. ");
+ throw new IOException("Operation is Canceled.");
- List<String> aliases = work.getPathToAliases().get(file);
+ Path file = e.getKey();
+ List<String> aliases = e.getValue();
if (aliases.contains(alias)) {
if (file != null) {
isEmptyTable = false;
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadPartitions.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadPartitions.java
index 0000000,c944a13..2ae18cf
mode 000000,100644..100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadPartitions.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadPartitions.java
@@@ -1,0 -1,314 +1,316 @@@
+ /*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+ package org.apache.hadoop.hive.ql.exec.repl.bootstrap.load.table;
+
+ import org.apache.hadoop.fs.Path;
+ import org.apache.hadoop.hive.metastore.MetaStoreUtils;
+ import org.apache.hadoop.hive.metastore.Warehouse;
+ import org.apache.hadoop.hive.metastore.api.Database;
+ import org.apache.hadoop.hive.metastore.api.MetaException;
+ import org.apache.hadoop.hive.ql.exec.ReplCopyTask;
+ import org.apache.hadoop.hive.ql.exec.Task;
+ import org.apache.hadoop.hive.ql.exec.TaskFactory;
+ import org.apache.hadoop.hive.ql.exec.Utilities;
+ import org.apache.hadoop.hive.ql.exec.repl.ReplStateLogWork;
+ import org.apache.hadoop.hive.ql.exec.repl.bootstrap.events.TableEvent;
+ import org.apache.hadoop.hive.ql.exec.repl.bootstrap.load.ReplicationState;
+ import org.apache.hadoop.hive.ql.exec.repl.bootstrap.ReplLoadTask;
+ import org.apache.hadoop.hive.ql.exec.repl.bootstrap.load.TaskTracker;
+ import org.apache.hadoop.hive.ql.exec.repl.bootstrap.load.util.Context;
+ import org.apache.hadoop.hive.ql.metadata.HiveException;
+ import org.apache.hadoop.hive.ql.metadata.Partition;
+ import org.apache.hadoop.hive.ql.metadata.Table;
+ import org.apache.hadoop.hive.ql.parse.ImportSemanticAnalyzer;
+ import org.apache.hadoop.hive.ql.parse.ReplicationSpec;
+ import org.apache.hadoop.hive.ql.parse.SemanticException;
+ import org.apache.hadoop.hive.ql.parse.repl.ReplLogger;
+ import org.apache.hadoop.hive.ql.plan.AddPartitionDesc;
+ import org.apache.hadoop.hive.ql.plan.DDLWork;
+ import org.apache.hadoop.hive.ql.plan.ImportTableDesc;
+ import org.apache.hadoop.hive.ql.plan.LoadTableDesc;
+ import org.apache.hadoop.hive.ql.plan.MoveWork;
++import org.apache.hadoop.hive.ql.session.SessionState;
++import org.mortbay.jetty.servlet.AbstractSessionManager;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+
+ import java.io.IOException;
+ import java.io.Serializable;
+ import java.util.*;
+
+ import static org.apache.hadoop.hive.ql.exec.repl.bootstrap.load.ReplicationState.PartitionState;
+ import static org.apache.hadoop.hive.ql.parse.ImportSemanticAnalyzer.isPartitioned;
+ import static org.apache.hadoop.hive.ql.parse.ImportSemanticAnalyzer.partSpecToString;
+
+ public class LoadPartitions {
+ private static Logger LOG = LoggerFactory.getLogger(LoadPartitions.class);
+
+ private final Context context;
+ private final ReplLogger replLogger;
+ private final TableContext tableContext;
+ private final TableEvent event;
+ private final TaskTracker tracker;
+ private final AddPartitionDesc lastReplicatedPartition;
+
+ private final ImportTableDesc tableDesc;
+ private Table table;
+
+ public LoadPartitions(Context context, ReplLogger replLogger, TaskTracker tableTracker,
+ TableEvent event, String dbNameToLoadIn,
+ TableContext tableContext) throws HiveException, IOException {
+ this(context, replLogger, tableContext, tableTracker, event, dbNameToLoadIn, null);
+ }
+
+ public LoadPartitions(Context context, ReplLogger replLogger, TableContext tableContext,
+ TaskTracker limiter, TableEvent event, String dbNameToLoadIn,
+ AddPartitionDesc lastReplicatedPartition) throws HiveException, IOException {
+ this.tracker = new TaskTracker(limiter);
+ this.event = event;
+ this.context = context;
+ this.replLogger = replLogger;
+ this.lastReplicatedPartition = lastReplicatedPartition;
+ this.tableContext = tableContext;
+
+ this.tableDesc = tableContext.overrideProperties(event.tableDesc(dbNameToLoadIn));
+ this.table = ImportSemanticAnalyzer.tableIfExists(tableDesc, context.hiveDb);
+ }
+
+ private String location() throws MetaException, HiveException {
+ Database parentDb = context.hiveDb.getDatabase(tableDesc.getDatabaseName());
+ if (!tableContext.waitOnPrecursor()) {
+ return context.warehouse.getDefaultTablePath(parentDb, tableDesc.getTableName()).toString();
+ } else {
+ Path tablePath = new Path(
+ context.warehouse.getDefaultDatabasePath(tableDesc.getDatabaseName()),
+ MetaStoreUtils.encodeTableName(tableDesc.getTableName().toLowerCase())
+ );
+ return context.warehouse.getDnsPath(tablePath).toString();
+ }
+ }
+
+ private void createTableReplLogTask() throws SemanticException {
+ ReplStateLogWork replLogWork = new ReplStateLogWork(replLogger,
+ tableDesc.getTableName(), tableDesc.tableType());
+ Task<ReplStateLogWork> replLogTask = TaskFactory.get(replLogWork, context.hiveConf);
+
+ if (tracker.tasks().isEmpty()) {
+ tracker.addTask(replLogTask);
+ } else {
+ ReplLoadTask.dependency(tracker.tasks(), replLogTask);
+
+ List<Task<? extends Serializable>> visited = new ArrayList<>();
+ tracker.updateTaskCount(replLogTask, visited);
+ }
+ }
+
+ public TaskTracker tasks() throws SemanticException {
+ try {
+ /*
+ We are doing this both in load table and load partitions
+ */
+ if (tableDesc.getLocation() == null) {
+ tableDesc.setLocation(location());
+ }
+
+ if (table == null) {
+ //new table
+
+ table = new Table(tableDesc.getDatabaseName(), tableDesc.getTableName());
+ if (isPartitioned(tableDesc)) {
+ updateReplicationState(initialReplicationState());
+ if (!forNewTable().hasReplicationState()) {
+ // Add ReplStateLogTask only if no pending table load tasks left for next cycle
+ createTableReplLogTask();
+ }
+ return tracker;
+ }
+ } else {
+ // existing
+
+ if (table.isPartitioned()) {
+ List<AddPartitionDesc> partitionDescs = event.partitionDescriptions(tableDesc);
+ if (!event.replicationSpec().isMetadataOnly() && !partitionDescs.isEmpty()) {
+ updateReplicationState(initialReplicationState());
+ if (!forExistingTable(lastReplicatedPartition).hasReplicationState()) {
+ // Add ReplStateLogTask only if no pending table load tasks left for next cycle
+ createTableReplLogTask();
+ }
+ return tracker;
+ }
+ }
+ }
+ return tracker;
+ } catch (Exception e) {
+ throw new SemanticException(e);
+ }
+ }
+
+ private void updateReplicationState(ReplicationState replicationState) throws SemanticException {
+ if (!tracker.canAddMoreTasks()) {
+ tracker.setReplicationState(replicationState);
+ }
+ }
+
+ private ReplicationState initialReplicationState() throws SemanticException {
+ return new ReplicationState(
+ new PartitionState(tableDesc.getTableName(), lastReplicatedPartition)
+ );
+ }
+
+ private TaskTracker forNewTable() throws Exception {
+ Iterator<AddPartitionDesc> iterator = event.partitionDescriptions(tableDesc).iterator();
+ while (iterator.hasNext() && tracker.canAddMoreTasks()) {
+ AddPartitionDesc addPartitionDesc = iterator.next();
+ tracker.addTask(addSinglePartition(table, addPartitionDesc));
+ if (iterator.hasNext() && !tracker.canAddMoreTasks()) {
+ ReplicationState currentReplicationState =
+ new ReplicationState(new PartitionState(table.getTableName(), addPartitionDesc));
+ updateReplicationState(currentReplicationState);
+ }
+ }
+ return tracker;
+ }
+
+ /**
+ * returns the root task for adding a partition
+ */
+ private Task<? extends Serializable> addSinglePartition(Table table,
+ AddPartitionDesc addPartitionDesc) throws MetaException, IOException, HiveException {
+ AddPartitionDesc.OnePartitionDesc partSpec = addPartitionDesc.getPartition(0);
+ Path sourceWarehousePartitionLocation = new Path(partSpec.getLocation());
+ Path replicaWarehousePartitionLocation = locationOnReplicaWarehouse(table, partSpec);
+ partSpec.setLocation(replicaWarehousePartitionLocation.toString());
+ LOG.debug("adding dependent CopyWork/AddPart/MoveWork for partition "
+ + partSpecToString(partSpec.getPartSpec()) + " with source location: "
+ + partSpec.getLocation());
+ Path tmpPath = context.utils.getExternalTmpPath(replicaWarehousePartitionLocation);
+
+ Task<?> copyTask = ReplCopyTask.getLoadCopyTask(
+ event.replicationSpec(),
+ sourceWarehousePartitionLocation,
+ tmpPath,
+ context.hiveConf
+ );
+
+ Task<?> addPartTask = TaskFactory.get(
+ new DDLWork(new HashSet<>(), new HashSet<>(), addPartitionDesc),
+ context.hiveConf
+ );
+
+ Task<?> movePartitionTask = movePartitionTask(table, partSpec, tmpPath);
+
+ copyTask.addDependentTask(addPartTask);
+ addPartTask.addDependentTask(movePartitionTask);
+ return copyTask;
+ }
+
+ /**
+ * This will create the move of partition data from temp path to actual path
+ */
+ private Task<?> movePartitionTask(Table table, AddPartitionDesc.OnePartitionDesc partSpec,
+ Path tmpPath) {
+ LoadTableDesc loadTableWork = new LoadTableDesc(
+ tmpPath, Utilities.getTableDesc(table), partSpec.getPartSpec(),
- event.replicationSpec().isReplace()
++ event.replicationSpec().isReplace(), SessionState.get().getTxnMgr().getCurrentTxnId()
+ );
+ loadTableWork.setInheritTableSpecs(false);
+ MoveWork work = new MoveWork(new HashSet<>(), new HashSet<>(), loadTableWork, null, false);
+ return TaskFactory.get(work, context.hiveConf);
+ }
+
+ private Path locationOnReplicaWarehouse(Table table, AddPartitionDesc.OnePartitionDesc partSpec)
+ throws MetaException, HiveException, IOException {
+ String child = Warehouse.makePartPath(partSpec.getPartSpec());
+ if (tableDesc.getLocation() == null) {
+ if (table.getDataLocation() == null) {
+ Database parentDb = context.hiveDb.getDatabase(tableDesc.getDatabaseName());
+ return new Path(
+ context.warehouse.getDefaultTablePath(parentDb, tableDesc.getTableName()), child);
+ } else {
+ return new Path(table.getDataLocation().toString(), child);
+ }
+ } else {
+ return new Path(tableDesc.getLocation(), child);
+ }
+ }
+
+ private Task<? extends Serializable> alterSinglePartition(AddPartitionDesc desc,
+ ReplicationSpec replicationSpec, Partition ptn) {
+ desc.setReplaceMode(true);
+ if ((replicationSpec != null) && (replicationSpec.isInReplicationScope())) {
+ desc.setReplicationSpec(replicationSpec);
+ }
+ desc.getPartition(0).setLocation(ptn.getLocation()); // use existing location
+ return TaskFactory.get(
+ new DDLWork(new HashSet<>(), new HashSet<>(), desc),
+ context.hiveConf
+ );
+ }
+
+ private TaskTracker forExistingTable(AddPartitionDesc lastPartitionReplicated) throws Exception {
+ boolean encounteredTheLastReplicatedPartition = (lastPartitionReplicated == null);
+ ReplicationSpec replicationSpec = event.replicationSpec();
+ LOG.debug("table partitioned");
+
+ Iterator<AddPartitionDesc> iterator = event.partitionDescriptions(tableDesc).iterator();
+ while (iterator.hasNext()) {
+ /*
+ encounteredTheLastReplicatedPartition will be set, when we break creation of partition tasks
+ for a table, as we have reached the limit of number of tasks we should create for execution.
+ in this case on the next run we have to iterate over the partitions desc to reach the last replicated
+ partition so that we can start replicating partitions after that.
+ */
+ AddPartitionDesc addPartitionDesc = iterator.next();
+ if (encounteredTheLastReplicatedPartition && tracker.canAddMoreTasks()) {
+ Map<String, String> partSpec = addPartitionDesc.getPartition(0).getPartSpec();
+ Partition ptn;
+
+ if ((ptn = context.hiveDb.getPartition(table, partSpec, false)) == null) {
+ if (!replicationSpec.isMetadataOnly()) {
+ forNewTable();
+ }
+ } else {
+ // If replicating, then the partition already existing means we need to replace, maybe, if
+ // the destination ptn's repl.last.id is older than the replacement's.
+ if (replicationSpec.allowReplacementInto(ptn.getParameters())) {
+ if (replicationSpec.isMetadataOnly()) {
+ tracker.addTask(alterSinglePartition(addPartitionDesc, replicationSpec, ptn));
+ if (iterator.hasNext() && !tracker.canAddMoreTasks()) {
+ tracker.setReplicationState(
+ new ReplicationState(new PartitionState(table.getTableName(), addPartitionDesc)
+ )
+ );
+ }
+ } else {
+ forNewTable();
+ }
+ } else {
+ // ignore this ptn, do nothing, not an error.
+ }
+ }
+ } else {
+ Map<String, String> currentSpec = addPartitionDesc.getPartition(0).getPartSpec();
+ Map<String, String> lastReplicatedPartSpec =
+ lastPartitionReplicated.getPartition(0).getPartSpec();
+ encounteredTheLastReplicatedPartition = lastReplicatedPartSpec.equals(currentSpec);
+ }
+ }
+ return tracker;
+ }
+ }
+
[20/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Wei Zheng)
Posted by se...@apache.org.
http://git-wip-us.apache.org/repos/asf/hive/blob/18d13385/ql/src/test/results/clientpositive/tez/explainuser_3.q.out
----------------------------------------------------------------------
diff --cc ql/src/test/results/clientpositive/tez/explainuser_3.q.out
index c9ccf23,d26a9a3..9f764b8
--- a/ql/src/test/results/clientpositive/tez/explainuser_3.q.out
+++ b/ql/src/test/results/clientpositive/tez/explainuser_3.q.out
@@@ -509,13 -509,13 +509,13 @@@ Stage-
Conditional Operator
Stage-1
Map 1 vectorized
- File Output Operator [FS_10]
+ File Output Operator [FS_8]
table:{"name:":"default.orc_merge5"}
- Select Operator [SEL_7] (rows=306 width=268)
+ Select Operator [SEL_9] (rows=306 width=335)
Output:["_col0","_col1","_col2","_col3","_col4"]
- Filter Operator [FIL_6] (rows=306 width=268)
+ Filter Operator [FIL_8] (rows=306 width=335)
predicate:(userid <= 13)
- TableScan [TS_0] (rows=919 width=268)
+ TableScan [TS_0] (rows=919 width=335)
default@orc_merge5,orc_merge5,Tbl:COMPLETE,Col:NONE,Output:["userid","string1","subtype","decimal1","ts"]
Stage-4(CONDITIONAL)
File Merge
[44/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Sergey Shelukhin)
Posted by se...@apache.org.
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
index 9754039,a5b69ec..df5c6aa
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
@@@ -6873,22 -6889,16 +6851,24 @@@ public class SemanticAnalyzer extends B
acidOp = getAcidType(table_desc.getOutputFileFormatClass(), dest);
checkAcidConstraints(qb, table_desc, dest_tab);
}
- Long currentTransactionId = acidOp == Operation.NOT_ACID ? null :
+ if (AcidUtils.isInsertOnlyTable(table_desc.getProperties())) {
+ acidOp = getAcidType(table_desc.getOutputFileFormatClass(), dest);
+ }
+ if (isMmTable) {
+ txnId = SessionState.get().getTxnMgr().getCurrentTxnId();
+ } else {
+ txnId = acidOp == Operation.NOT_ACID ? null :
SessionState.get().getTxnMgr().getCurrentTxnId();
- ltd = new LoadTableDesc(queryTmpdir, table_desc, dpCtx, acidOp,
- currentTransactionId);
+ }
+ boolean isReplace = !qb.getParseInfo().isInsertIntoTable(
+ dest_tab.getDbName(), dest_tab.getTableName());
+ ltd = new LoadTableDesc(queryTmpdir, table_desc, dpCtx, acidOp, isReplace, txnId);
// For Acid table, Insert Overwrite shouldn't replace the table content. We keep the old
// deltas and base and leave them up to the cleaner to clean up
- ltd.setReplace(!qb.getParseInfo().isInsertIntoTable(dest_tab.getDbName(),
- dest_tab.getTableName()) && !destTableIsAcid);
+ LoadFileType loadType = (!qb.getParseInfo().isInsertIntoTable(dest_tab.getDbName(),
+ dest_tab.getTableName()) && !destTableIsAcid)
+ ? LoadFileType.REPLACE_ALL : LoadFileType.KEEP_EXISTING;
+ ltd.setLoadFileType(loadType);
ltd.setLbCtx(lbCtx);
loadTableWork.add(ltd);
} else {
@@@ -6947,20 -7009,16 +6927,22 @@@
acidOp = getAcidType(table_desc.getOutputFileFormatClass(), dest);
checkAcidConstraints(qb, table_desc, dest_tab);
}
- Long currentTransactionId = (acidOp == Operation.NOT_ACID) ? null :
+ if (AcidUtils.isInsertOnlyTable(dest_part.getTable().getParameters())) {
+ acidOp = getAcidType(table_desc.getOutputFileFormatClass(), dest);
+ }
+ if (isMmTable) {
+ txnId = SessionState.get().getTxnMgr().getCurrentTxnId();
+ } else {
+ txnId = (acidOp == Operation.NOT_ACID) ? null :
SessionState.get().getTxnMgr().getCurrentTxnId();
- ltd = new LoadTableDesc(queryTmpdir, table_desc, dest_part.getSpec(), acidOp,
- currentTransactionId);
+ }
+ ltd = new LoadTableDesc(queryTmpdir, table_desc, dest_part.getSpec(), acidOp, txnId);
// For Acid table, Insert Overwrite shouldn't replace the table content. We keep the old
// deltas and base and leave them up to the cleaner to clean up
- ltd.setReplace(!qb.getParseInfo().isInsertIntoTable(dest_tab.getDbName(),
- dest_tab.getTableName()) && !destTableIsAcid);
+ LoadFileType loadType = (!qb.getParseInfo().isInsertIntoTable(dest_tab.getDbName(),
+ dest_tab.getTableName()) && !destTableIsAcid)
+ ? LoadFileType.REPLACE_ALL : LoadFileType.KEEP_EXISTING;
+ ltd.setLoadFileType(loadType);
ltd.setLbCtx(lbCtx);
loadTableWork.add(ltd);
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/parse/spark/SparkProcessAnalyzeTable.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/spark/SparkProcessAnalyzeTable.java
index 1c220b8,7ff321f..6f21cae
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/spark/SparkProcessAnalyzeTable.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/spark/SparkProcessAnalyzeTable.java
@@@ -30,10 -29,7 +29,8 @@@ import org.apache.hadoop.hive.conf.Hive
import org.apache.hadoop.hive.ql.exec.TableScanOperator;
import org.apache.hadoop.hive.ql.exec.Task;
import org.apache.hadoop.hive.ql.exec.TaskFactory;
+import org.apache.hadoop.hive.ql.exec.Utilities;
import org.apache.hadoop.hive.ql.io.orc.OrcInputFormat;
- import org.apache.hadoop.hive.ql.io.rcfile.stats.PartialScanWork;
import org.apache.hadoop.hive.ql.lib.Node;
import org.apache.hadoop.hive.ql.lib.NodeProcessor;
import org.apache.hadoop.hive.ql.lib.NodeProcessorCtx;
@@@ -170,44 -160,5 +161,4 @@@ public class SparkProcessAnalyzeTable i
return null;
}
-
- /**
- * handle partial scan command.
- *
- * It is composed of PartialScanTask followed by StatsTask.
- */
- private void handlePartialScanCommand(TableScanOperator tableScan, ParseContext parseContext,
- StatsWork statsWork, GenSparkProcContext context, Task<StatsWork> statsTask)
- throws SemanticException {
- String aggregationKey = tableScan.getConf().getStatsAggPrefix();
- StringBuilder aggregationKeyBuffer = new StringBuilder(aggregationKey);
- List<Path> inputPaths = GenMapRedUtils.getInputPathsForPartialScan(tableScan, aggregationKeyBuffer);
- aggregationKey = aggregationKeyBuffer.toString();
-
- // scan work
- PartialScanWork scanWork = new PartialScanWork(inputPaths,
- Utilities.getTableDesc(tableScan.getConf().getTableMetadata()));
- scanWork.setMapperCannotSpanPartns(true);
- scanWork.setAggKey(aggregationKey);
- scanWork.setStatsTmpDir(tableScan.getConf().getTmpStatsDir(), parseContext.getConf());
-
- // stats work
- statsWork.setPartialScanAnalyzeCommand(true);
-
- // partial scan task
- DriverContext driverCxt = new DriverContext();
-
- @SuppressWarnings("unchecked")
- Task<PartialScanWork> partialScanTask = TaskFactory.get(scanWork, parseContext.getConf());
- partialScanTask.initialize(parseContext.getQueryState(), null, driverCxt,
- tableScan.getCompilationOpContext());
- partialScanTask.setWork(scanWork);
- statsWork.setSourceTask(partialScanTask);
-
- // task dependency
- context.rootTasks.remove(context.currentTask);
- context.rootTasks.add(partialScanTask);
- partialScanTask.addDependentTask(statsTask);
- }
--
}
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
index f246115,e15f59c..1fa7b40
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
@@@ -61,14 -66,11 +66,14 @@@ public class LoadTableDesc extends Load
public LoadTableDesc(final Path sourcePath,
final TableDesc table,
final Map<String, String> partitionSpec,
- final boolean replace,
+ final LoadFileType loadFileType,
final AcidUtils.Operation writeType, Long currentTransactionId) {
super(sourcePath, writeType);
- this.currentTransactionId = currentTransactionId;
- init(table, partitionSpec, loadFileType);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("creating part LTD from " + sourcePath + " to "
+ + ((table.getProperties() == null) ? "null" : table.getTableName()));
+ }
- init(table, partitionSpec, replace, currentTransactionId);
++ init(table, partitionSpec, loadFileType, currentTransactionId);
}
/**
@@@ -76,14 -78,14 +81,14 @@@
* @param sourcePath
* @param table
* @param partitionSpec
- * @param replace
+ * @param loadFileType
*/
public LoadTableDesc(final Path sourcePath,
- final TableDesc table,
- final Map<String, String> partitionSpec,
- final LoadFileType loadFileType) {
- this(sourcePath, table, partitionSpec, loadFileType, AcidUtils.Operation.NOT_ACID,
- null);
+ final TableDesc table,
+ final Map<String, String> partitionSpec,
- final boolean replace,
++ final LoadFileType loadFileType,
+ final Long txnId) {
- this(sourcePath, table, partitionSpec, replace, AcidUtils.Operation.NOT_ACID, txnId);
++ this(sourcePath, table, partitionSpec, loadFileType, AcidUtils.Operation.NOT_ACID, txnId);
}
public LoadTableDesc(final Path sourcePath,
@@@ -100,37 -103,33 +106,39 @@@
* @param partitionSpec
*/
public LoadTableDesc(final Path sourcePath,
- final TableDesc table,
- final Map<String, String> partitionSpec) {
+ final org.apache.hadoop.hive.ql.plan.TableDesc table,
+ final Map<String, String> partitionSpec, Long txnId) {
- this(sourcePath, table, partitionSpec, true, AcidUtils.Operation.NOT_ACID, txnId);
+ this(sourcePath, table, partitionSpec, LoadFileType.REPLACE_ALL,
- AcidUtils.Operation.NOT_ACID, null);
++ AcidUtils.Operation.NOT_ACID, txnId);
}
public LoadTableDesc(final Path sourcePath,
final TableDesc table,
final DynamicPartitionCtx dpCtx,
- final AcidUtils.Operation writeType, Long currentTransactionId) {
+ final AcidUtils.Operation writeType,
+ boolean isReplace, Long txnId) {
super(sourcePath, writeType);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("creating LTD from " + sourcePath + " to " + table.getTableName());
+ }
this.dpCtx = dpCtx;
- this.currentTransactionId = currentTransactionId;
++ LoadFileType lft = isReplace ? LoadFileType.REPLACE_ALL : LoadFileType.OVERWRITE_EXISTING;
if (dpCtx != null && dpCtx.getPartSpec() != null && partitionSpec == null) {
- init(table, dpCtx.getPartSpec(), isReplace, txnId);
- init(table, dpCtx.getPartSpec(), LoadFileType.REPLACE_ALL);
++ init(table, dpCtx.getPartSpec(), lft, txnId);
} else {
- init(table, new LinkedHashMap<>(), isReplace, txnId);
- init(table, new LinkedHashMap<>(), LoadFileType.REPLACE_ALL);
++ init(table, new LinkedHashMap<String, String>(), lft, txnId);
}
}
private void init(
final org.apache.hadoop.hive.ql.plan.TableDesc table,
final Map<String, String> partitionSpec,
- final boolean replace,
- final LoadFileType loadFileType) {
++ final LoadFileType loadFileType,
+ Long txnId) {
this.table = table;
this.partitionSpec = partitionSpec;
- this.replace = replace;
+ this.loadFileType = loadFileType;
+ this.currentTransactionId = txnId;
}
@Explain(displayName = "table", explainLevels = { Level.USER, Level.DEFAULT, Level.EXTENDED })
@@@ -153,20 -152,15 +161,24 @@@
@Explain(displayName = "replace")
public boolean getReplace() {
- return replace;
+ return (loadFileType == LoadFileType.REPLACE_ALL);
+ }
+
+ public LoadFileType getLoadFileType() {
+ return loadFileType;
}
+ @Explain(displayName = "micromanaged table")
+ public Boolean isMmTableExplain() {
+ return isMmTable() ? true : null;
+ }
+
+ public boolean isMmTable() {
+ return AcidUtils.isInsertOnlyTable(table.getProperties());
+ }
+
- public void setReplace(boolean replace) {
- this.replace = replace;
+ public void setLoadFileType(LoadFileType loadFileType) {
+ this.loadFileType = loadFileType;
}
public DynamicPartitionCtx getDPCtx() {
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands2.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/test/org/apache/hadoop/hive/ql/exec/TestExecDriver.java
----------------------------------------------------------------------
diff --cc ql/src/test/org/apache/hadoop/hive/ql/exec/TestExecDriver.java
index 75ea16f,e523049..d5ab079
--- a/ql/src/test/org/apache/hadoop/hive/ql/exec/TestExecDriver.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/exec/TestExecDriver.java
@@@ -140,7 -141,8 +141,8 @@@ public class TestExecDriver extends Tes
db.dropTable(Warehouse.DEFAULT_DATABASE_NAME, src, true, true);
db.createTable(src, cols, null, TextInputFormat.class,
HiveIgnoreKeyTextOutputFormat.class);
- db.loadTable(hadoopDataFile[i], src, false, true, false, false, false, null, 0, false);
+ db.loadTable(hadoopDataFile[i], src, LoadFileType.KEEP_EXISTING,
- true, false, false, false);
++ true, false, false, false, null, 0, false);
i++;
}
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/standalone-metastore/src/gen/thrift/gen-cpp/hive_metastore_types.cpp
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/standalone-metastore/src/gen/thrift/gen-cpp/hive_metastore_types.h
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/standalone-metastore/src/gen/thrift/gen-php/metastore/Types.php
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/standalone-metastore/src/gen/thrift/gen-py/hive_metastore/ttypes.py
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/standalone-metastore/src/gen/thrift/gen-rb/hive_metastore_types.rb
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/standalone-metastore/src/main/resources/package.jdo
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/standalone-metastore/src/main/thrift/hive_metastore.thrift
----------------------------------------------------------------------
[07/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Wei Zheng)
Posted by se...@apache.org.
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/model/MTable.java
----------------------------------------------------------------------
diff --cc standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/model/MTable.java
index 0000000,6cc7157..3759348
mode 000000,100644..100644
--- a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/model/MTable.java
+++ b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/model/MTable.java
@@@ -1,0 -1,256 +1,256 @@@
+ /**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ package org.apache.hadoop.hive.metastore.model;
+
+ import java.util.List;
+ import java.util.Map;
+
+ public class MTable {
+
+ private String tableName;
+ private MDatabase database;
+ private MStorageDescriptor sd;
+ private String owner;
+ private int createTime;
+ private int lastAccessTime;
+ private int retention;
+ private List<MFieldSchema> partitionKeys;
+ private Map<String, String> parameters;
+ private String viewOriginalText;
+ private String viewExpandedText;
+ private boolean rewriteEnabled;
+ private String tableType;
+
+ public MTable() {}
+
+ /**
+ * @param tableName
+ * @param database
+ * @param sd
+ * @param owner
+ * @param createTime
+ * @param lastAccessTime
+ * @param retention
+ * @param partitionKeys
+ * @param parameters
+ * @param viewOriginalText
+ * @param viewExpandedText
+ * @param tableType
+ */
+ public MTable(String tableName, MDatabase database, MStorageDescriptor sd, String owner,
+ int createTime, int lastAccessTime, int retention, List<MFieldSchema> partitionKeys,
- Map<String, String> parameters, String viewOriginalText, String viewExpandedText,
- boolean rewriteEnabled, String tableType) {
++ Map<String, String> parameters,
++ String viewOriginalText, String viewExpandedText, boolean rewriteEnabled, String tableType) {
+ this.tableName = tableName;
+ this.database = database;
+ this.sd = sd;
+ this.owner = owner;
+ this.createTime = createTime;
+ this.setLastAccessTime(lastAccessTime);
+ this.retention = retention;
+ this.partitionKeys = partitionKeys;
+ this.parameters = parameters;
+ this.viewOriginalText = viewOriginalText;
+ this.viewExpandedText = viewExpandedText;
+ this.rewriteEnabled = rewriteEnabled;
+ this.tableType = tableType;
+ }
+
+ /**
+ * @return the tableName
+ */
+ public String getTableName() {
+ return tableName;
+ }
+
+ /**
+ * @param tableName the tableName to set
+ */
+ public void setTableName(String tableName) {
+ this.tableName = tableName;
+ }
+
+ /**
+ * @return the sd
+ */
+ public MStorageDescriptor getSd() {
+ return sd;
+ }
+
+ /**
+ * @param sd the sd to set
+ */
+ public void setSd(MStorageDescriptor sd) {
+ this.sd = sd;
+ }
+
+ /**
+ * @return the partKeys
+ */
+ public List<MFieldSchema> getPartitionKeys() {
+ return partitionKeys;
+ }
+
+ /**
+ * @param partKeys the partKeys to set
+ */
+ public void setPartitionKeys(List<MFieldSchema> partKeys) {
+ this.partitionKeys = partKeys;
+ }
+
+ /**
+ * @return the parameters
+ */
+ public Map<String, String> getParameters() {
+ return parameters;
+ }
+
+ /**
+ * @param parameters the parameters to set
+ */
+ public void setParameters(Map<String, String> parameters) {
+ this.parameters = parameters;
+ }
+
+ /**
+ * @return the original view text, or null if this table is not a view
+ */
+ public String getViewOriginalText() {
+ return viewOriginalText;
+ }
+
+ /**
+ * @param viewOriginalText the original view text to set
+ */
+ public void setViewOriginalText(String viewOriginalText) {
+ this.viewOriginalText = viewOriginalText;
+ }
+
+ /**
+ * @return the expanded view text, or null if this table is not a view
+ */
+ public String getViewExpandedText() {
+ return viewExpandedText;
+ }
+
+ /**
+ * @param viewExpandedText the expanded view text to set
+ */
+ public void setViewExpandedText(String viewExpandedText) {
+ this.viewExpandedText = viewExpandedText;
+ }
+
+ /**
+ * @return whether the view can be used for rewriting queries
+ */
+ public boolean isRewriteEnabled() {
+ return rewriteEnabled;
+ }
+
+ /**
+ * @param rewriteEnabled whether the view can be used for rewriting queries
+ */
+ public void setRewriteEnabled(boolean rewriteEnabled) {
+ this.rewriteEnabled = rewriteEnabled;
+ }
+
+ /**
+ * @return the owner
+ */
+ public String getOwner() {
+ return owner;
+ }
+
+ /**
+ * @param owner the owner to set
+ */
+ public void setOwner(String owner) {
+ this.owner = owner;
+ }
+
+ /**
+ * @return the createTime
+ */
+ public int getCreateTime() {
+ return createTime;
+ }
+
+ /**
+ * @param createTime the createTime to set
+ */
+ public void setCreateTime(int createTime) {
+ this.createTime = createTime;
+ }
+
+ /**
+ * @return the database
+ */
+ public MDatabase getDatabase() {
+ return database;
+ }
+
+ /**
+ * @param database the database to set
+ */
+ public void setDatabase(MDatabase database) {
+ this.database = database;
+ }
+
+ /**
+ * @return the retention
+ */
+ public int getRetention() {
+ return retention;
+ }
+
+ /**
+ * @param retention the retention to set
+ */
+ public void setRetention(int retention) {
+ this.retention = retention;
+ }
+
+ /**
+ * @param lastAccessTime the lastAccessTime to set
+ */
+ public void setLastAccessTime(int lastAccessTime) {
+ this.lastAccessTime = lastAccessTime;
+ }
+
+ /**
+ * @return the lastAccessTime
+ */
+ public int getLastAccessTime() {
+ return lastAccessTime;
+ }
+
+ /**
+ * @param tableType the tableType to set
+ */
+ public void setTableType(String tableType) {
+ this.tableType = tableType;
+ }
+
+ /**
+ * @return the tableType
+ */
+ public String getTableType() {
+ return tableType;
+ }
+ }
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/standalone-metastore/src/main/resources/package.jdo
----------------------------------------------------------------------
diff --cc standalone-metastore/src/main/resources/package.jdo
index 0000000,570fd44..bbb8f2d
mode 000000,100644..100644
--- a/standalone-metastore/src/main/resources/package.jdo
+++ b/standalone-metastore/src/main/resources/package.jdo
@@@ -1,0 -1,1088 +1,1087 @@@
+ <?xml version="1.0"?>
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <!DOCTYPE jdo PUBLIC "-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata 2.0//EN"
+ "http://java.sun.com/dtd/jdo_2_0.dtd">
+ <!--
+ Size Limitations:
+
+ Indexed VARCHAR: 767 bytes (MySQL running on InnoDB Engine http://bugs.mysql.com/bug.php?id=13315)
+ Non-indexed VARCHAR: 4000 bytes (max length on Oracle 9i/10g/11g)
+
+ -->
+ <jdo>
+ <package name="org.apache.hadoop.hive.metastore.model">
+ <class name="MDatabase" identity-type="datastore" table="DBS" detachable="true">
+ <datastore-identity>
+ <column name="DB_ID"/>
+ </datastore-identity>
+ <field name="name">
+ <column name="NAME" length="128" jdbc-type="VARCHAR"/>
+ <index name="UniqueDatabase" unique="true"/>
+ </field>
+ <field name="description">
+ <column name="DESC" length="4000" jdbc-type="VARCHAR" allows-null="true"/>
+ </field>
+ <field name="locationUri">
+ <column name="DB_LOCATION_URI" length="4000" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ <field name="parameters" table="DATABASE_PARAMS">
+ <map key-type="java.lang.String" value-type="java.lang.String"/>
+ <join>
+ <column name="DB_ID"/>
+ </join>
+ <key>
+ <column name="PARAM_KEY" length="180" jdbc-type="VARCHAR"/>
+ </key>
+ <value>
+ <column name="PARAM_VALUE" length="4000" jdbc-type="VARCHAR"/>
+ </value>
+ </field>
- <field name="ownerName">
++ <field name="ownerName">
+ <column name="OWNER_NAME" length="128" jdbc-type="VARCHAR" allows-null="true"/>
+ </field>
+ <field name="ownerType">
+ <column name="OWNER_TYPE" length="10" jdbc-type="VARCHAR" allows-null="true"/>
+ </field>
+ </class>
+
+ <class name="MFieldSchema" embedded-only="true" table="TYPE_FIELDS" detachable="true">
+ <field name="name">
+ <column name="FNAME" length="767" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="type" >
+ <column name="FTYPE" length="32672" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ <field name="comment" >
+ <column name="FCOMMENT" length="4000" jdbc-type="VARCHAR" allows-null="true"/>
+ </field>
+ </class>
+
+ <class name="MType" table="TYPES" detachable="true">
+ <field name="name" >
+ <column name="TYPE_NAME" length="128" jdbc-type="VARCHAR"/>
+ <index name="UniqueType" unique="true"/>
+ </field>
+ <field name="type1">
+ <column name="TYPE1" length="767" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="type2">
+ <column name="TYPE2" length="767" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="fields" table="TYPE_FIELDS" >
+ <collection element-type="MFieldSchema"/>
+ <join>
+ <primary-key name="TYPE_FIELDS_PK">
+ <column name="TYPE_NAME"/>
+ <column name="FIELD_NAME"/>
+ </primary-key>
+ <column name="TYPE_NAME"/>
+ </join>
+ <element>
+ <embedded>
+ <field name="name">
+ <column name="FIELD_NAME" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="type">
+ <column name="FIELD_TYPE" length="767" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ <field name="comment" >
+ <column name="COMMENT" length="256" jdbc-type="VARCHAR" allows-null="true"/>
+ </field>
+ </embedded>
+ </element>
+ </field>
+ </class>
+
+ <class name="MTable" table="TBLS" identity-type="datastore" detachable="true">
+ <datastore-identity>
+ <column name="TBL_ID"/>
+ </datastore-identity>
+ <index name="UniqueTable" unique="true">
+ <column name="TBL_NAME"/>
+ <column name="DB_ID"/>
+ </index>
+ <field name="tableName">
+ <column name="TBL_NAME" length="256" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="database">
+ <column name="DB_ID"/>
+ </field>
+ <field name="partitionKeys" table="PARTITION_KEYS" >
+ <collection element-type="MFieldSchema"/>
+ <join>
+ <primary-key name="PARTITION_KEY_PK">
+ <column name="TBL_ID"/>
+ <column name="PKEY_NAME"/>
+ </primary-key>
+ <column name="TBL_ID"/>
+ </join>
+ <element>
+ <embedded>
+ <field name="name">
+ <column name="PKEY_NAME" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="type">
+ <column name="PKEY_TYPE" length="767" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ <field name="comment" >
+ <column name="PKEY_COMMENT" length="4000" jdbc-type="VARCHAR" allows-null="true"/>
+ </field>
+ </embedded>
+ </element>
+ </field>
+ <field name="sd" dependent="true">
+ <column name="SD_ID"/>
+ </field>
+ <field name="owner">
+ <column name="OWNER" length="767" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="createTime">
+ <column name="CREATE_TIME" jdbc-type="integer"/>
+ </field>
+ <field name="lastAccessTime">
+ <column name="LAST_ACCESS_TIME" jdbc-type="integer"/>
+ </field>
+ <field name="retention">
+ <column name="RETENTION" jdbc-type="integer"/>
+ </field>
+ <field name="parameters" table="TABLE_PARAMS">
+ <map key-type="java.lang.String" value-type="java.lang.String"/>
+ <join>
+ <column name="TBL_ID"/>
+ </join>
+ <key>
+ <column name="PARAM_KEY" length="256" jdbc-type="VARCHAR"/>
+ </key>
+ <value>
+ <column name="PARAM_VALUE" length="32672" jdbc-type="VARCHAR"/>
+ </value>
+ </field>
+ <field name="viewOriginalText" default-fetch-group="false">
+ <column name="VIEW_ORIGINAL_TEXT" jdbc-type="LONGVARCHAR"/>
+ </field>
+ <field name="viewExpandedText" default-fetch-group="false">
+ <column name="VIEW_EXPANDED_TEXT" jdbc-type="LONGVARCHAR"/>
+ </field>
+ <field name="rewriteEnabled">
+ <column name="IS_REWRITE_ENABLED"/>
+ </field>
+ <field name="tableType">
+ <column name="TBL_TYPE" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ </class>
+
+ <class name="MConstraint" identity-type="application" table="KEY_CONSTRAINTS" detachable="true" objectid-class="MConstraint$PK">
+ <field name="constraintName" primary-key="true">
+ <column name="CONSTRAINT_NAME"/>
+ </field>
+ <field name="position" primary-key="true">
+ <column name="POSITION"/>
+ </field>
+ <field name="childColumn">
+ <column name="CHILD_CD_ID"/>
+ </field>
+ <field name="childIntegerIndex">
+ <column name="CHILD_INTEGER_IDX"/>
+ </field>
+ <field name="childTable">
+ <column name="CHILD_TBL_ID"/>
+ </field>
+ <field name="parentColumn">
+ <column name="PARENT_CD_ID"/>
+ </field>
+ <field name="parentIntegerIndex">
- <column name="PARENT_INTEGER_IDX"/>
++ <column name="PARENT_INTEGER_IDX"/>
+ </field>
+ <field name="parentTable">
+ <column name="PARENT_TBL_ID"/>
+ </field>
+ <field name="constraintType">
+ <column name="CONSTRAINT_TYPE"/>
+ </field>
+ <field name="deleteRule">
- <column name="DELETE_RULE"/>
++ <column name="DELETE_RULE"/>
+ </field>
+ <field name="updateRule">
+ <column name="UPDATE_RULE"/>
+ </field>
+ <field name="enableValidateRely">
+ <column name="ENABLE_VALIDATE_RELY"/>
+ </field>
+ </class>
+
+ <class name="MSerDeInfo" identity-type="datastore" table="SERDES" detachable="true">
+ <datastore-identity>
+ <column name="SERDE_ID"/>
+ </datastore-identity>
+ <field name="name">
+ <column name="NAME" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="serializationLib">
+ <column name="SLIB" length="4000" jdbc-type="VARCHAR" allows-null="true"/>
+ </field>
+ <field name="parameters" table="SERDE_PARAMS">
+ <map key-type="java.lang.String" value-type="java.lang.String"/>
+ <join>
+ <column name="SERDE_ID"/>
+ </join>
+ <key>
+ <column name="PARAM_KEY" length="256" jdbc-type="VARCHAR"/>
+ </key>
+ <value>
+ <column name="PARAM_VALUE" length="32672" jdbc-type="VARCHAR"/>
+ </value>
+ </field>
+ </class>
+
+ <class name="MOrder" embedded-only="true" table="SORT_ORDER" detachable="true">
+ <field name="col">
+ <column name="COL_NAME" length="767" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="order">
+ <column name="ORDER" jdbc-type="INTEGER" allows-null="false"/>
+ </field>
+ </class>
+
+ <class name="MColumnDescriptor" identity-type="datastore" table="CDS" detachable="true">
+ <datastore-identity>
+ <column name="CD_ID"/>
+ </datastore-identity>
+ <field name="cols" table="COLUMNS_V2" >
+ <collection element-type="MFieldSchema"/>
+ <join>
+ <primary-key name="COLUMNS_PK">
+ <column name="COLUMN_NAME"/>
+ </primary-key>
+ <column name="CD_ID"/>
+ </join>
+ <element>
+ <embedded>
+ <field name="name">
+ <column name="COLUMN_NAME" length="767" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="type">
+ <column name="TYPE_NAME" length="32672" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ <field name="comment">
+ <column name="COMMENT" length="256" jdbc-type="VARCHAR" allows-null="true"/>
+ </field>
+ </embedded>
+ </element>
+ </field>
- </class>
++ </class>
+
+ <class name="MStringList" identity-type="datastore" table="Skewed_STRING_LIST" detachable="true">
+ <datastore-identity>
+ <column name="STRING_LIST_ID"/>
+ </datastore-identity>
+ <field name="internalList" table="Skewed_STRING_LIST_VALUES">
+ <collection element-type="java.lang.String"/>
+ <join>
+ <column name="STRING_LIST_ID"/>
+ </join>
+ <element column="STRING_LIST_VALUE"/>
+ </field>
+ </class>
+
+ <class name="MStorageDescriptor" identity-type="datastore" table="SDS" detachable="true">
+ <datastore-identity>
+ <column name="SD_ID"/>
+ </datastore-identity>
+ <field name="cd">
- <column name="CD_ID"/>
++ <column name="CD_ID"/>
+ </field>
+ <field name="location">
+ <column name="LOCATION" length="4000" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="inputFormat">
+ <column name="INPUT_FORMAT" length="4000" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="outputFormat">
+ <column name="OUTPUT_FORMAT" length="4000" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="isCompressed">
+ <column name="IS_COMPRESSED"/>
+ </field>
+ <field name="isStoredAsSubDirectories">
+ <column name="IS_STOREDASSUBDIRECTORIES"/>
+ </field>
+ <field name="numBuckets">
+ <column name="NUM_BUCKETS" jdbc-type="integer"/>
+ </field>
+ <field name="serDeInfo" dependent="true">
+ <column name="SERDE_ID"/>
+ </field>
+ <field name="bucketCols" table="BUCKETING_COLS">
+ <collection element-type="java.lang.String"/>
+ <join>
+ <column name="SD_ID"/>
+ </join>
+ <element column="BUCKET_COL_NAME"/>
+ </field>
+ <field name="sortCols" table="SORT_COLS">
+ <collection element-type="MOrder"/>
+ <join>
+ <column name="SD_ID"/>
+ </join>
+ <element>
+ <embedded>
+ <field name="col">
+ <column name="COLUMN_NAME" length="767" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="order">
+ <column name="ORDER" jdbc-type="INTEGER" allows-null="false"/>
+ </field>
+ </embedded>
+ </element>
+ </field>
+ <field name="parameters" table="SD_PARAMS">
+ <map key-type="java.lang.String" value-type="java.lang.String"/>
+ <join>
+ <column name="SD_ID"/>
+ </join>
+ <key>
+ <column name="PARAM_KEY" length="256" jdbc-type="VARCHAR"/>
+ </key>
+ <value>
+ <column name="PARAM_VALUE" length="32672" jdbc-type="VARCHAR"/>
+ </value>
+ </field>
+ <field name="skewedColNames" table="SKEWED_COL_NAMES">
+ <collection element-type="java.lang.String"/>
+ <join>
+ <column name="SD_ID"/>
+ </join>
+ <element column="SKEWED_COL_NAME"/>
+ </field>
+ <field name="skewedColValues" table="SKEWED_VALUES">
+ <collection element-type="MStringList"/>
+ <join/>
+ </field>
+ <field name="skewedColValueLocationMaps" table="SKEWED_COL_VALUE_LOC_MAP">
+ <map key-type="MStringList" value-type="java.lang.String"/>
+ <join>
+ <column name="SD_ID"/>
+ </join>
+ <value>
+ <column name="location" length="4000" jdbc-type="VARCHAR"/>
+ </value>
+ </field>
+ </class>
+
+ <class name="MPartition" table="PARTITIONS" identity-type="datastore" detachable="true">
+ <index name="UniquePartition" unique="true">
+ <column name="PART_NAME"/>
+ <column name="TBL_ID"/>
+ </index>
+ <datastore-identity>
+ <column name="PART_ID"/>
+ </datastore-identity>
+ <field name="partitionName">
+ <column name="PART_NAME" length="767" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="table">
+ <column name="TBL_ID"/>
+ </field>
+ <field name="createTime">
+ <column name="CREATE_TIME" jdbc-type="integer"/>
+ </field>
+ <field name="lastAccessTime">
+ <column name="LAST_ACCESS_TIME" jdbc-type="integer"/>
+ </field>
+ <field name="values" table="PARTITION_KEY_VALS">
+ <collection element-type="java.lang.String"/>
+ <join>
+ <column name="PART_ID"/>
+ </join>
+ <element column="PART_KEY_VAL"/>
+ </field>
+ <field name="sd" dependent="true">
+ <column name="SD_ID"/>
+ </field>
+ <field name="parameters" table="PARTITION_PARAMS">
+ <map key-type="java.lang.String" value-type="java.lang.String"/>
+ <join>
+ <column name="PART_ID"/>
+ </join>
+ <key>
+ <column name="PARAM_KEY" length="256" jdbc-type="VARCHAR"/>
+ </key>
+ <value>
+ <column name="PARAM_VALUE" length="4000" jdbc-type="VARCHAR"/>
+ </value>
+ </field>
+ </class>
+
+ <class name="MIndex" table="IDXS" identity-type="datastore" detachable="true">
+ <index name="UniqueINDEX" unique="true">
+ <column name="INDEX_NAME"/>
+ <column name="ORIG_TBL_ID"/>
+ </index>
+
+ <datastore-identity>
+ <column name="INDEX_ID"/>
+ </datastore-identity>
+ <field name="indexName">
+ <column name="INDEX_NAME" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="origTable">
+ <column name="ORIG_TBL_ID"/>
+ </field>
+ <field name="indexTable">
+ <column name="INDEX_TBL_ID"/>
+ </field>
+ <field name="indexHandlerClass">
+ <column name="INDEX_HANDLER_CLASS" length="4000" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="deferredRebuild">
+ <column name="DEFERRED_REBUILD"/>
+ </field>
+ <field name="createTime">
+ <column name="CREATE_TIME" jdbc-type="integer"/>
+ </field>
+ <field name="lastAccessTime">
+ <column name="LAST_ACCESS_TIME" jdbc-type="integer"/>
+ </field>
+ <field name="sd" dependent="true">
+ <column name="SD_ID"/>
+ </field>
+ <field name="parameters" table="INDEX_PARAMS">
+ <map key-type="java.lang.String" value-type="java.lang.String"/>
+ <join>
+ <column name="INDEX_ID"/>
+ </join>
+ <key>
+ <column name="PARAM_KEY" length="256" jdbc-type="VARCHAR"/>
+ </key>
+ <value>
+ <column name="PARAM_VALUE" length="4000" jdbc-type="VARCHAR"/>
+ </value>
+ </field>
+ </class>
+
+ <class name="MRole" table="ROLES" identity-type="datastore" detachable="true">
+
+ <index name="RoleEntityINDEX" unique="true">
+ <column name="ROLE_NAME"/>
+ </index>
+
+ <datastore-identity>
+ <column name="ROLE_ID"/>
+ </datastore-identity>
+
+ <field name="roleName">
+ <column name="ROLE_NAME" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="createTime">
+ <column name="CREATE_TIME" jdbc-type="integer"/>
+ </field>
+ <field name="ownerName">
+ <column name="OWNER_NAME" length="128" jdbc-type="VARCHAR"/>
+ </field>
+
+ </class>
+
+ <class name="MRoleMap" table="ROLE_MAP" identity-type="datastore" detachable="true">
+ <index name="UserRoleMapINDEX" unique="true">
+ <column name="PRINCIPAL_NAME"/>
+ <column name="ROLE_ID"/>
+ <column name="GRANTOR"/>
+ <column name="GRANTOR_TYPE"/>
+ </index>
+
+ <datastore-identity>
+ <column name="ROLE_GRANT_ID"/>
+ </datastore-identity>
+
+ <field name="role">
+ <column name="ROLE_ID" />
+ </field>
+ <field name="principalName">
+ <column name="PRINCIPAL_NAME" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="principalType">
+ <column name="PRINCIPAL_TYPE" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="addTime">
+ <column name="ADD_TIME" jdbc-type="integer"/>
+ </field>
+ <field name="grantor">
+ <column name="GRANTOR" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="grantorType">
+ <column name="GRANTOR_TYPE" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="grantOption">
+ <column name="GRANT_OPTION" jdbc-type="SMALLINT"/>
+ </field>
+ </class>
+
+ <class name="MGlobalPrivilege" table="GLOBAL_PRIVS" identity-type="datastore" detachable="true">
+
+ <index name="GlobalPrivilegeIndex" unique="true">
+ <column name="PRINCIPAL_NAME"/>
+ <column name="PRINCIPAL_TYPE"/>
+ <column name="USER_PRIV"/>
+ <column name="GRANTOR"/>
+ <column name="GRANTOR_TYPE"/>
+ </index>
+
+ <datastore-identity>
+ <column name="USER_GRANT_ID"/>
+ </datastore-identity>
+
+ <field name="principalName">
+ <column name="PRINCIPAL_NAME" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="principalType">
+ <column name="PRINCIPAL_TYPE" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="privilege">
+ <column name="USER_PRIV" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="createTime">
+ <column name="CREATE_TIME" jdbc-type="integer"/>
+ </field>
+ <field name="grantor">
+ <column name="GRANTOR" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="grantorType">
+ <column name="GRANTOR_TYPE" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="grantOption">
+ <column name="GRANT_OPTION" jdbc-type="SMALLINT"/>
+ </field>
+ </class>
+
+ <class name="MDBPrivilege" table="DB_PRIVS" identity-type="datastore" detachable="true">
+
+ <index name="DBPrivilegeIndex" unique="true">
+ <column name="DB_ID"/>
+ <column name="PRINCIPAL_NAME"/>
+ <column name="PRINCIPAL_TYPE"/>
+ <column name="DB_PRIV"/>
+ <column name="GRANTOR"/>
+ <column name="GRANTOR_TYPE"/>
+ </index>
+
+ <datastore-identity>
+ <column name="DB_GRANT_ID"/>
+ </datastore-identity>
+
+ <field name="principalName">
+ <column name="PRINCIPAL_NAME" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="principalType">
+ <column name="PRINCIPAL_TYPE" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="database">
+ <column name="DB_ID" />
+ </field>
+ <field name="privilege">
+ <column name="DB_PRIV" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="createTime">
+ <column name="CREATE_TIME" jdbc-type="integer"/>
+ </field>
+ <field name="grantor">
+ <column name="GRANTOR" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="grantorType">
+ <column name="GRANTOR_TYPE" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="grantOption">
+ <column name="GRANT_OPTION" jdbc-type="SMALLINT"/>
+ </field>
+ </class>
+
+ <class name="MTablePrivilege" table="TBL_PRIVS" identity-type="datastore" detachable="true">
+
+ <index name="TablePrivilegeIndex" unique="false">
+ <column name="TBL_ID"/>
+ <column name="PRINCIPAL_NAME"/>
+ <column name="PRINCIPAL_TYPE"/>
+ <column name="TBL_PRIV"/>
+ <column name="GRANTOR"/>
+ <column name="GRANTOR_TYPE"/>
+ </index>
+
+ <datastore-identity>
+ <column name="TBL_GRANT_ID"/>
+ </datastore-identity>
+
+ <field name="principalName">
+ <column name="PRINCIPAL_NAME" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="principalType">
+ <column name="PRINCIPAL_TYPE" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="table">
+ <column name="TBL_ID"/>
+ </field>
+ <field name="privilege">
+ <column name="TBL_PRIV" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="createTime">
+ <column name="CREATE_TIME" jdbc-type="integer"/>
+ </field>
+ <field name="grantor">
+ <column name="GRANTOR" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="grantorType">
+ <column name="GRANTOR_TYPE" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="grantOption">
+ <column name="GRANT_OPTION" jdbc-type="SMALLINT"/>
+ </field>
+ </class>
+
+ <class name="MPartitionPrivilege" table="PART_PRIVS" identity-type="datastore" detachable="true">
+
+ <index name="PartPrivilegeIndex" unique="false">
+ <column name="PART_ID"/>
+ <column name="PRINCIPAL_NAME"/>
+ <column name="PRINCIPAL_TYPE"/>
+ <column name="PART_PRIV"/>
+ <column name="GRANTOR"/>
+ <column name="GRANTOR_TYPE"/>
+ </index>
+
+ <datastore-identity>
+ <column name="PART_GRANT_ID"/>
+ </datastore-identity>
+
+ <field name="principalName">
+ <column name="PRINCIPAL_NAME" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="principalType">
+ <column name="PRINCIPAL_TYPE" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="partition">
+ <column name="PART_ID" />
+ </field>
+ <field name="privilege">
+ <column name="PART_PRIV" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="createTime">
+ <column name="CREATE_TIME" jdbc-type="integer"/>
+ </field>
+ <field name="grantor">
+ <column name="GRANTOR" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="grantorType">
+ <column name="GRANTOR_TYPE" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="grantOption">
+ <column name="GRANT_OPTION" jdbc-type="SMALLINT"/>
+ </field>
+ </class>
+
+ <class name="MTableColumnPrivilege" table="TBL_COL_PRIVS" identity-type="datastore" detachable="true">
+
+ <index name="TableColumnPrivilegeIndex" unique="false">
+ <column name="TBL_ID"/>
+ <column name="COLUMN_NAME"/>
+ <column name="PRINCIPAL_NAME"/>
+ <column name="PRINCIPAL_TYPE"/>
+ <column name="TBL_COL_PRIV"/>
+ <column name="GRANTOR"/>
+ <column name="GRANTOR_TYPE"/>
+ </index>
+
+ <datastore-identity>
+ <column name="TBL_COLUMN_GRANT_ID"/>
+ </datastore-identity>
+
+ <field name="principalName">
+ <column name="PRINCIPAL_NAME" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="principalType">
+ <column name="PRINCIPAL_TYPE" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="table">
+ <column name="TBL_ID" />
+ </field>
+ <field name="columnName">
+ <column name="COLUMN_NAME" length="767" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="privilege">
+ <column name="TBL_COL_PRIV" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="createTime">
+ <column name="CREATE_TIME" jdbc-type="integer"/>
+ </field>
+ <field name="grantor">
+ <column name="GRANTOR" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="grantorType">
+ <column name="GRANTOR_TYPE" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="grantOption">
+ <column name="GRANT_OPTION" jdbc-type="SMALLINT"/>
+ </field>
+ </class>
+
+ <class name="MPartitionColumnPrivilege" table="PART_COL_PRIVS" identity-type="datastore" detachable="true">
+
+ <index name="PartitionColumnPrivilegeIndex" unique="false">
+ <column name="PART_ID"/>
+ <column name="COLUMN_NAME"/>
+ <column name="PRINCIPAL_NAME"/>
+ <column name="PRINCIPAL_TYPE"/>
+ <column name="PART_COL_PRIV"/>
+ <column name="GRANTOR"/>
+ <column name="GRANTOR_TYPE"/>
+ </index>
+
+ <datastore-identity>
+ <column name="PART_COLUMN_GRANT_ID"/>
+ </datastore-identity>
+
+ <field name="principalName">
+ <column name="PRINCIPAL_NAME" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="principalType">
+ <column name="PRINCIPAL_TYPE" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="partition">
+ <column name="PART_ID" />
+ </field>
+ <field name="columnName">
+ <column name="COLUMN_NAME" length="767" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="privilege">
+ <column name="PART_COL_PRIV" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="createTime">
+ <column name="CREATE_TIME" jdbc-type="integer"/>
+ </field>
+ <field name="grantor">
+ <column name="GRANTOR" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="grantorType">
+ <column name="GRANTOR_TYPE" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="grantOption">
+ <column name="GRANT_OPTION" jdbc-type="SMALLINT"/>
+ </field>
+ </class>
+
+ <class name="MPartitionEvent" table="PARTITION_EVENTS" identity-type="datastore" detachable="true">
+
+ <index name="PartitionEventIndex" unique="false">
+ <column name="PARTITION_NAME"/>
+ </index>
+
+ <datastore-identity>
+ <column name="PART_NAME_ID"/>
+ </datastore-identity>
+
+ <field name="dbName">
+ <column name="DB_NAME" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="tblName">
+ <column name="TBL_NAME" length="256" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="partName">
+ <column name="PARTITION_NAME" length="767" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="eventType">
+ <column name="EVENT_TYPE" jdbc-type="integer"/>
+ </field>
+ <field name="eventTime">
+ <column name="EVENT_TIME" jdbc-type="BIGINT"/>
+ </field>
+
+ </class>
+
+ <class name="MMasterKey" table="MASTER_KEYS" identity-type="application" detachable="true">
+
+ <field name="keyId" primary-key="true" value-strategy="native">
+ <column name="KEY_ID" jdbc-type="integer" />
+ </field>
+
+ <field name="masterKey">
+ <column name="MASTER_KEY" length="767" jdbc-type="VARCHAR" />
+ </field>
+
+ </class>
+
+ <class name="MDelegationToken" table="DELEGATION_TOKENS" identity-type="application" detachable="true">
+
+ <field name="tokenIdentifier" primary-key="true">
+ <column name="TOKEN_IDENT" length="767" jdbc-type="VARCHAR" />
+ </field>
+
+ <field name="tokenStr">
+ <column name="TOKEN" length="767" jdbc-type="VARCHAR" />
+ </field>
+
+ </class>
+
+ <class name="MTableColumnStatistics" table="TAB_COL_STATS" identity-type="datastore" detachable="true">
+ <datastore-identity>
+ <column name="CS_ID"/>
+ </datastore-identity>
+
+ <field name ="dbName">
+ <column name="DB_NAME" length="128" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ <field name="tableName">
+ <column name="TABLE_NAME" length="256" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ <field name="table">
+ <column name="TBL_ID"/>
+ </field>
+ <field name="colName">
+ <column name="COLUMN_NAME" length="767" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ <field name="colType">
+ <column name="COLUMN_TYPE" length="128" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ <field name="longLowValue">
+ <column name="LONG_LOW_VALUE" jdbc-type="BIGINT" allows-null="true"/>
+ </field>
+ <field name="longHighValue">
+ <column name="LONG_HIGH_VALUE" jdbc-type="BIGINT" allows-null="true"/>
+ </field>
+ <field name="doubleLowValue">
+ <column name="DOUBLE_LOW_VALUE" jdbc-type="DOUBLE" allows-null="true"/>
+ </field>
+ <field name="doubleHighValue">
+ <column name="DOUBLE_HIGH_VALUE" jdbc-type="DOUBLE" allows-null="true"/>
+ </field>
+ <field name="decimalLowValue">
+ <column name="BIG_DECIMAL_LOW_VALUE" jdbc-type="VARCHAR" allows-null="true"/>
+ </field>
+ <field name="decimalHighValue">
+ <column name="BIG_DECIMAL_HIGH_VALUE" jdbc-type="VARCHAR" allows-null="true"/>
+ </field>
+ <field name="numNulls">
+ <column name="NUM_NULLS" jdbc-type="BIGINT" allows-null="false"/>
+ </field>
+ <field name="numDVs">
+ <column name="NUM_DISTINCTS" jdbc-type="BIGINT" allows-null="true"/>
+ </field>
+ <field name="bitVector">
+ <column name="BIT_VECTOR" jdbc-type="BLOB" allows-null="true"/>
+ </field>
+ <field name="avgColLen">
+ <column name="AVG_COL_LEN" jdbc-type="DOUBLE" allows-null="true"/>
+ </field>
+ <field name="maxColLen">
+ <column name="MAX_COL_LEN" jdbc-type="BIGINT" allows-null="true"/>
+ </field>
+ <field name="numTrues">
+ <column name="NUM_TRUES" jdbc-type="BIGINT" allows-null="true"/>
+ </field>
+ <field name="numFalses">
+ <column name="NUM_FALSES" jdbc-type="BIGINT" allows-null="true"/>
+ </field>
+ <field name="lastAnalyzed">
+ <column name="LAST_ANALYZED" jdbc-type="BIGINT" allows-null="false"/>
+ </field>
+ </class>
+
+ <class name="MPartitionColumnStatistics" table="PART_COL_STATS" identity-type="datastore" detachable="true">
+ <datastore-identity>
+ <column name="CS_ID"/>
+ </datastore-identity>
+
+ <field name ="dbName">
+ <column name="DB_NAME" length="128" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ <field name="tableName">
+ <column name="TABLE_NAME" length="256" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ <field name="partitionName">
+ <column name="PARTITION_NAME" length="767" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ <field name="partition">
+ <column name="PART_ID"/>
+ </field>
+ <field name="colName">
+ <column name="COLUMN_NAME" length="767" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ <field name="colType">
+ <column name="COLUMN_TYPE" length="128" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ <field name="longLowValue">
+ <column name="LONG_LOW_VALUE" jdbc-type="BIGINT" allows-null="true"/>
+ </field>
+ <field name="longHighValue">
+ <column name="LONG_HIGH_VALUE" jdbc-type="BIGINT" allows-null="true"/>
+ </field>
+ <field name="doubleLowValue">
+ <column name="DOUBLE_LOW_VALUE" jdbc-type="DOUBLE" allows-null="true"/>
+ </field>
+ <field name="doubleHighValue">
+ <column name="DOUBLE_HIGH_VALUE" jdbc-type="DOUBLE" allows-null="true"/>
+ </field>
+ <field name="decimalLowValue">
+ <column name="BIG_DECIMAL_LOW_VALUE" jdbc-type="VARCHAR" allows-null="true"/>
+ </field>
+ <field name="decimalHighValue">
+ <column name="BIG_DECIMAL_HIGH_VALUE" jdbc-type="VARCHAR" allows-null="true"/>
+ </field>
+ <field name="numNulls">
+ <column name="NUM_NULLS" jdbc-type="BIGINT" allows-null="false"/>
+ </field>
+ <field name="numDVs">
+ <column name="NUM_DISTINCTS" jdbc-type="BIGINT" allows-null="true"/>
+ </field>
+ <field name="bitVector">
+ <column name="BIT_VECTOR" jdbc-type="BLOB" allows-null="true"/>
+ </field>
+ <field name="avgColLen">
+ <column name="AVG_COL_LEN" jdbc-type="DOUBLE" allows-null="true"/>
+ </field>
+ <field name="maxColLen">
+ <column name="MAX_COL_LEN" jdbc-type="BIGINT" allows-null="true"/>
+ </field>
+ <field name="numTrues">
+ <column name="NUM_TRUES" jdbc-type="BIGINT" allows-null="true"/>
+ </field>
+ <field name="numFalses">
+ <column name="NUM_FALSES" jdbc-type="BIGINT" allows-null="true"/>
+ </field>
+ <field name="lastAnalyzed">
+ <column name="LAST_ANALYZED" jdbc-type="BIGINT" allows-null="false"/>
+ </field>
+ </class>
+ <class name="MVersionTable" table="VERSION" identity-type="datastore" detachable="true">
+ <datastore-identity>
+ <column name="VER_ID"/>
+ </datastore-identity>
+ <field name ="schemaVersion">
+ <column name="SCHEMA_VERSION" length="127" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ <field name ="versionComment">
+ <column name="VERSION_COMMENT" length="255" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ </class>
+
+ <class name="MMetastoreDBProperties" table="METASTORE_DB_PROPERTIES" identity-type="application" detachable="true">
+ <field name ="propertyKey" primary-key="true">
+ <column name="PROPERTY_KEY" length="255" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ <field name ="propertyValue">
+ <column name="PROPERTY_VALUE" length="1000" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ <field name ="description">
+ <column name="DESCRIPTION" length="1000" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ </class>
+
+ <class name="MResourceUri" embedded-only="true" table="RESOURCE_URI" detachable="true">
+ <field name="resourceType">
+ <column name="RESOURCE_TYPE" jdbc-type="INTEGER"/>
+ </field>
+ <field name="uri">
+ <column name="RESOURCE_URI" length="4000" jdbc-type="VARCHAR"/>
+ </field>
+ </class>
+
+ <class name="MFunction" table="FUNCS" identity-type="datastore" detachable="true">
+ <datastore-identity>
+ <column name="FUNC_ID"/>
+ </datastore-identity>
+ <index name="UniqueFunction" unique="true">
+ <column name="FUNC_NAME"/>
+ <column name="DB_ID"/>
+ </index>
+ <field name="functionName">
+ <column name="FUNC_NAME" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="database">
+ <column name="DB_ID"/>
+ </field>
+ <field name="functionType">
+ <column name="FUNC_TYPE" jdbc-type="integer"/>
+ </field>
+ <field name="className">
+ <column name="CLASS_NAME" length="4000" jdbc-type="VARCHAR"/>
+ </field>
- <field name="ownerName">
++ <field name="ownerName">
+ <column name="OWNER_NAME" length="128" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="ownerType">
+ <column name="OWNER_TYPE" length="10" jdbc-type="VARCHAR"/>
+ </field>
+ <field name="createTime">
+ <column name="CREATE_TIME" jdbc-type="integer"/>
+ </field>
+ <field name="resourceUris" table="FUNC_RU">
+ <collection element-type="MResourceUri"/>
+ <join>
+ <column name="FUNC_ID"/>
+ </join>
+ <element>
+ <embedded>
+ <field name="resourceType">
+ <column name="RESOURCE_TYPE" jdbc-type="INTEGER"/>
+ </field>
+ <field name="uri">
+ <column name="RESOURCE_URI" length="4000" jdbc-type="VARCHAR"/>
+ </field>
+ </embedded>
+ </element>
+ </field>
+ </class>
+
+ <class name="MNotificationLog" table="NOTIFICATION_LOG" identity-type="datastore" detachable="true">
+ <datastore-identity>
+ <column name="NL_ID"/>
+ </datastore-identity>
+ <field name="eventId">
+ <column name="EVENT_ID" jdbc-type="BIGINT" allows-null="false"/>
+ </field>
+ <field name="eventTime">
+ <column name="EVENT_TIME" jdbc-type="INTEGER" allows-null="false"/>
+ </field>
+ <field name="eventType">
+ <column name="EVENT_TYPE" length="32" jdbc-type="VARCHAR" allows-null="false"/>
+ </field>
+ <field name="dbName">
+ <column name="DB_NAME" length="128" jdbc-type="VARCHAR" allows-null="true"/>
+ </field>
+ <field name="tableName">
+ <column name="TBL_NAME" length="256" jdbc-type="VARCHAR" allows-null="true"/>
+ </field>
+ <field name="message">
+ <column name="MESSAGE" jdbc-type="LONGVARCHAR"/>
+ </field>
+ <field name="messageFormat">
+ <column name="MESSAGE_FORMAT" length="16" jdbc-type="VARCHAR" allows-null="true"/>
+ </field>
+ </class>
+
+ <!-- I tried to use a sequence here but derby didn't handle it well. -->
+ <class name="MNotificationNextId" table="NOTIFICATION_SEQUENCE" identity-type="datastore" detachable="true">
+ <datastore-identity>
+ <column name="NNI_ID"/>
+ </datastore-identity>
+ <field name="nextEventId">
+ <column name="NEXT_EVENT_ID" jdbc-type="BIGINT" allows-null="false"/>
+ </field>
+ </class>
+
-
+ </package>
+ </jdo>
+
[10/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Wei Zheng)
Posted by se...@apache.org.
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/standalone-metastore/src/gen/thrift/gen-php/metastore/Types.php
----------------------------------------------------------------------
diff --cc standalone-metastore/src/gen/thrift/gen-php/metastore/Types.php
index 0000000,f0f0a57..71c2cef
mode 000000,100644..100644
--- a/standalone-metastore/src/gen/thrift/gen-php/metastore/Types.php
+++ b/standalone-metastore/src/gen/thrift/gen-php/metastore/Types.php
@@@ -1,0 -1,21260 +1,21262 @@@
+ <?php
+ namespace metastore;
+
+ /**
+ * Autogenerated by Thrift Compiler (0.9.3)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ * @generated
+ */
+ use Thrift\Base\TBase;
+ use Thrift\Type\TType;
+ use Thrift\Type\TMessageType;
+ use Thrift\Exception\TException;
+ use Thrift\Exception\TProtocolException;
+ use Thrift\Protocol\TProtocol;
+ use Thrift\Protocol\TBinaryProtocolAccelerated;
+ use Thrift\Exception\TApplicationException;
+
+
+ final class HiveObjectType {
+ const GLOBAL = 1;
+ const DATABASE = 2;
+ const TABLE = 3;
+ const PARTITION = 4;
+ const COLUMN = 5;
+ static public $__names = array(
+ 1 => 'GLOBAL',
+ 2 => 'DATABASE',
+ 3 => 'TABLE',
+ 4 => 'PARTITION',
+ 5 => 'COLUMN',
+ );
+ }
+
+ final class PrincipalType {
+ const USER = 1;
+ const ROLE = 2;
+ const GROUP = 3;
+ static public $__names = array(
+ 1 => 'USER',
+ 2 => 'ROLE',
+ 3 => 'GROUP',
+ );
+ }
+
+ final class PartitionEventType {
+ const LOAD_DONE = 1;
+ static public $__names = array(
+ 1 => 'LOAD_DONE',
+ );
+ }
+
+ final class TxnState {
+ const COMMITTED = 1;
+ const ABORTED = 2;
+ const OPEN = 3;
+ static public $__names = array(
+ 1 => 'COMMITTED',
+ 2 => 'ABORTED',
+ 3 => 'OPEN',
+ );
+ }
+
+ final class LockLevel {
+ const DB = 1;
+ const TABLE = 2;
+ const PARTITION = 3;
+ static public $__names = array(
+ 1 => 'DB',
+ 2 => 'TABLE',
+ 3 => 'PARTITION',
+ );
+ }
+
+ final class LockState {
+ const ACQUIRED = 1;
+ const WAITING = 2;
+ const ABORT = 3;
+ const NOT_ACQUIRED = 4;
+ static public $__names = array(
+ 1 => 'ACQUIRED',
+ 2 => 'WAITING',
+ 3 => 'ABORT',
+ 4 => 'NOT_ACQUIRED',
+ );
+ }
+
+ final class LockType {
+ const SHARED_READ = 1;
+ const SHARED_WRITE = 2;
+ const EXCLUSIVE = 3;
+ static public $__names = array(
+ 1 => 'SHARED_READ',
+ 2 => 'SHARED_WRITE',
+ 3 => 'EXCLUSIVE',
+ );
+ }
+
+ final class CompactionType {
+ const MINOR = 1;
+ const MAJOR = 2;
+ static public $__names = array(
+ 1 => 'MINOR',
+ 2 => 'MAJOR',
+ );
+ }
+
+ final class GrantRevokeType {
+ const GRANT = 1;
+ const REVOKE = 2;
+ static public $__names = array(
+ 1 => 'GRANT',
+ 2 => 'REVOKE',
+ );
+ }
+
+ final class DataOperationType {
+ const SELECT = 1;
+ const INSERT = 2;
+ const UPDATE = 3;
+ const DELETE = 4;
+ const UNSET = 5;
+ const NO_TXN = 6;
+ static public $__names = array(
+ 1 => 'SELECT',
+ 2 => 'INSERT',
+ 3 => 'UPDATE',
+ 4 => 'DELETE',
+ 5 => 'UNSET',
+ 6 => 'NO_TXN',
+ );
+ }
+
+ final class EventRequestType {
+ const INSERT = 1;
+ const UPDATE = 2;
+ const DELETE = 3;
+ static public $__names = array(
+ 1 => 'INSERT',
+ 2 => 'UPDATE',
+ 3 => 'DELETE',
+ );
+ }
+
+ final class FunctionType {
+ const JAVA = 1;
+ static public $__names = array(
+ 1 => 'JAVA',
+ );
+ }
+
+ final class ResourceType {
+ const JAR = 1;
+ const FILE = 2;
+ const ARCHIVE = 3;
+ static public $__names = array(
+ 1 => 'JAR',
+ 2 => 'FILE',
+ 3 => 'ARCHIVE',
+ );
+ }
+
+ final class FileMetadataExprType {
+ const ORC_SARG = 1;
+ static public $__names = array(
+ 1 => 'ORC_SARG',
+ );
+ }
+
+ final class ClientCapability {
+ const TEST_CAPABILITY = 1;
++ const INSERT_ONLY_TABLES = 2;
+ static public $__names = array(
+ 1 => 'TEST_CAPABILITY',
++ 2 => 'INSERT_ONLY_TABLES',
+ );
+ }
+
+ class Version {
+ static $_TSPEC;
+
+ /**
+ * @var string
+ */
+ public $version = null;
+ /**
+ * @var string
+ */
+ public $comments = null;
+
+ public function __construct($vals=null) {
+ if (!isset(self::$_TSPEC)) {
+ self::$_TSPEC = array(
+ 1 => array(
+ 'var' => 'version',
+ 'type' => TType::STRING,
+ ),
+ 2 => array(
+ 'var' => 'comments',
+ 'type' => TType::STRING,
+ ),
+ );
+ }
+ if (is_array($vals)) {
+ if (isset($vals['version'])) {
+ $this->version = $vals['version'];
+ }
+ if (isset($vals['comments'])) {
+ $this->comments = $vals['comments'];
+ }
+ }
+ }
+
+ public function getName() {
+ return 'Version';
+ }
+
+ public function read($input)
+ {
+ $xfer = 0;
+ $fname = null;
+ $ftype = 0;
+ $fid = 0;
+ $xfer += $input->readStructBegin($fname);
+ while (true)
+ {
+ $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+ if ($ftype == TType::STOP) {
+ break;
+ }
+ switch ($fid)
+ {
+ case 1:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->version);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 2:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->comments);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ default:
+ $xfer += $input->skip($ftype);
+ break;
+ }
+ $xfer += $input->readFieldEnd();
+ }
+ $xfer += $input->readStructEnd();
+ return $xfer;
+ }
+
+ public function write($output) {
+ $xfer = 0;
+ $xfer += $output->writeStructBegin('Version');
+ if ($this->version !== null) {
+ $xfer += $output->writeFieldBegin('version', TType::STRING, 1);
+ $xfer += $output->writeString($this->version);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->comments !== null) {
+ $xfer += $output->writeFieldBegin('comments', TType::STRING, 2);
+ $xfer += $output->writeString($this->comments);
+ $xfer += $output->writeFieldEnd();
+ }
+ $xfer += $output->writeFieldStop();
+ $xfer += $output->writeStructEnd();
+ return $xfer;
+ }
+
+ }
+
+ class FieldSchema {
+ static $_TSPEC;
+
+ /**
+ * @var string
+ */
+ public $name = null;
+ /**
+ * @var string
+ */
+ public $type = null;
+ /**
+ * @var string
+ */
+ public $comment = null;
+
+ public function __construct($vals=null) {
+ if (!isset(self::$_TSPEC)) {
+ self::$_TSPEC = array(
+ 1 => array(
+ 'var' => 'name',
+ 'type' => TType::STRING,
+ ),
+ 2 => array(
+ 'var' => 'type',
+ 'type' => TType::STRING,
+ ),
+ 3 => array(
+ 'var' => 'comment',
+ 'type' => TType::STRING,
+ ),
+ );
+ }
+ if (is_array($vals)) {
+ if (isset($vals['name'])) {
+ $this->name = $vals['name'];
+ }
+ if (isset($vals['type'])) {
+ $this->type = $vals['type'];
+ }
+ if (isset($vals['comment'])) {
+ $this->comment = $vals['comment'];
+ }
+ }
+ }
+
+ public function getName() {
+ return 'FieldSchema';
+ }
+
+ public function read($input)
+ {
+ $xfer = 0;
+ $fname = null;
+ $ftype = 0;
+ $fid = 0;
+ $xfer += $input->readStructBegin($fname);
+ while (true)
+ {
+ $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+ if ($ftype == TType::STOP) {
+ break;
+ }
+ switch ($fid)
+ {
+ case 1:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->name);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 2:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->type);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 3:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->comment);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ default:
+ $xfer += $input->skip($ftype);
+ break;
+ }
+ $xfer += $input->readFieldEnd();
+ }
+ $xfer += $input->readStructEnd();
+ return $xfer;
+ }
+
+ public function write($output) {
+ $xfer = 0;
+ $xfer += $output->writeStructBegin('FieldSchema');
+ if ($this->name !== null) {
+ $xfer += $output->writeFieldBegin('name', TType::STRING, 1);
+ $xfer += $output->writeString($this->name);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->type !== null) {
+ $xfer += $output->writeFieldBegin('type', TType::STRING, 2);
+ $xfer += $output->writeString($this->type);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->comment !== null) {
+ $xfer += $output->writeFieldBegin('comment', TType::STRING, 3);
+ $xfer += $output->writeString($this->comment);
+ $xfer += $output->writeFieldEnd();
+ }
+ $xfer += $output->writeFieldStop();
+ $xfer += $output->writeStructEnd();
+ return $xfer;
+ }
+
+ }
+
+ class SQLPrimaryKey {
+ static $_TSPEC;
+
+ /**
+ * @var string
+ */
+ public $table_db = null;
+ /**
+ * @var string
+ */
+ public $table_name = null;
+ /**
+ * @var string
+ */
+ public $column_name = null;
+ /**
+ * @var int
+ */
+ public $key_seq = null;
+ /**
+ * @var string
+ */
+ public $pk_name = null;
+ /**
+ * @var bool
+ */
+ public $enable_cstr = null;
+ /**
+ * @var bool
+ */
+ public $validate_cstr = null;
+ /**
+ * @var bool
+ */
+ public $rely_cstr = null;
+
+ public function __construct($vals=null) {
+ if (!isset(self::$_TSPEC)) {
+ self::$_TSPEC = array(
+ 1 => array(
+ 'var' => 'table_db',
+ 'type' => TType::STRING,
+ ),
+ 2 => array(
+ 'var' => 'table_name',
+ 'type' => TType::STRING,
+ ),
+ 3 => array(
+ 'var' => 'column_name',
+ 'type' => TType::STRING,
+ ),
+ 4 => array(
+ 'var' => 'key_seq',
+ 'type' => TType::I32,
+ ),
+ 5 => array(
+ 'var' => 'pk_name',
+ 'type' => TType::STRING,
+ ),
+ 6 => array(
+ 'var' => 'enable_cstr',
+ 'type' => TType::BOOL,
+ ),
+ 7 => array(
+ 'var' => 'validate_cstr',
+ 'type' => TType::BOOL,
+ ),
+ 8 => array(
+ 'var' => 'rely_cstr',
+ 'type' => TType::BOOL,
+ ),
+ );
+ }
+ if (is_array($vals)) {
+ if (isset($vals['table_db'])) {
+ $this->table_db = $vals['table_db'];
+ }
+ if (isset($vals['table_name'])) {
+ $this->table_name = $vals['table_name'];
+ }
+ if (isset($vals['column_name'])) {
+ $this->column_name = $vals['column_name'];
+ }
+ if (isset($vals['key_seq'])) {
+ $this->key_seq = $vals['key_seq'];
+ }
+ if (isset($vals['pk_name'])) {
+ $this->pk_name = $vals['pk_name'];
+ }
+ if (isset($vals['enable_cstr'])) {
+ $this->enable_cstr = $vals['enable_cstr'];
+ }
+ if (isset($vals['validate_cstr'])) {
+ $this->validate_cstr = $vals['validate_cstr'];
+ }
+ if (isset($vals['rely_cstr'])) {
+ $this->rely_cstr = $vals['rely_cstr'];
+ }
+ }
+ }
+
+ public function getName() {
+ return 'SQLPrimaryKey';
+ }
+
+ public function read($input)
+ {
+ $xfer = 0;
+ $fname = null;
+ $ftype = 0;
+ $fid = 0;
+ $xfer += $input->readStructBegin($fname);
+ while (true)
+ {
+ $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+ if ($ftype == TType::STOP) {
+ break;
+ }
+ switch ($fid)
+ {
+ case 1:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->table_db);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 2:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->table_name);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 3:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->column_name);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 4:
+ if ($ftype == TType::I32) {
+ $xfer += $input->readI32($this->key_seq);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 5:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->pk_name);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 6:
+ if ($ftype == TType::BOOL) {
+ $xfer += $input->readBool($this->enable_cstr);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 7:
+ if ($ftype == TType::BOOL) {
+ $xfer += $input->readBool($this->validate_cstr);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 8:
+ if ($ftype == TType::BOOL) {
+ $xfer += $input->readBool($this->rely_cstr);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ default:
+ $xfer += $input->skip($ftype);
+ break;
+ }
+ $xfer += $input->readFieldEnd();
+ }
+ $xfer += $input->readStructEnd();
+ return $xfer;
+ }
+
+ public function write($output) {
+ $xfer = 0;
+ $xfer += $output->writeStructBegin('SQLPrimaryKey');
+ if ($this->table_db !== null) {
+ $xfer += $output->writeFieldBegin('table_db', TType::STRING, 1);
+ $xfer += $output->writeString($this->table_db);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->table_name !== null) {
+ $xfer += $output->writeFieldBegin('table_name', TType::STRING, 2);
+ $xfer += $output->writeString($this->table_name);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->column_name !== null) {
+ $xfer += $output->writeFieldBegin('column_name', TType::STRING, 3);
+ $xfer += $output->writeString($this->column_name);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->key_seq !== null) {
+ $xfer += $output->writeFieldBegin('key_seq', TType::I32, 4);
+ $xfer += $output->writeI32($this->key_seq);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->pk_name !== null) {
+ $xfer += $output->writeFieldBegin('pk_name', TType::STRING, 5);
+ $xfer += $output->writeString($this->pk_name);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->enable_cstr !== null) {
+ $xfer += $output->writeFieldBegin('enable_cstr', TType::BOOL, 6);
+ $xfer += $output->writeBool($this->enable_cstr);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->validate_cstr !== null) {
+ $xfer += $output->writeFieldBegin('validate_cstr', TType::BOOL, 7);
+ $xfer += $output->writeBool($this->validate_cstr);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->rely_cstr !== null) {
+ $xfer += $output->writeFieldBegin('rely_cstr', TType::BOOL, 8);
+ $xfer += $output->writeBool($this->rely_cstr);
+ $xfer += $output->writeFieldEnd();
+ }
+ $xfer += $output->writeFieldStop();
+ $xfer += $output->writeStructEnd();
+ return $xfer;
+ }
+
+ }
+
+ class SQLForeignKey {
+ static $_TSPEC;
+
+ /**
+ * @var string
+ */
+ public $pktable_db = null;
+ /**
+ * @var string
+ */
+ public $pktable_name = null;
+ /**
+ * @var string
+ */
+ public $pkcolumn_name = null;
+ /**
+ * @var string
+ */
+ public $fktable_db = null;
+ /**
+ * @var string
+ */
+ public $fktable_name = null;
+ /**
+ * @var string
+ */
+ public $fkcolumn_name = null;
+ /**
+ * @var int
+ */
+ public $key_seq = null;
+ /**
+ * @var int
+ */
+ public $update_rule = null;
+ /**
+ * @var int
+ */
+ public $delete_rule = null;
+ /**
+ * @var string
+ */
+ public $fk_name = null;
+ /**
+ * @var string
+ */
+ public $pk_name = null;
+ /**
+ * @var bool
+ */
+ public $enable_cstr = null;
+ /**
+ * @var bool
+ */
+ public $validate_cstr = null;
+ /**
+ * @var bool
+ */
+ public $rely_cstr = null;
+
+ public function __construct($vals=null) {
+ if (!isset(self::$_TSPEC)) {
+ self::$_TSPEC = array(
+ 1 => array(
+ 'var' => 'pktable_db',
+ 'type' => TType::STRING,
+ ),
+ 2 => array(
+ 'var' => 'pktable_name',
+ 'type' => TType::STRING,
+ ),
+ 3 => array(
+ 'var' => 'pkcolumn_name',
+ 'type' => TType::STRING,
+ ),
+ 4 => array(
+ 'var' => 'fktable_db',
+ 'type' => TType::STRING,
+ ),
+ 5 => array(
+ 'var' => 'fktable_name',
+ 'type' => TType::STRING,
+ ),
+ 6 => array(
+ 'var' => 'fkcolumn_name',
+ 'type' => TType::STRING,
+ ),
+ 7 => array(
+ 'var' => 'key_seq',
+ 'type' => TType::I32,
+ ),
+ 8 => array(
+ 'var' => 'update_rule',
+ 'type' => TType::I32,
+ ),
+ 9 => array(
+ 'var' => 'delete_rule',
+ 'type' => TType::I32,
+ ),
+ 10 => array(
+ 'var' => 'fk_name',
+ 'type' => TType::STRING,
+ ),
+ 11 => array(
+ 'var' => 'pk_name',
+ 'type' => TType::STRING,
+ ),
+ 12 => array(
+ 'var' => 'enable_cstr',
+ 'type' => TType::BOOL,
+ ),
+ 13 => array(
+ 'var' => 'validate_cstr',
+ 'type' => TType::BOOL,
+ ),
+ 14 => array(
+ 'var' => 'rely_cstr',
+ 'type' => TType::BOOL,
+ ),
+ );
+ }
+ if (is_array($vals)) {
+ if (isset($vals['pktable_db'])) {
+ $this->pktable_db = $vals['pktable_db'];
+ }
+ if (isset($vals['pktable_name'])) {
+ $this->pktable_name = $vals['pktable_name'];
+ }
+ if (isset($vals['pkcolumn_name'])) {
+ $this->pkcolumn_name = $vals['pkcolumn_name'];
+ }
+ if (isset($vals['fktable_db'])) {
+ $this->fktable_db = $vals['fktable_db'];
+ }
+ if (isset($vals['fktable_name'])) {
+ $this->fktable_name = $vals['fktable_name'];
+ }
+ if (isset($vals['fkcolumn_name'])) {
+ $this->fkcolumn_name = $vals['fkcolumn_name'];
+ }
+ if (isset($vals['key_seq'])) {
+ $this->key_seq = $vals['key_seq'];
+ }
+ if (isset($vals['update_rule'])) {
+ $this->update_rule = $vals['update_rule'];
+ }
+ if (isset($vals['delete_rule'])) {
+ $this->delete_rule = $vals['delete_rule'];
+ }
+ if (isset($vals['fk_name'])) {
+ $this->fk_name = $vals['fk_name'];
+ }
+ if (isset($vals['pk_name'])) {
+ $this->pk_name = $vals['pk_name'];
+ }
+ if (isset($vals['enable_cstr'])) {
+ $this->enable_cstr = $vals['enable_cstr'];
+ }
+ if (isset($vals['validate_cstr'])) {
+ $this->validate_cstr = $vals['validate_cstr'];
+ }
+ if (isset($vals['rely_cstr'])) {
+ $this->rely_cstr = $vals['rely_cstr'];
+ }
+ }
+ }
+
+ public function getName() {
+ return 'SQLForeignKey';
+ }
+
+ public function read($input)
+ {
+ $xfer = 0;
+ $fname = null;
+ $ftype = 0;
+ $fid = 0;
+ $xfer += $input->readStructBegin($fname);
+ while (true)
+ {
+ $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+ if ($ftype == TType::STOP) {
+ break;
+ }
+ switch ($fid)
+ {
+ case 1:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->pktable_db);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 2:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->pktable_name);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 3:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->pkcolumn_name);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 4:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->fktable_db);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 5:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->fktable_name);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 6:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->fkcolumn_name);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 7:
+ if ($ftype == TType::I32) {
+ $xfer += $input->readI32($this->key_seq);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 8:
+ if ($ftype == TType::I32) {
+ $xfer += $input->readI32($this->update_rule);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 9:
+ if ($ftype == TType::I32) {
+ $xfer += $input->readI32($this->delete_rule);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 10:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->fk_name);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 11:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->pk_name);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 12:
+ if ($ftype == TType::BOOL) {
+ $xfer += $input->readBool($this->enable_cstr);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 13:
+ if ($ftype == TType::BOOL) {
+ $xfer += $input->readBool($this->validate_cstr);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 14:
+ if ($ftype == TType::BOOL) {
+ $xfer += $input->readBool($this->rely_cstr);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ default:
+ $xfer += $input->skip($ftype);
+ break;
+ }
+ $xfer += $input->readFieldEnd();
+ }
+ $xfer += $input->readStructEnd();
+ return $xfer;
+ }
+
+ public function write($output) {
+ $xfer = 0;
+ $xfer += $output->writeStructBegin('SQLForeignKey');
+ if ($this->pktable_db !== null) {
+ $xfer += $output->writeFieldBegin('pktable_db', TType::STRING, 1);
+ $xfer += $output->writeString($this->pktable_db);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->pktable_name !== null) {
+ $xfer += $output->writeFieldBegin('pktable_name', TType::STRING, 2);
+ $xfer += $output->writeString($this->pktable_name);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->pkcolumn_name !== null) {
+ $xfer += $output->writeFieldBegin('pkcolumn_name', TType::STRING, 3);
+ $xfer += $output->writeString($this->pkcolumn_name);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->fktable_db !== null) {
+ $xfer += $output->writeFieldBegin('fktable_db', TType::STRING, 4);
+ $xfer += $output->writeString($this->fktable_db);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->fktable_name !== null) {
+ $xfer += $output->writeFieldBegin('fktable_name', TType::STRING, 5);
+ $xfer += $output->writeString($this->fktable_name);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->fkcolumn_name !== null) {
+ $xfer += $output->writeFieldBegin('fkcolumn_name', TType::STRING, 6);
+ $xfer += $output->writeString($this->fkcolumn_name);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->key_seq !== null) {
+ $xfer += $output->writeFieldBegin('key_seq', TType::I32, 7);
+ $xfer += $output->writeI32($this->key_seq);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->update_rule !== null) {
+ $xfer += $output->writeFieldBegin('update_rule', TType::I32, 8);
+ $xfer += $output->writeI32($this->update_rule);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->delete_rule !== null) {
+ $xfer += $output->writeFieldBegin('delete_rule', TType::I32, 9);
+ $xfer += $output->writeI32($this->delete_rule);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->fk_name !== null) {
+ $xfer += $output->writeFieldBegin('fk_name', TType::STRING, 10);
+ $xfer += $output->writeString($this->fk_name);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->pk_name !== null) {
+ $xfer += $output->writeFieldBegin('pk_name', TType::STRING, 11);
+ $xfer += $output->writeString($this->pk_name);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->enable_cstr !== null) {
+ $xfer += $output->writeFieldBegin('enable_cstr', TType::BOOL, 12);
+ $xfer += $output->writeBool($this->enable_cstr);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->validate_cstr !== null) {
+ $xfer += $output->writeFieldBegin('validate_cstr', TType::BOOL, 13);
+ $xfer += $output->writeBool($this->validate_cstr);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->rely_cstr !== null) {
+ $xfer += $output->writeFieldBegin('rely_cstr', TType::BOOL, 14);
+ $xfer += $output->writeBool($this->rely_cstr);
+ $xfer += $output->writeFieldEnd();
+ }
+ $xfer += $output->writeFieldStop();
+ $xfer += $output->writeStructEnd();
+ return $xfer;
+ }
+
+ }
+
+ class SQLUniqueConstraint {
+ static $_TSPEC;
+
+ /**
+ * @var string
+ */
+ public $table_db = null;
+ /**
+ * @var string
+ */
+ public $table_name = null;
+ /**
+ * @var string
+ */
+ public $column_name = null;
+ /**
+ * @var int
+ */
+ public $key_seq = null;
+ /**
+ * @var string
+ */
+ public $uk_name = null;
+ /**
+ * @var bool
+ */
+ public $enable_cstr = null;
+ /**
+ * @var bool
+ */
+ public $validate_cstr = null;
+ /**
+ * @var bool
+ */
+ public $rely_cstr = null;
+
+ public function __construct($vals=null) {
+ if (!isset(self::$_TSPEC)) {
+ self::$_TSPEC = array(
+ 1 => array(
+ 'var' => 'table_db',
+ 'type' => TType::STRING,
+ ),
+ 2 => array(
+ 'var' => 'table_name',
+ 'type' => TType::STRING,
+ ),
+ 3 => array(
+ 'var' => 'column_name',
+ 'type' => TType::STRING,
+ ),
+ 4 => array(
+ 'var' => 'key_seq',
+ 'type' => TType::I32,
+ ),
+ 5 => array(
+ 'var' => 'uk_name',
+ 'type' => TType::STRING,
+ ),
+ 6 => array(
+ 'var' => 'enable_cstr',
+ 'type' => TType::BOOL,
+ ),
+ 7 => array(
+ 'var' => 'validate_cstr',
+ 'type' => TType::BOOL,
+ ),
+ 8 => array(
+ 'var' => 'rely_cstr',
+ 'type' => TType::BOOL,
+ ),
+ );
+ }
+ if (is_array($vals)) {
+ if (isset($vals['table_db'])) {
+ $this->table_db = $vals['table_db'];
+ }
+ if (isset($vals['table_name'])) {
+ $this->table_name = $vals['table_name'];
+ }
+ if (isset($vals['column_name'])) {
+ $this->column_name = $vals['column_name'];
+ }
+ if (isset($vals['key_seq'])) {
+ $this->key_seq = $vals['key_seq'];
+ }
+ if (isset($vals['uk_name'])) {
+ $this->uk_name = $vals['uk_name'];
+ }
+ if (isset($vals['enable_cstr'])) {
+ $this->enable_cstr = $vals['enable_cstr'];
+ }
+ if (isset($vals['validate_cstr'])) {
+ $this->validate_cstr = $vals['validate_cstr'];
+ }
+ if (isset($vals['rely_cstr'])) {
+ $this->rely_cstr = $vals['rely_cstr'];
+ }
+ }
+ }
+
+ public function getName() {
+ return 'SQLUniqueConstraint';
+ }
+
+ public function read($input)
+ {
+ $xfer = 0;
+ $fname = null;
+ $ftype = 0;
+ $fid = 0;
+ $xfer += $input->readStructBegin($fname);
+ while (true)
+ {
+ $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+ if ($ftype == TType::STOP) {
+ break;
+ }
+ switch ($fid)
+ {
+ case 1:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->table_db);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 2:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->table_name);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 3:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->column_name);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 4:
+ if ($ftype == TType::I32) {
+ $xfer += $input->readI32($this->key_seq);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 5:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->uk_name);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 6:
+ if ($ftype == TType::BOOL) {
+ $xfer += $input->readBool($this->enable_cstr);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 7:
+ if ($ftype == TType::BOOL) {
+ $xfer += $input->readBool($this->validate_cstr);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 8:
+ if ($ftype == TType::BOOL) {
+ $xfer += $input->readBool($this->rely_cstr);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ default:
+ $xfer += $input->skip($ftype);
+ break;
+ }
+ $xfer += $input->readFieldEnd();
+ }
+ $xfer += $input->readStructEnd();
+ return $xfer;
+ }
+
+ public function write($output) {
+ $xfer = 0;
+ $xfer += $output->writeStructBegin('SQLUniqueConstraint');
+ if ($this->table_db !== null) {
+ $xfer += $output->writeFieldBegin('table_db', TType::STRING, 1);
+ $xfer += $output->writeString($this->table_db);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->table_name !== null) {
+ $xfer += $output->writeFieldBegin('table_name', TType::STRING, 2);
+ $xfer += $output->writeString($this->table_name);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->column_name !== null) {
+ $xfer += $output->writeFieldBegin('column_name', TType::STRING, 3);
+ $xfer += $output->writeString($this->column_name);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->key_seq !== null) {
+ $xfer += $output->writeFieldBegin('key_seq', TType::I32, 4);
+ $xfer += $output->writeI32($this->key_seq);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->uk_name !== null) {
+ $xfer += $output->writeFieldBegin('uk_name', TType::STRING, 5);
+ $xfer += $output->writeString($this->uk_name);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->enable_cstr !== null) {
+ $xfer += $output->writeFieldBegin('enable_cstr', TType::BOOL, 6);
+ $xfer += $output->writeBool($this->enable_cstr);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->validate_cstr !== null) {
+ $xfer += $output->writeFieldBegin('validate_cstr', TType::BOOL, 7);
+ $xfer += $output->writeBool($this->validate_cstr);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->rely_cstr !== null) {
+ $xfer += $output->writeFieldBegin('rely_cstr', TType::BOOL, 8);
+ $xfer += $output->writeBool($this->rely_cstr);
+ $xfer += $output->writeFieldEnd();
+ }
+ $xfer += $output->writeFieldStop();
+ $xfer += $output->writeStructEnd();
+ return $xfer;
+ }
+
+ }
+
+ class SQLNotNullConstraint {
+ static $_TSPEC;
+
+ /**
+ * @var string
+ */
+ public $table_db = null;
+ /**
+ * @var string
+ */
+ public $table_name = null;
+ /**
+ * @var string
+ */
+ public $column_name = null;
+ /**
+ * @var string
+ */
+ public $nn_name = null;
+ /**
+ * @var bool
+ */
+ public $enable_cstr = null;
+ /**
+ * @var bool
+ */
+ public $validate_cstr = null;
+ /**
+ * @var bool
+ */
+ public $rely_cstr = null;
+
+ public function __construct($vals=null) {
+ if (!isset(self::$_TSPEC)) {
+ self::$_TSPEC = array(
+ 1 => array(
+ 'var' => 'table_db',
+ 'type' => TType::STRING,
+ ),
+ 2 => array(
+ 'var' => 'table_name',
+ 'type' => TType::STRING,
+ ),
+ 3 => array(
+ 'var' => 'column_name',
+ 'type' => TType::STRING,
+ ),
+ 4 => array(
+ 'var' => 'nn_name',
+ 'type' => TType::STRING,
+ ),
+ 5 => array(
+ 'var' => 'enable_cstr',
+ 'type' => TType::BOOL,
+ ),
+ 6 => array(
+ 'var' => 'validate_cstr',
+ 'type' => TType::BOOL,
+ ),
+ 7 => array(
+ 'var' => 'rely_cstr',
+ 'type' => TType::BOOL,
+ ),
+ );
+ }
+ if (is_array($vals)) {
+ if (isset($vals['table_db'])) {
+ $this->table_db = $vals['table_db'];
+ }
+ if (isset($vals['table_name'])) {
+ $this->table_name = $vals['table_name'];
+ }
+ if (isset($vals['column_name'])) {
+ $this->column_name = $vals['column_name'];
+ }
+ if (isset($vals['nn_name'])) {
+ $this->nn_name = $vals['nn_name'];
+ }
+ if (isset($vals['enable_cstr'])) {
+ $this->enable_cstr = $vals['enable_cstr'];
+ }
+ if (isset($vals['validate_cstr'])) {
+ $this->validate_cstr = $vals['validate_cstr'];
+ }
+ if (isset($vals['rely_cstr'])) {
+ $this->rely_cstr = $vals['rely_cstr'];
+ }
+ }
+ }
+
+ public function getName() {
+ return 'SQLNotNullConstraint';
+ }
+
+ public function read($input)
+ {
+ $xfer = 0;
+ $fname = null;
+ $ftype = 0;
+ $fid = 0;
+ $xfer += $input->readStructBegin($fname);
+ while (true)
+ {
+ $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+ if ($ftype == TType::STOP) {
+ break;
+ }
+ switch ($fid)
+ {
+ case 1:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->table_db);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 2:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->table_name);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 3:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->column_name);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 4:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->nn_name);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 5:
+ if ($ftype == TType::BOOL) {
+ $xfer += $input->readBool($this->enable_cstr);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 6:
+ if ($ftype == TType::BOOL) {
+ $xfer += $input->readBool($this->validate_cstr);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 7:
+ if ($ftype == TType::BOOL) {
+ $xfer += $input->readBool($this->rely_cstr);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ default:
+ $xfer += $input->skip($ftype);
+ break;
+ }
+ $xfer += $input->readFieldEnd();
+ }
+ $xfer += $input->readStructEnd();
+ return $xfer;
+ }
+
+ public function write($output) {
+ $xfer = 0;
+ $xfer += $output->writeStructBegin('SQLNotNullConstraint');
+ if ($this->table_db !== null) {
+ $xfer += $output->writeFieldBegin('table_db', TType::STRING, 1);
+ $xfer += $output->writeString($this->table_db);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->table_name !== null) {
+ $xfer += $output->writeFieldBegin('table_name', TType::STRING, 2);
+ $xfer += $output->writeString($this->table_name);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->column_name !== null) {
+ $xfer += $output->writeFieldBegin('column_name', TType::STRING, 3);
+ $xfer += $output->writeString($this->column_name);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->nn_name !== null) {
+ $xfer += $output->writeFieldBegin('nn_name', TType::STRING, 4);
+ $xfer += $output->writeString($this->nn_name);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->enable_cstr !== null) {
+ $xfer += $output->writeFieldBegin('enable_cstr', TType::BOOL, 5);
+ $xfer += $output->writeBool($this->enable_cstr);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->validate_cstr !== null) {
+ $xfer += $output->writeFieldBegin('validate_cstr', TType::BOOL, 6);
+ $xfer += $output->writeBool($this->validate_cstr);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->rely_cstr !== null) {
+ $xfer += $output->writeFieldBegin('rely_cstr', TType::BOOL, 7);
+ $xfer += $output->writeBool($this->rely_cstr);
+ $xfer += $output->writeFieldEnd();
+ }
+ $xfer += $output->writeFieldStop();
+ $xfer += $output->writeStructEnd();
+ return $xfer;
+ }
+
+ }
+
+ class Type {
+ static $_TSPEC;
+
+ /**
+ * @var string
+ */
+ public $name = null;
+ /**
+ * @var string
+ */
+ public $type1 = null;
+ /**
+ * @var string
+ */
+ public $type2 = null;
+ /**
+ * @var \metastore\FieldSchema[]
+ */
+ public $fields = null;
+
+ public function __construct($vals=null) {
+ if (!isset(self::$_TSPEC)) {
+ self::$_TSPEC = array(
+ 1 => array(
+ 'var' => 'name',
+ 'type' => TType::STRING,
+ ),
+ 2 => array(
+ 'var' => 'type1',
+ 'type' => TType::STRING,
+ ),
+ 3 => array(
+ 'var' => 'type2',
+ 'type' => TType::STRING,
+ ),
+ 4 => array(
+ 'var' => 'fields',
+ 'type' => TType::LST,
+ 'etype' => TType::STRUCT,
+ 'elem' => array(
+ 'type' => TType::STRUCT,
+ 'class' => '\metastore\FieldSchema',
+ ),
+ ),
+ );
+ }
+ if (is_array($vals)) {
+ if (isset($vals['name'])) {
+ $this->name = $vals['name'];
+ }
+ if (isset($vals['type1'])) {
+ $this->type1 = $vals['type1'];
+ }
+ if (isset($vals['type2'])) {
+ $this->type2 = $vals['type2'];
+ }
+ if (isset($vals['fields'])) {
+ $this->fields = $vals['fields'];
+ }
+ }
+ }
+
+ public function getName() {
+ return 'Type';
+ }
+
+ public function read($input)
+ {
+ $xfer = 0;
+ $fname = null;
+ $ftype = 0;
+ $fid = 0;
+ $xfer += $input->readStructBegin($fname);
+ while (true)
+ {
+ $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+ if ($ftype == TType::STOP) {
+ break;
+ }
+ switch ($fid)
+ {
+ case 1:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->name);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 2:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->type1);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 3:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->type2);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 4:
+ if ($ftype == TType::LST) {
+ $this->fields = array();
+ $_size0 = 0;
+ $_etype3 = 0;
+ $xfer += $input->readListBegin($_etype3, $_size0);
+ for ($_i4 = 0; $_i4 < $_size0; ++$_i4)
+ {
+ $elem5 = null;
+ $elem5 = new \metastore\FieldSchema();
+ $xfer += $elem5->read($input);
+ $this->fields []= $elem5;
+ }
+ $xfer += $input->readListEnd();
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ default:
+ $xfer += $input->skip($ftype);
+ break;
+ }
+ $xfer += $input->readFieldEnd();
+ }
+ $xfer += $input->readStructEnd();
+ return $xfer;
+ }
+
+ public function write($output) {
+ $xfer = 0;
+ $xfer += $output->writeStructBegin('Type');
+ if ($this->name !== null) {
+ $xfer += $output->writeFieldBegin('name', TType::STRING, 1);
+ $xfer += $output->writeString($this->name);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->type1 !== null) {
+ $xfer += $output->writeFieldBegin('type1', TType::STRING, 2);
+ $xfer += $output->writeString($this->type1);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->type2 !== null) {
+ $xfer += $output->writeFieldBegin('type2', TType::STRING, 3);
+ $xfer += $output->writeString($this->type2);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->fields !== null) {
+ if (!is_array($this->fields)) {
+ throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+ }
+ $xfer += $output->writeFieldBegin('fields', TType::LST, 4);
+ {
+ $output->writeListBegin(TType::STRUCT, count($this->fields));
+ {
+ foreach ($this->fields as $iter6)
+ {
+ $xfer += $iter6->write($output);
+ }
+ }
+ $output->writeListEnd();
+ }
+ $xfer += $output->writeFieldEnd();
+ }
+ $xfer += $output->writeFieldStop();
+ $xfer += $output->writeStructEnd();
+ return $xfer;
+ }
+
+ }
+
+ class HiveObjectRef {
+ static $_TSPEC;
+
+ /**
+ * @var int
+ */
+ public $objectType = null;
+ /**
+ * @var string
+ */
+ public $dbName = null;
+ /**
+ * @var string
+ */
+ public $objectName = null;
+ /**
+ * @var string[]
+ */
+ public $partValues = null;
+ /**
+ * @var string
+ */
+ public $columnName = null;
+
+ public function __construct($vals=null) {
+ if (!isset(self::$_TSPEC)) {
+ self::$_TSPEC = array(
+ 1 => array(
+ 'var' => 'objectType',
+ 'type' => TType::I32,
+ ),
+ 2 => array(
+ 'var' => 'dbName',
+ 'type' => TType::STRING,
+ ),
+ 3 => array(
+ 'var' => 'objectName',
+ 'type' => TType::STRING,
+ ),
+ 4 => array(
+ 'var' => 'partValues',
+ 'type' => TType::LST,
+ 'etype' => TType::STRING,
+ 'elem' => array(
+ 'type' => TType::STRING,
+ ),
+ ),
+ 5 => array(
+ 'var' => 'columnName',
+ 'type' => TType::STRING,
+ ),
+ );
+ }
+ if (is_array($vals)) {
+ if (isset($vals['objectType'])) {
+ $this->objectType = $vals['objectType'];
+ }
+ if (isset($vals['dbName'])) {
+ $this->dbName = $vals['dbName'];
+ }
+ if (isset($vals['objectName'])) {
+ $this->objectName = $vals['objectName'];
+ }
+ if (isset($vals['partValues'])) {
+ $this->partValues = $vals['partValues'];
+ }
+ if (isset($vals['columnName'])) {
+ $this->columnName = $vals['columnName'];
+ }
+ }
+ }
+
+ public function getName() {
+ return 'HiveObjectRef';
+ }
+
+ public function read($input)
+ {
+ $xfer = 0;
+ $fname = null;
+ $ftype = 0;
+ $fid = 0;
+ $xfer += $input->readStructBegin($fname);
+ while (true)
+ {
+ $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+ if ($ftype == TType::STOP) {
+ break;
+ }
+ switch ($fid)
+ {
+ case 1:
+ if ($ftype == TType::I32) {
+ $xfer += $input->readI32($this->objectType);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 2:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->dbName);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 3:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->objectName);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 4:
+ if ($ftype == TType::LST) {
+ $this->partValues = array();
+ $_size7 = 0;
+ $_etype10 = 0;
+ $xfer += $input->readListBegin($_etype10, $_size7);
+ for ($_i11 = 0; $_i11 < $_size7; ++$_i11)
+ {
+ $elem12 = null;
+ $xfer += $input->readString($elem12);
+ $this->partValues []= $elem12;
+ }
+ $xfer += $input->readListEnd();
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 5:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->columnName);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ default:
+ $xfer += $input->skip($ftype);
+ break;
+ }
+ $xfer += $input->readFieldEnd();
+ }
+ $xfer += $input->readStructEnd();
+ return $xfer;
+ }
+
+ public function write($output) {
+ $xfer = 0;
+ $xfer += $output->writeStructBegin('HiveObjectRef');
+ if ($this->objectType !== null) {
+ $xfer += $output->writeFieldBegin('objectType', TType::I32, 1);
+ $xfer += $output->writeI32($this->objectType);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->dbName !== null) {
+ $xfer += $output->writeFieldBegin('dbName', TType::STRING, 2);
+ $xfer += $output->writeString($this->dbName);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->objectName !== null) {
+ $xfer += $output->writeFieldBegin('objectName', TType::STRING, 3);
+ $xfer += $output->writeString($this->objectName);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->partValues !== null) {
+ if (!is_array($this->partValues)) {
+ throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+ }
+ $xfer += $output->writeFieldBegin('partValues', TType::LST, 4);
+ {
+ $output->writeListBegin(TType::STRING, count($this->partValues));
+ {
+ foreach ($this->partValues as $iter13)
+ {
+ $xfer += $output->writeString($iter13);
+ }
+ }
+ $output->writeListEnd();
+ }
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->columnName !== null) {
+ $xfer += $output->writeFieldBegin('columnName', TType::STRING, 5);
+ $xfer += $output->writeString($this->columnName);
+ $xfer += $output->writeFieldEnd();
+ }
+ $xfer += $output->writeFieldStop();
+ $xfer += $output->writeStructEnd();
+ return $xfer;
+ }
+
+ }
+
+ class PrivilegeGrantInfo {
+ static $_TSPEC;
+
+ /**
+ * @var string
+ */
+ public $privilege = null;
+ /**
+ * @var int
+ */
+ public $createTime = null;
+ /**
+ * @var string
+ */
+ public $grantor = null;
+ /**
+ * @var int
+ */
+ public $grantorType = null;
+ /**
+ * @var bool
+ */
+ public $grantOption = null;
+
+ public function __construct($vals=null) {
+ if (!isset(self::$_TSPEC)) {
+ self::$_TSPEC = array(
+ 1 => array(
+ 'var' => 'privilege',
+ 'type' => TType::STRING,
+ ),
+ 2 => array(
+ 'var' => 'createTime',
+ 'type' => TType::I32,
+ ),
+ 3 => array(
+ 'var' => 'grantor',
+ 'type' => TType::STRING,
+ ),
+ 4 => array(
+ 'var' => 'grantorType',
+ 'type' => TType::I32,
+ ),
+ 5 => array(
+ 'var' => 'grantOption',
+ 'type' => TType::BOOL,
+ ),
+ );
+ }
+ if (is_array($vals)) {
+ if (isset($vals['privilege'])) {
+ $this->privilege = $vals['privilege'];
+ }
+ if (isset($vals['createTime'])) {
+ $this->createTime = $vals['createTime'];
+ }
+ if (isset($vals['grantor'])) {
+ $this->grantor = $vals['grantor'];
+ }
+ if (isset($vals['grantorType'])) {
+ $this->grantorType = $vals['grantorType'];
+ }
+ if (isset($vals['grantOption'])) {
+ $this->grantOption = $vals['grantOption'];
+ }
+ }
+ }
+
+ public function getName() {
+ return 'PrivilegeGrantInfo';
+ }
+
+ public function read($input)
+ {
+ $xfer = 0;
+ $fname = null;
+ $ftype = 0;
+ $fid = 0;
+ $xfer += $input->readStructBegin($fname);
+ while (true)
+ {
+ $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+ if ($ftype == TType::STOP) {
+ break;
+ }
+ switch ($fid)
+ {
+ case 1:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->privilege);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 2:
+ if ($ftype == TType::I32) {
+ $xfer += $input->readI32($this->createTime);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 3:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->grantor);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 4:
+ if ($ftype == TType::I32) {
+ $xfer += $input->readI32($this->grantorType);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 5:
+ if ($ftype == TType::BOOL) {
+ $xfer += $input->readBool($this->grantOption);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ default:
+ $xfer += $input->skip($ftype);
+ break;
+ }
+ $xfer += $input->readFieldEnd();
+ }
+ $xfer += $input->readStructEnd();
+ return $xfer;
+ }
+
+ public function write($output) {
+ $xfer = 0;
+ $xfer += $output->writeStructBegin('PrivilegeGrantInfo');
+ if ($this->privilege !== null) {
+ $xfer += $output->writeFieldBegin('privilege', TType::STRING, 1);
+ $xfer += $output->writeString($this->privilege);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->createTime !== null) {
+ $xfer += $output->writeFieldBegin('createTime', TType::I32, 2);
+ $xfer += $output->writeI32($this->createTime);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->grantor !== null) {
+ $xfer += $output->writeFieldBegin('grantor', TType::STRING, 3);
+ $xfer += $output->writeString($this->grantor);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->grantorType !== null) {
+ $xfer += $output->writeFieldBegin('grantorType', TType::I32, 4);
+ $xfer += $output->writeI32($this->grantorType);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->grantOption !== null) {
+ $xfer += $output->writeFieldBegin('grantOption', TType::BOOL, 5);
+ $xfer += $output->writeBool($this->grantOption);
+ $xfer += $output->writeFieldEnd();
+ }
+ $xfer += $output->writeFieldStop();
+ $xfer += $output->writeStructEnd();
+ return $xfer;
+ }
+
+ }
+
+ class HiveObjectPrivilege {
+ static $_TSPEC;
+
+ /**
+ * @var \metastore\HiveObjectRef
+ */
+ public $hiveObject = null;
+ /**
+ * @var string
+ */
+ public $principalName = null;
+ /**
+ * @var int
+ */
+ public $principalType = null;
+ /**
+ * @var \metastore\PrivilegeGrantInfo
+ */
+ public $grantInfo = null;
+
+ public function __construct($vals=null) {
+ if (!isset(self::$_TSPEC)) {
+ self::$_TSPEC = array(
+ 1 => array(
+ 'var' => 'hiveObject',
+ 'type' => TType::STRUCT,
+ 'class' => '\metastore\HiveObjectRef',
+ ),
+ 2 => array(
+ 'var' => 'principalName',
+ 'type' => TType::STRING,
+ ),
+ 3 => array(
+ 'var' => 'principalType',
+ 'type' => TType::I32,
+ ),
+ 4 => array(
+ 'var' => 'grantInfo',
+ 'type' => TType::STRUCT,
+ 'class' => '\metastore\PrivilegeGrantInfo',
+ ),
+ );
+ }
+ if (is_array($vals)) {
+ if (isset($vals['hiveObject'])) {
+ $this->hiveObject = $vals['hiveObject'];
+ }
+ if (isset($vals['principalName'])) {
+ $this->principalName = $vals['principalName'];
+ }
+ if (isset($vals['principalType'])) {
+ $this->principalType = $vals['principalType'];
+ }
+ if (isset($vals['grantInfo'])) {
+ $this->grantInfo = $vals['grantInfo'];
+ }
+ }
+ }
+
+ public function getName() {
+ return 'HiveObjectPrivilege';
+ }
+
+ public function read($input)
+ {
+ $xfer = 0;
+ $fname = null;
+ $ftype = 0;
+ $fid = 0;
+ $xfer += $input->readStructBegin($fname);
+ while (true)
+ {
+ $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+ if ($ftype == TType::STOP) {
+ break;
+ }
+ switch ($fid)
+ {
+ case 1:
+ if ($ftype == TType::STRUCT) {
+ $this->hiveObject = new \metastore\HiveObjectRef();
+ $xfer += $this->hiveObject->read($input);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 2:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->principalName);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 3:
+ if ($ftype == TType::I32) {
+ $xfer += $input->readI32($this->principalType);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 4:
+ if ($ftype == TType::STRUCT) {
+ $this->grantInfo = new \metastore\PrivilegeGrantInfo();
+ $xfer += $this->grantInfo->read($input);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ default:
+ $xfer += $input->skip($ftype);
+ break;
+ }
+ $xfer += $input->readFieldEnd();
+ }
+ $xfer += $input->readStructEnd();
+ return $xfer;
+ }
+
+ public function write($output) {
+ $xfer = 0;
+ $xfer += $output->writeStructBegin('HiveObjectPrivilege');
+ if ($this->hiveObject !== null) {
+ if (!is_object($this->hiveObject)) {
+ throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+ }
+ $xfer += $output->writeFieldBegin('hiveObject', TType::STRUCT, 1);
+ $xfer += $this->hiveObject->write($output);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->principalName !== null) {
+ $xfer += $output->writeFieldBegin('principalName', TType::STRING, 2);
+ $xfer += $output->writeString($this->principalName);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->principalType !== null) {
+ $xfer += $output->writeFieldBegin('principalType', TType::I32, 3);
+ $xfer += $output->writeI32($this->principalType);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->grantInfo !== null) {
+ if (!is_object($this->grantInfo)) {
+ throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+ }
+ $xfer += $output->writeFieldBegin('grantInfo', TType::STRUCT, 4);
+ $xfer += $this->grantInfo->write($output);
+ $xfer += $output->writeFieldEnd();
+ }
+ $xfer += $output->writeFieldStop();
+ $xfer += $output->writeStructEnd();
+ return $xfer;
+ }
+
+ }
+
+ class PrivilegeBag {
+ static $_TSPEC;
+
+ /**
+ * @var \metastore\HiveObjectPrivilege[]
+ */
+ public $privileges = null;
+
+ public function __construct($vals=null) {
+ if (!isset(self::$_TSPEC)) {
+ self::$_TSPEC = array(
+ 1 => array(
+ 'var' => 'privileges',
+ 'type' => TType::LST,
+ 'etype' => TType::STRUCT,
+ 'elem' => array(
+ 'type' => TType::STRUCT,
+ 'class' => '\metastore\HiveObjectPrivilege',
+ ),
+ ),
+ );
+ }
+ if (is_array($vals)) {
+ if (isset($vals['privileges'])) {
+ $this->privileges = $vals['privileges'];
+ }
+ }
+ }
+
+ public function getName() {
+ return 'PrivilegeBag';
+ }
+
+ public function read($input)
+ {
+ $xfer = 0;
+ $fname = null;
+ $ftype = 0;
+ $fid = 0;
+ $xfer += $input->readStructBegin($fname);
+ while (true)
+ {
+ $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+ if ($ftype == TType::STOP) {
+ break;
+ }
+ switch ($fid)
+ {
+ case 1:
+ if ($ftype == TType::LST) {
+ $this->privileges = array();
+ $_size14 = 0;
+ $_etype17 = 0;
+ $xfer += $input->readListBegin($_etype17, $_size14);
+ for ($_i18 = 0; $_i18 < $_size14; ++$_i18)
+ {
+ $elem19 = null;
+ $elem19 = new \metastore\HiveObjectPrivilege();
+ $xfer += $elem19->read($input);
+ $this->privileges []= $elem19;
+ }
+ $xfer += $input->readListEnd();
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ default:
+ $xfer += $input->skip($ftype);
+ break;
+ }
+ $xfer += $input->readFieldEnd();
+ }
+ $xfer += $input->readStructEnd();
+ return $xfer;
+ }
+
+ public function write($output) {
+ $xfer = 0;
+ $xfer += $output->writeStructBegin('PrivilegeBag');
+ if ($this->privileges !== null) {
+ if (!is_array($this->privileges)) {
+ throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+ }
+ $xfer += $output->writeFieldBegin('privileges', TType::LST, 1);
+ {
+ $output->writeListBegin(TType::STRUCT, count($this->privileges));
+ {
+ foreach ($this->privileges as $iter20)
+ {
+ $xfer += $iter20->write($output);
+ }
+ }
+ $output->writeListEnd();
+ }
+ $xfer += $output->writeFieldEnd();
+ }
+ $xfer += $output->writeFieldStop();
+ $xfer += $output->writeStructEnd();
+ return $xfer;
+ }
+
+ }
+
+ class PrincipalPrivilegeSet {
+ static $_TSPEC;
+
+ /**
+ * @var array
+ */
+ public $userPrivileges = null;
+ /**
+ * @var array
+ */
+ public $groupPrivileges = null;
+ /**
+ * @var array
+ */
+ public $rolePrivileges = null;
+
+ public function __construct($vals=null) {
+ if (!isset(self::$_TSPEC)) {
+ self::$_TSPEC = array(
+ 1 => array(
+ 'var' => 'userPrivileges',
+ 'type' => TType::MAP,
+ 'ktype' => TType::STRING,
+ 'vtype' => TType::LST,
+ 'key' => array(
+ 'type' => TType::STRING,
+ ),
+ 'val' => array(
+ 'type' => TType::LST,
+ 'etype' => TType::STRUCT,
+ 'elem' => array(
+ 'type' => TType::STRUCT,
+ 'class' => '\metastore\PrivilegeGrantInfo',
+ ),
+ ),
+ ),
+ 2 => array(
+ 'var' => 'groupPrivileges',
+ 'type' => TType::MAP,
+ 'ktype' => TType::STRING,
+ 'vtype' => TType::LST,
+ 'key' => array(
+ 'type' => TType::STRING,
+ ),
+ 'val' => array(
+ 'type' => TType::LST,
+ 'etype' => TType::STRUCT,
+ 'elem' => array(
+ 'type' => TType::STRUCT,
+ 'class' => '\metastore\PrivilegeGrantInfo',
+ ),
+ ),
+ ),
+ 3 => array(
+ 'var' => 'rolePrivileges',
+ 'type' => TType::MAP,
+ 'ktype' => TType::STRING,
+ 'vtype' => TType::LST,
+ 'key' => array(
+ 'type' => TType::STRING,
+ ),
+ 'val' => array(
+ 'type' => TType::LST,
+ 'etype' => TType::STRUCT,
+ 'elem' => array(
+ 'type' => TType::STRUCT,
+ 'class' => '\metastore\PrivilegeGrantInfo',
+ ),
+ ),
+ ),
+ );
+ }
+ if (is_array($vals)) {
+ if (isset($vals['userPrivileges'])) {
+ $this->userPrivileges = $vals['userPrivileges'];
+ }
+ if (isset($vals['groupPrivileges'])) {
+ $this->groupPrivileges = $vals['groupPrivileges'];
+ }
+ if (isset($vals['rolePrivileges'])) {
+ $this->rolePrivileges = $vals['rolePrivileges'];
+ }
+ }
+ }
+
+ public function getName() {
+ return 'PrincipalPrivilegeSet';
+ }
+
+ public function read($input)
+ {
+ $xfer = 0;
+ $fname = null;
+ $ftype = 0;
+ $fid = 0;
+ $xfer += $input->readStructBegin($fname);
+ while (true)
+ {
+ $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+ if ($ftype == TType::STOP) {
+ break;
+ }
+ switch ($fid)
+ {
+ case 1:
+ if ($ftype == TType::MAP) {
+ $this->userPrivileges = array();
+ $_size21 = 0;
+ $_ktype22 = 0;
+ $_vtype23 = 0;
+ $xfer += $input->readMapBegin($_ktype22, $_vtype23, $_size21);
+ for ($_i25 = 0; $_i25 < $_size21; ++$_i25)
+ {
+ $key26 = '';
+ $val27 = array();
+ $xfer += $input->readString($key26);
+ $val27 = array();
+ $_size28 = 0;
+ $_etype31 = 0;
+ $xfer += $input->readListBegin($_etype31, $_size28);
+ for ($_i32 = 0; $_i32 < $_size28; ++$_i32)
+ {
+ $elem33 = null;
+ $elem33 = new \metastore\PrivilegeGrantInfo();
+ $xfer += $elem33->read($input);
+ $val27 []= $elem33;
+ }
+ $xfer += $input->readListEnd();
+ $this->userPrivileges[$key26] = $val27;
+ }
+ $xfer += $input->readMapEnd();
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 2:
+ if ($ftype == TType::MAP) {
+ $this->groupPrivileges = array();
+ $_size34 = 0;
+ $_ktype35 = 0;
+ $_vtype36 = 0;
+ $xfer += $input->readMapBegin($_ktype35, $_vtype36, $_size34);
+ for ($_i38 = 0; $_i38 < $_size34; ++$_i38)
+ {
+ $key39 = '';
+ $val40 = array();
+ $xfer += $input->readString($key39);
+ $val40 = array();
+ $_size41 = 0;
+ $_etype44 = 0;
+ $xfer += $input->readListBegin($_etype44, $_size41);
+ for ($_i45 = 0; $_i45 < $_size41; ++$_i45)
+ {
+ $elem46 = null;
+ $elem46 = new \metastore\PrivilegeGrantInfo();
+ $xfer += $elem46->read($input);
+ $val40 []= $elem46;
+ }
+ $xfer += $input->readListEnd();
+ $this->groupPrivileges[$key39] = $val40;
+ }
+ $xfer += $input->readMapEnd();
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 3:
+ if ($ftype == TType::MAP) {
+ $this->rolePrivileges = array();
+ $_size47 = 0;
+ $_ktype48 = 0;
+ $_vtype49 = 0;
+ $xfer += $input->readMapBegin($_ktype48, $_vtype49, $_size47);
+ for ($_i51 = 0; $_i51 < $_size47; ++$_i51)
+ {
+ $key52 = '';
+ $val53 = array();
+ $xfer += $input->readString($key52);
+ $val53 = array();
+ $_size54 = 0;
+ $_etype57 = 0;
+ $xfer += $input->readListBegin($_etype57, $_size54);
+ for ($_i58 = 0; $_i58 < $_size54; ++$_i58)
+ {
+ $elem59 = null;
+ $elem59 = new \metastore\PrivilegeGrantInfo();
+ $xfer += $elem59->read($input);
+ $val53 []= $elem59;
+ }
+ $xfer += $input->readListEnd();
+ $this->rolePrivileges[$key52] = $val53;
+ }
+ $xfer += $input->readMapEnd();
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ default:
+ $xfer += $input->skip($ftype);
+ break;
+ }
+ $xfer += $input->readFieldEnd();
+ }
+ $xfer += $input->readStructEnd();
+ return $xfer;
+ }
+
+ public function write($output) {
+ $xfer = 0;
+ $xfer += $output->writeStructBegin('PrincipalPrivilegeSet');
+ if ($this->userPrivileges !== null) {
+ if (!is_array($this->userPrivileges)) {
+ throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+ }
+ $xfer += $output->writeFieldBegin('userPrivileges', TType::MAP, 1);
+ {
+ $output->writeMapBegin(TType::STRING, TType::LST, count($this->userPrivileges));
+ {
+ foreach ($this->userPrivileges as $kiter60 => $viter61)
+ {
+ $xfer += $output->writeString($kiter60);
+ {
+ $output->writeListBegin(TType::STRUCT, count($viter61));
+ {
+ foreach ($viter61 as $iter62)
+ {
+ $xfer += $iter62->write($output);
+ }
+ }
+ $output->writeListEnd();
+ }
+ }
+ }
+ $output->writeMapEnd();
+ }
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->groupPrivileges !== null) {
+ if (!is_array($this->groupPrivileges)) {
+ throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+ }
+ $xfer += $output->writeFieldBegin('groupPrivileges', TType::MAP, 2);
+ {
+ $output->writeMapBegin(TType::STRING, TType::LST, count($this->groupPrivileges));
+ {
+ foreach ($this->groupPrivileges as $kiter63 => $viter64)
+ {
+ $xfer += $output->writeString($kiter63);
+ {
+ $output->writeListBegin(TType::STRUCT, count($viter64));
+ {
+ foreach ($viter64 as $iter65)
+ {
+ $xfer += $iter65->write($output);
+ }
+ }
+ $output->writeListEnd();
+ }
+ }
+ }
+ $output->writeMapEnd();
+ }
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->rolePrivileges !== null) {
+ if (!is_array($this->rolePrivileges)) {
+ throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+ }
+ $xfer += $output->writeFieldBegin('rolePrivileges', TType::MAP, 3);
+ {
+ $output->writeMapBegin(TType::STRING, TType::LST, count($this->rolePrivileges));
+ {
+ foreach ($this->rolePrivileges as $kiter66 => $viter67)
+ {
+ $xfer += $output->writeString($kiter66);
+ {
+ $output->writeListBegin(TType::STRUCT, count($viter67));
+ {
+ foreach ($viter67 as $iter68)
+ {
+ $xfer += $iter68->write($output);
+ }
+ }
+ $output->writeListEnd();
+ }
+ }
+ }
+ $output->writeMapEnd();
+ }
+ $xfer += $output->writeFieldEnd();
+ }
+ $xfer += $output->writeFieldStop();
+ $xfer += $output->writeStructEnd();
+ return $xfer;
+ }
+
+ }
+
+ class GrantRevokePrivilegeRequest {
+ static $_TSPEC;
+
+ /**
+ * @var int
+ */
+ public $requestType = null;
+ /**
+ * @var \metastore\PrivilegeBag
+ */
+ public $privileges = null;
+ /**
+ * @var bool
+ */
+ public $revokeGrantOption = null;
+
+ public function __construct($vals=null) {
+ if (!isset(self::$_TSPEC)) {
+ self::$_TSPEC = array(
+ 1 => array(
+ 'var' => 'requestType',
+ 'type' => TType::I32,
+ ),
+ 2 => array(
+ 'var' => 'privileges',
+ 'type' => TType::STRUCT,
+ 'class' => '\metastore\PrivilegeBag',
+ ),
+ 3 => array(
+ 'var' => 'revokeGrantOption',
+ 'type' => TType::BOOL,
+ ),
+ );
+ }
+ if (is_array($vals)) {
+ if (isset($vals['requestType'])) {
+ $this->requestType = $vals['requestType'];
+ }
+ if (isset($vals['privileges'])) {
+ $this->privileges = $vals['privileges'];
+ }
+ if (isset($vals['revokeGrantOption'])) {
+ $this->revokeGrantOption = $vals['revokeGrantOption'];
+ }
+ }
+ }
+
+ public function getName() {
+ return 'GrantRevokePrivilegeRequest';
+ }
+
+ public function read($input)
+ {
+ $xfer = 0;
+ $fname = null;
+ $ftype = 0;
+ $fid = 0;
+ $xfer += $input->readStructBegin($fname);
+ while (true)
+ {
+ $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+ if ($ftype == TType::STOP) {
+ break;
+ }
+ switch ($fid)
+ {
+ case 1:
+ if ($ftype == TType::I32) {
+ $xfer += $input->readI32($this->requestType);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 2:
+ if ($ftype == TType::STRUCT) {
+ $this->privileges = new \metastore\PrivilegeBag();
+ $xfer += $this->privileges->read($input);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 3:
+ if ($ftype == TType::BOOL) {
+ $xfer += $input->readBool($this->revokeGrantOption);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ default:
+ $xfer += $input->skip($ftype);
+ break;
+ }
+ $xfer += $input->readFieldEnd();
+ }
+ $xfer += $input->readStructEnd();
+ return $xfer;
+ }
+
+ public function write($output) {
+ $xfer = 0;
+ $xfer += $output->writeStructBegin('GrantRevokePrivilegeRequest');
+ if ($this->requestType !== null) {
+ $xfer += $output->writeFieldBegin('requestType', TType::I32, 1);
+ $xfer += $output->writeI32($this->requestType);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->privileges !== null) {
+ if (!is_object($this->privileges)) {
+ throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+ }
+ $xfer += $output->writeFieldBegin('privileges', TType::STRUCT, 2);
+ $xfer += $this->privileges->write($output);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->revokeGrantOption !== null) {
+ $xfer += $output->writeFieldBegin('revokeGrantOption', TType::BOOL, 3);
+ $xfer += $output->writeBool($this->revokeGrantOption);
+ $xfer += $output->writeFieldEnd();
+ }
+ $xfer += $output->writeFieldStop();
+ $xfer += $output->writeStructEnd();
+ return $xfer;
+ }
+
+ }
+
+ class GrantRevokePrivilegeResponse {
+ static $_TSPEC;
+
+ /**
+ * @var bool
+ */
+ public $success = null;
+
+ public function __construct($vals=null) {
+ if (!isset(self::$_TSPEC)) {
+ self::$_TSPEC = array(
+ 1 => array(
+ 'var' => 'success',
+ 'type' => TType::BOOL,
+ ),
+ );
+ }
+ if (is_array($vals)) {
+ if (isset($vals['success'])) {
+ $this->success = $vals['success'];
+ }
+ }
+ }
+
+ public function getName() {
+ return 'GrantRevokePrivilegeResponse';
+ }
+
+ public function read($input)
+ {
+ $xfer = 0;
+ $fname = null;
+ $ftype = 0;
+ $fid = 0;
+ $xfer += $input->readStructBegin($fname);
+ while (true)
+ {
+ $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+ if ($ftype == TType::STOP) {
+ break;
+ }
+ switch ($fid)
+ {
+ case 1:
+ if ($ftype == TType::BOOL) {
+ $xfer += $input->readBool($this->success);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ default:
+ $xfer += $input->skip($ftype);
+ break;
+ }
+ $xfer += $input->readFieldEnd();
+ }
+ $xfer += $input->readStructEnd();
+ return $xfer;
+ }
+
+ public function write($output) {
+ $xfer = 0;
+ $xfer += $output->writeStructBegin('GrantRevokePrivilegeResponse');
+ if ($this->success !== null) {
+ $xfer += $output->writeFieldBegin('success', TType::BOOL, 1);
+ $xfer += $output->writeBool($this->success);
+ $xfer += $output->writeFieldEnd();
+ }
+ $xfer += $output->writeFieldStop();
+ $xfer += $output->writeStructEnd();
+ return $xfer;
+ }
+
+ }
+
+ class Role {
+ static $_TSPEC;
+
+ /**
+ * @var string
+ */
+ public $roleName = null;
+ /**
+ * @var int
+ */
+ public $createTime = null;
+ /**
+ * @var string
+ */
+ public $ownerName = null;
+
+ public function __construct($vals=null) {
+ if (!isset(self::$_TSPEC)) {
+ self::$_TSPEC = array(
+ 1 => array(
+ 'var' => 'roleName',
+ 'type' => TType::STRING,
+ ),
+ 2 => array(
+ 'var' => 'createTime',
+ 'type' => TType::I32,
+ ),
+ 3 => array(
+ 'var' => 'ownerName',
+ 'type' => TType::STRING,
+ ),
+ );
+ }
+ if (is_array($vals)) {
+ if (isset($vals['roleName'])) {
+ $this->roleName = $vals['roleName'];
+ }
+ if (isset($vals['createTime'])) {
+ $this->createTime = $vals['createTime'];
+ }
+ if (isset($vals['ownerName'])) {
+ $this->ownerName = $vals['ownerName'];
+ }
+ }
+ }
+
+ public function getName() {
+ return 'Role';
+ }
+
+ public function read($input)
+ {
+ $xfer = 0;
+ $fname = null;
+ $ftype = 0;
+ $fid = 0;
+ $xfer += $input->readStructBegin($fname);
+ while (true)
+ {
+ $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+ if ($ftype == TType::STOP) {
+ break;
+ }
+ switch ($fid)
+ {
+ case 1:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->roleName);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 2:
+ if ($ftype == TType::I32) {
+ $xfer += $input->readI32($this->createTime);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 3:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->ownerName);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ default:
+ $xfer += $input->skip($ftype);
+ break;
+ }
+ $xfer += $input->readFieldEnd();
+ }
+ $xfer += $input->readStructEnd();
+ return $xfer;
+ }
+
+ public function write($output) {
+ $xfer = 0;
+ $xfer += $output->writeStructBegin('Role');
+ if ($this->roleName !== null) {
+ $xfer += $output->writeFieldBegin('roleName', TType::STRING, 1);
+ $xfer += $output->writeString($this->roleName);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->createTime !== null) {
+ $xfer += $output->writeFieldBegin('createTime', TType::I32, 2);
+ $xfer += $output->writeI32($this->createTime);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->ownerName !== null) {
+ $xfer += $output->writeFieldBegin('ownerName', TType::STRING, 3);
+ $xfer += $output->writeString($this->ownerName);
+ $xfer += $output->writeFieldEnd();
+ }
+ $xfer += $output->writeFieldStop();
+ $xfer += $output->writeStructEnd();
+ return $xfer;
+ }
+
+ }
+
+ class RolePrincipalGrant {
+ static $_TSPEC;
+
+ /**
+ * @var string
+ */
+ public $roleName = null;
+ /**
+ * @var string
+ */
+ public $principalName = null;
+ /**
+ * @var int
+ */
+ public $principalType = null;
+ /**
+ * @var bool
+ */
+ public $grantOption = null;
+ /**
+ * @var int
+ */
+ public $grantTime = null;
+ /**
+ * @var string
+ */
+ public $grantorName = null;
+ /**
+ * @var int
+ */
+ public $grantorPrincipalType = null;
+
+ public function __construct($vals=null) {
+ if (!isset(self::$_TSPEC)) {
+ self::$_TSPEC = array(
+ 1 => array(
+ 'var' => 'roleName',
+ 'type' => TType::STRING,
+ ),
+ 2 => array(
+ 'var' => 'principalName',
+ 'type' => TType::STRING,
+ ),
+ 3 => array(
+ 'var' => 'principalType',
+ 'type' => TType::I32,
+ ),
+ 4 => array(
+ 'var' => 'grantOption',
+ 'type' => TType::BOOL,
+ ),
+ 5 => array(
+ 'var' => 'grantTime',
+ 'type' => TType::I32,
+ ),
+ 6 => array(
+ 'var' => 'grantorName',
+ 'type' => TType::STRING,
+ ),
+ 7 => array(
+ 'var' => 'grantorPrincipalType',
+ 'type' => TType::I32,
+ ),
+ );
+ }
+ if (is_array($vals)) {
+ if (isset($vals['roleName'])) {
+ $this->roleName = $vals['roleName'];
+ }
+ if (isset($vals['principalName'])) {
+ $this->principalName = $vals['principalName'];
+ }
+ if (isset($vals['principalType'])) {
+ $this->principalType = $vals['principalType'];
+ }
+ if (isset($vals['grantOption'])) {
+ $this->grantOption = $vals['grantOption'];
+ }
+ if (isset($vals['grantTime'])) {
+ $this->grantTime = $vals['grantTime'];
+ }
+ if (isset($vals['grantorName'])) {
+ $this->grantorName = $vals['grantorName'];
+ }
+ if (isset($vals['grantorPrincipalType'])) {
+ $this->grantorPrincipalType = $vals['grantorPrincipalType'];
+ }
+ }
+ }
+
+ public function getName() {
+ return 'RolePrincipalGrant';
+ }
+
+ public function read($input)
+ {
+ $xfer = 0;
+ $fname = null;
+ $ftype = 0;
+ $fid = 0;
+ $xfer += $input->readStructBegin($fname);
+ while (true)
+ {
+ $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+ if ($ftype == TType::STOP) {
+ break;
+ }
+ switch ($fid)
+ {
+ case 1:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->roleName);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 2:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->principalName);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 3:
+ if ($ftype == TType::I32) {
+ $xfer += $input->readI32($this->principalType);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 4:
+ if ($ftype == TType::BOOL) {
+ $xfer += $input->readBool($this->grantOption);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 5:
+ if ($ftype == TType::I32) {
+ $xfer += $input->readI32($this->grantTime);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 6:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->grantorName);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 7:
+ if ($ftype == TType::I32) {
+ $xfer += $input->readI32($this->grantorPrincipalType);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ default:
+ $xfer += $input->skip($ftype);
+ break;
+ }
+ $xfer += $input->readFieldEnd();
+ }
+ $xfer += $input->readStructEnd();
+ return $xfer;
+ }
+
+ public function write($output) {
+ $xfer = 0;
+ $xfer += $output->writeStructBegin('RolePrincipalGrant');
+ if ($this->roleName !== null) {
+ $xfer += $output->writeFieldBegin('roleName', TType::STRING, 1);
+ $xfer += $output->writeString($this->roleName);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->principalName !== null) {
+ $xfer += $output->writeFieldBegin('principalName', TType::STRING, 2);
+ $xfer += $output->writeString($this->principalName);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->principalType !== null) {
+ $xfer += $output->writeFieldBegin('principalType', TType::I32, 3);
+ $xfer += $output->writeI32($this->principalType);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->grantOption !== null) {
+ $xfer += $output->writeFieldBegin('grantOption', TType::BOOL, 4);
+ $xfer += $output->writeBool($this->grantOption);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->grantTime !== null) {
+ $xfer += $output->writeFieldBegin('grantTime', TType::I32, 5);
+ $xfer += $output->writeI32($this->grantTime);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->grantorName !== null) {
+ $xfer += $output->writeFieldBegin('grantorName', TType::STRING, 6);
+ $xfer += $output->writeString($this->grantorName);
+ $xfer += $output->writeFieldEnd();
+ }
+ if ($this->grantorPrincipalType !== null) {
+ $xfer += $output->writeFieldBegin('grantorPrincipalType', TType::I32, 7);
+ $xfer += $output->writeI32($this->grantorPrincipalType);
+ $xfer += $output->writeFieldEnd();
+ }
+ $xfer += $output->writeFieldStop();
+ $xfer += $output->writeStructEnd();
+ return $xfer;
+ }
+
+ }
+
+ class GetRoleGrantsForPrincipalRequest {
+ static $_TSPEC;
+
+ /**
+ * @var string
+ */
+ public $principal_name = null;
+ /**
+ * @var int
+ */
+ public $principal_type = null;
+
+ public function __construct($vals=null) {
+ if (!isset(self::$_TSPEC)) {
+ self::$_TSPEC = array(
+ 1 => array(
+ 'var' => 'principal_name',
+ 'type' => TType::STRING,
+ ),
+ 2 => array(
+ 'var' => 'principal_type',
+ 'type' => TType::I32,
+ ),
+ );
+ }
+ if (is_array($vals)) {
+ if (isset($vals['principal_name'])) {
+ $this->principal_name = $vals['principal_name'];
+ }
+ if (isset($vals['principal_type'])) {
+ $this->principal_type = $vals['principal_type'];
+ }
+ }
+ }
+
+ public function getName() {
+ return 'GetRoleGrantsForPrincipalRequest';
+ }
+
+ public function read($input)
+ {
+ $xfer = 0;
+ $fname = null;
+ $ftype = 0;
+ $fid = 0;
+ $xfer += $input->readStructBegin($fname);
+ while (true)
+ {
+ $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+ if ($ftype == TType::STOP) {
+ break;
+ }
+ switch ($fid)
+ {
+ case 1:
+ if ($ftype == TType::STRING) {
+ $xfer += $input->readString($this->principal_name);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ case 2:
+ if ($ftype == TType::I32) {
+ $xfer += $input->readI32($this->principal_type);
+ } else {
+ $xfer += $input->skip($ftype);
+ }
+ break;
+ default:
+ $xfer += $input->skip($ftype);
+ break;
+ }
+ $xfer += $input->readFieldEnd();
+ }
+ $xfer += $input->readStructEnd();
+ return $xfer;
+ }
+
+ public function write($output) {
+ $xfer = 0;
+ $xfer += $output->writeStru
<TRUNCATED>
[02/50] [abbrv] hive git commit: HIVE-14671 : Merge branch 'master'
into hive-14535 (Wei Zheng)
Posted by se...@apache.org.
HIVE-14671 : Merge branch 'master' into hive-14535 (Wei Zheng)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/78f28c88
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/78f28c88
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/78f28c88
Branch: refs/heads/master
Commit: 78f28c8855f9a2867c81f911cf56684c09a35ea9
Parents: d9e4ae0 ee3a3ed
Author: Wei Zheng <we...@apache.org>
Authored: Tue Jun 6 11:34:43 2017 -0700
Committer: Wei Zheng <we...@apache.org>
Committed: Tue Jun 6 11:34:43 2017 -0700
----------------------------------------------------------------------
.../apache/hive/beeline/HiveSchemaHelper.java | 581 ------
.../org/apache/hive/beeline/HiveSchemaTool.java | 79 +-
.../beeline/SeparatedValuesOutputFormat.java | 11 +-
.../apache/hive/beeline/TestHiveSchemaTool.java | 1 +
bin/ext/version.sh | 2 +-
bin/hive | 20 +-
.../hadoop/hive/common/StatsSetupConst.java | 7 +-
.../org/apache/hadoop/hive/conf/HiveConf.java | 6 +
.../hive/http/Log4j2ConfiguratorServlet.java | 18 +-
.../hadoop/hive/druid/serde/DruidSerDe.java | 95 +-
.../hadoop/hive/druid/TestDruidSerDe.java | 169 +-
.../results/positive/external_table_ppd.q.out | 2 +-
.../positive/hbase_binary_storage_queries.q.out | 4 +-
.../src/test/results/positive/hbasestats.q.out | 2 +-
.../hcatalog/templeton/tool/TempletonUtils.java | 28 +-
.../templeton/tool/TestTempletonUtils.java | 11 +-
.../write_final_output_blobstore.q.out | 16 +-
itests/hive-unit/pom.xml | 6 +
.../hive/metastore/TestReplChangeManager.java | 89 +-
...TestReplicationScenariosAcrossInstances.java | 166 +-
.../hadoop/hive/ql/parse/WarehouseInstance.java | 176 +-
.../org/apache/hive/beeline/TestSchemaTool.java | 6 +-
.../test/resources/testconfiguration.properties | 6 +-
.../hadoop/hive/cli/control/CliConfigs.java | 1 +
.../java/org/apache/hive/beeline/QFile.java | 1 +
.../llap/io/encoded/OrcEncodedDataReader.java | 2 +-
.../llap/io/metadata/OrcStripeMetadata.java | 4 +-
.../hadoop/hive/metastore/HiveAlterHandler.java | 4 +-
.../hadoop/hive/metastore/HiveMetaStore.java | 14 +-
.../hive/metastore/IMetaStoreSchemaInfo.java | 15 +
.../hive/metastore/MetaStoreSchemaInfo.java | 33 +
.../hadoop/hive/metastore/MetaStoreUtils.java | 22 +-
.../hadoop/hive/metastore/ObjectStore.java | 12 +-
.../hive/metastore/ReplChangeManager.java | 51 +-
.../apache/hadoop/hive/metastore/Warehouse.java | 4 +
.../hive/metastore/tools/HiveSchemaHelper.java | 640 +++++++
.../hive/metastore/TestMetaStoreUtils.java | 16 +-
.../hadoop/hive/metastore/TestObjectStore.java | 48 +-
pom.xml | 4 +-
ql/pom.xml | 13 +
.../org/apache/hadoop/hive/ql/exec/DDLTask.java | 4 +-
.../apache/hadoop/hive/ql/exec/Operator.java | 10 +-
.../hadoop/hive/ql/exec/ReplCopyTask.java | 22 +-
.../hadoop/hive/ql/exec/spark/SparkTask.java | 2 +-
.../spark/status/RemoteSparkJobMonitor.java | 14 +
.../ql/exec/spark/status/SparkJobMonitor.java | 12 +
.../hive/ql/exec/tez/TezSessionPoolManager.java | 9 +-
.../apache/hadoop/hive/ql/exec/tez/TezTask.java | 2 +-
.../ql/exec/tez/monitoring/TezJobMonitor.java | 8 +-
.../exec/tez/monitoring/TezProgressMonitor.java | 42 +-
.../fast/VectorMapJoinFastHashTable.java | 3 +-
.../apache/hadoop/hive/ql/metadata/Hive.java | 2 +-
.../ql/optimizer/CountDistinctRewriteProc.java | 504 +++++
.../hadoop/hive/ql/optimizer/MergeJoinProc.java | 23 +-
.../hadoop/hive/ql/optimizer/Optimizer.java | 4 +
.../calcite/cost/HiveAlgorithmsUtil.java | 4 +-
.../optimizer/calcite/cost/HiveCostModel.java | 7 +-
.../calcite/cost/HiveDefaultCostModel.java | 2 +-
.../calcite/cost/HiveOnTezCostModel.java | 4 +-
.../optimizer/calcite/cost/HiveRelMdCost.java | 2 +-
.../rules/HiveFilterAggregateTransposeRule.java | 6 +-
.../calcite/rules/HiveRelDecorrelator.java | 46 +-
.../stats/FilterSelectivityEstimator.java | 9 +-
.../stats/HiveRelMdDistinctRowCount.java | 2 +-
.../calcite/stats/HiveRelMdRowCount.java | 3 +-
.../calcite/stats/HiveRelMdSelectivity.java | 4 +-
.../calcite/stats/HiveRelMdUniqueKeys.java | 2 +-
.../hadoop/hive/ql/parse/CalcitePlanner.java | 88 +-
.../hive/ql/parse/DDLSemanticAnalyzer.java | 4 +-
.../ql/parse/ReplicationSemanticAnalyzer.java | 50 +-
.../hadoop/hive/ql/parse/SemanticAnalyzer.java | 36 +-
.../hadoop/hive/ql/parse/repl/PathBuilder.java | 66 +
.../repl/dump/events/CreateFunctionHandler.java | 9 +-
.../parse/repl/dump/io/FunctionSerializer.java | 40 +-
.../hive/ql/parse/repl/load/MetaData.java | 2 +-
.../load/message/CreateFunctionHandler.java | 156 +-
.../hadoop/hive/ql/plan/CreateTableDesc.java | 7 +-
.../apache/hadoop/hive/ql/plan/GroupByDesc.java | 15 +
.../hive/ql/exec/tez/TestTezSessionPool.java | 43 +-
.../tez/monitoring/TestTezProgressMonitor.java | 3 +-
.../PrimaryToReplicaResourceFunctionTest.java | 87 +
.../orderby_position_unsupported.q | 3 +-
.../clientnegative/spark_stage_max_tasks.q | 6 +
.../queries/clientpositive/alterColumnStats.q | 21 +
.../clientpositive/alterColumnStatsPart.q | 47 +
.../queries/clientpositive/count_dist_rewrite.q | 65 +
.../test/queries/clientpositive/druid_basic2.q | 4 +
.../test/queries/clientpositive/filter_aggr.q | 18 +
.../test/queries/clientpositive/order_by_pos.q | 20 +
.../test/queries/clientpositive/perf/query4.q | 111 ++
.../test/queries/clientpositive/perf/query47.q | 53 +
.../test/queries/clientpositive/perf/query57.q | 50 +
.../test/queries/clientpositive/perf/query74.q | 63 +
ql/src/test/queries/clientpositive/tez-tag.q | 68 +
.../clientnegative/alter_file_format.q.out | 2 +-
.../orderby_position_unsupported.q.out | 4 +-
.../spark/spark_stage_max_tasks.q.out | 77 +
.../clientnegative/unset_table_property.q.out | 2 +-
.../clientpositive/alterColumnStats.q.out | 158 ++
.../clientpositive/alterColumnStatsPart.q.out | 507 +++++
.../clientpositive/alter_file_format.q.out | 26 +-
.../alter_partition_clusterby_sortby.q.out | 6 +-
.../clientpositive/alter_skewed_table.q.out | 12 +-
.../alter_table_add_partition.q.out | 2 +-
.../clientpositive/alter_table_not_sorted.q.out | 4 +-
.../clientpositive/autoColumnStats_3.q.out | 2 +-
.../clientpositive/autoColumnStats_4.q.out | 2 +-
.../insert_overwrite_local_directory_1.q.out | 1769 ++++++++++++++++++
.../clientpositive/binary_output_format.q.out | 16 +-
.../test/results/clientpositive/bucket1.q.out | 4 +-
.../test/results/clientpositive/bucket2.q.out | 4 +-
.../clientpositive/bucket_map_join_spark1.q.out | 4 +-
.../clientpositive/bucket_map_join_spark2.q.out | 4 +-
.../clientpositive/bucket_map_join_spark3.q.out | 4 +-
.../results/clientpositive/bucketmapjoin5.q.out | 16 +-
.../clientpositive/bucketmapjoin_negative.q.out | 16 +-
.../bucketmapjoin_negative2.q.out | 16 +-
...names_with_leading_and_trailing_spaces.q.out | 4 +-
.../results/clientpositive/compustat_avro.q.out | 4 +-
.../clientpositive/count_dist_rewrite.q.out | 1151 ++++++++++++
.../create_alter_list_bucketing_table1.q.out | 14 +-
.../results/clientpositive/create_like.q.out | 18 +-
.../results/clientpositive/create_like2.q.out | 2 +-
.../clientpositive/create_like_tbl_props.q.out | 10 +-
.../clientpositive/create_like_view.q.out | 6 +-
.../clientpositive/create_skewed_table1.q.out | 6 +-
.../create_table_like_stats.q.out | 2 +-
.../create_with_constraints.q.out | 72 +-
.../clientpositive/database_location.q.out | 4 +-
.../clientpositive/default_file_format.q.out | 16 +-
.../describe_comment_indent.q.out | 2 +-
.../describe_comment_nonascii.q.out | 2 +-
.../describe_formatted_view_partitioned.q.out | 2 +-
.../clientpositive/describe_syntax.q.out | 4 +-
.../results/clientpositive/describe_table.q.out | 24 +-
.../display_colstats_tbllvl.q.out | 2 +-
.../results/clientpositive/druid_basic1.q.out | 4 +-
.../results/clientpositive/druid_basic2.q.out | 58 +-
.../clientpositive/druid_intervals.q.out | 2 +-
.../clientpositive/druid_timeseries.q.out | 2 +-
.../results/clientpositive/druid_topn.q.out | 2 +-
.../results/clientpositive/filter_aggr.q.out | 680 +++++++
.../clientpositive/groupby_map_ppr.q.out | 4 +-
.../groupby_map_ppr_multi_distinct.q.out | 4 +-
.../results/clientpositive/groupby_ppr.q.out | 4 +-
.../groupby_ppr_multi_distinct.q.out | 4 +-
.../clientpositive/groupby_sort_11.q.out | 39 +-
.../clientpositive/groupby_sort_1_23.q.out | 56 +-
.../results/clientpositive/groupby_sort_6.q.out | 4 +-
.../clientpositive/groupby_sort_skew_1_23.q.out | 56 +-
.../results/clientpositive/input_part1.q.out | 16 +-
.../results/clientpositive/input_part2.q.out | 32 +-
.../insert_values_orig_table_use_metadata.q.out | 4 +-
ql/src/test/results/clientpositive/join17.q.out | 4 +-
ql/src/test/results/clientpositive/join26.q.out | 4 +-
ql/src/test/results/clientpositive/join32.q.out | 4 +-
ql/src/test/results/clientpositive/join33.q.out | 4 +-
ql/src/test/results/clientpositive/join34.q.out | 6 +-
ql/src/test/results/clientpositive/join35.q.out | 6 +-
ql/src/test/results/clientpositive/join9.q.out | 4 +-
.../results/clientpositive/join_map_ppr.q.out | 16 +-
.../clientpositive/list_bucket_dml_14.q.out | 4 +-
.../clientpositive/llap/autoColumnStats_2.q.out | 2 +-
.../results/clientpositive/llap/bucket2.q.out | 4 +-
.../results/clientpositive/llap/bucket4.q.out | 4 +-
.../results/clientpositive/llap/bucket5.q.out | 20 +-
.../clientpositive/llap/bucket_many.q.out | 4 +-
.../clientpositive/llap/bucketmapjoin1.q.out | 4 +-
.../clientpositive/llap/bucketmapjoin2.q.out | 4 +-
.../clientpositive/llap/bucketmapjoin3.q.out | 4 +-
.../clientpositive/llap/bucketmapjoin4.q.out | 4 +-
...names_with_leading_and_trailing_spaces.q.out | 4 +-
.../llap/count_dist_rewrite.q.out | 1169 ++++++++++++
.../llap/disable_merge_for_bucketing.q.out | 4 +-
.../llap/dynamic_semijoin_reduction.q.out | 2 +-
.../llap/dynamic_semijoin_user_level.q.out | 2 +-
.../clientpositive/llap/join32_lessSize.q.out | 8 +-
.../clientpositive/llap/metadataonly1.q.out | 40 +-
.../clientpositive/llap/orc_create.q.out | 4 +-
.../clientpositive/llap/orc_llap_counters.q.out | 2 +-
.../clientpositive/llap/orc_ppd_basic.q.out | 230 ---
.../llap/orc_ppd_schema_evol_3a.q.out | 6 +-
.../llap/reduce_deduplicate.q.out | 4 +-
.../results/clientpositive/llap/sample1.q.out | 4 +-
.../results/clientpositive/llap/stats11.q.out | 4 +-
.../clientpositive/llap/subquery_scalar.q.out | 2 +-
.../results/clientpositive/llap/sysdb.q.out | 10 +-
ql/src/test/results/clientpositive/mm_all.q.out | 35 +-
.../results/clientpositive/nullgroup4.q.out | 41 +-
.../results/clientpositive/order_by_pos.q.out | 129 ++
.../parquet_array_null_element.q.out | 2 +-
.../results/clientpositive/parquet_create.q.out | 2 +-
.../parquet_int96_timestamp.q.out | 4 +-
.../clientpositive/part_inherit_tbl_props.q.out | 2 +-
.../part_inherit_tbl_props_empty.q.out | 2 +-
.../part_inherit_tbl_props_with_star.q.out | 2 +-
.../clientpositive/partial_column_stats.q.out | 2 +-
.../partition_coltype_literals.q.out | 8 +-
ql/src/test/results/clientpositive/pcr.q.out | 32 +-
.../results/clientpositive/perf/query16.q.out | 318 ++--
.../results/clientpositive/perf/query28.q.out | 58 +-
.../results/clientpositive/perf/query4.q.out | 1128 +++++++++++
.../results/clientpositive/perf/query47.q.out | 357 ++++
.../results/clientpositive/perf/query57.q.out | 351 ++++
.../results/clientpositive/perf/query74.q.out | 529 ++++++
.../results/clientpositive/perf/query94.q.out | 318 ++--
.../results/clientpositive/perf/query95.q.out | 302 +--
.../results/clientpositive/quotedid_stats.q.out | 2 +-
.../clientpositive/rand_partitionpruner2.q.out | 16 +-
.../clientpositive/rcfile_default_format.q.out | 6 +-
.../test/results/clientpositive/sample1.q.out | 16 +-
.../test/results/clientpositive/sample2.q.out | 16 +-
.../test/results/clientpositive/sample4.q.out | 16 +-
.../test/results/clientpositive/sample5.q.out | 16 +-
.../test/results/clientpositive/sample6.q.out | 16 +-
.../test/results/clientpositive/sample7.q.out | 16 +-
.../clientpositive/show_tblproperties.q.out | 10 +-
.../results/clientpositive/spark/bucket2.q.out | 4 +-
.../results/clientpositive/spark/bucket4.q.out | 4 +-
.../results/clientpositive/spark/bucket5.q.out | 8 +-
.../spark/bucket_map_join_spark1.q.out | 4 +-
.../spark/bucket_map_join_spark2.q.out | 4 +-
.../spark/bucket_map_join_spark3.q.out | 4 +-
.../clientpositive/spark/bucketmapjoin1.q.out | 4 +-
.../clientpositive/spark/bucketmapjoin2.q.out | 4 +-
.../clientpositive/spark/bucketmapjoin3.q.out | 4 +-
.../clientpositive/spark/bucketmapjoin4.q.out | 4 +-
.../clientpositive/spark/bucketmapjoin5.q.out | 4 +-
.../spark/bucketmapjoin_negative.q.out | 4 +-
.../spark/bucketmapjoin_negative2.q.out | 4 +-
.../spark/disable_merge_for_bucketing.q.out | 4 +-
.../clientpositive/spark/groupby_map_ppr.q.out | 4 +-
.../spark/groupby_map_ppr_multi_distinct.q.out | 4 +-
.../clientpositive/spark/groupby_ppr.q.out | 4 +-
.../spark/groupby_ppr_multi_distinct.q.out | 4 +-
.../spark/groupby_sort_1_23.q.out | 20 +-
.../spark/groupby_sort_skew_1_23.q.out | 20 +-
.../clientpositive/spark/input_part2.q.out | 8 +-
.../results/clientpositive/spark/join17.q.out | 4 +-
.../results/clientpositive/spark/join26.q.out | 4 +-
.../results/clientpositive/spark/join32.q.out | 4 +-
.../clientpositive/spark/join32_lessSize.q.out | 8 +-
.../results/clientpositive/spark/join33.q.out | 4 +-
.../results/clientpositive/spark/join34.q.out | 4 +-
.../results/clientpositive/spark/join35.q.out | 4 +-
.../results/clientpositive/spark/join9.q.out | 4 +-
.../clientpositive/spark/join_map_ppr.q.out | 4 +-
.../clientpositive/spark/nullgroup4.q.out | 31 +-
.../test/results/clientpositive/spark/pcr.q.out | 8 +-
.../spark/reduce_deduplicate.q.out | 4 +-
.../results/clientpositive/spark/sample1.q.out | 4 +-
.../results/clientpositive/spark/sample2.q.out | 4 +-
.../results/clientpositive/spark/sample4.q.out | 4 +-
.../results/clientpositive/spark/sample5.q.out | 4 +-
.../results/clientpositive/spark/sample6.q.out | 4 +-
.../results/clientpositive/spark/sample7.q.out | 4 +-
.../results/clientpositive/spark/stats0.q.out | 8 +-
.../results/clientpositive/spark/stats3.q.out | 2 +-
ql/src/test/results/clientpositive/stats0.q.out | 20 +-
ql/src/test/results/clientpositive/stats3.q.out | 2 +-
.../temp_table_display_colstats_tbllvl.q.out | 6 +-
.../results/clientpositive/tez/tez-tag.q.out | 301 +++
.../test/results/clientpositive/udf_count.q.out | 39 +-
.../clientpositive/unicode_notation.q.out | 6 +-
.../unset_table_view_property.q.out | 18 +-
.../clientpositive/vector_empty_where.q.out | 300 ++-
266 files changed, 13050 insertions(+), 2477 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/itests/src/test/resources/testconfiguration.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
----------------------------------------------------------------------
diff --cc metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
index b13b0a4,ff8412c..e7bbd62
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
@@@ -1964,60 -1969,13 +1972,68 @@@ public class MetaStoreUtils
}
return metaException;
}
+
+ public static List<String> getColumnNames(List<FieldSchema> schema) {
+ List<String> cols = new ArrayList<>();
+ for (FieldSchema fs : schema) {
+ cols.add(fs.getName());
+ }
+ return cols;
+ }
+ // TODO The following two utility methods can be moved to AcidUtils once no class in metastore is relying on them,
+ // right now ObjectStore.getAllMmTablesForCleanup is calling these method
+ /**
+ * Checks if a table is an ACID table that only supports INSERT, but not UPDATE/DELETE
+ * @param params table properties
+ * @return true if table is an INSERT_ONLY table, false otherwise
+ */
+ // TODO# also check that transactional is true
+ public static boolean isInsertOnlyTable(Map<String, String> params) {
+ return isInsertOnlyTable(params, false);
+ }
+
+ public static boolean isInsertOnlyTable(Map<String, String> params, boolean isCtas) {
+ String transactionalProp = params.get(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES);
+ return (transactionalProp != null && "insert_only".equalsIgnoreCase(transactionalProp));
+ }
+
+ public static boolean isInsertOnlyTable(Properties params) {
+ // TODO# redirect for now - fix before merge
+ HashMap<String, String> testMap = new HashMap<String, String>();
+ for (String n : params.stringPropertyNames()) {
+ testMap.put(n, params.getProperty(n));
+ }
+ return isInsertOnlyTable(testMap);
+ }
+
+ /** The method for altering table props; may set the table to MM, non-MM, or not affect MM. */
+ public static Boolean isToInsertOnlyTable(Map<String, String> props) {
+ // TODO# Setting these separately is a very hairy issue in certain combinations, since we
+ // cannot decide what type of table this becomes without taking both into account, and
+ // in many cases the conversion might be illegal.
+ // The only thing we allow is tx = true w/o tx-props, for backward compat.
+ String transactional = props.get(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL);
+ String transactionalProp = props.get(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES);
+ if (transactional == null && transactionalProp == null) return null; // Not affected.
+ boolean isSetToTxn = "true".equalsIgnoreCase(transactional);
+ if (transactionalProp == null) {
+ if (isSetToTxn) return false; // Assume the full ACID table.
+ throw new RuntimeException("Cannot change '" + hive_metastoreConstants.TABLE_IS_TRANSACTIONAL
+ + "' without '" + hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES + "'");
+ }
+ if (!"insert_only".equalsIgnoreCase(transactionalProp)) return false; // Not MM.
+ if (!isSetToTxn) {
+ throw new RuntimeException("Cannot set '"
+ + hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES + "' to 'insert_only' without "
+ + "setting '" + hive_metastoreConstants.TABLE_IS_TRANSACTIONAL + "' to 'true'");
+ }
+ return true;
+ }
+
+ public static boolean isRemovedInsertOnlyTable(Set<String> removedSet) {
+ boolean hasTxn = removedSet.contains(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL),
+ hasProps = removedSet.contains(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES);
+ return hasTxn || hasProps;
+ }
}
http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/metastore/src/java/org/apache/hadoop/hive/metastore/Warehouse.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
----------------------------------------------------------------------
diff --cc metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
index e0302fb,b28ea73..9542990
--- a/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
+++ b/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
@@@ -63,7 -63,8 +63,8 @@@ import org.mockito.Mockito
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.base.Supplier;
+ import com.google.common.collect.ImmutableList;
-
import javax.jdo.Query;
public class TestObjectStore {
http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/78f28c88/ql/src/java/org/apache/hadoop/hive/ql/plan/CreateTableDesc.java
----------------------------------------------------------------------
[40/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-14671 : merge master into hive-14535 (Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/47178498
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/47178498
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/47178498
Branch: refs/heads/master
Commit: 471784980adb079f6610449dd3ca855a5605121c
Parents: f159b5a 23478cf
Author: sergey <se...@apache.org>
Authored: Fri Sep 29 14:01:30 2017 -0700
Committer: sergey <se...@apache.org>
Committed: Fri Sep 29 14:01:30 2017 -0700
----------------------------------------------------------------------
.../org/apache/hadoop/hive/conf/HiveConf.java | 2 +-
.../hadoop/hive/druid/io/DruidOutputFormat.java | 15 +-
.../hadoop/hive/druid/serde/DruidSerDe.java | 9 +
.../apache/hive/hcatalog/common/HCatUtil.java | 141 ++-
.../apache/hadoop/hive/ql/TestAcidOnTez.java | 87 ++
.../hive/llap/cli/LlapOptionsProcessor.java | 16 +
.../hadoop/hive/llap/cli/LlapSliderUtils.java | 17 +-
.../llap/cli/LlapStatusOptionsProcessor.java | 33 +-
.../hive/llap/cli/LlapStatusServiceDriver.java | 206 ++--
.../hive/llap/io/api/impl/LlapRecordReader.java | 3 +-
llap-server/src/main/resources/package.py | 8 +-
llap-server/src/main/resources/templates.py | 5 +-
.../hive/metastore/MetaStoreDirectSql.java | 48 +-
ql/pom.xml | 4 +
.../hive/llap/LlapOutputFormatService.java | 3 +-
.../java/org/apache/hadoop/hive/ql/Driver.java | 111 +-
.../org/apache/hadoop/hive/ql/QueryState.java | 14 +
.../org/apache/hadoop/hive/ql/exec/DDLTask.java | 18 +-
.../apache/hadoop/hive/ql/exec/Utilities.java | 10 -
.../hadoop/hive/ql/exec/mr/MapredLocalTask.java | 7 +-
.../hive/ql/exec/tez/TezSessionPoolManager.java | 19 +-
.../hive/ql/exec/tez/TezSessionPoolSession.java | 4 +-
.../hive/ql/exec/tez/TezSessionState.java | 4 +-
.../apache/hadoop/hive/ql/exec/tez/TezTask.java | 3 +
.../hive/ql/exec/tez/WorkloadManager.java | 11 +-
.../ql/io/orc/encoded/EncodedReaderImpl.java | 210 ++--
.../apache/hadoop/hive/ql/metadata/Hive.java | 6 +-
.../hive/ql/parse/BaseSemanticAnalyzer.java | 13 +-
.../hadoop/hive/ql/parse/CalcitePlanner.java | 10 +-
.../hadoop/hive/ql/parse/SemanticAnalyzer.java | 19 +-
.../ql/parse/UpdateDeleteSemanticAnalyzer.java | 2 +-
.../hadoop/hive/ql/plan/CreateTableDesc.java | 2 +-
.../hadoop/hive/ql/session/SessionState.java | 15 +
.../apache/hadoop/hive/ql/stats/StatsUtils.java | 3 +-
.../ql/udf/generic/GenericUDTFGetSplits.java | 90 +-
.../hive/ql/exec/tez/TestTezSessionPool.java | 16 +-
.../queries/clientpositive/mapjoin_addjar.q | 13 +-
.../test/results/clientnegative/external2.q.out | 2 +-
.../clientpositive/annotate_stats_select.q.out | 16 +-
.../clientpositive/llap/lateral_view.q.out | 32 +-
.../clientpositive/llap/lvj_mapjoin.q.out | 60 +-
...chema_evol_orc_nonvec_part_all_complex.q.out | 18 +-
.../schema_evol_orc_vec_part_all_complex.q.out | 18 +-
...hema_evol_text_nonvec_part_all_complex.q.out | 18 +-
.../schema_evol_text_vec_part_all_complex.q.out | 18 +-
...hema_evol_text_vecrow_part_all_complex.q.out | 18 +-
.../llap/tez_join_result_complex.q.out | 212 ++--
.../clientpositive/llap/unionDistinct_1.q.out | 4 +-
.../llap/vector_complex_all.q.out | 86 +-
.../llap/vector_complex_join.q.out | 14 +-
.../results/clientpositive/mapjoin_addjar.q.out | 1045 +++++++++++++++++-
.../clientpositive/spark/mapjoin_addjar.q.out | 1045 +++++++++++++++++-
52 files changed, 3124 insertions(+), 679 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/47178498/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/47178498/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/Driver.java
index 3a0f228,f01edf8..6bfec11
--- a/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
@@@ -1205,17 -1231,17 +1231,17 @@@ public class Driver implements CommandP
//so this makes (file name -> data) mapping stable
acidSinks.sort((FileSinkDesc fsd1, FileSinkDesc fsd2) -> fsd1.getDirName().compareTo(fsd2.getDirName()));
for (FileSinkDesc desc : acidSinks) {
- desc.setTransactionId(txnMgr.getCurrentTxnId());
+ desc.setTransactionId(queryTxnMgr.getCurrentTxnId());
//it's possible to have > 1 FileSink writing to the same table/partition
//e.g. Merge stmt, multi-insert stmt when mixing DP and SP writes
- desc.setStatementId(txnMgr.getWriteIdAndIncrement());
+ desc.setStatementId(queryTxnMgr.getWriteIdAndIncrement());
}
}
- /*It's imperative that {@code acquireLocks()} is called for all commands so that
+ /*It's imperative that {@code acquireLocks()} is called for all commands so that
HiveTxnManager can transition its state machine correctly*/
- txnMgr.acquireLocks(plan, ctx, userFromUGI, lDrvState);
- if(txnMgr.recordSnapshot(plan)) {
- recordValidTxns();
+ queryTxnMgr.acquireLocks(plan, ctx, userFromUGI, lDrvState);
+ if(queryTxnMgr.recordSnapshot(plan)) {
+ recordValidTxns(queryTxnMgr);
}
return 0;
} catch (Exception e) {
http://git-wip-us.apache.org/repos/asf/hive/blob/47178498/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/47178498/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/47178498/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/47178498/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java
index fb5d566,06e00d7..41fbb0c
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java
@@@ -120,10 -122,11 +122,12 @@@ public abstract class BaseSemanticAnaly
*/
protected Set<FileSinkDesc> acidFileSinks = new HashSet<FileSinkDesc>();
- // whether any ACID table is involved in a query
+ // whether any ACID table or Insert-only (mm) table is involved in a query
+ // They both require DbTxnManager and both need to recordValidTxns when acquiring locks in Driver
protected boolean acidInQuery;
+ protected HiveTxnManager txnManager;
+
public static final int HIVE_COLUMN_ORDER_ASC = 1;
public static final int HIVE_COLUMN_ORDER_DESC = 0;
public static final int HIVE_COLUMN_NULLS_FIRST = 0;
http://git-wip-us.apache.org/repos/asf/hive/blob/47178498/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/47178498/ql/src/java/org/apache/hadoop/hive/ql/plan/CreateTableDesc.java
----------------------------------------------------------------------
[31/50] [abbrv] hive git commit: cherry picked HIVE-15899 from master
Posted by se...@apache.org.
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/test/results/clientpositive/autoColumnStats_4.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/autoColumnStats_4.q.out b/ql/src/test/results/clientpositive/autoColumnStats_4.q.out
index a0581f8..7a5f8b4 100644
--- a/ql/src/test/results/clientpositive/autoColumnStats_4.q.out
+++ b/ql/src/test/results/clientpositive/autoColumnStats_4.q.out
@@ -136,6 +136,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acid_dtt
+ Write Type: INSERT
Stage: Stage-3
Stats-Aggr Operator
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/test/results/clientpositive/llap/acid_no_buckets.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/acid_no_buckets.q.out b/ql/src/test/results/clientpositive/llap/acid_no_buckets.q.out
index 34dd487..7905194 100644
--- a/ql/src/test/results/clientpositive/llap/acid_no_buckets.q.out
+++ b/ql/src/test/results/clientpositive/llap/acid_no_buckets.q.out
@@ -166,6 +166,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.srcpart_acid
+ Write Type: UPDATE
Stage: Stage-3
Stats-Aggr Operator
@@ -344,6 +345,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.srcpart_acid
+ Write Type: DELETE
Stage: Stage-3
Stats-Aggr Operator
@@ -660,6 +662,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.srcpart_acidb
+ Write Type: UPDATE
Stage: Stage-3
Stats-Aggr Operator
@@ -839,6 +842,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.srcpart_acidb
+ Write Type: DELETE
Stage: Stage-3
Stats-Aggr Operator
@@ -1154,6 +1158,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.srcpart_acidv
+ Write Type: UPDATE
Stage: Stage-3
Stats-Aggr Operator
@@ -1332,6 +1337,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.srcpart_acidv
+ Write Type: DELETE
Stage: Stage-3
Stats-Aggr Operator
@@ -1648,6 +1654,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.srcpart_acidvb
+ Write Type: UPDATE
Stage: Stage-3
Stats-Aggr Operator
@@ -1827,6 +1834,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.srcpart_acidvb
+ Write Type: DELETE
Stage: Stage-3
Stats-Aggr Operator
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/test/results/clientpositive/llap/dynamic_semijoin_reduction_3.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/dynamic_semijoin_reduction_3.q.out b/ql/src/test/results/clientpositive/llap/dynamic_semijoin_reduction_3.q.out
index 8aee753..095ae9d 100644
--- a/ql/src/test/results/clientpositive/llap/dynamic_semijoin_reduction_3.q.out
+++ b/ql/src/test/results/clientpositive/llap/dynamic_semijoin_reduction_3.q.out
@@ -256,6 +256,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acidtbl
+ Write Type: DELETE
Stage: Stage-6
Stats-Aggr Operator
@@ -269,6 +270,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acidtbl
+ Write Type: UPDATE
Stage: Stage-7
Stats-Aggr Operator
@@ -295,6 +297,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acidtbl
+ Write Type: INSERT
Stage: Stage-9
Stats-Aggr Operator
@@ -427,6 +430,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acidtbl
+ Write Type: INSERT
Stage: Stage-3
Stats-Aggr Operator
@@ -727,6 +731,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acidtbl
+ Write Type: DELETE
Stage: Stage-6
Stats-Aggr Operator
@@ -740,6 +745,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acidtbl
+ Write Type: UPDATE
Stage: Stage-7
Stats-Aggr Operator
@@ -766,6 +772,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acidtbl
+ Write Type: INSERT
Stage: Stage-9
Stats-Aggr Operator
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/test/results/clientpositive/llap/dynpart_sort_optimization_acid.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/dynpart_sort_optimization_acid.q.out b/ql/src/test/results/clientpositive/llap/dynpart_sort_optimization_acid.q.out
index 6488e9e..16c0b29 100644
--- a/ql/src/test/results/clientpositive/llap/dynpart_sort_optimization_acid.q.out
+++ b/ql/src/test/results/clientpositive/llap/dynpart_sort_optimization_acid.q.out
@@ -138,6 +138,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acid_part
+ Write Type: UPDATE
Stage: Stage-3
Stats-Aggr Operator
@@ -232,6 +233,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acid_part
+ Write Type: UPDATE
Stage: Stage-3
Stats-Aggr Operator
@@ -418,6 +420,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acid_part_sdpo
+ Write Type: UPDATE
Stage: Stage-3
Stats-Aggr Operator
@@ -512,6 +515,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acid_part_sdpo
+ Write Type: UPDATE
Stage: Stage-3
Stats-Aggr Operator
@@ -708,6 +712,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acid_2l_part
+ Write Type: UPDATE
Stage: Stage-3
Stats-Aggr Operator
@@ -803,6 +808,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acid_2l_part
+ Write Type: UPDATE
Stage: Stage-3
Stats-Aggr Operator
@@ -927,6 +933,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acid_2l_part
+ Write Type: DELETE
Stage: Stage-3
Stats-Aggr Operator
@@ -1120,6 +1127,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acid_2l_part_sdpo
+ Write Type: UPDATE
Stage: Stage-3
Stats-Aggr Operator
@@ -1215,6 +1223,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acid_2l_part_sdpo
+ Write Type: UPDATE
Stage: Stage-3
Stats-Aggr Operator
@@ -1339,6 +1348,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acid_2l_part_sdpo
+ Write Type: DELETE
Stage: Stage-3
Stats-Aggr Operator
@@ -1534,6 +1544,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acid_2l_part_sdpo_no_cp
+ Write Type: UPDATE
Stage: Stage-3
Stats-Aggr Operator
@@ -1630,6 +1641,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acid_2l_part_sdpo_no_cp
+ Write Type: UPDATE
Stage: Stage-3
Stats-Aggr Operator
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/test/results/clientpositive/llap/mm_all.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/mm_all.q.out b/ql/src/test/results/clientpositive/llap/mm_all.q.out
index f184ba6..0adbddb 100644
--- a/ql/src/test/results/clientpositive/llap/mm_all.q.out
+++ b/ql/src/test/results/clientpositive/llap/mm_all.q.out
@@ -99,6 +99,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.part_mm
+ Write Type: INSERT
micromanaged table: true
Stage: Stage-3
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/test/results/clientpositive/llap/sqlmerge.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/sqlmerge.q.out b/ql/src/test/results/clientpositive/llap/sqlmerge.q.out
index 61349f8..01fe124 100644
--- a/ql/src/test/results/clientpositive/llap/sqlmerge.q.out
+++ b/ql/src/test/results/clientpositive/llap/sqlmerge.q.out
@@ -226,6 +226,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acidtbl
+ Write Type: DELETE
Stage: Stage-6
Stats-Aggr Operator
@@ -239,6 +240,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acidtbl
+ Write Type: UPDATE
Stage: Stage-7
Stats-Aggr Operator
@@ -265,6 +267,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acidtbl
+ Write Type: INSERT
Stage: Stage-9
Stats-Aggr Operator
@@ -367,6 +370,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.acidtbl
+ Write Type: INSERT
Stage: Stage-3
Stats-Aggr Operator
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/test/results/clientpositive/mm_all.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/mm_all.q.out b/ql/src/test/results/clientpositive/mm_all.q.out
index 4162ce9..fa9e4a7 100644
--- a/ql/src/test/results/clientpositive/mm_all.q.out
+++ b/ql/src/test/results/clientpositive/mm_all.q.out
@@ -104,6 +104,7 @@ STAGE PLANS:
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde
name: default.part_mm
+ Write Type: INSERT
micromanaged table: true
Stage: Stage-2
[35/50] [abbrv] hive git commit: HIVE-15212 : merge branch into
master - clean up some pre-merge TODOs (Sergey Shelukhin)
Posted by se...@apache.org.
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
index 85d1324..0b7fe01 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
@@ -45,7 +45,6 @@ public class LoadTableDesc extends LoadDesc implements Serializable {
// TODO: the below seems like they should just be combined into partitionDesc
private org.apache.hadoop.hive.ql.plan.TableDesc table;
private Map<String, String> partitionSpec; // NOTE: this partitionSpec has to be ordered map
- private boolean commitMmWriteId = true;
public LoadTableDesc(final LoadTableDesc o) {
super(o.getSourcePath(), o.getWriteType());
@@ -65,8 +64,10 @@ public class LoadTableDesc extends LoadDesc implements Serializable {
final boolean replace,
final AcidUtils.Operation writeType, Long currentTransactionId) {
super(sourcePath, writeType);
- Utilities.LOG14535.info("creating part LTD from " + sourcePath + " to "
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("creating part LTD from " + sourcePath + " to "
+ ((table.getProperties() == null) ? "null" : table.getTableName()));
+ }
init(table, partitionSpec, replace, currentTransactionId);
}
@@ -110,7 +111,9 @@ public class LoadTableDesc extends LoadDesc implements Serializable {
final AcidUtils.Operation writeType,
boolean isReplace, Long txnId) {
super(sourcePath, writeType);
- Utilities.LOG14535.info("creating LTD from " + sourcePath + " to " + table.getTableName()/*, new Exception()*/);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("creating LTD from " + sourcePath + " to " + table.getTableName());
+ }
this.dpCtx = dpCtx;
if (dpCtx != null && dpCtx.getPartSpec() != null && partitionSpec == null) {
init(table, dpCtx.getPartSpec(), isReplace, txnId);
@@ -211,12 +214,4 @@ public class LoadTableDesc extends LoadDesc implements Serializable {
public void setStmtId(int stmtId) {
this.stmtId = stmtId;
}
-
- public void setIntermediateInMmWrite(boolean b) {
- this.commitMmWriteId = !b;
- }
-
- public boolean isCommitMmWrite() {
- return commitMmWriteId;
- }
}
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/plan/MoveWork.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/MoveWork.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/MoveWork.java
index f6303ba..17d2f31 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/MoveWork.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/MoveWork.java
@@ -80,8 +80,10 @@ public class MoveWork implements Serializable {
final LoadTableDesc loadTableWork, final LoadFileDesc loadFileWork,
boolean checkFileFormat, boolean srcLocal, LineageState lineageState) {
this(inputs, outputs, lineageState);
- Utilities.LOG14535.info("Creating MoveWork " + System.identityHashCode(this)
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("Creating MoveWork " + System.identityHashCode(this)
+ " with " + loadTableWork + "; " + loadFileWork);
+ }
this.loadTableWork = loadTableWork;
this.loadFileWork = loadFileWork;
this.checkFileFormat = checkFileFormat;
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/stats/fs/FSStatsAggregator.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/stats/fs/FSStatsAggregator.java b/ql/src/java/org/apache/hadoop/hive/ql/stats/fs/FSStatsAggregator.java
index 03444c0..74e4387 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/stats/fs/FSStatsAggregator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/stats/fs/FSStatsAggregator.java
@@ -50,7 +50,9 @@ public class FSStatsAggregator implements StatsAggregator {
List<String> statsDirs = scc.getStatsTmpDirs();
assert statsDirs.size() == 1 : "Found multiple stats dirs: " + statsDirs;
Path statsDir = new Path(statsDirs.get(0));
- Utilities.LOG14535.info("About to read stats from : " + statsDir);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("About to read stats from : " + statsDir);
+ }
statsMap = new HashMap<String, Map<String,String>>();
try {
@@ -70,13 +72,12 @@ public class FSStatsAggregator implements StatsAggregator {
} finally {
SerializationUtilities.releaseKryo(kryo);
}
- Utilities.LOG14535.info("Read stats : " +statsMap);
statsList.add(statsMap);
in.close();
}
return true;
} catch (IOException e) {
- Utilities.LOG14535.error("Failed to read stats from filesystem ", e);
+ Utilities.FILE_OP_LOGGER.error("Failed to read stats from filesystem ", e);
return false;
}
}
http://git-wip-us.apache.org/repos/asf/hive/blob/55d9ceee/ql/src/java/org/apache/hadoop/hive/ql/stats/fs/FSStatsPublisher.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/stats/fs/FSStatsPublisher.java b/ql/src/java/org/apache/hadoop/hive/ql/stats/fs/FSStatsPublisher.java
index a92465f..e8b878c 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/stats/fs/FSStatsPublisher.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/stats/fs/FSStatsPublisher.java
@@ -77,7 +77,6 @@ public class FSStatsPublisher implements StatsPublisher {
@Override
public boolean publishStat(String partKV, Map<String, String> stats) {
- Utilities.LOG14535.info("Putting in map : " + partKV + "\t" + stats);
// we need to do new hashmap, since stats object is reused across calls.
Map<String,String> cpy = new HashMap<String, String>(stats);
Map<String,String> statMap = statsMap.get(partKV);
@@ -106,7 +105,9 @@ public class FSStatsPublisher implements StatsPublisher {
statsFile = new Path(statsDir, StatsSetupConst.STATS_FILE_PREFIX
+ conf.getInt("mapred.task.partition", 0));
}
- Utilities.LOG14535.info("About to create stats file for this task : " + statsFile);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("About to create stats file for this task : " + statsFile);
+ }
Output output = new Output(statsFile.getFileSystem(conf).create(statsFile,true));
LOG.debug("Created file : " + statsFile);
LOG.debug("Writing stats in it : " + statsMap);
@@ -119,7 +120,7 @@ public class FSStatsPublisher implements StatsPublisher {
output.close();
return true;
} catch (IOException e) {
- Utilities.LOG14535.error("Failed to persist stats on filesystem",e);
+ Utilities.FILE_OP_LOGGER.error("Failed to persist stats on filesystem",e);
return false;
}
}
[13/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Wei Zheng)
Posted by se...@apache.org.
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/standalone-metastore/src/gen/thrift/gen-cpp/hive_metastore_types.cpp
----------------------------------------------------------------------
diff --cc standalone-metastore/src/gen/thrift/gen-cpp/hive_metastore_types.cpp
index 0000000,5c09fdd..3e4c754
mode 000000,100644..100644
--- a/standalone-metastore/src/gen/thrift/gen-cpp/hive_metastore_types.cpp
+++ b/standalone-metastore/src/gen/thrift/gen-cpp/hive_metastore_types.cpp
@@@ -1,0 -1,21817 +1,21819 @@@
+ /**
+ * Autogenerated by Thrift Compiler (0.9.3)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ * @generated
+ */
+ #include "hive_metastore_types.h"
+
+ #include <algorithm>
+ #include <ostream>
+
+ #include <thrift/TToString.h>
+
+ namespace Apache { namespace Hadoop { namespace Hive {
+
+ int _kHiveObjectTypeValues[] = {
+ HiveObjectType::GLOBAL,
+ HiveObjectType::DATABASE,
+ HiveObjectType::TABLE,
+ HiveObjectType::PARTITION,
+ HiveObjectType::COLUMN
+ };
+ const char* _kHiveObjectTypeNames[] = {
+ "GLOBAL",
+ "DATABASE",
+ "TABLE",
+ "PARTITION",
+ "COLUMN"
+ };
+ const std::map<int, const char*> _HiveObjectType_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(5, _kHiveObjectTypeValues, _kHiveObjectTypeNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
+
+ int _kPrincipalTypeValues[] = {
+ PrincipalType::USER,
+ PrincipalType::ROLE,
+ PrincipalType::GROUP
+ };
+ const char* _kPrincipalTypeNames[] = {
+ "USER",
+ "ROLE",
+ "GROUP"
+ };
+ const std::map<int, const char*> _PrincipalType_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(3, _kPrincipalTypeValues, _kPrincipalTypeNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
+
+ int _kPartitionEventTypeValues[] = {
+ PartitionEventType::LOAD_DONE
+ };
+ const char* _kPartitionEventTypeNames[] = {
+ "LOAD_DONE"
+ };
+ const std::map<int, const char*> _PartitionEventType_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(1, _kPartitionEventTypeValues, _kPartitionEventTypeNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
+
+ int _kTxnStateValues[] = {
+ TxnState::COMMITTED,
+ TxnState::ABORTED,
+ TxnState::OPEN
+ };
+ const char* _kTxnStateNames[] = {
+ "COMMITTED",
+ "ABORTED",
+ "OPEN"
+ };
+ const std::map<int, const char*> _TxnState_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(3, _kTxnStateValues, _kTxnStateNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
+
+ int _kLockLevelValues[] = {
+ LockLevel::DB,
+ LockLevel::TABLE,
+ LockLevel::PARTITION
+ };
+ const char* _kLockLevelNames[] = {
+ "DB",
+ "TABLE",
+ "PARTITION"
+ };
+ const std::map<int, const char*> _LockLevel_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(3, _kLockLevelValues, _kLockLevelNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
+
+ int _kLockStateValues[] = {
+ LockState::ACQUIRED,
+ LockState::WAITING,
+ LockState::ABORT,
+ LockState::NOT_ACQUIRED
+ };
+ const char* _kLockStateNames[] = {
+ "ACQUIRED",
+ "WAITING",
+ "ABORT",
+ "NOT_ACQUIRED"
+ };
+ const std::map<int, const char*> _LockState_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(4, _kLockStateValues, _kLockStateNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
+
+ int _kLockTypeValues[] = {
+ LockType::SHARED_READ,
+ LockType::SHARED_WRITE,
+ LockType::EXCLUSIVE
+ };
+ const char* _kLockTypeNames[] = {
+ "SHARED_READ",
+ "SHARED_WRITE",
+ "EXCLUSIVE"
+ };
+ const std::map<int, const char*> _LockType_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(3, _kLockTypeValues, _kLockTypeNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
+
+ int _kCompactionTypeValues[] = {
+ CompactionType::MINOR,
+ CompactionType::MAJOR
+ };
+ const char* _kCompactionTypeNames[] = {
+ "MINOR",
+ "MAJOR"
+ };
+ const std::map<int, const char*> _CompactionType_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(2, _kCompactionTypeValues, _kCompactionTypeNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
+
+ int _kGrantRevokeTypeValues[] = {
+ GrantRevokeType::GRANT,
+ GrantRevokeType::REVOKE
+ };
+ const char* _kGrantRevokeTypeNames[] = {
+ "GRANT",
+ "REVOKE"
+ };
+ const std::map<int, const char*> _GrantRevokeType_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(2, _kGrantRevokeTypeValues, _kGrantRevokeTypeNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
+
+ int _kDataOperationTypeValues[] = {
+ DataOperationType::SELECT,
+ DataOperationType::INSERT,
+ DataOperationType::UPDATE,
+ DataOperationType::DELETE,
+ DataOperationType::UNSET,
+ DataOperationType::NO_TXN
+ };
+ const char* _kDataOperationTypeNames[] = {
+ "SELECT",
+ "INSERT",
+ "UPDATE",
+ "DELETE",
+ "UNSET",
+ "NO_TXN"
+ };
+ const std::map<int, const char*> _DataOperationType_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(6, _kDataOperationTypeValues, _kDataOperationTypeNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
+
+ int _kEventRequestTypeValues[] = {
+ EventRequestType::INSERT,
+ EventRequestType::UPDATE,
+ EventRequestType::DELETE
+ };
+ const char* _kEventRequestTypeNames[] = {
+ "INSERT",
+ "UPDATE",
+ "DELETE"
+ };
+ const std::map<int, const char*> _EventRequestType_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(3, _kEventRequestTypeValues, _kEventRequestTypeNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
+
+ int _kFunctionTypeValues[] = {
+ FunctionType::JAVA
+ };
+ const char* _kFunctionTypeNames[] = {
+ "JAVA"
+ };
+ const std::map<int, const char*> _FunctionType_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(1, _kFunctionTypeValues, _kFunctionTypeNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
+
+ int _kResourceTypeValues[] = {
+ ResourceType::JAR,
+ ResourceType::FILE,
+ ResourceType::ARCHIVE
+ };
+ const char* _kResourceTypeNames[] = {
+ "JAR",
+ "FILE",
+ "ARCHIVE"
+ };
+ const std::map<int, const char*> _ResourceType_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(3, _kResourceTypeValues, _kResourceTypeNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
+
+ int _kFileMetadataExprTypeValues[] = {
+ FileMetadataExprType::ORC_SARG
+ };
+ const char* _kFileMetadataExprTypeNames[] = {
+ "ORC_SARG"
+ };
+ const std::map<int, const char*> _FileMetadataExprType_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(1, _kFileMetadataExprTypeValues, _kFileMetadataExprTypeNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
+
+ int _kClientCapabilityValues[] = {
- ClientCapability::TEST_CAPABILITY
++ ClientCapability::TEST_CAPABILITY,
++ ClientCapability::INSERT_ONLY_TABLES
+ };
+ const char* _kClientCapabilityNames[] = {
- "TEST_CAPABILITY"
++ "TEST_CAPABILITY",
++ "INSERT_ONLY_TABLES"
+ };
-const std::map<int, const char*> _ClientCapability_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(1, _kClientCapabilityValues, _kClientCapabilityNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
++const std::map<int, const char*> _ClientCapability_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(2, _kClientCapabilityValues, _kClientCapabilityNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
+
+
+ Version::~Version() throw() {
+ }
+
+
+ void Version::__set_version(const std::string& val) {
+ this->version = val;
+ }
+
+ void Version::__set_comments(const std::string& val) {
+ this->comments = val;
+ }
+
+ uint32_t Version::read(::apache::thrift::protocol::TProtocol* iprot) {
+
+ apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
+ uint32_t xfer = 0;
+ std::string fname;
+ ::apache::thrift::protocol::TType ftype;
+ int16_t fid;
+
+ xfer += iprot->readStructBegin(fname);
+
+ using ::apache::thrift::protocol::TProtocolException;
+
+
+ while (true)
+ {
+ xfer += iprot->readFieldBegin(fname, ftype, fid);
+ if (ftype == ::apache::thrift::protocol::T_STOP) {
+ break;
+ }
+ switch (fid)
+ {
+ case 1:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->version);
+ this->__isset.version = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 2:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->comments);
+ this->__isset.comments = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ default:
+ xfer += iprot->skip(ftype);
+ break;
+ }
+ xfer += iprot->readFieldEnd();
+ }
+
+ xfer += iprot->readStructEnd();
+
+ return xfer;
+ }
+
+ uint32_t Version::write(::apache::thrift::protocol::TProtocol* oprot) const {
+ uint32_t xfer = 0;
+ apache::thrift::protocol::TOutputRecursionTracker tracker(*oprot);
+ xfer += oprot->writeStructBegin("Version");
+
+ xfer += oprot->writeFieldBegin("version", ::apache::thrift::protocol::T_STRING, 1);
+ xfer += oprot->writeString(this->version);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("comments", ::apache::thrift::protocol::T_STRING, 2);
+ xfer += oprot->writeString(this->comments);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldStop();
+ xfer += oprot->writeStructEnd();
+ return xfer;
+ }
+
+ void swap(Version &a, Version &b) {
+ using ::std::swap;
+ swap(a.version, b.version);
+ swap(a.comments, b.comments);
+ swap(a.__isset, b.__isset);
+ }
+
+ Version::Version(const Version& other0) {
+ version = other0.version;
+ comments = other0.comments;
+ __isset = other0.__isset;
+ }
+ Version& Version::operator=(const Version& other1) {
+ version = other1.version;
+ comments = other1.comments;
+ __isset = other1.__isset;
+ return *this;
+ }
+ void Version::printTo(std::ostream& out) const {
+ using ::apache::thrift::to_string;
+ out << "Version(";
+ out << "version=" << to_string(version);
+ out << ", " << "comments=" << to_string(comments);
+ out << ")";
+ }
+
+
+ FieldSchema::~FieldSchema() throw() {
+ }
+
+
+ void FieldSchema::__set_name(const std::string& val) {
+ this->name = val;
+ }
+
+ void FieldSchema::__set_type(const std::string& val) {
+ this->type = val;
+ }
+
+ void FieldSchema::__set_comment(const std::string& val) {
+ this->comment = val;
+ }
+
+ uint32_t FieldSchema::read(::apache::thrift::protocol::TProtocol* iprot) {
+
+ apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
+ uint32_t xfer = 0;
+ std::string fname;
+ ::apache::thrift::protocol::TType ftype;
+ int16_t fid;
+
+ xfer += iprot->readStructBegin(fname);
+
+ using ::apache::thrift::protocol::TProtocolException;
+
+
+ while (true)
+ {
+ xfer += iprot->readFieldBegin(fname, ftype, fid);
+ if (ftype == ::apache::thrift::protocol::T_STOP) {
+ break;
+ }
+ switch (fid)
+ {
+ case 1:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->name);
+ this->__isset.name = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 2:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->type);
+ this->__isset.type = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 3:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->comment);
+ this->__isset.comment = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ default:
+ xfer += iprot->skip(ftype);
+ break;
+ }
+ xfer += iprot->readFieldEnd();
+ }
+
+ xfer += iprot->readStructEnd();
+
+ return xfer;
+ }
+
+ uint32_t FieldSchema::write(::apache::thrift::protocol::TProtocol* oprot) const {
+ uint32_t xfer = 0;
+ apache::thrift::protocol::TOutputRecursionTracker tracker(*oprot);
+ xfer += oprot->writeStructBegin("FieldSchema");
+
+ xfer += oprot->writeFieldBegin("name", ::apache::thrift::protocol::T_STRING, 1);
+ xfer += oprot->writeString(this->name);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("type", ::apache::thrift::protocol::T_STRING, 2);
+ xfer += oprot->writeString(this->type);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("comment", ::apache::thrift::protocol::T_STRING, 3);
+ xfer += oprot->writeString(this->comment);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldStop();
+ xfer += oprot->writeStructEnd();
+ return xfer;
+ }
+
+ void swap(FieldSchema &a, FieldSchema &b) {
+ using ::std::swap;
+ swap(a.name, b.name);
+ swap(a.type, b.type);
+ swap(a.comment, b.comment);
+ swap(a.__isset, b.__isset);
+ }
+
+ FieldSchema::FieldSchema(const FieldSchema& other2) {
+ name = other2.name;
+ type = other2.type;
+ comment = other2.comment;
+ __isset = other2.__isset;
+ }
+ FieldSchema& FieldSchema::operator=(const FieldSchema& other3) {
+ name = other3.name;
+ type = other3.type;
+ comment = other3.comment;
+ __isset = other3.__isset;
+ return *this;
+ }
+ void FieldSchema::printTo(std::ostream& out) const {
+ using ::apache::thrift::to_string;
+ out << "FieldSchema(";
+ out << "name=" << to_string(name);
+ out << ", " << "type=" << to_string(type);
+ out << ", " << "comment=" << to_string(comment);
+ out << ")";
+ }
+
+
+ SQLPrimaryKey::~SQLPrimaryKey() throw() {
+ }
+
+
+ void SQLPrimaryKey::__set_table_db(const std::string& val) {
+ this->table_db = val;
+ }
+
+ void SQLPrimaryKey::__set_table_name(const std::string& val) {
+ this->table_name = val;
+ }
+
+ void SQLPrimaryKey::__set_column_name(const std::string& val) {
+ this->column_name = val;
+ }
+
+ void SQLPrimaryKey::__set_key_seq(const int32_t val) {
+ this->key_seq = val;
+ }
+
+ void SQLPrimaryKey::__set_pk_name(const std::string& val) {
+ this->pk_name = val;
+ }
+
+ void SQLPrimaryKey::__set_enable_cstr(const bool val) {
+ this->enable_cstr = val;
+ }
+
+ void SQLPrimaryKey::__set_validate_cstr(const bool val) {
+ this->validate_cstr = val;
+ }
+
+ void SQLPrimaryKey::__set_rely_cstr(const bool val) {
+ this->rely_cstr = val;
+ }
+
+ uint32_t SQLPrimaryKey::read(::apache::thrift::protocol::TProtocol* iprot) {
+
+ apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
+ uint32_t xfer = 0;
+ std::string fname;
+ ::apache::thrift::protocol::TType ftype;
+ int16_t fid;
+
+ xfer += iprot->readStructBegin(fname);
+
+ using ::apache::thrift::protocol::TProtocolException;
+
+
+ while (true)
+ {
+ xfer += iprot->readFieldBegin(fname, ftype, fid);
+ if (ftype == ::apache::thrift::protocol::T_STOP) {
+ break;
+ }
+ switch (fid)
+ {
+ case 1:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->table_db);
+ this->__isset.table_db = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 2:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->table_name);
+ this->__isset.table_name = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 3:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->column_name);
+ this->__isset.column_name = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 4:
+ if (ftype == ::apache::thrift::protocol::T_I32) {
+ xfer += iprot->readI32(this->key_seq);
+ this->__isset.key_seq = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 5:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->pk_name);
+ this->__isset.pk_name = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 6:
+ if (ftype == ::apache::thrift::protocol::T_BOOL) {
+ xfer += iprot->readBool(this->enable_cstr);
+ this->__isset.enable_cstr = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 7:
+ if (ftype == ::apache::thrift::protocol::T_BOOL) {
+ xfer += iprot->readBool(this->validate_cstr);
+ this->__isset.validate_cstr = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 8:
+ if (ftype == ::apache::thrift::protocol::T_BOOL) {
+ xfer += iprot->readBool(this->rely_cstr);
+ this->__isset.rely_cstr = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ default:
+ xfer += iprot->skip(ftype);
+ break;
+ }
+ xfer += iprot->readFieldEnd();
+ }
+
+ xfer += iprot->readStructEnd();
+
+ return xfer;
+ }
+
+ uint32_t SQLPrimaryKey::write(::apache::thrift::protocol::TProtocol* oprot) const {
+ uint32_t xfer = 0;
+ apache::thrift::protocol::TOutputRecursionTracker tracker(*oprot);
+ xfer += oprot->writeStructBegin("SQLPrimaryKey");
+
+ xfer += oprot->writeFieldBegin("table_db", ::apache::thrift::protocol::T_STRING, 1);
+ xfer += oprot->writeString(this->table_db);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("table_name", ::apache::thrift::protocol::T_STRING, 2);
+ xfer += oprot->writeString(this->table_name);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("column_name", ::apache::thrift::protocol::T_STRING, 3);
+ xfer += oprot->writeString(this->column_name);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("key_seq", ::apache::thrift::protocol::T_I32, 4);
+ xfer += oprot->writeI32(this->key_seq);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("pk_name", ::apache::thrift::protocol::T_STRING, 5);
+ xfer += oprot->writeString(this->pk_name);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("enable_cstr", ::apache::thrift::protocol::T_BOOL, 6);
+ xfer += oprot->writeBool(this->enable_cstr);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("validate_cstr", ::apache::thrift::protocol::T_BOOL, 7);
+ xfer += oprot->writeBool(this->validate_cstr);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("rely_cstr", ::apache::thrift::protocol::T_BOOL, 8);
+ xfer += oprot->writeBool(this->rely_cstr);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldStop();
+ xfer += oprot->writeStructEnd();
+ return xfer;
+ }
+
+ void swap(SQLPrimaryKey &a, SQLPrimaryKey &b) {
+ using ::std::swap;
+ swap(a.table_db, b.table_db);
+ swap(a.table_name, b.table_name);
+ swap(a.column_name, b.column_name);
+ swap(a.key_seq, b.key_seq);
+ swap(a.pk_name, b.pk_name);
+ swap(a.enable_cstr, b.enable_cstr);
+ swap(a.validate_cstr, b.validate_cstr);
+ swap(a.rely_cstr, b.rely_cstr);
+ swap(a.__isset, b.__isset);
+ }
+
+ SQLPrimaryKey::SQLPrimaryKey(const SQLPrimaryKey& other4) {
+ table_db = other4.table_db;
+ table_name = other4.table_name;
+ column_name = other4.column_name;
+ key_seq = other4.key_seq;
+ pk_name = other4.pk_name;
+ enable_cstr = other4.enable_cstr;
+ validate_cstr = other4.validate_cstr;
+ rely_cstr = other4.rely_cstr;
+ __isset = other4.__isset;
+ }
+ SQLPrimaryKey& SQLPrimaryKey::operator=(const SQLPrimaryKey& other5) {
+ table_db = other5.table_db;
+ table_name = other5.table_name;
+ column_name = other5.column_name;
+ key_seq = other5.key_seq;
+ pk_name = other5.pk_name;
+ enable_cstr = other5.enable_cstr;
+ validate_cstr = other5.validate_cstr;
+ rely_cstr = other5.rely_cstr;
+ __isset = other5.__isset;
+ return *this;
+ }
+ void SQLPrimaryKey::printTo(std::ostream& out) const {
+ using ::apache::thrift::to_string;
+ out << "SQLPrimaryKey(";
+ out << "table_db=" << to_string(table_db);
+ out << ", " << "table_name=" << to_string(table_name);
+ out << ", " << "column_name=" << to_string(column_name);
+ out << ", " << "key_seq=" << to_string(key_seq);
+ out << ", " << "pk_name=" << to_string(pk_name);
+ out << ", " << "enable_cstr=" << to_string(enable_cstr);
+ out << ", " << "validate_cstr=" << to_string(validate_cstr);
+ out << ", " << "rely_cstr=" << to_string(rely_cstr);
+ out << ")";
+ }
+
+
+ SQLForeignKey::~SQLForeignKey() throw() {
+ }
+
+
+ void SQLForeignKey::__set_pktable_db(const std::string& val) {
+ this->pktable_db = val;
+ }
+
+ void SQLForeignKey::__set_pktable_name(const std::string& val) {
+ this->pktable_name = val;
+ }
+
+ void SQLForeignKey::__set_pkcolumn_name(const std::string& val) {
+ this->pkcolumn_name = val;
+ }
+
+ void SQLForeignKey::__set_fktable_db(const std::string& val) {
+ this->fktable_db = val;
+ }
+
+ void SQLForeignKey::__set_fktable_name(const std::string& val) {
+ this->fktable_name = val;
+ }
+
+ void SQLForeignKey::__set_fkcolumn_name(const std::string& val) {
+ this->fkcolumn_name = val;
+ }
+
+ void SQLForeignKey::__set_key_seq(const int32_t val) {
+ this->key_seq = val;
+ }
+
+ void SQLForeignKey::__set_update_rule(const int32_t val) {
+ this->update_rule = val;
+ }
+
+ void SQLForeignKey::__set_delete_rule(const int32_t val) {
+ this->delete_rule = val;
+ }
+
+ void SQLForeignKey::__set_fk_name(const std::string& val) {
+ this->fk_name = val;
+ }
+
+ void SQLForeignKey::__set_pk_name(const std::string& val) {
+ this->pk_name = val;
+ }
+
+ void SQLForeignKey::__set_enable_cstr(const bool val) {
+ this->enable_cstr = val;
+ }
+
+ void SQLForeignKey::__set_validate_cstr(const bool val) {
+ this->validate_cstr = val;
+ }
+
+ void SQLForeignKey::__set_rely_cstr(const bool val) {
+ this->rely_cstr = val;
+ }
+
+ uint32_t SQLForeignKey::read(::apache::thrift::protocol::TProtocol* iprot) {
+
+ apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
+ uint32_t xfer = 0;
+ std::string fname;
+ ::apache::thrift::protocol::TType ftype;
+ int16_t fid;
+
+ xfer += iprot->readStructBegin(fname);
+
+ using ::apache::thrift::protocol::TProtocolException;
+
+
+ while (true)
+ {
+ xfer += iprot->readFieldBegin(fname, ftype, fid);
+ if (ftype == ::apache::thrift::protocol::T_STOP) {
+ break;
+ }
+ switch (fid)
+ {
+ case 1:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->pktable_db);
+ this->__isset.pktable_db = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 2:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->pktable_name);
+ this->__isset.pktable_name = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 3:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->pkcolumn_name);
+ this->__isset.pkcolumn_name = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 4:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->fktable_db);
+ this->__isset.fktable_db = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 5:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->fktable_name);
+ this->__isset.fktable_name = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 6:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->fkcolumn_name);
+ this->__isset.fkcolumn_name = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 7:
+ if (ftype == ::apache::thrift::protocol::T_I32) {
+ xfer += iprot->readI32(this->key_seq);
+ this->__isset.key_seq = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 8:
+ if (ftype == ::apache::thrift::protocol::T_I32) {
+ xfer += iprot->readI32(this->update_rule);
+ this->__isset.update_rule = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 9:
+ if (ftype == ::apache::thrift::protocol::T_I32) {
+ xfer += iprot->readI32(this->delete_rule);
+ this->__isset.delete_rule = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 10:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->fk_name);
+ this->__isset.fk_name = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 11:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->pk_name);
+ this->__isset.pk_name = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 12:
+ if (ftype == ::apache::thrift::protocol::T_BOOL) {
+ xfer += iprot->readBool(this->enable_cstr);
+ this->__isset.enable_cstr = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 13:
+ if (ftype == ::apache::thrift::protocol::T_BOOL) {
+ xfer += iprot->readBool(this->validate_cstr);
+ this->__isset.validate_cstr = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 14:
+ if (ftype == ::apache::thrift::protocol::T_BOOL) {
+ xfer += iprot->readBool(this->rely_cstr);
+ this->__isset.rely_cstr = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ default:
+ xfer += iprot->skip(ftype);
+ break;
+ }
+ xfer += iprot->readFieldEnd();
+ }
+
+ xfer += iprot->readStructEnd();
+
+ return xfer;
+ }
+
+ uint32_t SQLForeignKey::write(::apache::thrift::protocol::TProtocol* oprot) const {
+ uint32_t xfer = 0;
+ apache::thrift::protocol::TOutputRecursionTracker tracker(*oprot);
+ xfer += oprot->writeStructBegin("SQLForeignKey");
+
+ xfer += oprot->writeFieldBegin("pktable_db", ::apache::thrift::protocol::T_STRING, 1);
+ xfer += oprot->writeString(this->pktable_db);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("pktable_name", ::apache::thrift::protocol::T_STRING, 2);
+ xfer += oprot->writeString(this->pktable_name);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("pkcolumn_name", ::apache::thrift::protocol::T_STRING, 3);
+ xfer += oprot->writeString(this->pkcolumn_name);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("fktable_db", ::apache::thrift::protocol::T_STRING, 4);
+ xfer += oprot->writeString(this->fktable_db);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("fktable_name", ::apache::thrift::protocol::T_STRING, 5);
+ xfer += oprot->writeString(this->fktable_name);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("fkcolumn_name", ::apache::thrift::protocol::T_STRING, 6);
+ xfer += oprot->writeString(this->fkcolumn_name);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("key_seq", ::apache::thrift::protocol::T_I32, 7);
+ xfer += oprot->writeI32(this->key_seq);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("update_rule", ::apache::thrift::protocol::T_I32, 8);
+ xfer += oprot->writeI32(this->update_rule);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("delete_rule", ::apache::thrift::protocol::T_I32, 9);
+ xfer += oprot->writeI32(this->delete_rule);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("fk_name", ::apache::thrift::protocol::T_STRING, 10);
+ xfer += oprot->writeString(this->fk_name);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("pk_name", ::apache::thrift::protocol::T_STRING, 11);
+ xfer += oprot->writeString(this->pk_name);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("enable_cstr", ::apache::thrift::protocol::T_BOOL, 12);
+ xfer += oprot->writeBool(this->enable_cstr);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("validate_cstr", ::apache::thrift::protocol::T_BOOL, 13);
+ xfer += oprot->writeBool(this->validate_cstr);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("rely_cstr", ::apache::thrift::protocol::T_BOOL, 14);
+ xfer += oprot->writeBool(this->rely_cstr);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldStop();
+ xfer += oprot->writeStructEnd();
+ return xfer;
+ }
+
+ void swap(SQLForeignKey &a, SQLForeignKey &b) {
+ using ::std::swap;
+ swap(a.pktable_db, b.pktable_db);
+ swap(a.pktable_name, b.pktable_name);
+ swap(a.pkcolumn_name, b.pkcolumn_name);
+ swap(a.fktable_db, b.fktable_db);
+ swap(a.fktable_name, b.fktable_name);
+ swap(a.fkcolumn_name, b.fkcolumn_name);
+ swap(a.key_seq, b.key_seq);
+ swap(a.update_rule, b.update_rule);
+ swap(a.delete_rule, b.delete_rule);
+ swap(a.fk_name, b.fk_name);
+ swap(a.pk_name, b.pk_name);
+ swap(a.enable_cstr, b.enable_cstr);
+ swap(a.validate_cstr, b.validate_cstr);
+ swap(a.rely_cstr, b.rely_cstr);
+ swap(a.__isset, b.__isset);
+ }
+
+ SQLForeignKey::SQLForeignKey(const SQLForeignKey& other6) {
+ pktable_db = other6.pktable_db;
+ pktable_name = other6.pktable_name;
+ pkcolumn_name = other6.pkcolumn_name;
+ fktable_db = other6.fktable_db;
+ fktable_name = other6.fktable_name;
+ fkcolumn_name = other6.fkcolumn_name;
+ key_seq = other6.key_seq;
+ update_rule = other6.update_rule;
+ delete_rule = other6.delete_rule;
+ fk_name = other6.fk_name;
+ pk_name = other6.pk_name;
+ enable_cstr = other6.enable_cstr;
+ validate_cstr = other6.validate_cstr;
+ rely_cstr = other6.rely_cstr;
+ __isset = other6.__isset;
+ }
+ SQLForeignKey& SQLForeignKey::operator=(const SQLForeignKey& other7) {
+ pktable_db = other7.pktable_db;
+ pktable_name = other7.pktable_name;
+ pkcolumn_name = other7.pkcolumn_name;
+ fktable_db = other7.fktable_db;
+ fktable_name = other7.fktable_name;
+ fkcolumn_name = other7.fkcolumn_name;
+ key_seq = other7.key_seq;
+ update_rule = other7.update_rule;
+ delete_rule = other7.delete_rule;
+ fk_name = other7.fk_name;
+ pk_name = other7.pk_name;
+ enable_cstr = other7.enable_cstr;
+ validate_cstr = other7.validate_cstr;
+ rely_cstr = other7.rely_cstr;
+ __isset = other7.__isset;
+ return *this;
+ }
+ void SQLForeignKey::printTo(std::ostream& out) const {
+ using ::apache::thrift::to_string;
+ out << "SQLForeignKey(";
+ out << "pktable_db=" << to_string(pktable_db);
+ out << ", " << "pktable_name=" << to_string(pktable_name);
+ out << ", " << "pkcolumn_name=" << to_string(pkcolumn_name);
+ out << ", " << "fktable_db=" << to_string(fktable_db);
+ out << ", " << "fktable_name=" << to_string(fktable_name);
+ out << ", " << "fkcolumn_name=" << to_string(fkcolumn_name);
+ out << ", " << "key_seq=" << to_string(key_seq);
+ out << ", " << "update_rule=" << to_string(update_rule);
+ out << ", " << "delete_rule=" << to_string(delete_rule);
+ out << ", " << "fk_name=" << to_string(fk_name);
+ out << ", " << "pk_name=" << to_string(pk_name);
+ out << ", " << "enable_cstr=" << to_string(enable_cstr);
+ out << ", " << "validate_cstr=" << to_string(validate_cstr);
+ out << ", " << "rely_cstr=" << to_string(rely_cstr);
+ out << ")";
+ }
+
+
+ SQLUniqueConstraint::~SQLUniqueConstraint() throw() {
+ }
+
+
+ void SQLUniqueConstraint::__set_table_db(const std::string& val) {
+ this->table_db = val;
+ }
+
+ void SQLUniqueConstraint::__set_table_name(const std::string& val) {
+ this->table_name = val;
+ }
+
+ void SQLUniqueConstraint::__set_column_name(const std::string& val) {
+ this->column_name = val;
+ }
+
+ void SQLUniqueConstraint::__set_key_seq(const int32_t val) {
+ this->key_seq = val;
+ }
+
+ void SQLUniqueConstraint::__set_uk_name(const std::string& val) {
+ this->uk_name = val;
+ }
+
+ void SQLUniqueConstraint::__set_enable_cstr(const bool val) {
+ this->enable_cstr = val;
+ }
+
+ void SQLUniqueConstraint::__set_validate_cstr(const bool val) {
+ this->validate_cstr = val;
+ }
+
+ void SQLUniqueConstraint::__set_rely_cstr(const bool val) {
+ this->rely_cstr = val;
+ }
+
+ uint32_t SQLUniqueConstraint::read(::apache::thrift::protocol::TProtocol* iprot) {
+
+ apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
+ uint32_t xfer = 0;
+ std::string fname;
+ ::apache::thrift::protocol::TType ftype;
+ int16_t fid;
+
+ xfer += iprot->readStructBegin(fname);
+
+ using ::apache::thrift::protocol::TProtocolException;
+
+
+ while (true)
+ {
+ xfer += iprot->readFieldBegin(fname, ftype, fid);
+ if (ftype == ::apache::thrift::protocol::T_STOP) {
+ break;
+ }
+ switch (fid)
+ {
+ case 1:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->table_db);
+ this->__isset.table_db = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 2:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->table_name);
+ this->__isset.table_name = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 3:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->column_name);
+ this->__isset.column_name = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 4:
+ if (ftype == ::apache::thrift::protocol::T_I32) {
+ xfer += iprot->readI32(this->key_seq);
+ this->__isset.key_seq = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 5:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->uk_name);
+ this->__isset.uk_name = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 6:
+ if (ftype == ::apache::thrift::protocol::T_BOOL) {
+ xfer += iprot->readBool(this->enable_cstr);
+ this->__isset.enable_cstr = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 7:
+ if (ftype == ::apache::thrift::protocol::T_BOOL) {
+ xfer += iprot->readBool(this->validate_cstr);
+ this->__isset.validate_cstr = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 8:
+ if (ftype == ::apache::thrift::protocol::T_BOOL) {
+ xfer += iprot->readBool(this->rely_cstr);
+ this->__isset.rely_cstr = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ default:
+ xfer += iprot->skip(ftype);
+ break;
+ }
+ xfer += iprot->readFieldEnd();
+ }
+
+ xfer += iprot->readStructEnd();
+
+ return xfer;
+ }
+
+ uint32_t SQLUniqueConstraint::write(::apache::thrift::protocol::TProtocol* oprot) const {
+ uint32_t xfer = 0;
+ apache::thrift::protocol::TOutputRecursionTracker tracker(*oprot);
+ xfer += oprot->writeStructBegin("SQLUniqueConstraint");
+
+ xfer += oprot->writeFieldBegin("table_db", ::apache::thrift::protocol::T_STRING, 1);
+ xfer += oprot->writeString(this->table_db);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("table_name", ::apache::thrift::protocol::T_STRING, 2);
+ xfer += oprot->writeString(this->table_name);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("column_name", ::apache::thrift::protocol::T_STRING, 3);
+ xfer += oprot->writeString(this->column_name);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("key_seq", ::apache::thrift::protocol::T_I32, 4);
+ xfer += oprot->writeI32(this->key_seq);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("uk_name", ::apache::thrift::protocol::T_STRING, 5);
+ xfer += oprot->writeString(this->uk_name);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("enable_cstr", ::apache::thrift::protocol::T_BOOL, 6);
+ xfer += oprot->writeBool(this->enable_cstr);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("validate_cstr", ::apache::thrift::protocol::T_BOOL, 7);
+ xfer += oprot->writeBool(this->validate_cstr);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("rely_cstr", ::apache::thrift::protocol::T_BOOL, 8);
+ xfer += oprot->writeBool(this->rely_cstr);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldStop();
+ xfer += oprot->writeStructEnd();
+ return xfer;
+ }
+
+ void swap(SQLUniqueConstraint &a, SQLUniqueConstraint &b) {
+ using ::std::swap;
+ swap(a.table_db, b.table_db);
+ swap(a.table_name, b.table_name);
+ swap(a.column_name, b.column_name);
+ swap(a.key_seq, b.key_seq);
+ swap(a.uk_name, b.uk_name);
+ swap(a.enable_cstr, b.enable_cstr);
+ swap(a.validate_cstr, b.validate_cstr);
+ swap(a.rely_cstr, b.rely_cstr);
+ swap(a.__isset, b.__isset);
+ }
+
+ SQLUniqueConstraint::SQLUniqueConstraint(const SQLUniqueConstraint& other8) {
+ table_db = other8.table_db;
+ table_name = other8.table_name;
+ column_name = other8.column_name;
+ key_seq = other8.key_seq;
+ uk_name = other8.uk_name;
+ enable_cstr = other8.enable_cstr;
+ validate_cstr = other8.validate_cstr;
+ rely_cstr = other8.rely_cstr;
+ __isset = other8.__isset;
+ }
+ SQLUniqueConstraint& SQLUniqueConstraint::operator=(const SQLUniqueConstraint& other9) {
+ table_db = other9.table_db;
+ table_name = other9.table_name;
+ column_name = other9.column_name;
+ key_seq = other9.key_seq;
+ uk_name = other9.uk_name;
+ enable_cstr = other9.enable_cstr;
+ validate_cstr = other9.validate_cstr;
+ rely_cstr = other9.rely_cstr;
+ __isset = other9.__isset;
+ return *this;
+ }
+ void SQLUniqueConstraint::printTo(std::ostream& out) const {
+ using ::apache::thrift::to_string;
+ out << "SQLUniqueConstraint(";
+ out << "table_db=" << to_string(table_db);
+ out << ", " << "table_name=" << to_string(table_name);
+ out << ", " << "column_name=" << to_string(column_name);
+ out << ", " << "key_seq=" << to_string(key_seq);
+ out << ", " << "uk_name=" << to_string(uk_name);
+ out << ", " << "enable_cstr=" << to_string(enable_cstr);
+ out << ", " << "validate_cstr=" << to_string(validate_cstr);
+ out << ", " << "rely_cstr=" << to_string(rely_cstr);
+ out << ")";
+ }
+
+
+ SQLNotNullConstraint::~SQLNotNullConstraint() throw() {
+ }
+
+
+ void SQLNotNullConstraint::__set_table_db(const std::string& val) {
+ this->table_db = val;
+ }
+
+ void SQLNotNullConstraint::__set_table_name(const std::string& val) {
+ this->table_name = val;
+ }
+
+ void SQLNotNullConstraint::__set_column_name(const std::string& val) {
+ this->column_name = val;
+ }
+
+ void SQLNotNullConstraint::__set_nn_name(const std::string& val) {
+ this->nn_name = val;
+ }
+
+ void SQLNotNullConstraint::__set_enable_cstr(const bool val) {
+ this->enable_cstr = val;
+ }
+
+ void SQLNotNullConstraint::__set_validate_cstr(const bool val) {
+ this->validate_cstr = val;
+ }
+
+ void SQLNotNullConstraint::__set_rely_cstr(const bool val) {
+ this->rely_cstr = val;
+ }
+
+ uint32_t SQLNotNullConstraint::read(::apache::thrift::protocol::TProtocol* iprot) {
+
+ apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
+ uint32_t xfer = 0;
+ std::string fname;
+ ::apache::thrift::protocol::TType ftype;
+ int16_t fid;
+
+ xfer += iprot->readStructBegin(fname);
+
+ using ::apache::thrift::protocol::TProtocolException;
+
+
+ while (true)
+ {
+ xfer += iprot->readFieldBegin(fname, ftype, fid);
+ if (ftype == ::apache::thrift::protocol::T_STOP) {
+ break;
+ }
+ switch (fid)
+ {
+ case 1:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->table_db);
+ this->__isset.table_db = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 2:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->table_name);
+ this->__isset.table_name = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 3:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->column_name);
+ this->__isset.column_name = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 4:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->nn_name);
+ this->__isset.nn_name = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 5:
+ if (ftype == ::apache::thrift::protocol::T_BOOL) {
+ xfer += iprot->readBool(this->enable_cstr);
+ this->__isset.enable_cstr = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 6:
+ if (ftype == ::apache::thrift::protocol::T_BOOL) {
+ xfer += iprot->readBool(this->validate_cstr);
+ this->__isset.validate_cstr = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 7:
+ if (ftype == ::apache::thrift::protocol::T_BOOL) {
+ xfer += iprot->readBool(this->rely_cstr);
+ this->__isset.rely_cstr = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ default:
+ xfer += iprot->skip(ftype);
+ break;
+ }
+ xfer += iprot->readFieldEnd();
+ }
+
+ xfer += iprot->readStructEnd();
+
+ return xfer;
+ }
+
+ uint32_t SQLNotNullConstraint::write(::apache::thrift::protocol::TProtocol* oprot) const {
+ uint32_t xfer = 0;
+ apache::thrift::protocol::TOutputRecursionTracker tracker(*oprot);
+ xfer += oprot->writeStructBegin("SQLNotNullConstraint");
+
+ xfer += oprot->writeFieldBegin("table_db", ::apache::thrift::protocol::T_STRING, 1);
+ xfer += oprot->writeString(this->table_db);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("table_name", ::apache::thrift::protocol::T_STRING, 2);
+ xfer += oprot->writeString(this->table_name);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("column_name", ::apache::thrift::protocol::T_STRING, 3);
+ xfer += oprot->writeString(this->column_name);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("nn_name", ::apache::thrift::protocol::T_STRING, 4);
+ xfer += oprot->writeString(this->nn_name);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("enable_cstr", ::apache::thrift::protocol::T_BOOL, 5);
+ xfer += oprot->writeBool(this->enable_cstr);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("validate_cstr", ::apache::thrift::protocol::T_BOOL, 6);
+ xfer += oprot->writeBool(this->validate_cstr);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("rely_cstr", ::apache::thrift::protocol::T_BOOL, 7);
+ xfer += oprot->writeBool(this->rely_cstr);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldStop();
+ xfer += oprot->writeStructEnd();
+ return xfer;
+ }
+
+ void swap(SQLNotNullConstraint &a, SQLNotNullConstraint &b) {
+ using ::std::swap;
+ swap(a.table_db, b.table_db);
+ swap(a.table_name, b.table_name);
+ swap(a.column_name, b.column_name);
+ swap(a.nn_name, b.nn_name);
+ swap(a.enable_cstr, b.enable_cstr);
+ swap(a.validate_cstr, b.validate_cstr);
+ swap(a.rely_cstr, b.rely_cstr);
+ swap(a.__isset, b.__isset);
+ }
+
+ SQLNotNullConstraint::SQLNotNullConstraint(const SQLNotNullConstraint& other10) {
+ table_db = other10.table_db;
+ table_name = other10.table_name;
+ column_name = other10.column_name;
+ nn_name = other10.nn_name;
+ enable_cstr = other10.enable_cstr;
+ validate_cstr = other10.validate_cstr;
+ rely_cstr = other10.rely_cstr;
+ __isset = other10.__isset;
+ }
+ SQLNotNullConstraint& SQLNotNullConstraint::operator=(const SQLNotNullConstraint& other11) {
+ table_db = other11.table_db;
+ table_name = other11.table_name;
+ column_name = other11.column_name;
+ nn_name = other11.nn_name;
+ enable_cstr = other11.enable_cstr;
+ validate_cstr = other11.validate_cstr;
+ rely_cstr = other11.rely_cstr;
+ __isset = other11.__isset;
+ return *this;
+ }
+ void SQLNotNullConstraint::printTo(std::ostream& out) const {
+ using ::apache::thrift::to_string;
+ out << "SQLNotNullConstraint(";
+ out << "table_db=" << to_string(table_db);
+ out << ", " << "table_name=" << to_string(table_name);
+ out << ", " << "column_name=" << to_string(column_name);
+ out << ", " << "nn_name=" << to_string(nn_name);
+ out << ", " << "enable_cstr=" << to_string(enable_cstr);
+ out << ", " << "validate_cstr=" << to_string(validate_cstr);
+ out << ", " << "rely_cstr=" << to_string(rely_cstr);
+ out << ")";
+ }
+
+
+ Type::~Type() throw() {
+ }
+
+
+ void Type::__set_name(const std::string& val) {
+ this->name = val;
+ }
+
+ void Type::__set_type1(const std::string& val) {
+ this->type1 = val;
+ __isset.type1 = true;
+ }
+
+ void Type::__set_type2(const std::string& val) {
+ this->type2 = val;
+ __isset.type2 = true;
+ }
+
+ void Type::__set_fields(const std::vector<FieldSchema> & val) {
+ this->fields = val;
+ __isset.fields = true;
+ }
+
+ uint32_t Type::read(::apache::thrift::protocol::TProtocol* iprot) {
+
+ apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
+ uint32_t xfer = 0;
+ std::string fname;
+ ::apache::thrift::protocol::TType ftype;
+ int16_t fid;
+
+ xfer += iprot->readStructBegin(fname);
+
+ using ::apache::thrift::protocol::TProtocolException;
+
+
+ while (true)
+ {
+ xfer += iprot->readFieldBegin(fname, ftype, fid);
+ if (ftype == ::apache::thrift::protocol::T_STOP) {
+ break;
+ }
+ switch (fid)
+ {
+ case 1:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->name);
+ this->__isset.name = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 2:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->type1);
+ this->__isset.type1 = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 3:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->type2);
+ this->__isset.type2 = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 4:
+ if (ftype == ::apache::thrift::protocol::T_LIST) {
+ {
+ this->fields.clear();
+ uint32_t _size12;
+ ::apache::thrift::protocol::TType _etype15;
+ xfer += iprot->readListBegin(_etype15, _size12);
+ this->fields.resize(_size12);
+ uint32_t _i16;
+ for (_i16 = 0; _i16 < _size12; ++_i16)
+ {
+ xfer += this->fields[_i16].read(iprot);
+ }
+ xfer += iprot->readListEnd();
+ }
+ this->__isset.fields = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ default:
+ xfer += iprot->skip(ftype);
+ break;
+ }
+ xfer += iprot->readFieldEnd();
+ }
+
+ xfer += iprot->readStructEnd();
+
+ return xfer;
+ }
+
+ uint32_t Type::write(::apache::thrift::protocol::TProtocol* oprot) const {
+ uint32_t xfer = 0;
+ apache::thrift::protocol::TOutputRecursionTracker tracker(*oprot);
+ xfer += oprot->writeStructBegin("Type");
+
+ xfer += oprot->writeFieldBegin("name", ::apache::thrift::protocol::T_STRING, 1);
+ xfer += oprot->writeString(this->name);
+ xfer += oprot->writeFieldEnd();
+
+ if (this->__isset.type1) {
+ xfer += oprot->writeFieldBegin("type1", ::apache::thrift::protocol::T_STRING, 2);
+ xfer += oprot->writeString(this->type1);
+ xfer += oprot->writeFieldEnd();
+ }
+ if (this->__isset.type2) {
+ xfer += oprot->writeFieldBegin("type2", ::apache::thrift::protocol::T_STRING, 3);
+ xfer += oprot->writeString(this->type2);
+ xfer += oprot->writeFieldEnd();
+ }
+ if (this->__isset.fields) {
+ xfer += oprot->writeFieldBegin("fields", ::apache::thrift::protocol::T_LIST, 4);
+ {
+ xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->fields.size()));
+ std::vector<FieldSchema> ::const_iterator _iter17;
+ for (_iter17 = this->fields.begin(); _iter17 != this->fields.end(); ++_iter17)
+ {
+ xfer += (*_iter17).write(oprot);
+ }
+ xfer += oprot->writeListEnd();
+ }
+ xfer += oprot->writeFieldEnd();
+ }
+ xfer += oprot->writeFieldStop();
+ xfer += oprot->writeStructEnd();
+ return xfer;
+ }
+
+ void swap(Type &a, Type &b) {
+ using ::std::swap;
+ swap(a.name, b.name);
+ swap(a.type1, b.type1);
+ swap(a.type2, b.type2);
+ swap(a.fields, b.fields);
+ swap(a.__isset, b.__isset);
+ }
+
+ Type::Type(const Type& other18) {
+ name = other18.name;
+ type1 = other18.type1;
+ type2 = other18.type2;
+ fields = other18.fields;
+ __isset = other18.__isset;
+ }
+ Type& Type::operator=(const Type& other19) {
+ name = other19.name;
+ type1 = other19.type1;
+ type2 = other19.type2;
+ fields = other19.fields;
+ __isset = other19.__isset;
+ return *this;
+ }
+ void Type::printTo(std::ostream& out) const {
+ using ::apache::thrift::to_string;
+ out << "Type(";
+ out << "name=" << to_string(name);
+ out << ", " << "type1="; (__isset.type1 ? (out << to_string(type1)) : (out << "<null>"));
+ out << ", " << "type2="; (__isset.type2 ? (out << to_string(type2)) : (out << "<null>"));
+ out << ", " << "fields="; (__isset.fields ? (out << to_string(fields)) : (out << "<null>"));
+ out << ")";
+ }
+
+
+ HiveObjectRef::~HiveObjectRef() throw() {
+ }
+
+
+ void HiveObjectRef::__set_objectType(const HiveObjectType::type val) {
+ this->objectType = val;
+ }
+
+ void HiveObjectRef::__set_dbName(const std::string& val) {
+ this->dbName = val;
+ }
+
+ void HiveObjectRef::__set_objectName(const std::string& val) {
+ this->objectName = val;
+ }
+
+ void HiveObjectRef::__set_partValues(const std::vector<std::string> & val) {
+ this->partValues = val;
+ }
+
+ void HiveObjectRef::__set_columnName(const std::string& val) {
+ this->columnName = val;
+ }
+
+ uint32_t HiveObjectRef::read(::apache::thrift::protocol::TProtocol* iprot) {
+
+ apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
+ uint32_t xfer = 0;
+ std::string fname;
+ ::apache::thrift::protocol::TType ftype;
+ int16_t fid;
+
+ xfer += iprot->readStructBegin(fname);
+
+ using ::apache::thrift::protocol::TProtocolException;
+
+
+ while (true)
+ {
+ xfer += iprot->readFieldBegin(fname, ftype, fid);
+ if (ftype == ::apache::thrift::protocol::T_STOP) {
+ break;
+ }
+ switch (fid)
+ {
+ case 1:
+ if (ftype == ::apache::thrift::protocol::T_I32) {
+ int32_t ecast20;
+ xfer += iprot->readI32(ecast20);
+ this->objectType = (HiveObjectType::type)ecast20;
+ this->__isset.objectType = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 2:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->dbName);
+ this->__isset.dbName = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 3:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->objectName);
+ this->__isset.objectName = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 4:
+ if (ftype == ::apache::thrift::protocol::T_LIST) {
+ {
+ this->partValues.clear();
+ uint32_t _size21;
+ ::apache::thrift::protocol::TType _etype24;
+ xfer += iprot->readListBegin(_etype24, _size21);
+ this->partValues.resize(_size21);
+ uint32_t _i25;
+ for (_i25 = 0; _i25 < _size21; ++_i25)
+ {
+ xfer += iprot->readString(this->partValues[_i25]);
+ }
+ xfer += iprot->readListEnd();
+ }
+ this->__isset.partValues = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 5:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->columnName);
+ this->__isset.columnName = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ default:
+ xfer += iprot->skip(ftype);
+ break;
+ }
+ xfer += iprot->readFieldEnd();
+ }
+
+ xfer += iprot->readStructEnd();
+
+ return xfer;
+ }
+
+ uint32_t HiveObjectRef::write(::apache::thrift::protocol::TProtocol* oprot) const {
+ uint32_t xfer = 0;
+ apache::thrift::protocol::TOutputRecursionTracker tracker(*oprot);
+ xfer += oprot->writeStructBegin("HiveObjectRef");
+
+ xfer += oprot->writeFieldBegin("objectType", ::apache::thrift::protocol::T_I32, 1);
+ xfer += oprot->writeI32((int32_t)this->objectType);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("dbName", ::apache::thrift::protocol::T_STRING, 2);
+ xfer += oprot->writeString(this->dbName);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("objectName", ::apache::thrift::protocol::T_STRING, 3);
+ xfer += oprot->writeString(this->objectName);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("partValues", ::apache::thrift::protocol::T_LIST, 4);
+ {
+ xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRING, static_cast<uint32_t>(this->partValues.size()));
+ std::vector<std::string> ::const_iterator _iter26;
+ for (_iter26 = this->partValues.begin(); _iter26 != this->partValues.end(); ++_iter26)
+ {
+ xfer += oprot->writeString((*_iter26));
+ }
+ xfer += oprot->writeListEnd();
+ }
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("columnName", ::apache::thrift::protocol::T_STRING, 5);
+ xfer += oprot->writeString(this->columnName);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldStop();
+ xfer += oprot->writeStructEnd();
+ return xfer;
+ }
+
+ void swap(HiveObjectRef &a, HiveObjectRef &b) {
+ using ::std::swap;
+ swap(a.objectType, b.objectType);
+ swap(a.dbName, b.dbName);
+ swap(a.objectName, b.objectName);
+ swap(a.partValues, b.partValues);
+ swap(a.columnName, b.columnName);
+ swap(a.__isset, b.__isset);
+ }
+
+ HiveObjectRef::HiveObjectRef(const HiveObjectRef& other27) {
+ objectType = other27.objectType;
+ dbName = other27.dbName;
+ objectName = other27.objectName;
+ partValues = other27.partValues;
+ columnName = other27.columnName;
+ __isset = other27.__isset;
+ }
+ HiveObjectRef& HiveObjectRef::operator=(const HiveObjectRef& other28) {
+ objectType = other28.objectType;
+ dbName = other28.dbName;
+ objectName = other28.objectName;
+ partValues = other28.partValues;
+ columnName = other28.columnName;
+ __isset = other28.__isset;
+ return *this;
+ }
+ void HiveObjectRef::printTo(std::ostream& out) const {
+ using ::apache::thrift::to_string;
+ out << "HiveObjectRef(";
+ out << "objectType=" << to_string(objectType);
+ out << ", " << "dbName=" << to_string(dbName);
+ out << ", " << "objectName=" << to_string(objectName);
+ out << ", " << "partValues=" << to_string(partValues);
+ out << ", " << "columnName=" << to_string(columnName);
+ out << ")";
+ }
+
+
+ PrivilegeGrantInfo::~PrivilegeGrantInfo() throw() {
+ }
+
+
+ void PrivilegeGrantInfo::__set_privilege(const std::string& val) {
+ this->privilege = val;
+ }
+
+ void PrivilegeGrantInfo::__set_createTime(const int32_t val) {
+ this->createTime = val;
+ }
+
+ void PrivilegeGrantInfo::__set_grantor(const std::string& val) {
+ this->grantor = val;
+ }
+
+ void PrivilegeGrantInfo::__set_grantorType(const PrincipalType::type val) {
+ this->grantorType = val;
+ }
+
+ void PrivilegeGrantInfo::__set_grantOption(const bool val) {
+ this->grantOption = val;
+ }
+
+ uint32_t PrivilegeGrantInfo::read(::apache::thrift::protocol::TProtocol* iprot) {
+
+ apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
+ uint32_t xfer = 0;
+ std::string fname;
+ ::apache::thrift::protocol::TType ftype;
+ int16_t fid;
+
+ xfer += iprot->readStructBegin(fname);
+
+ using ::apache::thrift::protocol::TProtocolException;
+
+
+ while (true)
+ {
+ xfer += iprot->readFieldBegin(fname, ftype, fid);
+ if (ftype == ::apache::thrift::protocol::T_STOP) {
+ break;
+ }
+ switch (fid)
+ {
+ case 1:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->privilege);
+ this->__isset.privilege = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 2:
+ if (ftype == ::apache::thrift::protocol::T_I32) {
+ xfer += iprot->readI32(this->createTime);
+ this->__isset.createTime = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 3:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->grantor);
+ this->__isset.grantor = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 4:
+ if (ftype == ::apache::thrift::protocol::T_I32) {
+ int32_t ecast29;
+ xfer += iprot->readI32(ecast29);
+ this->grantorType = (PrincipalType::type)ecast29;
+ this->__isset.grantorType = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 5:
+ if (ftype == ::apache::thrift::protocol::T_BOOL) {
+ xfer += iprot->readBool(this->grantOption);
+ this->__isset.grantOption = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ default:
+ xfer += iprot->skip(ftype);
+ break;
+ }
+ xfer += iprot->readFieldEnd();
+ }
+
+ xfer += iprot->readStructEnd();
+
+ return xfer;
+ }
+
+ uint32_t PrivilegeGrantInfo::write(::apache::thrift::protocol::TProtocol* oprot) const {
+ uint32_t xfer = 0;
+ apache::thrift::protocol::TOutputRecursionTracker tracker(*oprot);
+ xfer += oprot->writeStructBegin("PrivilegeGrantInfo");
+
+ xfer += oprot->writeFieldBegin("privilege", ::apache::thrift::protocol::T_STRING, 1);
+ xfer += oprot->writeString(this->privilege);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("createTime", ::apache::thrift::protocol::T_I32, 2);
+ xfer += oprot->writeI32(this->createTime);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("grantor", ::apache::thrift::protocol::T_STRING, 3);
+ xfer += oprot->writeString(this->grantor);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("grantorType", ::apache::thrift::protocol::T_I32, 4);
+ xfer += oprot->writeI32((int32_t)this->grantorType);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("grantOption", ::apache::thrift::protocol::T_BOOL, 5);
+ xfer += oprot->writeBool(this->grantOption);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldStop();
+ xfer += oprot->writeStructEnd();
+ return xfer;
+ }
+
+ void swap(PrivilegeGrantInfo &a, PrivilegeGrantInfo &b) {
+ using ::std::swap;
+ swap(a.privilege, b.privilege);
+ swap(a.createTime, b.createTime);
+ swap(a.grantor, b.grantor);
+ swap(a.grantorType, b.grantorType);
+ swap(a.grantOption, b.grantOption);
+ swap(a.__isset, b.__isset);
+ }
+
+ PrivilegeGrantInfo::PrivilegeGrantInfo(const PrivilegeGrantInfo& other30) {
+ privilege = other30.privilege;
+ createTime = other30.createTime;
+ grantor = other30.grantor;
+ grantorType = other30.grantorType;
+ grantOption = other30.grantOption;
+ __isset = other30.__isset;
+ }
+ PrivilegeGrantInfo& PrivilegeGrantInfo::operator=(const PrivilegeGrantInfo& other31) {
+ privilege = other31.privilege;
+ createTime = other31.createTime;
+ grantor = other31.grantor;
+ grantorType = other31.grantorType;
+ grantOption = other31.grantOption;
+ __isset = other31.__isset;
+ return *this;
+ }
+ void PrivilegeGrantInfo::printTo(std::ostream& out) const {
+ using ::apache::thrift::to_string;
+ out << "PrivilegeGrantInfo(";
+ out << "privilege=" << to_string(privilege);
+ out << ", " << "createTime=" << to_string(createTime);
+ out << ", " << "grantor=" << to_string(grantor);
+ out << ", " << "grantorType=" << to_string(grantorType);
+ out << ", " << "grantOption=" << to_string(grantOption);
+ out << ")";
+ }
+
+
+ HiveObjectPrivilege::~HiveObjectPrivilege() throw() {
+ }
+
+
+ void HiveObjectPrivilege::__set_hiveObject(const HiveObjectRef& val) {
+ this->hiveObject = val;
+ }
+
+ void HiveObjectPrivilege::__set_principalName(const std::string& val) {
+ this->principalName = val;
+ }
+
+ void HiveObjectPrivilege::__set_principalType(const PrincipalType::type val) {
+ this->principalType = val;
+ }
+
+ void HiveObjectPrivilege::__set_grantInfo(const PrivilegeGrantInfo& val) {
+ this->grantInfo = val;
+ }
+
+ uint32_t HiveObjectPrivilege::read(::apache::thrift::protocol::TProtocol* iprot) {
+
+ apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
+ uint32_t xfer = 0;
+ std::string fname;
+ ::apache::thrift::protocol::TType ftype;
+ int16_t fid;
+
+ xfer += iprot->readStructBegin(fname);
+
+ using ::apache::thrift::protocol::TProtocolException;
+
+
+ while (true)
+ {
+ xfer += iprot->readFieldBegin(fname, ftype, fid);
+ if (ftype == ::apache::thrift::protocol::T_STOP) {
+ break;
+ }
+ switch (fid)
+ {
+ case 1:
+ if (ftype == ::apache::thrift::protocol::T_STRUCT) {
+ xfer += this->hiveObject.read(iprot);
+ this->__isset.hiveObject = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 2:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->principalName);
+ this->__isset.principalName = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 3:
+ if (ftype == ::apache::thrift::protocol::T_I32) {
+ int32_t ecast32;
+ xfer += iprot->readI32(ecast32);
+ this->principalType = (PrincipalType::type)ecast32;
+ this->__isset.principalType = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 4:
+ if (ftype == ::apache::thrift::protocol::T_STRUCT) {
+ xfer += this->grantInfo.read(iprot);
+ this->__isset.grantInfo = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ default:
+ xfer += iprot->skip(ftype);
+ break;
+ }
+ xfer += iprot->readFieldEnd();
+ }
+
+ xfer += iprot->readStructEnd();
+
+ return xfer;
+ }
+
+ uint32_t HiveObjectPrivilege::write(::apache::thrift::protocol::TProtocol* oprot) const {
+ uint32_t xfer = 0;
+ apache::thrift::protocol::TOutputRecursionTracker tracker(*oprot);
+ xfer += oprot->writeStructBegin("HiveObjectPrivilege");
+
+ xfer += oprot->writeFieldBegin("hiveObject", ::apache::thrift::protocol::T_STRUCT, 1);
+ xfer += this->hiveObject.write(oprot);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("principalName", ::apache::thrift::protocol::T_STRING, 2);
+ xfer += oprot->writeString(this->principalName);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("principalType", ::apache::thrift::protocol::T_I32, 3);
+ xfer += oprot->writeI32((int32_t)this->principalType);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("grantInfo", ::apache::thrift::protocol::T_STRUCT, 4);
+ xfer += this->grantInfo.write(oprot);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldStop();
+ xfer += oprot->writeStructEnd();
+ return xfer;
+ }
+
+ void swap(HiveObjectPrivilege &a, HiveObjectPrivilege &b) {
+ using ::std::swap;
+ swap(a.hiveObject, b.hiveObject);
+ swap(a.principalName, b.principalName);
+ swap(a.principalType, b.principalType);
+ swap(a.grantInfo, b.grantInfo);
+ swap(a.__isset, b.__isset);
+ }
+
+ HiveObjectPrivilege::HiveObjectPrivilege(const HiveObjectPrivilege& other33) {
+ hiveObject = other33.hiveObject;
+ principalName = other33.principalName;
+ principalType = other33.principalType;
+ grantInfo = other33.grantInfo;
+ __isset = other33.__isset;
+ }
+ HiveObjectPrivilege& HiveObjectPrivilege::operator=(const HiveObjectPrivilege& other34) {
+ hiveObject = other34.hiveObject;
+ principalName = other34.principalName;
+ principalType = other34.principalType;
+ grantInfo = other34.grantInfo;
+ __isset = other34.__isset;
+ return *this;
+ }
+ void HiveObjectPrivilege::printTo(std::ostream& out) const {
+ using ::apache::thrift::to_string;
+ out << "HiveObjectPrivilege(";
+ out << "hiveObject=" << to_string(hiveObject);
+ out << ", " << "principalName=" << to_string(principalName);
+ out << ", " << "principalType=" << to_string(principalType);
+ out << ", " << "grantInfo=" << to_string(grantInfo);
+ out << ")";
+ }
+
+
+ PrivilegeBag::~PrivilegeBag() throw() {
+ }
+
+
+ void PrivilegeBag::__set_privileges(const std::vector<HiveObjectPrivilege> & val) {
+ this->privileges = val;
+ }
+
+ uint32_t PrivilegeBag::read(::apache::thrift::protocol::TProtocol* iprot) {
+
+ apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
+ uint32_t xfer = 0;
+ std::string fname;
+ ::apache::thrift::protocol::TType ftype;
+ int16_t fid;
+
+ xfer += iprot->readStructBegin(fname);
+
+ using ::apache::thrift::protocol::TProtocolException;
+
+
+ while (true)
+ {
+ xfer += iprot->readFieldBegin(fname, ftype, fid);
+ if (ftype == ::apache::thrift::protocol::T_STOP) {
+ break;
+ }
+ switch (fid)
+ {
+ case 1:
+ if (ftype == ::apache::thrift::protocol::T_LIST) {
+ {
+ this->privileges.clear();
+ uint32_t _size35;
+ ::apache::thrift::protocol::TType _etype38;
+ xfer += iprot->readListBegin(_etype38, _size35);
+ this->privileges.resize(_size35);
+ uint32_t _i39;
+ for (_i39 = 0; _i39 < _size35; ++_i39)
+ {
+ xfer += this->privileges[_i39].read(iprot);
+ }
+ xfer += iprot->readListEnd();
+ }
+ this->__isset.privileges = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ default:
+ xfer += iprot->skip(ftype);
+ break;
+ }
+ xfer += iprot->readFieldEnd();
+ }
+
+ xfer += iprot->readStructEnd();
+
+ return xfer;
+ }
+
+ uint32_t PrivilegeBag::write(::apache::thrift::protocol::TProtocol* oprot) const {
+ uint32_t xfer = 0;
+ apache::thrift::protocol::TOutputRecursionTracker tracker(*oprot);
+ xfer += oprot->writeStructBegin("PrivilegeBag");
+
+ xfer += oprot->writeFieldBegin("privileges", ::apache::thrift::protocol::T_LIST, 1);
+ {
+ xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->privileges.size()));
+ std::vector<HiveObjectPrivilege> ::const_iterator _iter40;
+ for (_iter40 = this->privileges.begin(); _iter40 != this->privileges.end(); ++_iter40)
+ {
+ xfer += (*_iter40).write(oprot);
+ }
+ xfer += oprot->writeListEnd();
+ }
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldStop();
+ xfer += oprot->writeStructEnd();
+ return xfer;
+ }
+
+ void swap(PrivilegeBag &a, PrivilegeBag &b) {
+ using ::std::swap;
+ swap(a.privileges, b.privileges);
+ swap(a.__isset, b.__isset);
+ }
+
+ PrivilegeBag::PrivilegeBag(const PrivilegeBag& other41) {
+ privileges = other41.privileges;
+ __isset = other41.__isset;
+ }
+ PrivilegeBag& PrivilegeBag::operator=(const PrivilegeBag& other42) {
+ privileges = other42.privileges;
+ __isset = other42.__isset;
+ return *this;
+ }
+ void PrivilegeBag::printTo(std::ostream& out) const {
+ using ::apache::thrift::to_string;
+ out << "PrivilegeBag(";
+ out << "privileges=" << to_string(privileges);
+ out << ")";
+ }
+
+
+ PrincipalPrivilegeSet::~PrincipalPrivilegeSet() throw() {
+ }
+
+
+ void PrincipalPrivilegeSet::__set_userPrivileges(const std::map<std::string, std::vector<PrivilegeGrantInfo> > & val) {
+ this->userPrivileges = val;
+ }
+
+ void PrincipalPrivilegeSet::__set_groupPrivileges(const std::map<std::string, std::vector<PrivilegeGrantInfo> > & val) {
+ this->groupPrivileges = val;
+ }
+
+ void PrincipalPrivilegeSet::__set_rolePrivileges(const std::map<std::string, std::vector<PrivilegeGrantInfo> > & val) {
+ this->rolePrivileges = val;
+ }
+
+ uint32_t PrincipalPrivilegeSet::read(::apache::thrift::protocol::TProtocol* iprot) {
+
+ apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
+ uint32_t xfer = 0;
+ std::string fname;
+ ::apache::thrift::protocol::TType ftype;
+ int16_t fid;
+
+ xfer += iprot->readStructBegin(fname);
+
+ using ::apache::thrift::protocol::TProtocolException;
+
+
+ while (true)
+ {
+ xfer += iprot->readFieldBegin(fname, ftype, fid);
+ if (ftype == ::apache::thrift::protocol::T_STOP) {
+ break;
+ }
+ switch (fid)
+ {
+ case 1:
+ if (ftype == ::apache::thrift::protocol::T_MAP) {
+ {
+ this->userPrivileges.clear();
+ uint32_t _size43;
+ ::apache::thrift::protocol::TType _ktype44;
+ ::apache::thrift::protocol::TType _vtype45;
+ xfer += iprot->readMapBegin(_ktype44, _vtype45, _size43);
+ uint32_t _i47;
+ for (_i47 = 0; _i47 < _size43; ++_i47)
+ {
+ std::string _key48;
+ xfer += iprot->readString(_key48);
+ std::vector<PrivilegeGrantInfo> & _val49 = this->userPrivileges[_key48];
+ {
+ _val49.clear();
+ uint32_t _size50;
+ ::apache::thrift::protocol::TType _etype53;
+ xfer += iprot->readListBegin(_etype53, _size50);
+ _val49.resize(_size50);
+ uint32_t _i54;
+ for (_i54 = 0; _i54 < _size50; ++_i54)
+ {
+ xfer += _val49[_i54].read(iprot);
+ }
+ xfer += iprot->readListEnd();
+ }
+ }
+ xfer += iprot->readMapEnd();
+ }
+ this->__isset.userPrivileges = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 2:
+ if (ftype == ::apache::thrift::protocol::T_MAP) {
+ {
+ this->groupPrivileges.clear();
+ uint32_t _size55;
+ ::apache::thrift::protocol::TType _ktype56;
+ ::apache::thrift::protocol::TType _vtype57;
+ xfer += iprot->readMapBegin(_ktype56, _vtype57, _size55);
+ uint32_t _i59;
+ for (_i59 = 0; _i59 < _size55; ++_i59)
+ {
+ std::string _key60;
+ xfer += iprot->readString(_key60);
+ std::vector<PrivilegeGrantInfo> & _val61 = this->groupPrivileges[_key60];
+ {
+ _val61.clear();
+ uint32_t _size62;
+ ::apache::thrift::protocol::TType _etype65;
+ xfer += iprot->readListBegin(_etype65, _size62);
+ _val61.resize(_size62);
+ uint32_t _i66;
+ for (_i66 = 0; _i66 < _size62; ++_i66)
+ {
+ xfer += _val61[_i66].read(iprot);
+ }
+ xfer += iprot->readListEnd();
+ }
+ }
+ xfer += iprot->readMapEnd();
+ }
+ this->__isset.groupPrivileges = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 3:
+ if (ftype == ::apache::thrift::protocol::T_MAP) {
+ {
+ this->rolePrivileges.clear();
+ uint32_t _size67;
+ ::apache::thrift::protocol::TType _ktype68;
+ ::apache::thrift::protocol::TType _vtype69;
+ xfer += iprot->readMapBegin(_ktype68, _vtype69, _size67);
+ uint32_t _i71;
+ for (_i71 = 0; _i71 < _size67; ++_i71)
+ {
+ std::string _key72;
+ xfer += iprot->readString(_key72);
+ std::vector<PrivilegeGrantInfo> & _val73 = this->rolePrivileges[_key72];
+ {
+ _val73.clear();
+ uint32_t _size74;
+ ::apache::thrift::protocol::TType _etype77;
+ xfer += iprot->readListBegin(_etype77, _size74);
+ _val73.resize(_size74);
+ uint32_t _i78;
+ for (_i78 = 0; _i78 < _size74; ++_i78)
+ {
+ xfer += _val73[_i78].read(iprot);
+ }
+ xfer += iprot->readListEnd();
+ }
+ }
+ xfer += iprot->readMapEnd();
+ }
+ this->__isset.rolePrivileges = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ default:
+ xfer += iprot->skip(ftype);
+ break;
+ }
+ xfer += iprot->readFieldEnd();
+ }
+
+ xfer += iprot->readStructEnd();
+
+ return xfer;
+ }
+
+ uint32_t PrincipalPrivilegeSet::write(::apache::thrift::protocol::TProtocol* oprot) const {
+ uint32_t xfer = 0;
+ apache::thrift::protocol::TOutputRecursionTracker tracker(*oprot);
+ xfer += oprot->writeStructBegin("PrincipalPrivilegeSet");
+
+ xfer += oprot->writeFieldBegin("userPrivileges", ::apache::thrift::protocol::T_MAP, 1);
+ {
+ xfer += oprot->writeMapBegin(::apache::thrift::protocol::T_STRING, ::apache::thrift::protocol::T_LIST, static_cast<uint32_t>(this->userPrivileges.size()));
+ std::map<std::string, std::vector<PrivilegeGrantInfo> > ::const_iterator _iter79;
+ for (_iter79 = this->userPrivileges.begin(); _iter79 != this->userPrivileges.end(); ++_iter79)
+ {
+ xfer += oprot->writeString(_iter79->first);
+ {
+ xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(_iter79->second.size()));
+ std::vector<PrivilegeGrantInfo> ::const_iterator _iter80;
+ for (_iter80 = _iter79->second.begin(); _iter80 != _iter79->second.end(); ++_iter80)
+ {
+ xfer += (*_iter80).write(oprot);
+ }
+ xfer += oprot->writeListEnd();
+ }
+ }
+ xfer += oprot->writeMapEnd();
+ }
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("groupPrivileges", ::apache::thrift::protocol::T_MAP, 2);
+ {
+ xfer += oprot->writeMapBegin(::apache::thrift::protocol::T_STRING, ::apache::thrift::protocol::T_LIST, static_cast<uint32_t>(this->groupPrivileges.size()));
+ std::map<std::string, std::vector<PrivilegeGrantInfo> > ::const_iterator _iter81;
+ for (_iter81 = this->groupPrivileges.begin(); _iter81 != this->groupPrivileges.end(); ++_iter81)
+ {
+ xfer += oprot->writeString(_iter81->first);
+ {
+ xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(_iter81->second.size()));
+ std::vector<PrivilegeGrantInfo> ::const_iterator _iter82;
+ for (_iter82 = _iter81->second.begin(); _iter82 != _iter81->second.end(); ++_iter82)
+ {
+ xfer += (*_iter82).write(oprot);
+ }
+ xfer += oprot->writeListEnd();
+ }
+ }
+ xfer += oprot->writeMapEnd();
+ }
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("rolePrivileges", ::apache::thrift::protocol::T_MAP, 3);
+ {
+ xfer += oprot->writeMapBegin(::apache::thrift::protocol::T_STRING, ::apache::thrift::protocol::T_LIST, static_cast<uint32_t>(this->rolePrivileges.size()));
+ std::map<std::string, std::vector<PrivilegeGrantInfo> > ::const_iterator _iter83;
+ for (_iter83 = this->rolePrivileges.begin(); _iter83 != this->rolePrivileges.end(); ++_iter83)
+ {
+ xfer += oprot->writeString(_iter83->first);
+ {
+ xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(_iter83->second.size()));
+ std::vector<PrivilegeGrantInfo> ::const_iterator _iter84;
+ for (_iter84 = _iter83->second.begin(); _iter84 != _iter83->second.end(); ++_iter84)
+ {
+ xfer += (*_iter84).write(oprot);
+ }
+ xfer += oprot->writeListEnd();
+ }
+ }
+ xfer += oprot->writeMapEnd();
+ }
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldStop();
+ xfer += oprot->writeStructEnd();
+ return xfer;
+ }
+
+ void swap(PrincipalPrivilegeSet &a, PrincipalPrivilegeSet &b) {
+ using ::std::swap;
+ swap(a.userPrivileges, b.userPrivileges);
+ swap(a.groupPrivileges, b.groupPrivileges);
+ swap(a.rolePrivileges, b.rolePrivileges);
+ swap(a.__isset, b.__isset);
+ }
+
+ PrincipalPrivilegeSet::PrincipalPrivilegeSet(const PrincipalPrivilegeSet& other85) {
+ userPrivileges = other85.userPrivileges;
+ groupPrivileges = other85.groupPrivileges;
+ rolePrivileges = other85.rolePrivileges;
+ __isset = other85.__isset;
+ }
+ PrincipalPrivilegeSet& PrincipalPrivilegeSet::operator=(const PrincipalPrivilegeSet& other86) {
+ userPrivileges = other86.userPrivileges;
+ groupPrivileges = other86.groupPrivileges;
+ rolePrivileges = other86.rolePrivileges;
+ __isset = other86.__isset;
+ return *this;
+ }
+ void PrincipalPrivilegeSet::printTo(std::ostream& out) const {
+ using ::apache::thrift::to_string;
+ out << "PrincipalPrivilegeSet(";
+ out << "userPrivileges=" << to_string(userPrivileges);
+ out << ", " << "groupPrivileges=" << to_string(groupPrivileges);
+ out << ", " << "rolePrivileges=" << to_string(rolePrivileges);
+ out << ")";
+ }
+
+
+ GrantRevokePrivilegeRequest::~GrantRevokePrivilegeRequest() throw() {
+ }
+
+
+ void GrantRevokePrivilegeRequest::__set_requestType(const GrantRevokeType::type val) {
+ this->requestType = val;
+ }
+
+ void GrantRevokePrivilegeRequest::__set_privileges(const PrivilegeBag& val) {
+ this->privileges = val;
+ }
+
+ void GrantRevokePrivilegeRequest::__set_revokeGrantOption(const bool val) {
+ this->revokeGrantOption = val;
+ __isset.revokeGrantOption = true;
+ }
+
+ uint32_t GrantRevokePrivilegeRequest::read(::apache::thrift::protocol::TProtocol* iprot) {
+
+ apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
+ uint32_t xfer = 0;
+ std::string fname;
+ ::apache::thrift::protocol::TType ftype;
+ int16_t fid;
+
+ xfer += iprot->readStructBegin(fname);
+
+ using ::apache::thrift::protocol::TProtocolException;
+
+
+ while (true)
+ {
+ xfer += iprot->readFieldBegin(fname, ftype, fid);
+ if (ftype == ::apache::thrift::protocol::T_STOP) {
+ break;
+ }
+ switch (fid)
+ {
+ case 1:
+ if (ftype == ::apache::thrift::protocol::T_I32) {
+ int32_t ecast87;
+ xfer += iprot->readI32(ecast87);
+ this->requestType = (GrantRevokeType::type)ecast87;
+ this->__isset.requestType = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 2:
+ if (ftype == ::apache::thrift::protocol::T_STRUCT) {
+ xfer += this->privileges.read(iprot);
+ this->__isset.privileges = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 3:
+ if (ftype == ::apache::thrift::protocol::T_BOOL) {
+ xfer += iprot->readBool(this->revokeGrantOption);
+ this->__isset.revokeGrantOption = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ default:
+ xfer += iprot->skip(ftype);
+ break;
+ }
+ xfer += iprot->readFieldEnd();
+ }
+
+ xfer += iprot->readStructEnd();
+
+ return xfer;
+ }
+
+ uint32_t GrantRevokePrivilegeRequest::write(::apache::thrift::protocol::TProtocol* oprot) const {
+ uint32_t xfer = 0;
+ apache::thrift::protocol::TOutputRecursionTracker tracker(*oprot);
+ xfer += oprot->writeStructBegin("GrantRevokePrivilegeRequest");
+
+ xfer += oprot->writeFieldBegin("requestType", ::apache::thrift::protocol::T_I32, 1);
+ xfer += oprot->writeI32((int32_t)this->requestType);
+ xfer += oprot->writeFieldEnd();
+
+ xfer += oprot->writeFieldBegin("privileges", ::apache::thrift::protocol::T_STRUCT, 2);
+ xfer += this->privileges.write(oprot);
+ xfer += oprot->writeFieldEnd();
+
+ if (this->__isset.revokeGrantOption) {
+ xfer += oprot->writeFieldBegin("revokeGrantOption", ::apache::thrift::protocol::T_BOOL, 3);
+ xfer += oprot->writeBool(this->revokeGrantOption);
+ xfer += oprot->writeFieldEnd();
+ }
+ xfer += oprot->writeFieldStop();
+ xfer += oprot->writeStructEnd();
+ return xfer;
+ }
+
+ void swap(GrantRevokePrivilegeRequest &a, GrantRevokePrivilegeRequest &b) {
+ using ::std::swap;
+ swap(a.requestType, b.requestType);
+ swap(a.privileges, b.privileges);
+ swap(a.revokeGrantOption, b.revokeGrantOption);
+ swap(a.__isset, b.__isset);
+ }
+
+ GrantRevokePrivilegeRequest::GrantRevokePrivilegeRequest(const GrantRevokePrivilegeRequest& other88) {
+ requestType = other88.requestType;
+ privileges = other88.privileges;
+ revokeGrantOption = other88.revokeGrantOption;
+ __isset = other88.__isset;
+ }
+ GrantRevokePrivilegeRequest& GrantRevokePrivilegeRequest::operator=(const GrantRevokePrivilegeRequest& other89) {
+ requestType = other89.requestType;
+ privileges = other89.privileges;
+ revokeGrantOption = other89.revokeGrantOption;
+ __isset = other89.__isset;
+ return *this;
+ }
+ void GrantRevokePrivilegeRequest::printTo(std::ostream& out) const {
+ using ::apache::thrift::to_string;
+ out << "GrantRevokePrivilegeRequest(";
+ out << "requestType=" << to_string(requestType);
+ out << ", " << "privileges=" << to_string(privileges);
+ out << ", " << "revokeGrantOption="; (__isset.revokeGrantOption ? (out << to_string(revokeGrantOption)) : (out << "<null>"));
+ out << ")";
+ }
+
+
+ GrantRevokePrivilegeResponse::~GrantRevokePrivilegeResponse() throw() {
+ }
+
+
+ void GrantRevokePrivilegeResponse::__set_success(const bool val) {
+ this->success = val;
+ __isset.success = true;
+ }
+
+ uint32_t GrantRevokePrivilegeResponse::read(::apache::thrift::protocol::TProtocol* iprot) {
+
+ apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
+ uint32_t xfer = 0;
+ std::string fname;
+ ::apache::thrift::protocol::TType ftype;
+ int16_t fid;
+
+ xfer += iprot->readStructBegin(fname);
+
+ using ::apache::thrift::protocol::TProtocolException;
+
+
+ while (true)
+ {
+ xfer += iprot->readFieldBegin(fname, ftype, fid);
+ if (ftype == ::apache::thrift::protocol::T_STOP) {
+ break;
+ }
+ switch (fid)
+ {
+ case 1:
+ if (ftype == ::apache::thrift::protocol::T_BOOL) {
+ xfer += iprot->readBool(this->success);
+ this->__isset.success = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ default:
+ xfer += iprot->skip(ftype);
+ break;
+ }
+ xfer += iprot->readFieldEnd();
+ }
+
+ xfer += iprot->readStructEnd();
+
+ return xfer;
+ }
+
+ uint32_t GrantRevokePrivilegeResponse::write(::apache::thrift::protocol::TProtocol* oprot) const {
+ uint32_t xfer = 0;
+ apache::thrift::protocol::TOutputRecursionTracker tracker(*oprot);
+ xfer += oprot->writeStructBegin("GrantRevokePrivilegeResponse");
+
+ if (this->__isset.success) {
+ xfer += oprot->writeFieldBegin("success", ::apache::thrift::protocol::T_BOOL, 1);
+ xfer += oprot->writeBool(this->success);
+ xfer += oprot->writeFieldEnd();
+ }
+ xfer += oprot->writeFieldStop();
+ xfer += oprot->writeStructEnd();
+ return xfer;
+ }
+
+ void swap(GrantRevokePrivilegeResponse &a, GrantRevokePrivilegeResponse &b) {
+ using ::std::swap;
+ swap(a.success, b.success);
+ swap(a.__isset, b.__isset);
+ }
+
+ GrantRevokePrivilegeResponse::GrantRevokePrivilegeResponse(const GrantRevokePrivilegeResponse& other90) {
+ success = other90.success;
+ __isset = other90.__isset;
+ }
+ GrantRevokePrivilegeResponse& GrantRevokePrivilegeResponse::operator=(const GrantRevokePrivilegeResponse& other91) {
+ success = other91.success;
+ __isset = other91.__isset;
+ return *this;
+ }
+ void GrantRevokePrivilegeResponse::printTo(std::ostream& out) const {
+ using ::apache::thrift::to_string;
+ out << "GrantRevokePrivilegeResponse(";
+ out << "success="; (__isset.success ? (out << to_string(success)) : (out << "<null>"));
+ out << ")";
+ }
+
+
+ Role::~Role() throw() {
+ }
+
+
+ void Role::__set_roleName(const std::string& val) {
+ this->roleName = val;
+ }
+
+ void Role::__set_createTime(const int32_t val) {
+ this->createTime = val;
+ }
+
+ void Role::__set_ownerName(const std::string& val) {
+ this->ownerName = val;
+ }
+
+ uint32_t Role::read(::apache::thrift::protocol::TProtocol* iprot) {
+
+ apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
+ uint32_t xfer = 0;
+ std::string fname;
+ ::apache::thrift::protocol::TType ftype;
+ int16_t fid;
+
+ xfer += iprot->readStructBegin(fname);
+
+ using ::apache::thrift::protocol::TProtocolException;
+
+
+ while (true)
+ {
+ xfer += iprot->readFieldBegin(fname, ftype, fid);
+ if (ftype == ::apache::thrift::protocol::T_STOP) {
+ break;
+ }
+ switch (fid)
+ {
+ case 1:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->roleName);
+ this->__isset.roleName = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 2:
+ if (ftype == ::apache::thrift::protocol::T_I32) {
+ xfer += iprot->readI32(this->createTime);
+ this->__isset.createTime = true;
+ } else {
+ xfer += iprot->skip(ftype);
+ }
+ break;
+ case 3:
+ if (ftype == ::apache::thrift::protocol::T_STRING) {
+ xfer += iprot->readString(this->ownerName);
+ this->__isset.ownerName = true;
+ } else {
+ xfer += ip
<TRUNCATED>
[08/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Wei Zheng)
Posted by se...@apache.org.
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/standalone-metastore/src/gen/thrift/gen-rb/hive_metastore_types.rb
----------------------------------------------------------------------
diff --cc standalone-metastore/src/gen/thrift/gen-rb/hive_metastore_types.rb
index 0000000,ea73b34..1dae310
mode 000000,100644..100644
--- a/standalone-metastore/src/gen/thrift/gen-rb/hive_metastore_types.rb
+++ b/standalone-metastore/src/gen/thrift/gen-rb/hive_metastore_types.rb
@@@ -1,0 -1,3515 +1,3516 @@@
+ #
+ # Autogenerated by Thrift Compiler (0.9.3)
+ #
+ # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ #
+
+ require 'thrift'
+ require 'fb303_types'
+
+
+ module HiveObjectType
+ GLOBAL = 1
+ DATABASE = 2
+ TABLE = 3
+ PARTITION = 4
+ COLUMN = 5
+ VALUE_MAP = {1 => "GLOBAL", 2 => "DATABASE", 3 => "TABLE", 4 => "PARTITION", 5 => "COLUMN"}
+ VALID_VALUES = Set.new([GLOBAL, DATABASE, TABLE, PARTITION, COLUMN]).freeze
+ end
+
+ module PrincipalType
+ USER = 1
+ ROLE = 2
+ GROUP = 3
+ VALUE_MAP = {1 => "USER", 2 => "ROLE", 3 => "GROUP"}
+ VALID_VALUES = Set.new([USER, ROLE, GROUP]).freeze
+ end
+
+ module PartitionEventType
+ LOAD_DONE = 1
+ VALUE_MAP = {1 => "LOAD_DONE"}
+ VALID_VALUES = Set.new([LOAD_DONE]).freeze
+ end
+
+ module TxnState
+ COMMITTED = 1
+ ABORTED = 2
+ OPEN = 3
+ VALUE_MAP = {1 => "COMMITTED", 2 => "ABORTED", 3 => "OPEN"}
+ VALID_VALUES = Set.new([COMMITTED, ABORTED, OPEN]).freeze
+ end
+
+ module LockLevel
+ DB = 1
+ TABLE = 2
+ PARTITION = 3
+ VALUE_MAP = {1 => "DB", 2 => "TABLE", 3 => "PARTITION"}
+ VALID_VALUES = Set.new([DB, TABLE, PARTITION]).freeze
+ end
+
+ module LockState
+ ACQUIRED = 1
+ WAITING = 2
+ ABORT = 3
+ NOT_ACQUIRED = 4
+ VALUE_MAP = {1 => "ACQUIRED", 2 => "WAITING", 3 => "ABORT", 4 => "NOT_ACQUIRED"}
+ VALID_VALUES = Set.new([ACQUIRED, WAITING, ABORT, NOT_ACQUIRED]).freeze
+ end
+
+ module LockType
+ SHARED_READ = 1
+ SHARED_WRITE = 2
+ EXCLUSIVE = 3
+ VALUE_MAP = {1 => "SHARED_READ", 2 => "SHARED_WRITE", 3 => "EXCLUSIVE"}
+ VALID_VALUES = Set.new([SHARED_READ, SHARED_WRITE, EXCLUSIVE]).freeze
+ end
+
+ module CompactionType
+ MINOR = 1
+ MAJOR = 2
+ VALUE_MAP = {1 => "MINOR", 2 => "MAJOR"}
+ VALID_VALUES = Set.new([MINOR, MAJOR]).freeze
+ end
+
+ module GrantRevokeType
+ GRANT = 1
+ REVOKE = 2
+ VALUE_MAP = {1 => "GRANT", 2 => "REVOKE"}
+ VALID_VALUES = Set.new([GRANT, REVOKE]).freeze
+ end
+
+ module DataOperationType
+ SELECT = 1
+ INSERT = 2
+ UPDATE = 3
+ DELETE = 4
+ UNSET = 5
+ NO_TXN = 6
+ VALUE_MAP = {1 => "SELECT", 2 => "INSERT", 3 => "UPDATE", 4 => "DELETE", 5 => "UNSET", 6 => "NO_TXN"}
+ VALID_VALUES = Set.new([SELECT, INSERT, UPDATE, DELETE, UNSET, NO_TXN]).freeze
+ end
+
+ module EventRequestType
+ INSERT = 1
+ UPDATE = 2
+ DELETE = 3
+ VALUE_MAP = {1 => "INSERT", 2 => "UPDATE", 3 => "DELETE"}
+ VALID_VALUES = Set.new([INSERT, UPDATE, DELETE]).freeze
+ end
+
+ module FunctionType
+ JAVA = 1
+ VALUE_MAP = {1 => "JAVA"}
+ VALID_VALUES = Set.new([JAVA]).freeze
+ end
+
+ module ResourceType
+ JAR = 1
+ FILE = 2
+ ARCHIVE = 3
+ VALUE_MAP = {1 => "JAR", 2 => "FILE", 3 => "ARCHIVE"}
+ VALID_VALUES = Set.new([JAR, FILE, ARCHIVE]).freeze
+ end
+
+ module FileMetadataExprType
+ ORC_SARG = 1
+ VALUE_MAP = {1 => "ORC_SARG"}
+ VALID_VALUES = Set.new([ORC_SARG]).freeze
+ end
+
+ module ClientCapability
+ TEST_CAPABILITY = 1
- VALUE_MAP = {1 => "TEST_CAPABILITY"}
- VALID_VALUES = Set.new([TEST_CAPABILITY]).freeze
++ INSERT_ONLY_TABLES = 2
++ VALUE_MAP = {1 => "TEST_CAPABILITY", 2 => "INSERT_ONLY_TABLES"}
++ VALID_VALUES = Set.new([TEST_CAPABILITY, INSERT_ONLY_TABLES]).freeze
+ end
+
+ class Version
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ VERSION = 1
+ COMMENTS = 2
+
+ FIELDS = {
+ VERSION => {:type => ::Thrift::Types::STRING, :name => 'version'},
+ COMMENTS => {:type => ::Thrift::Types::STRING, :name => 'comments'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class FieldSchema
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ NAME = 1
+ TYPE = 2
+ COMMENT = 3
+
+ FIELDS = {
+ NAME => {:type => ::Thrift::Types::STRING, :name => 'name'},
+ TYPE => {:type => ::Thrift::Types::STRING, :name => 'type'},
+ COMMENT => {:type => ::Thrift::Types::STRING, :name => 'comment'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class SQLPrimaryKey
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ TABLE_DB = 1
+ TABLE_NAME = 2
+ COLUMN_NAME = 3
+ KEY_SEQ = 4
+ PK_NAME = 5
+ ENABLE_CSTR = 6
+ VALIDATE_CSTR = 7
+ RELY_CSTR = 8
+
+ FIELDS = {
+ TABLE_DB => {:type => ::Thrift::Types::STRING, :name => 'table_db'},
+ TABLE_NAME => {:type => ::Thrift::Types::STRING, :name => 'table_name'},
+ COLUMN_NAME => {:type => ::Thrift::Types::STRING, :name => 'column_name'},
+ KEY_SEQ => {:type => ::Thrift::Types::I32, :name => 'key_seq'},
+ PK_NAME => {:type => ::Thrift::Types::STRING, :name => 'pk_name'},
+ ENABLE_CSTR => {:type => ::Thrift::Types::BOOL, :name => 'enable_cstr'},
+ VALIDATE_CSTR => {:type => ::Thrift::Types::BOOL, :name => 'validate_cstr'},
+ RELY_CSTR => {:type => ::Thrift::Types::BOOL, :name => 'rely_cstr'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class SQLForeignKey
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ PKTABLE_DB = 1
+ PKTABLE_NAME = 2
+ PKCOLUMN_NAME = 3
+ FKTABLE_DB = 4
+ FKTABLE_NAME = 5
+ FKCOLUMN_NAME = 6
+ KEY_SEQ = 7
+ UPDATE_RULE = 8
+ DELETE_RULE = 9
+ FK_NAME = 10
+ PK_NAME = 11
+ ENABLE_CSTR = 12
+ VALIDATE_CSTR = 13
+ RELY_CSTR = 14
+
+ FIELDS = {
+ PKTABLE_DB => {:type => ::Thrift::Types::STRING, :name => 'pktable_db'},
+ PKTABLE_NAME => {:type => ::Thrift::Types::STRING, :name => 'pktable_name'},
+ PKCOLUMN_NAME => {:type => ::Thrift::Types::STRING, :name => 'pkcolumn_name'},
+ FKTABLE_DB => {:type => ::Thrift::Types::STRING, :name => 'fktable_db'},
+ FKTABLE_NAME => {:type => ::Thrift::Types::STRING, :name => 'fktable_name'},
+ FKCOLUMN_NAME => {:type => ::Thrift::Types::STRING, :name => 'fkcolumn_name'},
+ KEY_SEQ => {:type => ::Thrift::Types::I32, :name => 'key_seq'},
+ UPDATE_RULE => {:type => ::Thrift::Types::I32, :name => 'update_rule'},
+ DELETE_RULE => {:type => ::Thrift::Types::I32, :name => 'delete_rule'},
+ FK_NAME => {:type => ::Thrift::Types::STRING, :name => 'fk_name'},
+ PK_NAME => {:type => ::Thrift::Types::STRING, :name => 'pk_name'},
+ ENABLE_CSTR => {:type => ::Thrift::Types::BOOL, :name => 'enable_cstr'},
+ VALIDATE_CSTR => {:type => ::Thrift::Types::BOOL, :name => 'validate_cstr'},
+ RELY_CSTR => {:type => ::Thrift::Types::BOOL, :name => 'rely_cstr'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class SQLUniqueConstraint
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ TABLE_DB = 1
+ TABLE_NAME = 2
+ COLUMN_NAME = 3
+ KEY_SEQ = 4
+ UK_NAME = 5
+ ENABLE_CSTR = 6
+ VALIDATE_CSTR = 7
+ RELY_CSTR = 8
+
+ FIELDS = {
+ TABLE_DB => {:type => ::Thrift::Types::STRING, :name => 'table_db'},
+ TABLE_NAME => {:type => ::Thrift::Types::STRING, :name => 'table_name'},
+ COLUMN_NAME => {:type => ::Thrift::Types::STRING, :name => 'column_name'},
+ KEY_SEQ => {:type => ::Thrift::Types::I32, :name => 'key_seq'},
+ UK_NAME => {:type => ::Thrift::Types::STRING, :name => 'uk_name'},
+ ENABLE_CSTR => {:type => ::Thrift::Types::BOOL, :name => 'enable_cstr'},
+ VALIDATE_CSTR => {:type => ::Thrift::Types::BOOL, :name => 'validate_cstr'},
+ RELY_CSTR => {:type => ::Thrift::Types::BOOL, :name => 'rely_cstr'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class SQLNotNullConstraint
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ TABLE_DB = 1
+ TABLE_NAME = 2
+ COLUMN_NAME = 3
+ NN_NAME = 4
+ ENABLE_CSTR = 5
+ VALIDATE_CSTR = 6
+ RELY_CSTR = 7
+
+ FIELDS = {
+ TABLE_DB => {:type => ::Thrift::Types::STRING, :name => 'table_db'},
+ TABLE_NAME => {:type => ::Thrift::Types::STRING, :name => 'table_name'},
+ COLUMN_NAME => {:type => ::Thrift::Types::STRING, :name => 'column_name'},
+ NN_NAME => {:type => ::Thrift::Types::STRING, :name => 'nn_name'},
+ ENABLE_CSTR => {:type => ::Thrift::Types::BOOL, :name => 'enable_cstr'},
+ VALIDATE_CSTR => {:type => ::Thrift::Types::BOOL, :name => 'validate_cstr'},
+ RELY_CSTR => {:type => ::Thrift::Types::BOOL, :name => 'rely_cstr'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class Type
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ NAME = 1
+ TYPE1 = 2
+ TYPE2 = 3
+ FIELDS = 4
+
+ FIELDS = {
+ NAME => {:type => ::Thrift::Types::STRING, :name => 'name'},
+ TYPE1 => {:type => ::Thrift::Types::STRING, :name => 'type1', :optional => true},
+ TYPE2 => {:type => ::Thrift::Types::STRING, :name => 'type2', :optional => true},
+ FIELDS => {:type => ::Thrift::Types::LIST, :name => 'fields', :element => {:type => ::Thrift::Types::STRUCT, :class => ::FieldSchema}, :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class HiveObjectRef
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ OBJECTTYPE = 1
+ DBNAME = 2
+ OBJECTNAME = 3
+ PARTVALUES = 4
+ COLUMNNAME = 5
+
+ FIELDS = {
+ OBJECTTYPE => {:type => ::Thrift::Types::I32, :name => 'objectType', :enum_class => ::HiveObjectType},
+ DBNAME => {:type => ::Thrift::Types::STRING, :name => 'dbName'},
+ OBJECTNAME => {:type => ::Thrift::Types::STRING, :name => 'objectName'},
+ PARTVALUES => {:type => ::Thrift::Types::LIST, :name => 'partValues', :element => {:type => ::Thrift::Types::STRING}},
+ COLUMNNAME => {:type => ::Thrift::Types::STRING, :name => 'columnName'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ unless @objectType.nil? || ::HiveObjectType::VALID_VALUES.include?(@objectType)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field objectType!')
+ end
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class PrivilegeGrantInfo
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ PRIVILEGE = 1
+ CREATETIME = 2
+ GRANTOR = 3
+ GRANTORTYPE = 4
+ GRANTOPTION = 5
+
+ FIELDS = {
+ PRIVILEGE => {:type => ::Thrift::Types::STRING, :name => 'privilege'},
+ CREATETIME => {:type => ::Thrift::Types::I32, :name => 'createTime'},
+ GRANTOR => {:type => ::Thrift::Types::STRING, :name => 'grantor'},
+ GRANTORTYPE => {:type => ::Thrift::Types::I32, :name => 'grantorType', :enum_class => ::PrincipalType},
+ GRANTOPTION => {:type => ::Thrift::Types::BOOL, :name => 'grantOption'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ unless @grantorType.nil? || ::PrincipalType::VALID_VALUES.include?(@grantorType)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field grantorType!')
+ end
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class HiveObjectPrivilege
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ HIVEOBJECT = 1
+ PRINCIPALNAME = 2
+ PRINCIPALTYPE = 3
+ GRANTINFO = 4
+
+ FIELDS = {
+ HIVEOBJECT => {:type => ::Thrift::Types::STRUCT, :name => 'hiveObject', :class => ::HiveObjectRef},
+ PRINCIPALNAME => {:type => ::Thrift::Types::STRING, :name => 'principalName'},
+ PRINCIPALTYPE => {:type => ::Thrift::Types::I32, :name => 'principalType', :enum_class => ::PrincipalType},
+ GRANTINFO => {:type => ::Thrift::Types::STRUCT, :name => 'grantInfo', :class => ::PrivilegeGrantInfo}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ unless @principalType.nil? || ::PrincipalType::VALID_VALUES.include?(@principalType)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field principalType!')
+ end
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class PrivilegeBag
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ PRIVILEGES = 1
+
+ FIELDS = {
+ PRIVILEGES => {:type => ::Thrift::Types::LIST, :name => 'privileges', :element => {:type => ::Thrift::Types::STRUCT, :class => ::HiveObjectPrivilege}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class PrincipalPrivilegeSet
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ USERPRIVILEGES = 1
+ GROUPPRIVILEGES = 2
+ ROLEPRIVILEGES = 3
+
+ FIELDS = {
+ USERPRIVILEGES => {:type => ::Thrift::Types::MAP, :name => 'userPrivileges', :key => {:type => ::Thrift::Types::STRING}, :value => {:type => ::Thrift::Types::LIST, :element => {:type => ::Thrift::Types::STRUCT, :class => ::PrivilegeGrantInfo}}},
+ GROUPPRIVILEGES => {:type => ::Thrift::Types::MAP, :name => 'groupPrivileges', :key => {:type => ::Thrift::Types::STRING}, :value => {:type => ::Thrift::Types::LIST, :element => {:type => ::Thrift::Types::STRUCT, :class => ::PrivilegeGrantInfo}}},
+ ROLEPRIVILEGES => {:type => ::Thrift::Types::MAP, :name => 'rolePrivileges', :key => {:type => ::Thrift::Types::STRING}, :value => {:type => ::Thrift::Types::LIST, :element => {:type => ::Thrift::Types::STRUCT, :class => ::PrivilegeGrantInfo}}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class GrantRevokePrivilegeRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ REQUESTTYPE = 1
+ PRIVILEGES = 2
+ REVOKEGRANTOPTION = 3
+
+ FIELDS = {
+ REQUESTTYPE => {:type => ::Thrift::Types::I32, :name => 'requestType', :enum_class => ::GrantRevokeType},
+ PRIVILEGES => {:type => ::Thrift::Types::STRUCT, :name => 'privileges', :class => ::PrivilegeBag},
+ REVOKEGRANTOPTION => {:type => ::Thrift::Types::BOOL, :name => 'revokeGrantOption', :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ unless @requestType.nil? || ::GrantRevokeType::VALID_VALUES.include?(@requestType)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field requestType!')
+ end
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class GrantRevokePrivilegeResponse
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ SUCCESS = 1
+
+ FIELDS = {
+ SUCCESS => {:type => ::Thrift::Types::BOOL, :name => 'success', :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class Role
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ ROLENAME = 1
+ CREATETIME = 2
+ OWNERNAME = 3
+
+ FIELDS = {
+ ROLENAME => {:type => ::Thrift::Types::STRING, :name => 'roleName'},
+ CREATETIME => {:type => ::Thrift::Types::I32, :name => 'createTime'},
+ OWNERNAME => {:type => ::Thrift::Types::STRING, :name => 'ownerName'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class RolePrincipalGrant
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ ROLENAME = 1
+ PRINCIPALNAME = 2
+ PRINCIPALTYPE = 3
+ GRANTOPTION = 4
+ GRANTTIME = 5
+ GRANTORNAME = 6
+ GRANTORPRINCIPALTYPE = 7
+
+ FIELDS = {
+ ROLENAME => {:type => ::Thrift::Types::STRING, :name => 'roleName'},
+ PRINCIPALNAME => {:type => ::Thrift::Types::STRING, :name => 'principalName'},
+ PRINCIPALTYPE => {:type => ::Thrift::Types::I32, :name => 'principalType', :enum_class => ::PrincipalType},
+ GRANTOPTION => {:type => ::Thrift::Types::BOOL, :name => 'grantOption'},
+ GRANTTIME => {:type => ::Thrift::Types::I32, :name => 'grantTime'},
+ GRANTORNAME => {:type => ::Thrift::Types::STRING, :name => 'grantorName'},
+ GRANTORPRINCIPALTYPE => {:type => ::Thrift::Types::I32, :name => 'grantorPrincipalType', :enum_class => ::PrincipalType}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ unless @principalType.nil? || ::PrincipalType::VALID_VALUES.include?(@principalType)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field principalType!')
+ end
+ unless @grantorPrincipalType.nil? || ::PrincipalType::VALID_VALUES.include?(@grantorPrincipalType)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field grantorPrincipalType!')
+ end
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class GetRoleGrantsForPrincipalRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ PRINCIPAL_NAME = 1
+ PRINCIPAL_TYPE = 2
+
+ FIELDS = {
+ PRINCIPAL_NAME => {:type => ::Thrift::Types::STRING, :name => 'principal_name'},
+ PRINCIPAL_TYPE => {:type => ::Thrift::Types::I32, :name => 'principal_type', :enum_class => ::PrincipalType}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field principal_name is unset!') unless @principal_name
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field principal_type is unset!') unless @principal_type
+ unless @principal_type.nil? || ::PrincipalType::VALID_VALUES.include?(@principal_type)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field principal_type!')
+ end
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class GetRoleGrantsForPrincipalResponse
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ PRINCIPALGRANTS = 1
+
+ FIELDS = {
+ PRINCIPALGRANTS => {:type => ::Thrift::Types::LIST, :name => 'principalGrants', :element => {:type => ::Thrift::Types::STRUCT, :class => ::RolePrincipalGrant}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field principalGrants is unset!') unless @principalGrants
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class GetPrincipalsInRoleRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ ROLENAME = 1
+
+ FIELDS = {
+ ROLENAME => {:type => ::Thrift::Types::STRING, :name => 'roleName'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field roleName is unset!') unless @roleName
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class GetPrincipalsInRoleResponse
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ PRINCIPALGRANTS = 1
+
+ FIELDS = {
+ PRINCIPALGRANTS => {:type => ::Thrift::Types::LIST, :name => 'principalGrants', :element => {:type => ::Thrift::Types::STRUCT, :class => ::RolePrincipalGrant}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field principalGrants is unset!') unless @principalGrants
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class GrantRevokeRoleRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ REQUESTTYPE = 1
+ ROLENAME = 2
+ PRINCIPALNAME = 3
+ PRINCIPALTYPE = 4
+ GRANTOR = 5
+ GRANTORTYPE = 6
+ GRANTOPTION = 7
+
+ FIELDS = {
+ REQUESTTYPE => {:type => ::Thrift::Types::I32, :name => 'requestType', :enum_class => ::GrantRevokeType},
+ ROLENAME => {:type => ::Thrift::Types::STRING, :name => 'roleName'},
+ PRINCIPALNAME => {:type => ::Thrift::Types::STRING, :name => 'principalName'},
+ PRINCIPALTYPE => {:type => ::Thrift::Types::I32, :name => 'principalType', :enum_class => ::PrincipalType},
+ GRANTOR => {:type => ::Thrift::Types::STRING, :name => 'grantor', :optional => true},
+ GRANTORTYPE => {:type => ::Thrift::Types::I32, :name => 'grantorType', :optional => true, :enum_class => ::PrincipalType},
+ GRANTOPTION => {:type => ::Thrift::Types::BOOL, :name => 'grantOption', :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ unless @requestType.nil? || ::GrantRevokeType::VALID_VALUES.include?(@requestType)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field requestType!')
+ end
+ unless @principalType.nil? || ::PrincipalType::VALID_VALUES.include?(@principalType)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field principalType!')
+ end
+ unless @grantorType.nil? || ::PrincipalType::VALID_VALUES.include?(@grantorType)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field grantorType!')
+ end
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class GrantRevokeRoleResponse
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ SUCCESS = 1
+
+ FIELDS = {
+ SUCCESS => {:type => ::Thrift::Types::BOOL, :name => 'success', :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class Database
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ NAME = 1
+ DESCRIPTION = 2
+ LOCATIONURI = 3
+ PARAMETERS = 4
+ PRIVILEGES = 5
+ OWNERNAME = 6
+ OWNERTYPE = 7
+
+ FIELDS = {
+ NAME => {:type => ::Thrift::Types::STRING, :name => 'name'},
+ DESCRIPTION => {:type => ::Thrift::Types::STRING, :name => 'description'},
+ LOCATIONURI => {:type => ::Thrift::Types::STRING, :name => 'locationUri'},
+ PARAMETERS => {:type => ::Thrift::Types::MAP, :name => 'parameters', :key => {:type => ::Thrift::Types::STRING}, :value => {:type => ::Thrift::Types::STRING}},
+ PRIVILEGES => {:type => ::Thrift::Types::STRUCT, :name => 'privileges', :class => ::PrincipalPrivilegeSet, :optional => true},
+ OWNERNAME => {:type => ::Thrift::Types::STRING, :name => 'ownerName', :optional => true},
+ OWNERTYPE => {:type => ::Thrift::Types::I32, :name => 'ownerType', :optional => true, :enum_class => ::PrincipalType}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ unless @ownerType.nil? || ::PrincipalType::VALID_VALUES.include?(@ownerType)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field ownerType!')
+ end
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class SerDeInfo
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ NAME = 1
+ SERIALIZATIONLIB = 2
+ PARAMETERS = 3
+
+ FIELDS = {
+ NAME => {:type => ::Thrift::Types::STRING, :name => 'name'},
+ SERIALIZATIONLIB => {:type => ::Thrift::Types::STRING, :name => 'serializationLib'},
+ PARAMETERS => {:type => ::Thrift::Types::MAP, :name => 'parameters', :key => {:type => ::Thrift::Types::STRING}, :value => {:type => ::Thrift::Types::STRING}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class Order
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ COL = 1
+ ORDER = 2
+
+ FIELDS = {
+ COL => {:type => ::Thrift::Types::STRING, :name => 'col'},
+ ORDER => {:type => ::Thrift::Types::I32, :name => 'order'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class SkewedInfo
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ SKEWEDCOLNAMES = 1
+ SKEWEDCOLVALUES = 2
+ SKEWEDCOLVALUELOCATIONMAPS = 3
+
+ FIELDS = {
+ SKEWEDCOLNAMES => {:type => ::Thrift::Types::LIST, :name => 'skewedColNames', :element => {:type => ::Thrift::Types::STRING}},
+ SKEWEDCOLVALUES => {:type => ::Thrift::Types::LIST, :name => 'skewedColValues', :element => {:type => ::Thrift::Types::LIST, :element => {:type => ::Thrift::Types::STRING}}},
+ SKEWEDCOLVALUELOCATIONMAPS => {:type => ::Thrift::Types::MAP, :name => 'skewedColValueLocationMaps', :key => {:type => ::Thrift::Types::LIST, :element => {:type => ::Thrift::Types::STRING}}, :value => {:type => ::Thrift::Types::STRING}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class StorageDescriptor
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ COLS = 1
+ LOCATION = 2
+ INPUTFORMAT = 3
+ OUTPUTFORMAT = 4
+ COMPRESSED = 5
+ NUMBUCKETS = 6
+ SERDEINFO = 7
+ BUCKETCOLS = 8
+ SORTCOLS = 9
+ PARAMETERS = 10
+ SKEWEDINFO = 11
+ STOREDASSUBDIRECTORIES = 12
+
+ FIELDS = {
+ COLS => {:type => ::Thrift::Types::LIST, :name => 'cols', :element => {:type => ::Thrift::Types::STRUCT, :class => ::FieldSchema}},
+ LOCATION => {:type => ::Thrift::Types::STRING, :name => 'location'},
+ INPUTFORMAT => {:type => ::Thrift::Types::STRING, :name => 'inputFormat'},
+ OUTPUTFORMAT => {:type => ::Thrift::Types::STRING, :name => 'outputFormat'},
+ COMPRESSED => {:type => ::Thrift::Types::BOOL, :name => 'compressed'},
+ NUMBUCKETS => {:type => ::Thrift::Types::I32, :name => 'numBuckets'},
+ SERDEINFO => {:type => ::Thrift::Types::STRUCT, :name => 'serdeInfo', :class => ::SerDeInfo},
+ BUCKETCOLS => {:type => ::Thrift::Types::LIST, :name => 'bucketCols', :element => {:type => ::Thrift::Types::STRING}},
+ SORTCOLS => {:type => ::Thrift::Types::LIST, :name => 'sortCols', :element => {:type => ::Thrift::Types::STRUCT, :class => ::Order}},
+ PARAMETERS => {:type => ::Thrift::Types::MAP, :name => 'parameters', :key => {:type => ::Thrift::Types::STRING}, :value => {:type => ::Thrift::Types::STRING}},
+ SKEWEDINFO => {:type => ::Thrift::Types::STRUCT, :name => 'skewedInfo', :class => ::SkewedInfo, :optional => true},
+ STOREDASSUBDIRECTORIES => {:type => ::Thrift::Types::BOOL, :name => 'storedAsSubDirectories', :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class Table
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ TABLENAME = 1
+ DBNAME = 2
+ OWNER = 3
+ CREATETIME = 4
+ LASTACCESSTIME = 5
+ RETENTION = 6
+ SD = 7
+ PARTITIONKEYS = 8
+ PARAMETERS = 9
+ VIEWORIGINALTEXT = 10
+ VIEWEXPANDEDTEXT = 11
+ TABLETYPE = 12
+ PRIVILEGES = 13
+ TEMPORARY = 14
+ REWRITEENABLED = 15
+
+ FIELDS = {
+ TABLENAME => {:type => ::Thrift::Types::STRING, :name => 'tableName'},
+ DBNAME => {:type => ::Thrift::Types::STRING, :name => 'dbName'},
+ OWNER => {:type => ::Thrift::Types::STRING, :name => 'owner'},
+ CREATETIME => {:type => ::Thrift::Types::I32, :name => 'createTime'},
+ LASTACCESSTIME => {:type => ::Thrift::Types::I32, :name => 'lastAccessTime'},
+ RETENTION => {:type => ::Thrift::Types::I32, :name => 'retention'},
+ SD => {:type => ::Thrift::Types::STRUCT, :name => 'sd', :class => ::StorageDescriptor},
+ PARTITIONKEYS => {:type => ::Thrift::Types::LIST, :name => 'partitionKeys', :element => {:type => ::Thrift::Types::STRUCT, :class => ::FieldSchema}},
+ PARAMETERS => {:type => ::Thrift::Types::MAP, :name => 'parameters', :key => {:type => ::Thrift::Types::STRING}, :value => {:type => ::Thrift::Types::STRING}},
+ VIEWORIGINALTEXT => {:type => ::Thrift::Types::STRING, :name => 'viewOriginalText'},
+ VIEWEXPANDEDTEXT => {:type => ::Thrift::Types::STRING, :name => 'viewExpandedText'},
+ TABLETYPE => {:type => ::Thrift::Types::STRING, :name => 'tableType'},
+ PRIVILEGES => {:type => ::Thrift::Types::STRUCT, :name => 'privileges', :class => ::PrincipalPrivilegeSet, :optional => true},
+ TEMPORARY => {:type => ::Thrift::Types::BOOL, :name => 'temporary', :default => false, :optional => true},
+ REWRITEENABLED => {:type => ::Thrift::Types::BOOL, :name => 'rewriteEnabled', :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class Partition
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ VALUES = 1
+ DBNAME = 2
+ TABLENAME = 3
+ CREATETIME = 4
+ LASTACCESSTIME = 5
+ SD = 6
+ PARAMETERS = 7
+ PRIVILEGES = 8
+
+ FIELDS = {
+ VALUES => {:type => ::Thrift::Types::LIST, :name => 'values', :element => {:type => ::Thrift::Types::STRING}},
+ DBNAME => {:type => ::Thrift::Types::STRING, :name => 'dbName'},
+ TABLENAME => {:type => ::Thrift::Types::STRING, :name => 'tableName'},
+ CREATETIME => {:type => ::Thrift::Types::I32, :name => 'createTime'},
+ LASTACCESSTIME => {:type => ::Thrift::Types::I32, :name => 'lastAccessTime'},
+ SD => {:type => ::Thrift::Types::STRUCT, :name => 'sd', :class => ::StorageDescriptor},
+ PARAMETERS => {:type => ::Thrift::Types::MAP, :name => 'parameters', :key => {:type => ::Thrift::Types::STRING}, :value => {:type => ::Thrift::Types::STRING}},
+ PRIVILEGES => {:type => ::Thrift::Types::STRUCT, :name => 'privileges', :class => ::PrincipalPrivilegeSet, :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class PartitionWithoutSD
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ VALUES = 1
+ CREATETIME = 2
+ LASTACCESSTIME = 3
+ RELATIVEPATH = 4
+ PARAMETERS = 5
+ PRIVILEGES = 6
+
+ FIELDS = {
+ VALUES => {:type => ::Thrift::Types::LIST, :name => 'values', :element => {:type => ::Thrift::Types::STRING}},
+ CREATETIME => {:type => ::Thrift::Types::I32, :name => 'createTime'},
+ LASTACCESSTIME => {:type => ::Thrift::Types::I32, :name => 'lastAccessTime'},
+ RELATIVEPATH => {:type => ::Thrift::Types::STRING, :name => 'relativePath'},
+ PARAMETERS => {:type => ::Thrift::Types::MAP, :name => 'parameters', :key => {:type => ::Thrift::Types::STRING}, :value => {:type => ::Thrift::Types::STRING}},
+ PRIVILEGES => {:type => ::Thrift::Types::STRUCT, :name => 'privileges', :class => ::PrincipalPrivilegeSet, :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class PartitionSpecWithSharedSD
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ PARTITIONS = 1
+ SD = 2
+
+ FIELDS = {
+ PARTITIONS => {:type => ::Thrift::Types::LIST, :name => 'partitions', :element => {:type => ::Thrift::Types::STRUCT, :class => ::PartitionWithoutSD}},
+ SD => {:type => ::Thrift::Types::STRUCT, :name => 'sd', :class => ::StorageDescriptor}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class PartitionListComposingSpec
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ PARTITIONS = 1
+
+ FIELDS = {
+ PARTITIONS => {:type => ::Thrift::Types::LIST, :name => 'partitions', :element => {:type => ::Thrift::Types::STRUCT, :class => ::Partition}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class PartitionSpec
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ DBNAME = 1
+ TABLENAME = 2
+ ROOTPATH = 3
+ SHAREDSDPARTITIONSPEC = 4
+ PARTITIONLIST = 5
+
+ FIELDS = {
+ DBNAME => {:type => ::Thrift::Types::STRING, :name => 'dbName'},
+ TABLENAME => {:type => ::Thrift::Types::STRING, :name => 'tableName'},
+ ROOTPATH => {:type => ::Thrift::Types::STRING, :name => 'rootPath'},
+ SHAREDSDPARTITIONSPEC => {:type => ::Thrift::Types::STRUCT, :name => 'sharedSDPartitionSpec', :class => ::PartitionSpecWithSharedSD, :optional => true},
+ PARTITIONLIST => {:type => ::Thrift::Types::STRUCT, :name => 'partitionList', :class => ::PartitionListComposingSpec, :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class Index
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ INDEXNAME = 1
+ INDEXHANDLERCLASS = 2
+ DBNAME = 3
+ ORIGTABLENAME = 4
+ CREATETIME = 5
+ LASTACCESSTIME = 6
+ INDEXTABLENAME = 7
+ SD = 8
+ PARAMETERS = 9
+ DEFERREDREBUILD = 10
+
+ FIELDS = {
+ INDEXNAME => {:type => ::Thrift::Types::STRING, :name => 'indexName'},
+ INDEXHANDLERCLASS => {:type => ::Thrift::Types::STRING, :name => 'indexHandlerClass'},
+ DBNAME => {:type => ::Thrift::Types::STRING, :name => 'dbName'},
+ ORIGTABLENAME => {:type => ::Thrift::Types::STRING, :name => 'origTableName'},
+ CREATETIME => {:type => ::Thrift::Types::I32, :name => 'createTime'},
+ LASTACCESSTIME => {:type => ::Thrift::Types::I32, :name => 'lastAccessTime'},
+ INDEXTABLENAME => {:type => ::Thrift::Types::STRING, :name => 'indexTableName'},
+ SD => {:type => ::Thrift::Types::STRUCT, :name => 'sd', :class => ::StorageDescriptor},
+ PARAMETERS => {:type => ::Thrift::Types::MAP, :name => 'parameters', :key => {:type => ::Thrift::Types::STRING}, :value => {:type => ::Thrift::Types::STRING}},
+ DEFERREDREBUILD => {:type => ::Thrift::Types::BOOL, :name => 'deferredRebuild'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class BooleanColumnStatsData
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ NUMTRUES = 1
+ NUMFALSES = 2
+ NUMNULLS = 3
+ BITVECTORS = 4
+
+ FIELDS = {
+ NUMTRUES => {:type => ::Thrift::Types::I64, :name => 'numTrues'},
+ NUMFALSES => {:type => ::Thrift::Types::I64, :name => 'numFalses'},
+ NUMNULLS => {:type => ::Thrift::Types::I64, :name => 'numNulls'},
+ BITVECTORS => {:type => ::Thrift::Types::STRING, :name => 'bitVectors', :binary => true, :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field numTrues is unset!') unless @numTrues
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field numFalses is unset!') unless @numFalses
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field numNulls is unset!') unless @numNulls
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class DoubleColumnStatsData
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ LOWVALUE = 1
+ HIGHVALUE = 2
+ NUMNULLS = 3
+ NUMDVS = 4
+ BITVECTORS = 5
+
+ FIELDS = {
+ LOWVALUE => {:type => ::Thrift::Types::DOUBLE, :name => 'lowValue', :optional => true},
+ HIGHVALUE => {:type => ::Thrift::Types::DOUBLE, :name => 'highValue', :optional => true},
+ NUMNULLS => {:type => ::Thrift::Types::I64, :name => 'numNulls'},
+ NUMDVS => {:type => ::Thrift::Types::I64, :name => 'numDVs'},
+ BITVECTORS => {:type => ::Thrift::Types::STRING, :name => 'bitVectors', :binary => true, :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field numNulls is unset!') unless @numNulls
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field numDVs is unset!') unless @numDVs
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class LongColumnStatsData
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ LOWVALUE = 1
+ HIGHVALUE = 2
+ NUMNULLS = 3
+ NUMDVS = 4
+ BITVECTORS = 5
+
+ FIELDS = {
+ LOWVALUE => {:type => ::Thrift::Types::I64, :name => 'lowValue', :optional => true},
+ HIGHVALUE => {:type => ::Thrift::Types::I64, :name => 'highValue', :optional => true},
+ NUMNULLS => {:type => ::Thrift::Types::I64, :name => 'numNulls'},
+ NUMDVS => {:type => ::Thrift::Types::I64, :name => 'numDVs'},
+ BITVECTORS => {:type => ::Thrift::Types::STRING, :name => 'bitVectors', :binary => true, :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field numNulls is unset!') unless @numNulls
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field numDVs is unset!') unless @numDVs
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class StringColumnStatsData
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ MAXCOLLEN = 1
+ AVGCOLLEN = 2
+ NUMNULLS = 3
+ NUMDVS = 4
+ BITVECTORS = 5
+
+ FIELDS = {
+ MAXCOLLEN => {:type => ::Thrift::Types::I64, :name => 'maxColLen'},
+ AVGCOLLEN => {:type => ::Thrift::Types::DOUBLE, :name => 'avgColLen'},
+ NUMNULLS => {:type => ::Thrift::Types::I64, :name => 'numNulls'},
+ NUMDVS => {:type => ::Thrift::Types::I64, :name => 'numDVs'},
+ BITVECTORS => {:type => ::Thrift::Types::STRING, :name => 'bitVectors', :binary => true, :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field maxColLen is unset!') unless @maxColLen
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field avgColLen is unset!') unless @avgColLen
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field numNulls is unset!') unless @numNulls
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field numDVs is unset!') unless @numDVs
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class BinaryColumnStatsData
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ MAXCOLLEN = 1
+ AVGCOLLEN = 2
+ NUMNULLS = 3
+ BITVECTORS = 4
+
+ FIELDS = {
+ MAXCOLLEN => {:type => ::Thrift::Types::I64, :name => 'maxColLen'},
+ AVGCOLLEN => {:type => ::Thrift::Types::DOUBLE, :name => 'avgColLen'},
+ NUMNULLS => {:type => ::Thrift::Types::I64, :name => 'numNulls'},
+ BITVECTORS => {:type => ::Thrift::Types::STRING, :name => 'bitVectors', :binary => true, :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field maxColLen is unset!') unless @maxColLen
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field avgColLen is unset!') unless @avgColLen
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field numNulls is unset!') unless @numNulls
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class Decimal
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ UNSCALED = 1
+ SCALE = 3
+
+ FIELDS = {
+ UNSCALED => {:type => ::Thrift::Types::STRING, :name => 'unscaled', :binary => true},
+ SCALE => {:type => ::Thrift::Types::I16, :name => 'scale'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field unscaled is unset!') unless @unscaled
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field scale is unset!') unless @scale
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class DecimalColumnStatsData
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ LOWVALUE = 1
+ HIGHVALUE = 2
+ NUMNULLS = 3
+ NUMDVS = 4
+ BITVECTORS = 5
+
+ FIELDS = {
+ LOWVALUE => {:type => ::Thrift::Types::STRUCT, :name => 'lowValue', :class => ::Decimal, :optional => true},
+ HIGHVALUE => {:type => ::Thrift::Types::STRUCT, :name => 'highValue', :class => ::Decimal, :optional => true},
+ NUMNULLS => {:type => ::Thrift::Types::I64, :name => 'numNulls'},
+ NUMDVS => {:type => ::Thrift::Types::I64, :name => 'numDVs'},
+ BITVECTORS => {:type => ::Thrift::Types::STRING, :name => 'bitVectors', :binary => true, :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field numNulls is unset!') unless @numNulls
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field numDVs is unset!') unless @numDVs
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class Date
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ DAYSSINCEEPOCH = 1
+
+ FIELDS = {
+ DAYSSINCEEPOCH => {:type => ::Thrift::Types::I64, :name => 'daysSinceEpoch'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field daysSinceEpoch is unset!') unless @daysSinceEpoch
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class DateColumnStatsData
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ LOWVALUE = 1
+ HIGHVALUE = 2
+ NUMNULLS = 3
+ NUMDVS = 4
+ BITVECTORS = 5
+
+ FIELDS = {
+ LOWVALUE => {:type => ::Thrift::Types::STRUCT, :name => 'lowValue', :class => ::Date, :optional => true},
+ HIGHVALUE => {:type => ::Thrift::Types::STRUCT, :name => 'highValue', :class => ::Date, :optional => true},
+ NUMNULLS => {:type => ::Thrift::Types::I64, :name => 'numNulls'},
+ NUMDVS => {:type => ::Thrift::Types::I64, :name => 'numDVs'},
+ BITVECTORS => {:type => ::Thrift::Types::STRING, :name => 'bitVectors', :binary => true, :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field numNulls is unset!') unless @numNulls
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field numDVs is unset!') unless @numDVs
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class ColumnStatisticsData < ::Thrift::Union
+ include ::Thrift::Struct_Union
+ class << self
+ def booleanStats(val)
+ ColumnStatisticsData.new(:booleanStats, val)
+ end
+
+ def longStats(val)
+ ColumnStatisticsData.new(:longStats, val)
+ end
+
+ def doubleStats(val)
+ ColumnStatisticsData.new(:doubleStats, val)
+ end
+
+ def stringStats(val)
+ ColumnStatisticsData.new(:stringStats, val)
+ end
+
+ def binaryStats(val)
+ ColumnStatisticsData.new(:binaryStats, val)
+ end
+
+ def decimalStats(val)
+ ColumnStatisticsData.new(:decimalStats, val)
+ end
+
+ def dateStats(val)
+ ColumnStatisticsData.new(:dateStats, val)
+ end
+ end
+
+ BOOLEANSTATS = 1
+ LONGSTATS = 2
+ DOUBLESTATS = 3
+ STRINGSTATS = 4
+ BINARYSTATS = 5
+ DECIMALSTATS = 6
+ DATESTATS = 7
+
+ FIELDS = {
+ BOOLEANSTATS => {:type => ::Thrift::Types::STRUCT, :name => 'booleanStats', :class => ::BooleanColumnStatsData},
+ LONGSTATS => {:type => ::Thrift::Types::STRUCT, :name => 'longStats', :class => ::LongColumnStatsData},
+ DOUBLESTATS => {:type => ::Thrift::Types::STRUCT, :name => 'doubleStats', :class => ::DoubleColumnStatsData},
+ STRINGSTATS => {:type => ::Thrift::Types::STRUCT, :name => 'stringStats', :class => ::StringColumnStatsData},
+ BINARYSTATS => {:type => ::Thrift::Types::STRUCT, :name => 'binaryStats', :class => ::BinaryColumnStatsData},
+ DECIMALSTATS => {:type => ::Thrift::Types::STRUCT, :name => 'decimalStats', :class => ::DecimalColumnStatsData},
+ DATESTATS => {:type => ::Thrift::Types::STRUCT, :name => 'dateStats', :class => ::DateColumnStatsData}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise(StandardError, 'Union fields are not set.') if get_set_field.nil? || get_value.nil?
+ end
+
+ ::Thrift::Union.generate_accessors self
+ end
+
+ class ColumnStatisticsObj
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ COLNAME = 1
+ COLTYPE = 2
+ STATSDATA = 3
+
+ FIELDS = {
+ COLNAME => {:type => ::Thrift::Types::STRING, :name => 'colName'},
+ COLTYPE => {:type => ::Thrift::Types::STRING, :name => 'colType'},
+ STATSDATA => {:type => ::Thrift::Types::STRUCT, :name => 'statsData', :class => ::ColumnStatisticsData}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field colName is unset!') unless @colName
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field colType is unset!') unless @colType
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field statsData is unset!') unless @statsData
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class ColumnStatisticsDesc
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ ISTBLLEVEL = 1
+ DBNAME = 2
+ TABLENAME = 3
+ PARTNAME = 4
+ LASTANALYZED = 5
+
+ FIELDS = {
+ ISTBLLEVEL => {:type => ::Thrift::Types::BOOL, :name => 'isTblLevel'},
+ DBNAME => {:type => ::Thrift::Types::STRING, :name => 'dbName'},
+ TABLENAME => {:type => ::Thrift::Types::STRING, :name => 'tableName'},
+ PARTNAME => {:type => ::Thrift::Types::STRING, :name => 'partName', :optional => true},
+ LASTANALYZED => {:type => ::Thrift::Types::I64, :name => 'lastAnalyzed', :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field isTblLevel is unset!') if @isTblLevel.nil?
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field dbName is unset!') unless @dbName
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field tableName is unset!') unless @tableName
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class ColumnStatistics
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ STATSDESC = 1
+ STATSOBJ = 2
+
+ FIELDS = {
+ STATSDESC => {:type => ::Thrift::Types::STRUCT, :name => 'statsDesc', :class => ::ColumnStatisticsDesc},
+ STATSOBJ => {:type => ::Thrift::Types::LIST, :name => 'statsObj', :element => {:type => ::Thrift::Types::STRUCT, :class => ::ColumnStatisticsObj}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field statsDesc is unset!') unless @statsDesc
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field statsObj is unset!') unless @statsObj
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class AggrStats
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ COLSTATS = 1
+ PARTSFOUND = 2
+
+ FIELDS = {
+ COLSTATS => {:type => ::Thrift::Types::LIST, :name => 'colStats', :element => {:type => ::Thrift::Types::STRUCT, :class => ::ColumnStatisticsObj}},
+ PARTSFOUND => {:type => ::Thrift::Types::I64, :name => 'partsFound'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field colStats is unset!') unless @colStats
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field partsFound is unset!') unless @partsFound
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class SetPartitionsStatsRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ COLSTATS = 1
+ NEEDMERGE = 2
+
+ FIELDS = {
+ COLSTATS => {:type => ::Thrift::Types::LIST, :name => 'colStats', :element => {:type => ::Thrift::Types::STRUCT, :class => ::ColumnStatistics}},
+ NEEDMERGE => {:type => ::Thrift::Types::BOOL, :name => 'needMerge', :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field colStats is unset!') unless @colStats
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class Schema
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ FIELDSCHEMAS = 1
+ PROPERTIES = 2
+
+ FIELDS = {
+ FIELDSCHEMAS => {:type => ::Thrift::Types::LIST, :name => 'fieldSchemas', :element => {:type => ::Thrift::Types::STRUCT, :class => ::FieldSchema}},
+ PROPERTIES => {:type => ::Thrift::Types::MAP, :name => 'properties', :key => {:type => ::Thrift::Types::STRING}, :value => {:type => ::Thrift::Types::STRING}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class EnvironmentContext
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ PROPERTIES = 1
+
+ FIELDS = {
+ PROPERTIES => {:type => ::Thrift::Types::MAP, :name => 'properties', :key => {:type => ::Thrift::Types::STRING}, :value => {:type => ::Thrift::Types::STRING}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class PrimaryKeysRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ DB_NAME = 1
+ TBL_NAME = 2
+
+ FIELDS = {
+ DB_NAME => {:type => ::Thrift::Types::STRING, :name => 'db_name'},
+ TBL_NAME => {:type => ::Thrift::Types::STRING, :name => 'tbl_name'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field db_name is unset!') unless @db_name
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field tbl_name is unset!') unless @tbl_name
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class PrimaryKeysResponse
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ PRIMARYKEYS = 1
+
+ FIELDS = {
+ PRIMARYKEYS => {:type => ::Thrift::Types::LIST, :name => 'primaryKeys', :element => {:type => ::Thrift::Types::STRUCT, :class => ::SQLPrimaryKey}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field primaryKeys is unset!') unless @primaryKeys
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class ForeignKeysRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ PARENT_DB_NAME = 1
+ PARENT_TBL_NAME = 2
+ FOREIGN_DB_NAME = 3
+ FOREIGN_TBL_NAME = 4
+
+ FIELDS = {
+ PARENT_DB_NAME => {:type => ::Thrift::Types::STRING, :name => 'parent_db_name'},
+ PARENT_TBL_NAME => {:type => ::Thrift::Types::STRING, :name => 'parent_tbl_name'},
+ FOREIGN_DB_NAME => {:type => ::Thrift::Types::STRING, :name => 'foreign_db_name'},
+ FOREIGN_TBL_NAME => {:type => ::Thrift::Types::STRING, :name => 'foreign_tbl_name'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class ForeignKeysResponse
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ FOREIGNKEYS = 1
+
+ FIELDS = {
+ FOREIGNKEYS => {:type => ::Thrift::Types::LIST, :name => 'foreignKeys', :element => {:type => ::Thrift::Types::STRUCT, :class => ::SQLForeignKey}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field foreignKeys is unset!') unless @foreignKeys
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class UniqueConstraintsRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ DB_NAME = 1
+ TBL_NAME = 2
+
+ FIELDS = {
+ DB_NAME => {:type => ::Thrift::Types::STRING, :name => 'db_name'},
+ TBL_NAME => {:type => ::Thrift::Types::STRING, :name => 'tbl_name'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field db_name is unset!') unless @db_name
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field tbl_name is unset!') unless @tbl_name
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class UniqueConstraintsResponse
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ UNIQUECONSTRAINTS = 1
+
+ FIELDS = {
+ UNIQUECONSTRAINTS => {:type => ::Thrift::Types::LIST, :name => 'uniqueConstraints', :element => {:type => ::Thrift::Types::STRUCT, :class => ::SQLUniqueConstraint}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field uniqueConstraints is unset!') unless @uniqueConstraints
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class NotNullConstraintsRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ DB_NAME = 1
+ TBL_NAME = 2
+
+ FIELDS = {
+ DB_NAME => {:type => ::Thrift::Types::STRING, :name => 'db_name'},
+ TBL_NAME => {:type => ::Thrift::Types::STRING, :name => 'tbl_name'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field db_name is unset!') unless @db_name
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field tbl_name is unset!') unless @tbl_name
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class NotNullConstraintsResponse
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ NOTNULLCONSTRAINTS = 1
+
+ FIELDS = {
+ NOTNULLCONSTRAINTS => {:type => ::Thrift::Types::LIST, :name => 'notNullConstraints', :element => {:type => ::Thrift::Types::STRUCT, :class => ::SQLNotNullConstraint}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field notNullConstraints is unset!') unless @notNullConstraints
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class DropConstraintRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ DBNAME = 1
+ TABLENAME = 2
+ CONSTRAINTNAME = 3
+
+ FIELDS = {
+ DBNAME => {:type => ::Thrift::Types::STRING, :name => 'dbname'},
+ TABLENAME => {:type => ::Thrift::Types::STRING, :name => 'tablename'},
+ CONSTRAINTNAME => {:type => ::Thrift::Types::STRING, :name => 'constraintname'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field dbname is unset!') unless @dbname
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field tablename is unset!') unless @tablename
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field constraintname is unset!') unless @constraintname
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class AddPrimaryKeyRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ PRIMARYKEYCOLS = 1
+
+ FIELDS = {
+ PRIMARYKEYCOLS => {:type => ::Thrift::Types::LIST, :name => 'primaryKeyCols', :element => {:type => ::Thrift::Types::STRUCT, :class => ::SQLPrimaryKey}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field primaryKeyCols is unset!') unless @primaryKeyCols
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class AddForeignKeyRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ FOREIGNKEYCOLS = 1
+
+ FIELDS = {
+ FOREIGNKEYCOLS => {:type => ::Thrift::Types::LIST, :name => 'foreignKeyCols', :element => {:type => ::Thrift::Types::STRUCT, :class => ::SQLForeignKey}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field foreignKeyCols is unset!') unless @foreignKeyCols
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class AddUniqueConstraintRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ UNIQUECONSTRAINTCOLS = 1
+
+ FIELDS = {
+ UNIQUECONSTRAINTCOLS => {:type => ::Thrift::Types::LIST, :name => 'uniqueConstraintCols', :element => {:type => ::Thrift::Types::STRUCT, :class => ::SQLUniqueConstraint}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field uniqueConstraintCols is unset!') unless @uniqueConstraintCols
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class AddNotNullConstraintRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ NOTNULLCONSTRAINTCOLS = 1
+
+ FIELDS = {
+ NOTNULLCONSTRAINTCOLS => {:type => ::Thrift::Types::LIST, :name => 'notNullConstraintCols', :element => {:type => ::Thrift::Types::STRUCT, :class => ::SQLNotNullConstraint}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field notNullConstraintCols is unset!') unless @notNullConstraintCols
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class PartitionsByExprResult
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ PARTITIONS = 1
+ HASUNKNOWNPARTITIONS = 2
+
+ FIELDS = {
+ PARTITIONS => {:type => ::Thrift::Types::LIST, :name => 'partitions', :element => {:type => ::Thrift::Types::STRUCT, :class => ::Partition}},
+ HASUNKNOWNPARTITIONS => {:type => ::Thrift::Types::BOOL, :name => 'hasUnknownPartitions'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field partitions is unset!') unless @partitions
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field hasUnknownPartitions is unset!') if @hasUnknownPartitions.nil?
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class PartitionsByExprRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ DBNAME = 1
+ TBLNAME = 2
+ EXPR = 3
+ DEFAULTPARTITIONNAME = 4
+ MAXPARTS = 5
+
+ FIELDS = {
+ DBNAME => {:type => ::Thrift::Types::STRING, :name => 'dbName'},
+ TBLNAME => {:type => ::Thrift::Types::STRING, :name => 'tblName'},
+ EXPR => {:type => ::Thrift::Types::STRING, :name => 'expr', :binary => true},
+ DEFAULTPARTITIONNAME => {:type => ::Thrift::Types::STRING, :name => 'defaultPartitionName', :optional => true},
+ MAXPARTS => {:type => ::Thrift::Types::I16, :name => 'maxParts', :default => -1, :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field dbName is unset!') unless @dbName
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field tblName is unset!') unless @tblName
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field expr is unset!') unless @expr
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class TableStatsResult
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ TABLESTATS = 1
+
+ FIELDS = {
+ TABLESTATS => {:type => ::Thrift::Types::LIST, :name => 'tableStats', :element => {:type => ::Thrift::Types::STRUCT, :class => ::ColumnStatisticsObj}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field tableStats is unset!') unless @tableStats
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class PartitionsStatsResult
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ PARTSTATS = 1
+
+ FIELDS = {
+ PARTSTATS => {:type => ::Thrift::Types::MAP, :name => 'partStats', :key => {:type => ::Thrift::Types::STRING}, :value => {:type => ::Thrift::Types::LIST, :element => {:type => ::Thrift::Types::STRUCT, :class => ::ColumnStatisticsObj}}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field partStats is unset!') unless @partStats
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class TableStatsRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ DBNAME = 1
+ TBLNAME = 2
+ COLNAMES = 3
+
+ FIELDS = {
+ DBNAME => {:type => ::Thrift::Types::STRING, :name => 'dbName'},
+ TBLNAME => {:type => ::Thrift::Types::STRING, :name => 'tblName'},
+ COLNAMES => {:type => ::Thrift::Types::LIST, :name => 'colNames', :element => {:type => ::Thrift::Types::STRING}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field dbName is unset!') unless @dbName
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field tblName is unset!') unless @tblName
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field colNames is unset!') unless @colNames
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class PartitionsStatsRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ DBNAME = 1
+ TBLNAME = 2
+ COLNAMES = 3
+ PARTNAMES = 4
+
+ FIELDS = {
+ DBNAME => {:type => ::Thrift::Types::STRING, :name => 'dbName'},
+ TBLNAME => {:type => ::Thrift::Types::STRING, :name => 'tblName'},
+ COLNAMES => {:type => ::Thrift::Types::LIST, :name => 'colNames', :element => {:type => ::Thrift::Types::STRING}},
+ PARTNAMES => {:type => ::Thrift::Types::LIST, :name => 'partNames', :element => {:type => ::Thrift::Types::STRING}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field dbName is unset!') unless @dbName
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field tblName is unset!') unless @tblName
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field colNames is unset!') unless @colNames
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field partNames is unset!') unless @partNames
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class AddPartitionsResult
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ PARTITIONS = 1
+
+ FIELDS = {
+ PARTITIONS => {:type => ::Thrift::Types::LIST, :name => 'partitions', :element => {:type => ::Thrift::Types::STRUCT, :class => ::Partition}, :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class AddPartitionsRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ DBNAME = 1
+ TBLNAME = 2
+ PARTS = 3
+ IFNOTEXISTS = 4
+ NEEDRESULT = 5
+
+ FIELDS = {
+ DBNAME => {:type => ::Thrift::Types::STRING, :name => 'dbName'},
+ TBLNAME => {:type => ::Thrift::Types::STRING, :name => 'tblName'},
+ PARTS => {:type => ::Thrift::Types::LIST, :name => 'parts', :element => {:type => ::Thrift::Types::STRUCT, :class => ::Partition}},
+ IFNOTEXISTS => {:type => ::Thrift::Types::BOOL, :name => 'ifNotExists'},
+ NEEDRESULT => {:type => ::Thrift::Types::BOOL, :name => 'needResult', :default => true, :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field dbName is unset!') unless @dbName
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field tblName is unset!') unless @tblName
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field parts is unset!') unless @parts
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field ifNotExists is unset!') if @ifNotExists.nil?
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class DropPartitionsResult
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ PARTITIONS = 1
+
+ FIELDS = {
+ PARTITIONS => {:type => ::Thrift::Types::LIST, :name => 'partitions', :element => {:type => ::Thrift::Types::STRUCT, :class => ::Partition}, :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class DropPartitionsExpr
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ EXPR = 1
+ PARTARCHIVELEVEL = 2
+
+ FIELDS = {
+ EXPR => {:type => ::Thrift::Types::STRING, :name => 'expr', :binary => true},
+ PARTARCHIVELEVEL => {:type => ::Thrift::Types::I32, :name => 'partArchiveLevel', :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field expr is unset!') unless @expr
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class RequestPartsSpec < ::Thrift::Union
+ include ::Thrift::Struct_Union
+ class << self
+ def names(val)
+ RequestPartsSpec.new(:names, val)
+ end
+
+ def exprs(val)
+ RequestPartsSpec.new(:exprs, val)
+ end
+ end
+
+ NAMES = 1
+ EXPRS = 2
+
+ FIELDS = {
+ NAMES => {:type => ::Thrift::Types::LIST, :name => 'names', :element => {:type => ::Thrift::Types::STRING}},
+ EXPRS => {:type => ::Thrift::Types::LIST, :name => 'exprs', :element => {:type => ::Thrift::Types::STRUCT, :class => ::DropPartitionsExpr}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise(StandardError, 'Union fields are not set.') if get_set_field.nil? || get_value.nil?
+ end
+
+ ::Thrift::Union.generate_accessors self
+ end
+
+ class DropPartitionsRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ DBNAME = 1
+ TBLNAME = 2
+ PARTS = 3
+ DELETEDATA = 4
+ IFEXISTS = 5
+ IGNOREPROTECTION = 6
+ ENVIRONMENTCONTEXT = 7
+ NEEDRESULT = 8
+
+ FIELDS = {
+ DBNAME => {:type => ::Thrift::Types::STRING, :name => 'dbName'},
+ TBLNAME => {:type => ::Thrift::Types::STRING, :name => 'tblName'},
+ PARTS => {:type => ::Thrift::Types::STRUCT, :name => 'parts', :class => ::RequestPartsSpec},
+ DELETEDATA => {:type => ::Thrift::Types::BOOL, :name => 'deleteData', :optional => true},
+ IFEXISTS => {:type => ::Thrift::Types::BOOL, :name => 'ifExists', :default => true, :optional => true},
+ IGNOREPROTECTION => {:type => ::Thrift::Types::BOOL, :name => 'ignoreProtection', :optional => true},
+ ENVIRONMENTCONTEXT => {:type => ::Thrift::Types::STRUCT, :name => 'environmentContext', :class => ::EnvironmentContext, :optional => true},
+ NEEDRESULT => {:type => ::Thrift::Types::BOOL, :name => 'needResult', :default => true, :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field dbName is unset!') unless @dbName
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field tblName is unset!') unless @tblName
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field parts is unset!') unless @parts
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class ResourceUri
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ RESOURCETYPE = 1
+ URI = 2
+
+ FIELDS = {
+ RESOURCETYPE => {:type => ::Thrift::Types::I32, :name => 'resourceType', :enum_class => ::ResourceType},
+ URI => {:type => ::Thrift::Types::STRING, :name => 'uri'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ unless @resourceType.nil? || ::ResourceType::VALID_VALUES.include?(@resourceType)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field resourceType!')
+ end
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class Function
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ FUNCTIONNAME = 1
+ DBNAME = 2
+ CLASSNAME = 3
+ OWNERNAME = 4
+ OWNERTYPE = 5
+ CREATETIME = 6
+ FUNCTIONTYPE = 7
+ RESOURCEURIS = 8
+
+ FIELDS = {
+ FUNCTIONNAME => {:type => ::Thrift::Types::STRING, :name => 'functionName'},
+ DBNAME => {:type => ::Thrift::Types::STRING, :name => 'dbName'},
+ CLASSNAME => {:type => ::Thrift::Types::STRING, :name => 'className'},
+ OWNERNAME => {:type => ::Thrift::Types::STRING, :name => 'ownerName'},
+ OWNERTYPE => {:type => ::Thrift::Types::I32, :name => 'ownerType', :enum_class => ::PrincipalType},
+ CREATETIME => {:type => ::Thrift::Types::I32, :name => 'createTime'},
+ FUNCTIONTYPE => {:type => ::Thrift::Types::I32, :name => 'functionType', :enum_class => ::FunctionType},
+ RESOURCEURIS => {:type => ::Thrift::Types::LIST, :name => 'resourceUris', :element => {:type => ::Thrift::Types::STRUCT, :class => ::ResourceUri}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ unless @ownerType.nil? || ::PrincipalType::VALID_VALUES.include?(@ownerType)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field ownerType!')
+ end
+ unless @functionType.nil? || ::FunctionType::VALID_VALUES.include?(@functionType)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field functionType!')
+ end
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class TxnInfo
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ ID = 1
+ STATE = 2
+ USER = 3
+ HOSTNAME = 4
+ AGENTINFO = 5
+ HEARTBEATCOUNT = 6
+ METAINFO = 7
+ STARTEDTIME = 8
+ LASTHEARTBEATTIME = 9
+
+ FIELDS = {
+ ID => {:type => ::Thrift::Types::I64, :name => 'id'},
+ STATE => {:type => ::Thrift::Types::I32, :name => 'state', :enum_class => ::TxnState},
+ USER => {:type => ::Thrift::Types::STRING, :name => 'user'},
+ HOSTNAME => {:type => ::Thrift::Types::STRING, :name => 'hostname'},
+ AGENTINFO => {:type => ::Thrift::Types::STRING, :name => 'agentInfo', :default => %q"Unknown", :optional => true},
+ HEARTBEATCOUNT => {:type => ::Thrift::Types::I32, :name => 'heartbeatCount', :default => 0, :optional => true},
+ METAINFO => {:type => ::Thrift::Types::STRING, :name => 'metaInfo', :optional => true},
+ STARTEDTIME => {:type => ::Thrift::Types::I64, :name => 'startedTime', :optional => true},
+ LASTHEARTBEATTIME => {:type => ::Thrift::Types::I64, :name => 'lastHeartbeatTime', :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field id is unset!') unless @id
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field state is unset!') unless @state
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field user is unset!') unless @user
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field hostname is unset!') unless @hostname
+ unless @state.nil? || ::TxnState::VALID_VALUES.include?(@state)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field state!')
+ end
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class GetOpenTxnsInfoResponse
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ TXN_HIGH_WATER_MARK = 1
+ OPEN_TXNS = 2
+
+ FIELDS = {
+ TXN_HIGH_WATER_MARK => {:type => ::Thrift::Types::I64, :name => 'txn_high_water_mark'},
+ OPEN_TXNS => {:type => ::Thrift::Types::LIST, :name => 'open_txns', :element => {:type => ::Thrift::Types::STRUCT, :class => ::TxnInfo}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field txn_high_water_mark is unset!') unless @txn_high_water_mark
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field open_txns is unset!') unless @open_txns
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class GetOpenTxnsResponse
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ TXN_HIGH_WATER_MARK = 1
+ OPEN_TXNS = 2
+ MIN_OPEN_TXN = 3
+ ABORTEDBITS = 4
+
+ FIELDS = {
+ TXN_HIGH_WATER_MARK => {:type => ::Thrift::Types::I64, :name => 'txn_high_water_mark'},
+ OPEN_TXNS => {:type => ::Thrift::Types::LIST, :name => 'open_txns', :element => {:type => ::Thrift::Types::I64}},
+ MIN_OPEN_TXN => {:type => ::Thrift::Types::I64, :name => 'min_open_txn', :optional => true},
+ ABORTEDBITS => {:type => ::Thrift::Types::STRING, :name => 'abortedBits', :binary => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field txn_high_water_mark is unset!') unless @txn_high_water_mark
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field open_txns is unset!') unless @open_txns
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field abortedBits is unset!') unless @abortedBits
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class OpenTxnRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ NUM_TXNS = 1
+ USER = 2
+ HOSTNAME = 3
+ AGENTINFO = 4
+
+ FIELDS = {
+ NUM_TXNS => {:type => ::Thrift::Types::I32, :name => 'num_txns'},
+ USER => {:type => ::Thrift::Types::STRING, :name => 'user'},
+ HOSTNAME => {:type => ::Thrift::Types::STRING, :name => 'hostname'},
+ AGENTINFO => {:type => ::Thrift::Types::STRING, :name => 'agentInfo', :default => %q"Unknown", :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field num_txns is unset!') unless @num_txns
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field user is unset!') unless @user
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field hostname is unset!') unless @hostname
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class OpenTxnsResponse
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ TXN_IDS = 1
+
+ FIELDS = {
+ TXN_IDS => {:type => ::Thrift::Types::LIST, :name => 'txn_ids', :element => {:type => ::Thrift::Types::I64}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field txn_ids is unset!') unless @txn_ids
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class AbortTxnRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ TXNID = 1
+
+ FIELDS = {
+ TXNID => {:type => ::Thrift::Types::I64, :name => 'txnid'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field txnid is unset!') unless @txnid
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class AbortTxnsRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ TXN_IDS = 1
+
+ FIELDS = {
+ TXN_IDS => {:type => ::Thrift::Types::LIST, :name => 'txn_ids', :element => {:type => ::Thrift::Types::I64}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field txn_ids is unset!') unless @txn_ids
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class CommitTxnRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ TXNID = 1
+
+ FIELDS = {
+ TXNID => {:type => ::Thrift::Types::I64, :name => 'txnid'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field txnid is unset!') unless @txnid
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class LockComponent
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ TYPE = 1
+ LEVEL = 2
+ DBNAME = 3
+ TABLENAME = 4
+ PARTITIONNAME = 5
+ OPERATIONTYPE = 6
+ ISACID = 7
+ ISDYNAMICPARTITIONWRITE = 8
+
+ FIELDS = {
+ TYPE => {:type => ::Thrift::Types::I32, :name => 'type', :enum_class => ::LockType},
+ LEVEL => {:type => ::Thrift::Types::I32, :name => 'level', :enum_class => ::LockLevel},
+ DBNAME => {:type => ::Thrift::Types::STRING, :name => 'dbname'},
+ TABLENAME => {:type => ::Thrift::Types::STRING, :name => 'tablename', :optional => true},
+ PARTITIONNAME => {:type => ::Thrift::Types::STRING, :name => 'partitionname', :optional => true},
+ OPERATIONTYPE => {:type => ::Thrift::Types::I32, :name => 'operationType', :default => 5, :optional => true, :enum_class => ::DataOperationType},
+ ISACID => {:type => ::Thrift::Types::BOOL, :name => 'isAcid', :default => false, :optional => true},
+ ISDYNAMICPARTITIONWRITE => {:type => ::Thrift::Types::BOOL, :name => 'isDynamicPartitionWrite', :default => false, :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field type is unset!') unless @type
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field level is unset!') unless @level
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field dbname is unset!') unless @dbname
+ unless @type.nil? || ::LockType::VALID_VALUES.include?(@type)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field type!')
+ end
+ unless @level.nil? || ::LockLevel::VALID_VALUES.include?(@level)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field level!')
+ end
+ unless @operationType.nil? || ::DataOperationType::VALID_VALUES.include?(@operationType)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field operationType!')
+ end
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class LockRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ COMPONENT = 1
+ TXNID = 2
+ USER = 3
+ HOSTNAME = 4
+ AGENTINFO = 5
+
+ FIELDS = {
+ COMPONENT => {:type => ::Thrift::Types::LIST, :name => 'component', :element => {:type => ::Thrift::Types::STRUCT, :class => ::LockComponent}},
+ TXNID => {:type => ::Thrift::Types::I64, :name => 'txnid', :optional => true},
+ USER => {:type => ::Thrift::Types::STRING, :name => 'user'},
+ HOSTNAME => {:type => ::Thrift::Types::STRING, :name => 'hostname'},
+ AGENTINFO => {:type => ::Thrift::Types::STRING, :name => 'agentInfo', :default => %q"Unknown", :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field component is unset!') unless @component
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field user is unset!') unless @user
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field hostname is unset!') unless @hostname
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class LockResponse
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ LOCKID = 1
+ STATE = 2
+
+ FIELDS = {
+ LOCKID => {:type => ::Thrift::Types::I64, :name => 'lockid'},
+ STATE => {:type => ::Thrift::Types::I32, :name => 'state', :enum_class => ::LockState}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field lockid is unset!') unless @lockid
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field state is unset!') unless @state
+ unless @state.nil? || ::LockState::VALID_VALUES.include?(@state)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field state!')
+ end
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class CheckLockRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ LOCKID = 1
+ TXNID = 2
+ ELAPSED_MS = 3
+
+ FIELDS = {
+ LOCKID => {:type => ::Thrift::Types::I64, :name => 'lockid'},
+ TXNID => {:type => ::Thrift::Types::I64, :name => 'txnid', :optional => true},
+ ELAPSED_MS => {:type => ::Thrift::Types::I64, :name => 'elapsed_ms', :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field lockid is unset!') unless @lockid
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class UnlockRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ LOCKID = 1
+
+ FIELDS = {
+ LOCKID => {:type => ::Thrift::Types::I64, :name => 'lockid'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field lockid is unset!') unless @lockid
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class ShowLocksRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ DBNAME = 1
+ TABLENAME = 2
+ PARTNAME = 3
+ ISEXTENDED = 4
+
+ FIELDS = {
+ DBNAME => {:type => ::Thrift::Types::STRING, :name => 'dbname', :optional => true},
+ TABLENAME => {:type => ::Thrift::Types::STRING, :name => 'tablename', :optional => true},
+ PARTNAME => {:type => ::Thrift::Types::STRING, :name => 'partname', :optional => true},
+ ISEXTENDED => {:type => ::Thrift::Types::BOOL, :name => 'isExtended', :default => false, :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class ShowLocksResponseElement
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ LOCKID = 1
+ DBNAME = 2
+ TABLENAME = 3
+ PARTNAME = 4
+ STATE = 5
+ TYPE = 6
+ TXNID = 7
+ LASTHEARTBEAT = 8
+ ACQUIREDAT = 9
+ USER = 10
+ HOSTNAME = 11
+ HEARTBEATCOUNT = 12
+ AGENTINFO = 13
+ BLOCKEDBYEXTID = 14
+ BLOCKEDBYINTID = 15
+ LOCKIDINTERNAL = 16
+
+ FIELDS = {
+ LOCKID => {:type => ::Thrift::Types::I64, :name => 'lockid'},
+ DBNAME => {:type => ::Thrift::Types::STRING, :name => 'dbname'},
+ TABLENAME => {:type => ::Thrift::Types::STRING, :name => 'tablename', :optional => true},
+ PARTNAME => {:type => ::Thrift::Types::STRING, :name => 'partname', :optional => true},
+ STATE => {:type => ::Thrift::Types::I32, :name => 'state', :enum_class => ::LockState},
+ TYPE => {:type => ::Thrift::Types::I32, :name => 'type', :enum_class => ::LockType},
+ TXNID => {:type => ::Thrift::Types::I64, :name => 'txnid', :optional => true},
+ LASTHEARTBEAT => {:type => ::Thrift::Types::I64, :name => 'lastheartbeat'},
+ ACQUIREDAT => {:type => ::Thrift::Types::I64, :name => 'acquiredat', :optional => true},
+ USER => {:type => ::Thrift::Types::STRING, :name => 'user'},
+ HOSTNAME => {:type => ::Thrift::Types::STRING, :name => 'hostname'},
+ HEARTBEATCOUNT => {:type => ::Thrift::Types::I32, :name => 'heartbeatCount', :default => 0, :optional => true},
+ AGENTINFO => {:type => ::Thrift::Types::STRING, :name => 'agentInfo', :optional => true},
+ BLOCKEDBYEXTID => {:type => ::Thrift::Types::I64, :name => 'blockedByExtId', :optional => true},
+ BLOCKEDBYINTID => {:type => ::Thrift::Types::I64, :name => 'blockedByIntId', :optional => true},
+ LOCKIDINTERNAL => {:type => ::Thrift::Types::I64, :name => 'lockIdInternal', :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field lockid is unset!') unless @lockid
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field dbname is unset!') unless @dbname
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field state is unset!') unless @state
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field type is unset!') unless @type
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field lastheartbeat is unset!') unless @lastheartbeat
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field user is unset!') unless @user
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field hostname is unset!') unless @hostname
+ unless @state.nil? || ::LockState::VALID_VALUES.include?(@state)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field state!')
+ end
+ unless @type.nil? || ::LockType::VALID_VALUES.include?(@type)
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field type!')
+ end
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class ShowLocksResponse
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ LOCKS = 1
+
+ FIELDS = {
+ LOCKS => {:type => ::Thrift::Types::LIST, :name => 'locks', :element => {:type => ::Thrift::Types::STRUCT, :class => ::ShowLocksResponseElement}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class HeartbeatRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ LOCKID = 1
+ TXNID = 2
+
+ FIELDS = {
+ LOCKID => {:type => ::Thrift::Types::I64, :name => 'lockid', :optional => true},
+ TXNID => {:type => ::Thrift::Types::I64, :name => 'txnid', :optional => true}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class HeartbeatTxnRangeRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ MIN = 1
+ MAX = 2
+
+ FIELDS = {
+ MIN => {:type => ::Thrift::Types::I64, :name => 'min'},
+ MAX => {:type => ::Thrift::Types::I64, :name => 'max'}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field min is unset!') unless @min
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field max is unset!') unless @max
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class HeartbeatTxnRangeResponse
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ ABORTED = 1
+ NOSUCH = 2
+
+ FIELDS = {
+ ABORTED => {:type => ::Thrift::Types::SET, :name => 'aborted', :element => {:type => ::Thrift::Types::I64}},
+ NOSUCH => {:type => ::Thrift::Types::SET, :name => 'nosuch', :element => {:type => ::Thrift::Types::I64}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field aborted is unset!') unless @aborted
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field nosuch is unset!') unless @nosuch
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class CompactionRequest
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ DBNAME = 1
+ TABLENAME = 2
+ PARTITIONNAME = 3
+ TYPE = 4
+ RUNAS = 5
+ PROPERTIES = 6
+
+
<TRUNCATED>
[03/50] [abbrv] hive git commit: HIVE-16850 : Only open a new
transaction when there's no currently opened transaction (Wei Zheng)
Posted by se...@apache.org.
HIVE-16850 : Only open a new transaction when there's no currently opened transaction (Wei Zheng)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/fae25566
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/fae25566
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/fae25566
Branch: refs/heads/master
Commit: fae25566beae8ae43e694b3a312fb47dbaf4186b
Parents: 78f28c8
Author: Wei Zheng <we...@apache.org>
Authored: Wed Jun 7 15:28:19 2017 -0700
Committer: Wei Zheng <we...@apache.org>
Committed: Wed Jun 7 15:28:19 2017 -0700
----------------------------------------------------------------------
ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java | 8 ++++++--
ql/src/test/results/clientpositive/llap/mm_conversions.q.out | 2 --
ql/src/test/results/clientpositive/mm_conversions.q.out | 2 --
3 files changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/fae25566/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
index e9b8f6e..82a9fad 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
@@ -4147,8 +4147,12 @@ public class DDLTask extends Task<DDLWork> implements Serializable {
long mmWriteId = 0;
try {
HiveTxnManager txnManager = SessionState.get().getTxnMgr();
- mmWriteId = txnManager.openTxn(new Context(conf), conf.getUser());
- txnManager.commitTxn();
+ if (txnManager.isTxnOpen()) {
+ mmWriteId = txnManager.getCurrentTxnId();
+ } else {
+ mmWriteId = txnManager.openTxn(new Context(conf), conf.getUser());
+ txnManager.commitTxn();
+ }
} catch (Exception e) {
String errorMessage = "FAILED: Error in acquiring locks: " + e.getMessage();
console.printError(errorMessage, "\n"
http://git-wip-us.apache.org/repos/asf/hive/blob/fae25566/ql/src/test/results/clientpositive/llap/mm_conversions.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/mm_conversions.q.out b/ql/src/test/results/clientpositive/llap/mm_conversions.q.out
index 1610672..d95a70e 100644
--- a/ql/src/test/results/clientpositive/llap/mm_conversions.q.out
+++ b/ql/src/test/results/clientpositive/llap/mm_conversions.q.out
@@ -315,7 +315,6 @@ PREHOOK: query: alter table simple_to_mm set tblproperties("transactional"="true
PREHOOK: type: ALTERTABLE_PROPERTIES
PREHOOK: Input: default@simple_to_mm
PREHOOK: Output: default@simple_to_mm
-FAILED: Error in acquiring locks: Transaction already opened. txnid:30
POSTHOOK: query: alter table simple_to_mm set tblproperties("transactional"="true", "transactional_properties"="insert_only")
POSTHOOK: type: ALTERTABLE_PROPERTIES
POSTHOOK: Input: default@simple_to_mm
@@ -758,7 +757,6 @@ PREHOOK: query: alter table part_to_mm set tblproperties("transactional"="true",
PREHOOK: type: ALTERTABLE_PROPERTIES
PREHOOK: Input: default@part_to_mm
PREHOOK: Output: default@part_to_mm
-FAILED: Error in acquiring locks: Transaction already opened. txnid:63
POSTHOOK: query: alter table part_to_mm set tblproperties("transactional"="true", "transactional_properties"="insert_only")
POSTHOOK: type: ALTERTABLE_PROPERTIES
POSTHOOK: Input: default@part_to_mm
http://git-wip-us.apache.org/repos/asf/hive/blob/fae25566/ql/src/test/results/clientpositive/mm_conversions.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/mm_conversions.q.out b/ql/src/test/results/clientpositive/mm_conversions.q.out
index 1610672..d95a70e 100644
--- a/ql/src/test/results/clientpositive/mm_conversions.q.out
+++ b/ql/src/test/results/clientpositive/mm_conversions.q.out
@@ -315,7 +315,6 @@ PREHOOK: query: alter table simple_to_mm set tblproperties("transactional"="true
PREHOOK: type: ALTERTABLE_PROPERTIES
PREHOOK: Input: default@simple_to_mm
PREHOOK: Output: default@simple_to_mm
-FAILED: Error in acquiring locks: Transaction already opened. txnid:30
POSTHOOK: query: alter table simple_to_mm set tblproperties("transactional"="true", "transactional_properties"="insert_only")
POSTHOOK: type: ALTERTABLE_PROPERTIES
POSTHOOK: Input: default@simple_to_mm
@@ -758,7 +757,6 @@ PREHOOK: query: alter table part_to_mm set tblproperties("transactional"="true",
PREHOOK: type: ALTERTABLE_PROPERTIES
PREHOOK: Input: default@part_to_mm
PREHOOK: Output: default@part_to_mm
-FAILED: Error in acquiring locks: Transaction already opened. txnid:63
POSTHOOK: query: alter table part_to_mm set tblproperties("transactional"="true", "transactional_properties"="insert_only")
POSTHOOK: type: ALTERTABLE_PROPERTIES
POSTHOOK: Input: default@part_to_mm
[39/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-14671 : merge master into hive-14535 (Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/f159b5a1
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/f159b5a1
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/f159b5a1
Branch: refs/heads/master
Commit: f159b5a198aa04e34c78ebc8159d2525146d8c9b
Parents: a02a61b b8aad36
Author: sergey <se...@apache.org>
Authored: Thu Sep 28 20:35:00 2017 -0700
Committer: sergey <se...@apache.org>
Committed: Thu Sep 28 20:35:00 2017 -0700
----------------------------------------------------------------------
.../org/apache/hadoop/hive/conf/HiveConf.java | 3 +
data/conf/perf-reg/spark/hive-site.xml | 268 ++
.../hadoop/hive/druid/DruidStorageHandler.java | 59 +-
.../hive/druid/DruidStorageHandlerUtils.java | 488 ++-
.../druid/io/DruidQueryBasedInputFormat.java | 66 +-
.../serde/DruidGroupByQueryRecordReader.java | 225 +-
.../druid/serde/DruidQueryRecordReader.java | 215 +-
.../serde/DruidSelectQueryRecordReader.java | 26 +-
.../hadoop/hive/druid/serde/DruidSerDe.java | 18 +-
.../hive/druid/serde/DruidSerDeUtils.java | 27 +-
.../serde/DruidTimeseriesQueryRecordReader.java | 22 +-
.../druid/serde/DruidTopNQueryRecordReader.java | 38 +-
.../hadoop/hive/druid/TestDruidSerDe.java | 918 -----
.../hive/druid/TestDruidStorageHandler.java | 153 +-
.../hadoop/hive/druid/serde/TestDruidSerDe.java | 991 ++++++
.../apache/hive/hcatalog/common/HCatUtil.java | 24 +-
.../hcatalog/mapreduce/HCatBaseInputFormat.java | 8 +-
.../hive/hcatalog/streaming/HiveEndPoint.java | 26 +-
.../hcatalog/streaming/TransactionBatch.java | 12 +-
.../hive/hcatalog/streaming/TestStreaming.java | 13 +-
.../hive/hcatalog/api/TestHCatClient.java | 7 +
.../hadoop/hive/ql/parse/TestCopyUtils.java | 8 +-
.../hadoop/hive/ql/parse/TestExportImport.java | 2 +
.../hive/ql/parse/TestReplicationScenarios.java | 39 +
...TestReplicationScenariosAcrossInstances.java | 2 +
.../hadoop/hive/cli/TestSparkPerfCliDriver.java | 62 +
.../hadoop/hive/cli/TestPerfCliDriver.java | 62 -
.../hadoop/hive/cli/TestTezPerfCliDriver.java | 62 +
.../test/resources/testconfiguration.properties | 2 +
.../hadoop/hive/cli/control/CliConfigs.java | 32 +-
.../hadoop/hive/llap/LlapRowRecordReader.java | 7 +-
.../hadoop/hive/metastore/HiveMetaStore.java | 41 +
.../hadoop/hive/metastore/MetaStoreUtils.java | 26 +
.../physical/SparkCrossProductCheck.java | 2 +-
.../hadoop/hive/ql/parse/SemanticAnalyzer.java | 3 +-
.../apache/hadoop/hive/ql/plan/SparkWork.java | 4 +-
.../queries/clientpositive/input_lazyserde2.q | 53 +
.../clientpositive/input_lazyserde2.q.out | 844 +++++
.../clientpositive/perf/spark/query1.q.out | 340 ++
.../clientpositive/perf/spark/query10.q.out | 533 +++
.../clientpositive/perf/spark/query11.q.out | 683 ++++
.../clientpositive/perf/spark/query12.q.out | 249 ++
.../clientpositive/perf/spark/query13.q.out | 339 ++
.../clientpositive/perf/spark/query14.q.out | 3237 ++++++++++++++++++
.../clientpositive/perf/spark/query15.q.out | 223 ++
.../clientpositive/perf/spark/query16.q.out | 363 ++
.../clientpositive/perf/spark/query17.q.out | 409 +++
.../clientpositive/perf/spark/query18.q.out | 360 ++
.../clientpositive/perf/spark/query19.q.out | 306 ++
.../clientpositive/perf/spark/query2.q.out | 429 +++
.../clientpositive/perf/spark/query20.q.out | 241 ++
.../clientpositive/perf/spark/query21.q.out | 245 ++
.../clientpositive/perf/spark/query22.q.out | 218 ++
.../clientpositive/perf/spark/query23.q.out | 1110 ++++++
.../clientpositive/perf/spark/query24.q.out | 610 ++++
.../clientpositive/perf/spark/query25.q.out | 415 +++
.../clientpositive/perf/spark/query26.q.out | 253 ++
.../clientpositive/perf/spark/query27.q.out | 265 ++
.../clientpositive/perf/spark/query28.q.out | 517 +++
.../clientpositive/perf/spark/query29.q.out | 415 +++
.../clientpositive/perf/spark/query3.q.out | 183 +
.../clientpositive/perf/spark/query30.q.out | 424 +++
.../clientpositive/perf/spark/query31.q.out | 815 +++++
.../clientpositive/perf/spark/query32.q.out | 284 ++
.../clientpositive/perf/spark/query33.q.out | 683 ++++
.../clientpositive/perf/spark/query34.q.out | 273 ++
.../clientpositive/perf/spark/query35.q.out | 524 +++
.../clientpositive/perf/spark/query36.q.out | 282 ++
.../clientpositive/perf/spark/query37.q.out | 192 ++
.../clientpositive/perf/spark/query38.q.out | 458 +++
.../clientpositive/perf/spark/query39.q.out | 473 +++
.../clientpositive/perf/spark/query4.q.out | 986 ++++++
.../clientpositive/perf/spark/query40.q.out | 274 ++
.../clientpositive/perf/spark/query42.q.out | 191 ++
.../clientpositive/perf/spark/query43.q.out | 184 +
.../clientpositive/perf/spark/query44.q.out | 486 +++
.../clientpositive/perf/spark/query45.q.out | 374 ++
.../clientpositive/perf/spark/query46.q.out | 355 ++
.../clientpositive/perf/spark/query47.q.out | 771 +++++
.../clientpositive/perf/spark/query48.q.out | 329 ++
.../clientpositive/perf/spark/query49.q.out | 876 +++++
.../clientpositive/perf/spark/query5.q.out | 740 ++++
.../clientpositive/perf/spark/query50.q.out | 333 ++
.../clientpositive/perf/spark/query51.q.out | 383 +++
.../clientpositive/perf/spark/query52.q.out | 188 +
.../clientpositive/perf/spark/query53.q.out | 267 ++
.../clientpositive/perf/spark/query54.q.out | 742 ++++
.../clientpositive/perf/spark/query55.q.out | 168 +
.../clientpositive/perf/spark/query56.q.out | 669 ++++
.../clientpositive/perf/spark/query57.q.out | 765 +++++
.../clientpositive/perf/spark/query58.q.out | 944 +++++
.../clientpositive/perf/spark/query59.q.out | 445 +++
.../clientpositive/perf/spark/query6.q.out | 459 +++
.../clientpositive/perf/spark/query60.q.out | 691 ++++
.../clientpositive/perf/spark/query61.q.out | 586 ++++
.../clientpositive/perf/spark/query63.q.out | 269 ++
.../clientpositive/perf/spark/query65.q.out | 333 ++
.../clientpositive/perf/spark/query66.q.out | 873 +++++
.../clientpositive/perf/spark/query67.q.out | 315 ++
.../clientpositive/perf/spark/query68.q.out | 363 ++
.../clientpositive/perf/spark/query69.q.out | 516 +++
.../clientpositive/perf/spark/query7.q.out | 253 ++
.../clientpositive/perf/spark/query70.q.out | 429 +++
.../clientpositive/perf/spark/query71.q.out | 343 ++
.../clientpositive/perf/spark/query72.q.out | 489 +++
.../clientpositive/perf/spark/query73.q.out | 261 ++
.../clientpositive/perf/spark/query74.q.out | 639 ++++
.../clientpositive/perf/spark/query75.q.out | 898 +++++
.../clientpositive/perf/spark/query76.q.out | 383 +++
.../clientpositive/perf/spark/query77.q.out | 912 +++++
.../clientpositive/perf/spark/query78.q.out | 523 +++
.../clientpositive/perf/spark/query79.q.out | 258 ++
.../clientpositive/perf/spark/query8.q.out | 549 +++
.../clientpositive/perf/spark/query80.q.out | 903 +++++
.../clientpositive/perf/spark/query81.q.out | 429 +++
.../clientpositive/perf/spark/query82.q.out | 192 ++
.../clientpositive/perf/spark/query83.q.out | 742 ++++
.../clientpositive/perf/spark/query84.q.out | 253 ++
.../clientpositive/perf/spark/query85.q.out | 493 +++
.../clientpositive/perf/spark/query86.q.out | 240 ++
.../clientpositive/perf/spark/query87.q.out | 500 +++
.../clientpositive/perf/spark/query88.q.out | 1294 +++++++
.../clientpositive/perf/spark/query89.q.out | 281 ++
.../clientpositive/perf/spark/query9.q.out | 824 +++++
.../clientpositive/perf/spark/query90.q.out | 351 ++
.../clientpositive/perf/spark/query91.q.out | 347 ++
.../clientpositive/perf/spark/query92.q.out | 303 ++
.../clientpositive/perf/spark/query93.q.out | 181 +
.../clientpositive/perf/spark/query94.q.out | 359 ++
.../clientpositive/perf/spark/query95.q.out | 468 +++
.../clientpositive/perf/spark/query96.q.out | 193 ++
.../clientpositive/perf/spark/query97.q.out | 250 ++
.../clientpositive/perf/spark/query98.q.out | 243 ++
.../clientpositive/perf/spark/query99.q.out | 270 ++
.../hive/serde2/lazybinary/LazyBinarySerDe.java | 14 +-
.../serde2/lazybinary/LazyBinarySerDe2.java | 623 ++++
.../serde2/lazybinary/TestLazyBinaryFast.java | 7 +-
.../serde2/lazybinary/TestLazyBinarySerDe.java | 2 +-
.../serde2/lazybinary/TestLazyBinarySerDe2.java | 56 +
139 files changed, 50191 insertions(+), 1648 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/f159b5a1/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/f159b5a1/itests/src/test/resources/testconfiguration.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/f159b5a1/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/f159b5a1/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/f159b5a1/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
[11/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Wei Zheng)
Posted by se...@apache.org.
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/standalone-metastore/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api/ClientCapability.java
----------------------------------------------------------------------
diff --cc standalone-metastore/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api/ClientCapability.java
index 0000000,f53bd82..8fc8311
mode 000000,100644..100644
--- a/standalone-metastore/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api/ClientCapability.java
+++ b/standalone-metastore/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api/ClientCapability.java
@@@ -1,0 -1,42 +1,45 @@@
+ /**
+ * Autogenerated by Thrift Compiler (0.9.3)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ * @generated
+ */
+ package org.apache.hadoop.hive.metastore.api;
+
+
+ import java.util.Map;
+ import java.util.HashMap;
+ import org.apache.thrift.TEnum;
+
+ public enum ClientCapability implements org.apache.thrift.TEnum {
- TEST_CAPABILITY(1);
++ TEST_CAPABILITY(1),
++ INSERT_ONLY_TABLES(2);
+
+ private final int value;
+
+ private ClientCapability(int value) {
+ this.value = value;
+ }
+
+ /**
+ * Get the integer value of this enum value, as defined in the Thrift IDL.
+ */
+ public int getValue() {
+ return value;
+ }
+
+ /**
+ * Find a the enum type by its integer value, as defined in the Thrift IDL.
+ * @return null if the value is not found.
+ */
+ public static ClientCapability findByValue(int value) {
+ switch (value) {
+ case 1:
+ return TEST_CAPABILITY;
++ case 2:
++ return INSERT_ONLY_TABLES;
+ default:
+ return null;
+ }
+ }
+ }
[49/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-14671 : merge master into hive-14535 (Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/ba9cd794
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/ba9cd794
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/ba9cd794
Branch: refs/heads/master
Commit: ba9cd7947f4530f84f0a2ccb7a636fe12231640b
Parents: d7b6272 9375cf3
Author: sergey <se...@apache.org>
Authored: Thu Oct 12 17:06:36 2017 -0700
Committer: sergey <se...@apache.org>
Committed: Thu Oct 12 17:06:36 2017 -0700
----------------------------------------------------------------------
.../org/apache/hadoop/hive/conf/HiveConf.java | 12 +-
druid-handler/pom.xml | 4 +
.../hadoop/hive/druid/DruidStorageHandler.java | 32 +-
.../hive/druid/DruidStorageHandlerUtils.java | 50 +-
.../druid/io/DruidQueryBasedInputFormat.java | 181 +----
.../hive/druid/TestDruidStorageHandler.java | 195 ++++-
.../TestHiveDruidQueryBasedInputFormat.java | 104 ---
.../listener/TestDbNotificationListener.java | 6 +
.../hive/minikdc/TestJdbcWithDBTokenStore.java | 5 +
.../minikdc/TestJdbcWithDBTokenStoreNoDoAs.java | 50 ++
.../hive/minikdc/TestJdbcWithMiniKdc.java | 27 +-
itests/pom.xml | 2 +
.../test/resources/testconfiguration.properties | 1 -
.../hadoop/hive/metastore/HiveMetaStore.java | 3 +-
.../hadoop/hive/metastore/ObjectStore.java | 3 +
.../metastore/messaging/DropTableMessage.java | 4 +
.../messaging/json/JSONDropTableMessage.java | 21 +-
.../messaging/json/JSONMessageFactory.java | 3 +-
.../hadoop/hive/metastore/TestObjectStore.java | 8 +
pom.xml | 2 +-
.../hadoop/hive/ql/exec/ReplCopyTask.java | 4 +-
.../org/apache/hadoop/hive/ql/exec/Task.java | 8 +-
.../apache/hadoop/hive/ql/exec/TaskFactory.java | 13 +-
.../ql/exec/repl/bootstrap/ReplLoadTask.java | 2 +-
.../ql/exec/vector/VectorizationContext.java | 7 +-
.../vector/expressions/IfExprColumnNull.java | 22 +-
.../expressions/IfExprConditionalFilter.java | 192 +++++
.../IfExprDoubleColumnDoubleColumn.java | 45 +-
.../IfExprIntervalDayTimeColumnColumn.java | 17 +-
.../expressions/IfExprLongColumnLongColumn.java | 45 +-
.../vector/expressions/IfExprNullColumn.java | 16 +-
...fExprStringGroupColumnStringGroupColumn.java | 17 +-
.../IfExprTimestampColumnColumnBase.java | 18 +-
.../ql/exec/vector/udf/VectorUDFAdaptor.java | 14 +-
.../hive/ql/io/sarg/ConvertAstToSearchArg.java | 59 +-
.../hive/ql/optimizer/ConvertJoinMapJoin.java | 4 +-
.../calcite/rules/HiveRelDecorrelator.java | 300 ++-----
.../calcite/translator/ASTConverter.java | 57 +-
.../apache/hadoop/hive/ql/parse/HiveParser.g | 20 +-
.../ql/parse/ReplicationSemanticAnalyzer.java | 42 +-
.../parse/TestReplicationSemanticAnalyzer.java | 39 +-
.../queries/clientnegative/druid_datasource2.q | 3 +
.../queries/clientpositive/subquery_exists.q | 24 +
.../test/queries/clientpositive/subquery_in.q | 50 +-
.../queries/clientpositive/vectorized_case.q | 53 +-
.../clientnegative/druid_datasource2.q.out | 7 +
.../clientpositive/constprog_partitioner.q.out | 10 +-
.../clientpositive/llap/explainuser_1.q.out | 98 +--
.../clientpositive/llap/subquery_exists.q.out | 385 ++++++++-
.../clientpositive/llap/subquery_in.q.out | 657 ++-------------
.../clientpositive/llap/subquery_multi.q.out | 48 +-
.../clientpositive/llap/subquery_notin.q.out | 170 ++--
.../clientpositive/llap/subquery_scalar.q.out | 30 +-
.../clientpositive/llap/subquery_select.q.out | 42 +-
.../clientpositive/llap/subquery_views.q.out | 82 +-
.../clientpositive/llap/vector_coalesce.q.out | 2 +-
.../vector_groupby_grouping_sets_grouping.q.out | 2 +-
.../llap/vector_mapjoin_reduce.q.out | 12 +-
.../llap/vector_ptf_part_simple.q.out | 16 +-
.../clientpositive/llap/vectorized_case.q.out | 354 +++++++-
.../clientpositive/min_structvalue.q.out | 45 ++
.../clientpositive/perf/spark/query16.q.out | 209 ++++-
.../clientpositive/perf/spark/query36.q.out | 6 +-
.../clientpositive/perf/spark/query70.q.out | 6 +-
.../clientpositive/perf/spark/query86.q.out | 6 +-
.../clientpositive/perf/spark/query94.q.out | 209 ++++-
.../clientpositive/perf/tez/query14.q.out | 4 +-
.../clientpositive/perf/tez/query16.q.out | 263 +++---
.../clientpositive/perf/tez/query23.q.out | 2 +-
.../clientpositive/perf/tez/query36.q.out | 4 +-
.../clientpositive/perf/tez/query70.q.out | 4 +-
.../clientpositive/perf/tez/query86.q.out | 4 +-
.../clientpositive/perf/tez/query94.q.out | 263 +++---
.../spark/constprog_partitioner.q.out | 10 +-
.../spark/spark_explainuser_1.q.out | 98 +--
.../clientpositive/spark/subquery_exists.q.out | 390 ++++++++-
.../clientpositive/spark/subquery_in.q.out | 611 ++------------
.../spark/vector_mapjoin_reduce.q.out | 10 +-
.../clientpositive/spark/vectorized_case.q.out | 348 +++++++-
.../clientpositive/subquery_exists.q.out | 420 +++++++++-
.../clientpositive/subquery_exists_having.q.out | 28 +-
.../clientpositive/subquery_in_having.q.out | 803 ++++++++++---------
.../clientpositive/subquery_notexists.q.out | 32 +-
.../subquery_notexists_having.q.out | 32 +-
.../clientpositive/subquery_notin_having.q.out | 26 +-
.../subquery_unqualcolumnrefs.q.out | 82 +-
.../clientpositive/vector_coalesce.q.out | 2 +-
.../clientpositive/vector_mapjoin_reduce.q.out | 8 +-
.../clientpositive/vectorized_case.q.out | 330 +++++++-
.../apache/hadoop/hive/thrift/DBTokenStore.java | 3 +-
90 files changed, 4830 insertions(+), 3127 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/ba9cd794/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/ba9cd794/itests/src/test/resources/testconfiguration.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/ba9cd794/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/ba9cd794/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/ba9cd794/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
----------------------------------------------------------------------
diff --cc metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
index e6661f9,64b2c70..67b798f
--- a/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
+++ b/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
@@@ -19,9 -19,9 +19,10 @@@ package org.apache.hadoop.hive.metastor
import com.codahale.metrics.Counter;
+import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList;
import org.apache.hadoop.hive.conf.HiveConf;
+ import org.apache.hadoop.hive.metastore.ObjectStore.RetryingExecutor;
import org.apache.hadoop.hive.metastore.api.CurrentNotificationEventId;
import org.apache.hadoop.hive.metastore.api.Database;
import org.apache.hadoop.hive.metastore.api.FieldSchema;
http://git-wip-us.apache.org/repos/asf/hive/blob/ba9cd794/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/ba9cd794/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskFactory.java
----------------------------------------------------------------------
[09/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Wei Zheng)
Posted by se...@apache.org.
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/standalone-metastore/src/gen/thrift/gen-py/hive_metastore/ttypes.py
----------------------------------------------------------------------
diff --cc standalone-metastore/src/gen/thrift/gen-py/hive_metastore/ttypes.py
index 0000000,7570895..c21dfb0
mode 000000,100644..100644
--- a/standalone-metastore/src/gen/thrift/gen-py/hive_metastore/ttypes.py
+++ b/standalone-metastore/src/gen/thrift/gen-py/hive_metastore/ttypes.py
@@@ -1,0 -1,15160 +1,15163 @@@
+ #
+ # Autogenerated by Thrift Compiler (0.9.3)
+ #
+ # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ #
+ # options string: py
+ #
+
+ from thrift.Thrift import TType, TMessageType, TException, TApplicationException
+ import fb303.ttypes
+
+
+ from thrift.transport import TTransport
+ from thrift.protocol import TBinaryProtocol, TProtocol
+ try:
+ from thrift.protocol import fastbinary
+ except:
+ fastbinary = None
+
+
+ class HiveObjectType:
+ GLOBAL = 1
+ DATABASE = 2
+ TABLE = 3
+ PARTITION = 4
+ COLUMN = 5
+
+ _VALUES_TO_NAMES = {
+ 1: "GLOBAL",
+ 2: "DATABASE",
+ 3: "TABLE",
+ 4: "PARTITION",
+ 5: "COLUMN",
+ }
+
+ _NAMES_TO_VALUES = {
+ "GLOBAL": 1,
+ "DATABASE": 2,
+ "TABLE": 3,
+ "PARTITION": 4,
+ "COLUMN": 5,
+ }
+
+ class PrincipalType:
+ USER = 1
+ ROLE = 2
+ GROUP = 3
+
+ _VALUES_TO_NAMES = {
+ 1: "USER",
+ 2: "ROLE",
+ 3: "GROUP",
+ }
+
+ _NAMES_TO_VALUES = {
+ "USER": 1,
+ "ROLE": 2,
+ "GROUP": 3,
+ }
+
+ class PartitionEventType:
+ LOAD_DONE = 1
+
+ _VALUES_TO_NAMES = {
+ 1: "LOAD_DONE",
+ }
+
+ _NAMES_TO_VALUES = {
+ "LOAD_DONE": 1,
+ }
+
+ class TxnState:
+ COMMITTED = 1
+ ABORTED = 2
+ OPEN = 3
+
+ _VALUES_TO_NAMES = {
+ 1: "COMMITTED",
+ 2: "ABORTED",
+ 3: "OPEN",
+ }
+
+ _NAMES_TO_VALUES = {
+ "COMMITTED": 1,
+ "ABORTED": 2,
+ "OPEN": 3,
+ }
+
+ class LockLevel:
+ DB = 1
+ TABLE = 2
+ PARTITION = 3
+
+ _VALUES_TO_NAMES = {
+ 1: "DB",
+ 2: "TABLE",
+ 3: "PARTITION",
+ }
+
+ _NAMES_TO_VALUES = {
+ "DB": 1,
+ "TABLE": 2,
+ "PARTITION": 3,
+ }
+
+ class LockState:
+ ACQUIRED = 1
+ WAITING = 2
+ ABORT = 3
+ NOT_ACQUIRED = 4
+
+ _VALUES_TO_NAMES = {
+ 1: "ACQUIRED",
+ 2: "WAITING",
+ 3: "ABORT",
+ 4: "NOT_ACQUIRED",
+ }
+
+ _NAMES_TO_VALUES = {
+ "ACQUIRED": 1,
+ "WAITING": 2,
+ "ABORT": 3,
+ "NOT_ACQUIRED": 4,
+ }
+
+ class LockType:
+ SHARED_READ = 1
+ SHARED_WRITE = 2
+ EXCLUSIVE = 3
+
+ _VALUES_TO_NAMES = {
+ 1: "SHARED_READ",
+ 2: "SHARED_WRITE",
+ 3: "EXCLUSIVE",
+ }
+
+ _NAMES_TO_VALUES = {
+ "SHARED_READ": 1,
+ "SHARED_WRITE": 2,
+ "EXCLUSIVE": 3,
+ }
+
+ class CompactionType:
+ MINOR = 1
+ MAJOR = 2
+
+ _VALUES_TO_NAMES = {
+ 1: "MINOR",
+ 2: "MAJOR",
+ }
+
+ _NAMES_TO_VALUES = {
+ "MINOR": 1,
+ "MAJOR": 2,
+ }
+
+ class GrantRevokeType:
+ GRANT = 1
+ REVOKE = 2
+
+ _VALUES_TO_NAMES = {
+ 1: "GRANT",
+ 2: "REVOKE",
+ }
+
+ _NAMES_TO_VALUES = {
+ "GRANT": 1,
+ "REVOKE": 2,
+ }
+
+ class DataOperationType:
+ SELECT = 1
+ INSERT = 2
+ UPDATE = 3
+ DELETE = 4
+ UNSET = 5
+ NO_TXN = 6
+
+ _VALUES_TO_NAMES = {
+ 1: "SELECT",
+ 2: "INSERT",
+ 3: "UPDATE",
+ 4: "DELETE",
+ 5: "UNSET",
+ 6: "NO_TXN",
+ }
+
+ _NAMES_TO_VALUES = {
+ "SELECT": 1,
+ "INSERT": 2,
+ "UPDATE": 3,
+ "DELETE": 4,
+ "UNSET": 5,
+ "NO_TXN": 6,
+ }
+
+ class EventRequestType:
+ INSERT = 1
+ UPDATE = 2
+ DELETE = 3
+
+ _VALUES_TO_NAMES = {
+ 1: "INSERT",
+ 2: "UPDATE",
+ 3: "DELETE",
+ }
+
+ _NAMES_TO_VALUES = {
+ "INSERT": 1,
+ "UPDATE": 2,
+ "DELETE": 3,
+ }
+
+ class FunctionType:
+ JAVA = 1
+
+ _VALUES_TO_NAMES = {
+ 1: "JAVA",
+ }
+
+ _NAMES_TO_VALUES = {
+ "JAVA": 1,
+ }
+
+ class ResourceType:
+ JAR = 1
+ FILE = 2
+ ARCHIVE = 3
+
+ _VALUES_TO_NAMES = {
+ 1: "JAR",
+ 2: "FILE",
+ 3: "ARCHIVE",
+ }
+
+ _NAMES_TO_VALUES = {
+ "JAR": 1,
+ "FILE": 2,
+ "ARCHIVE": 3,
+ }
+
+ class FileMetadataExprType:
+ ORC_SARG = 1
+
+ _VALUES_TO_NAMES = {
+ 1: "ORC_SARG",
+ }
+
+ _NAMES_TO_VALUES = {
+ "ORC_SARG": 1,
+ }
+
+ class ClientCapability:
+ TEST_CAPABILITY = 1
++ INSERT_ONLY_TABLES = 2
+
+ _VALUES_TO_NAMES = {
+ 1: "TEST_CAPABILITY",
++ 2: "INSERT_ONLY_TABLES",
+ }
+
+ _NAMES_TO_VALUES = {
+ "TEST_CAPABILITY": 1,
++ "INSERT_ONLY_TABLES": 2,
+ }
+
+
+ class Version:
+ """
+ Attributes:
+ - version
+ - comments
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.STRING, 'version', None, None, ), # 1
+ (2, TType.STRING, 'comments', None, None, ), # 2
+ )
+
+ def __init__(self, version=None, comments=None,):
+ self.version = version
+ self.comments = comments
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.STRING:
+ self.version = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 2:
+ if ftype == TType.STRING:
+ self.comments = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('Version')
+ if self.version is not None:
+ oprot.writeFieldBegin('version', TType.STRING, 1)
+ oprot.writeString(self.version)
+ oprot.writeFieldEnd()
+ if self.comments is not None:
+ oprot.writeFieldBegin('comments', TType.STRING, 2)
+ oprot.writeString(self.comments)
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.version)
+ value = (value * 31) ^ hash(self.comments)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class FieldSchema:
+ """
+ Attributes:
+ - name
+ - type
+ - comment
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.STRING, 'name', None, None, ), # 1
+ (2, TType.STRING, 'type', None, None, ), # 2
+ (3, TType.STRING, 'comment', None, None, ), # 3
+ )
+
+ def __init__(self, name=None, type=None, comment=None,):
+ self.name = name
+ self.type = type
+ self.comment = comment
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.STRING:
+ self.name = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 2:
+ if ftype == TType.STRING:
+ self.type = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 3:
+ if ftype == TType.STRING:
+ self.comment = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('FieldSchema')
+ if self.name is not None:
+ oprot.writeFieldBegin('name', TType.STRING, 1)
+ oprot.writeString(self.name)
+ oprot.writeFieldEnd()
+ if self.type is not None:
+ oprot.writeFieldBegin('type', TType.STRING, 2)
+ oprot.writeString(self.type)
+ oprot.writeFieldEnd()
+ if self.comment is not None:
+ oprot.writeFieldBegin('comment', TType.STRING, 3)
+ oprot.writeString(self.comment)
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.name)
+ value = (value * 31) ^ hash(self.type)
+ value = (value * 31) ^ hash(self.comment)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class SQLPrimaryKey:
+ """
+ Attributes:
+ - table_db
+ - table_name
+ - column_name
+ - key_seq
+ - pk_name
+ - enable_cstr
+ - validate_cstr
+ - rely_cstr
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.STRING, 'table_db', None, None, ), # 1
+ (2, TType.STRING, 'table_name', None, None, ), # 2
+ (3, TType.STRING, 'column_name', None, None, ), # 3
+ (4, TType.I32, 'key_seq', None, None, ), # 4
+ (5, TType.STRING, 'pk_name', None, None, ), # 5
+ (6, TType.BOOL, 'enable_cstr', None, None, ), # 6
+ (7, TType.BOOL, 'validate_cstr', None, None, ), # 7
+ (8, TType.BOOL, 'rely_cstr', None, None, ), # 8
+ )
+
+ def __init__(self, table_db=None, table_name=None, column_name=None, key_seq=None, pk_name=None, enable_cstr=None, validate_cstr=None, rely_cstr=None,):
+ self.table_db = table_db
+ self.table_name = table_name
+ self.column_name = column_name
+ self.key_seq = key_seq
+ self.pk_name = pk_name
+ self.enable_cstr = enable_cstr
+ self.validate_cstr = validate_cstr
+ self.rely_cstr = rely_cstr
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.STRING:
+ self.table_db = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 2:
+ if ftype == TType.STRING:
+ self.table_name = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 3:
+ if ftype == TType.STRING:
+ self.column_name = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 4:
+ if ftype == TType.I32:
+ self.key_seq = iprot.readI32()
+ else:
+ iprot.skip(ftype)
+ elif fid == 5:
+ if ftype == TType.STRING:
+ self.pk_name = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 6:
+ if ftype == TType.BOOL:
+ self.enable_cstr = iprot.readBool()
+ else:
+ iprot.skip(ftype)
+ elif fid == 7:
+ if ftype == TType.BOOL:
+ self.validate_cstr = iprot.readBool()
+ else:
+ iprot.skip(ftype)
+ elif fid == 8:
+ if ftype == TType.BOOL:
+ self.rely_cstr = iprot.readBool()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('SQLPrimaryKey')
+ if self.table_db is not None:
+ oprot.writeFieldBegin('table_db', TType.STRING, 1)
+ oprot.writeString(self.table_db)
+ oprot.writeFieldEnd()
+ if self.table_name is not None:
+ oprot.writeFieldBegin('table_name', TType.STRING, 2)
+ oprot.writeString(self.table_name)
+ oprot.writeFieldEnd()
+ if self.column_name is not None:
+ oprot.writeFieldBegin('column_name', TType.STRING, 3)
+ oprot.writeString(self.column_name)
+ oprot.writeFieldEnd()
+ if self.key_seq is not None:
+ oprot.writeFieldBegin('key_seq', TType.I32, 4)
+ oprot.writeI32(self.key_seq)
+ oprot.writeFieldEnd()
+ if self.pk_name is not None:
+ oprot.writeFieldBegin('pk_name', TType.STRING, 5)
+ oprot.writeString(self.pk_name)
+ oprot.writeFieldEnd()
+ if self.enable_cstr is not None:
+ oprot.writeFieldBegin('enable_cstr', TType.BOOL, 6)
+ oprot.writeBool(self.enable_cstr)
+ oprot.writeFieldEnd()
+ if self.validate_cstr is not None:
+ oprot.writeFieldBegin('validate_cstr', TType.BOOL, 7)
+ oprot.writeBool(self.validate_cstr)
+ oprot.writeFieldEnd()
+ if self.rely_cstr is not None:
+ oprot.writeFieldBegin('rely_cstr', TType.BOOL, 8)
+ oprot.writeBool(self.rely_cstr)
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.table_db)
+ value = (value * 31) ^ hash(self.table_name)
+ value = (value * 31) ^ hash(self.column_name)
+ value = (value * 31) ^ hash(self.key_seq)
+ value = (value * 31) ^ hash(self.pk_name)
+ value = (value * 31) ^ hash(self.enable_cstr)
+ value = (value * 31) ^ hash(self.validate_cstr)
+ value = (value * 31) ^ hash(self.rely_cstr)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class SQLForeignKey:
+ """
+ Attributes:
+ - pktable_db
+ - pktable_name
+ - pkcolumn_name
+ - fktable_db
+ - fktable_name
+ - fkcolumn_name
+ - key_seq
+ - update_rule
+ - delete_rule
+ - fk_name
+ - pk_name
+ - enable_cstr
+ - validate_cstr
+ - rely_cstr
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.STRING, 'pktable_db', None, None, ), # 1
+ (2, TType.STRING, 'pktable_name', None, None, ), # 2
+ (3, TType.STRING, 'pkcolumn_name', None, None, ), # 3
+ (4, TType.STRING, 'fktable_db', None, None, ), # 4
+ (5, TType.STRING, 'fktable_name', None, None, ), # 5
+ (6, TType.STRING, 'fkcolumn_name', None, None, ), # 6
+ (7, TType.I32, 'key_seq', None, None, ), # 7
+ (8, TType.I32, 'update_rule', None, None, ), # 8
+ (9, TType.I32, 'delete_rule', None, None, ), # 9
+ (10, TType.STRING, 'fk_name', None, None, ), # 10
+ (11, TType.STRING, 'pk_name', None, None, ), # 11
+ (12, TType.BOOL, 'enable_cstr', None, None, ), # 12
+ (13, TType.BOOL, 'validate_cstr', None, None, ), # 13
+ (14, TType.BOOL, 'rely_cstr', None, None, ), # 14
+ )
+
+ def __init__(self, pktable_db=None, pktable_name=None, pkcolumn_name=None, fktable_db=None, fktable_name=None, fkcolumn_name=None, key_seq=None, update_rule=None, delete_rule=None, fk_name=None, pk_name=None, enable_cstr=None, validate_cstr=None, rely_cstr=None,):
+ self.pktable_db = pktable_db
+ self.pktable_name = pktable_name
+ self.pkcolumn_name = pkcolumn_name
+ self.fktable_db = fktable_db
+ self.fktable_name = fktable_name
+ self.fkcolumn_name = fkcolumn_name
+ self.key_seq = key_seq
+ self.update_rule = update_rule
+ self.delete_rule = delete_rule
+ self.fk_name = fk_name
+ self.pk_name = pk_name
+ self.enable_cstr = enable_cstr
+ self.validate_cstr = validate_cstr
+ self.rely_cstr = rely_cstr
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.STRING:
+ self.pktable_db = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 2:
+ if ftype == TType.STRING:
+ self.pktable_name = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 3:
+ if ftype == TType.STRING:
+ self.pkcolumn_name = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 4:
+ if ftype == TType.STRING:
+ self.fktable_db = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 5:
+ if ftype == TType.STRING:
+ self.fktable_name = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 6:
+ if ftype == TType.STRING:
+ self.fkcolumn_name = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 7:
+ if ftype == TType.I32:
+ self.key_seq = iprot.readI32()
+ else:
+ iprot.skip(ftype)
+ elif fid == 8:
+ if ftype == TType.I32:
+ self.update_rule = iprot.readI32()
+ else:
+ iprot.skip(ftype)
+ elif fid == 9:
+ if ftype == TType.I32:
+ self.delete_rule = iprot.readI32()
+ else:
+ iprot.skip(ftype)
+ elif fid == 10:
+ if ftype == TType.STRING:
+ self.fk_name = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 11:
+ if ftype == TType.STRING:
+ self.pk_name = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 12:
+ if ftype == TType.BOOL:
+ self.enable_cstr = iprot.readBool()
+ else:
+ iprot.skip(ftype)
+ elif fid == 13:
+ if ftype == TType.BOOL:
+ self.validate_cstr = iprot.readBool()
+ else:
+ iprot.skip(ftype)
+ elif fid == 14:
+ if ftype == TType.BOOL:
+ self.rely_cstr = iprot.readBool()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('SQLForeignKey')
+ if self.pktable_db is not None:
+ oprot.writeFieldBegin('pktable_db', TType.STRING, 1)
+ oprot.writeString(self.pktable_db)
+ oprot.writeFieldEnd()
+ if self.pktable_name is not None:
+ oprot.writeFieldBegin('pktable_name', TType.STRING, 2)
+ oprot.writeString(self.pktable_name)
+ oprot.writeFieldEnd()
+ if self.pkcolumn_name is not None:
+ oprot.writeFieldBegin('pkcolumn_name', TType.STRING, 3)
+ oprot.writeString(self.pkcolumn_name)
+ oprot.writeFieldEnd()
+ if self.fktable_db is not None:
+ oprot.writeFieldBegin('fktable_db', TType.STRING, 4)
+ oprot.writeString(self.fktable_db)
+ oprot.writeFieldEnd()
+ if self.fktable_name is not None:
+ oprot.writeFieldBegin('fktable_name', TType.STRING, 5)
+ oprot.writeString(self.fktable_name)
+ oprot.writeFieldEnd()
+ if self.fkcolumn_name is not None:
+ oprot.writeFieldBegin('fkcolumn_name', TType.STRING, 6)
+ oprot.writeString(self.fkcolumn_name)
+ oprot.writeFieldEnd()
+ if self.key_seq is not None:
+ oprot.writeFieldBegin('key_seq', TType.I32, 7)
+ oprot.writeI32(self.key_seq)
+ oprot.writeFieldEnd()
+ if self.update_rule is not None:
+ oprot.writeFieldBegin('update_rule', TType.I32, 8)
+ oprot.writeI32(self.update_rule)
+ oprot.writeFieldEnd()
+ if self.delete_rule is not None:
+ oprot.writeFieldBegin('delete_rule', TType.I32, 9)
+ oprot.writeI32(self.delete_rule)
+ oprot.writeFieldEnd()
+ if self.fk_name is not None:
+ oprot.writeFieldBegin('fk_name', TType.STRING, 10)
+ oprot.writeString(self.fk_name)
+ oprot.writeFieldEnd()
+ if self.pk_name is not None:
+ oprot.writeFieldBegin('pk_name', TType.STRING, 11)
+ oprot.writeString(self.pk_name)
+ oprot.writeFieldEnd()
+ if self.enable_cstr is not None:
+ oprot.writeFieldBegin('enable_cstr', TType.BOOL, 12)
+ oprot.writeBool(self.enable_cstr)
+ oprot.writeFieldEnd()
+ if self.validate_cstr is not None:
+ oprot.writeFieldBegin('validate_cstr', TType.BOOL, 13)
+ oprot.writeBool(self.validate_cstr)
+ oprot.writeFieldEnd()
+ if self.rely_cstr is not None:
+ oprot.writeFieldBegin('rely_cstr', TType.BOOL, 14)
+ oprot.writeBool(self.rely_cstr)
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.pktable_db)
+ value = (value * 31) ^ hash(self.pktable_name)
+ value = (value * 31) ^ hash(self.pkcolumn_name)
+ value = (value * 31) ^ hash(self.fktable_db)
+ value = (value * 31) ^ hash(self.fktable_name)
+ value = (value * 31) ^ hash(self.fkcolumn_name)
+ value = (value * 31) ^ hash(self.key_seq)
+ value = (value * 31) ^ hash(self.update_rule)
+ value = (value * 31) ^ hash(self.delete_rule)
+ value = (value * 31) ^ hash(self.fk_name)
+ value = (value * 31) ^ hash(self.pk_name)
+ value = (value * 31) ^ hash(self.enable_cstr)
+ value = (value * 31) ^ hash(self.validate_cstr)
+ value = (value * 31) ^ hash(self.rely_cstr)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class SQLUniqueConstraint:
+ """
+ Attributes:
+ - table_db
+ - table_name
+ - column_name
+ - key_seq
+ - uk_name
+ - enable_cstr
+ - validate_cstr
+ - rely_cstr
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.STRING, 'table_db', None, None, ), # 1
+ (2, TType.STRING, 'table_name', None, None, ), # 2
+ (3, TType.STRING, 'column_name', None, None, ), # 3
+ (4, TType.I32, 'key_seq', None, None, ), # 4
+ (5, TType.STRING, 'uk_name', None, None, ), # 5
+ (6, TType.BOOL, 'enable_cstr', None, None, ), # 6
+ (7, TType.BOOL, 'validate_cstr', None, None, ), # 7
+ (8, TType.BOOL, 'rely_cstr', None, None, ), # 8
+ )
+
+ def __init__(self, table_db=None, table_name=None, column_name=None, key_seq=None, uk_name=None, enable_cstr=None, validate_cstr=None, rely_cstr=None,):
+ self.table_db = table_db
+ self.table_name = table_name
+ self.column_name = column_name
+ self.key_seq = key_seq
+ self.uk_name = uk_name
+ self.enable_cstr = enable_cstr
+ self.validate_cstr = validate_cstr
+ self.rely_cstr = rely_cstr
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.STRING:
+ self.table_db = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 2:
+ if ftype == TType.STRING:
+ self.table_name = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 3:
+ if ftype == TType.STRING:
+ self.column_name = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 4:
+ if ftype == TType.I32:
+ self.key_seq = iprot.readI32()
+ else:
+ iprot.skip(ftype)
+ elif fid == 5:
+ if ftype == TType.STRING:
+ self.uk_name = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 6:
+ if ftype == TType.BOOL:
+ self.enable_cstr = iprot.readBool()
+ else:
+ iprot.skip(ftype)
+ elif fid == 7:
+ if ftype == TType.BOOL:
+ self.validate_cstr = iprot.readBool()
+ else:
+ iprot.skip(ftype)
+ elif fid == 8:
+ if ftype == TType.BOOL:
+ self.rely_cstr = iprot.readBool()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('SQLUniqueConstraint')
+ if self.table_db is not None:
+ oprot.writeFieldBegin('table_db', TType.STRING, 1)
+ oprot.writeString(self.table_db)
+ oprot.writeFieldEnd()
+ if self.table_name is not None:
+ oprot.writeFieldBegin('table_name', TType.STRING, 2)
+ oprot.writeString(self.table_name)
+ oprot.writeFieldEnd()
+ if self.column_name is not None:
+ oprot.writeFieldBegin('column_name', TType.STRING, 3)
+ oprot.writeString(self.column_name)
+ oprot.writeFieldEnd()
+ if self.key_seq is not None:
+ oprot.writeFieldBegin('key_seq', TType.I32, 4)
+ oprot.writeI32(self.key_seq)
+ oprot.writeFieldEnd()
+ if self.uk_name is not None:
+ oprot.writeFieldBegin('uk_name', TType.STRING, 5)
+ oprot.writeString(self.uk_name)
+ oprot.writeFieldEnd()
+ if self.enable_cstr is not None:
+ oprot.writeFieldBegin('enable_cstr', TType.BOOL, 6)
+ oprot.writeBool(self.enable_cstr)
+ oprot.writeFieldEnd()
+ if self.validate_cstr is not None:
+ oprot.writeFieldBegin('validate_cstr', TType.BOOL, 7)
+ oprot.writeBool(self.validate_cstr)
+ oprot.writeFieldEnd()
+ if self.rely_cstr is not None:
+ oprot.writeFieldBegin('rely_cstr', TType.BOOL, 8)
+ oprot.writeBool(self.rely_cstr)
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.table_db)
+ value = (value * 31) ^ hash(self.table_name)
+ value = (value * 31) ^ hash(self.column_name)
+ value = (value * 31) ^ hash(self.key_seq)
+ value = (value * 31) ^ hash(self.uk_name)
+ value = (value * 31) ^ hash(self.enable_cstr)
+ value = (value * 31) ^ hash(self.validate_cstr)
+ value = (value * 31) ^ hash(self.rely_cstr)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class SQLNotNullConstraint:
+ """
+ Attributes:
+ - table_db
+ - table_name
+ - column_name
+ - nn_name
+ - enable_cstr
+ - validate_cstr
+ - rely_cstr
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.STRING, 'table_db', None, None, ), # 1
+ (2, TType.STRING, 'table_name', None, None, ), # 2
+ (3, TType.STRING, 'column_name', None, None, ), # 3
+ (4, TType.STRING, 'nn_name', None, None, ), # 4
+ (5, TType.BOOL, 'enable_cstr', None, None, ), # 5
+ (6, TType.BOOL, 'validate_cstr', None, None, ), # 6
+ (7, TType.BOOL, 'rely_cstr', None, None, ), # 7
+ )
+
+ def __init__(self, table_db=None, table_name=None, column_name=None, nn_name=None, enable_cstr=None, validate_cstr=None, rely_cstr=None,):
+ self.table_db = table_db
+ self.table_name = table_name
+ self.column_name = column_name
+ self.nn_name = nn_name
+ self.enable_cstr = enable_cstr
+ self.validate_cstr = validate_cstr
+ self.rely_cstr = rely_cstr
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.STRING:
+ self.table_db = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 2:
+ if ftype == TType.STRING:
+ self.table_name = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 3:
+ if ftype == TType.STRING:
+ self.column_name = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 4:
+ if ftype == TType.STRING:
+ self.nn_name = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 5:
+ if ftype == TType.BOOL:
+ self.enable_cstr = iprot.readBool()
+ else:
+ iprot.skip(ftype)
+ elif fid == 6:
+ if ftype == TType.BOOL:
+ self.validate_cstr = iprot.readBool()
+ else:
+ iprot.skip(ftype)
+ elif fid == 7:
+ if ftype == TType.BOOL:
+ self.rely_cstr = iprot.readBool()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('SQLNotNullConstraint')
+ if self.table_db is not None:
+ oprot.writeFieldBegin('table_db', TType.STRING, 1)
+ oprot.writeString(self.table_db)
+ oprot.writeFieldEnd()
+ if self.table_name is not None:
+ oprot.writeFieldBegin('table_name', TType.STRING, 2)
+ oprot.writeString(self.table_name)
+ oprot.writeFieldEnd()
+ if self.column_name is not None:
+ oprot.writeFieldBegin('column_name', TType.STRING, 3)
+ oprot.writeString(self.column_name)
+ oprot.writeFieldEnd()
+ if self.nn_name is not None:
+ oprot.writeFieldBegin('nn_name', TType.STRING, 4)
+ oprot.writeString(self.nn_name)
+ oprot.writeFieldEnd()
+ if self.enable_cstr is not None:
+ oprot.writeFieldBegin('enable_cstr', TType.BOOL, 5)
+ oprot.writeBool(self.enable_cstr)
+ oprot.writeFieldEnd()
+ if self.validate_cstr is not None:
+ oprot.writeFieldBegin('validate_cstr', TType.BOOL, 6)
+ oprot.writeBool(self.validate_cstr)
+ oprot.writeFieldEnd()
+ if self.rely_cstr is not None:
+ oprot.writeFieldBegin('rely_cstr', TType.BOOL, 7)
+ oprot.writeBool(self.rely_cstr)
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.table_db)
+ value = (value * 31) ^ hash(self.table_name)
+ value = (value * 31) ^ hash(self.column_name)
+ value = (value * 31) ^ hash(self.nn_name)
+ value = (value * 31) ^ hash(self.enable_cstr)
+ value = (value * 31) ^ hash(self.validate_cstr)
+ value = (value * 31) ^ hash(self.rely_cstr)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class Type:
+ """
+ Attributes:
+ - name
+ - type1
+ - type2
+ - fields
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.STRING, 'name', None, None, ), # 1
+ (2, TType.STRING, 'type1', None, None, ), # 2
+ (3, TType.STRING, 'type2', None, None, ), # 3
+ (4, TType.LIST, 'fields', (TType.STRUCT,(FieldSchema, FieldSchema.thrift_spec)), None, ), # 4
+ )
+
+ def __init__(self, name=None, type1=None, type2=None, fields=None,):
+ self.name = name
+ self.type1 = type1
+ self.type2 = type2
+ self.fields = fields
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.STRING:
+ self.name = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 2:
+ if ftype == TType.STRING:
+ self.type1 = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 3:
+ if ftype == TType.STRING:
+ self.type2 = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 4:
+ if ftype == TType.LIST:
+ self.fields = []
+ (_etype3, _size0) = iprot.readListBegin()
+ for _i4 in xrange(_size0):
+ _elem5 = FieldSchema()
+ _elem5.read(iprot)
+ self.fields.append(_elem5)
+ iprot.readListEnd()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('Type')
+ if self.name is not None:
+ oprot.writeFieldBegin('name', TType.STRING, 1)
+ oprot.writeString(self.name)
+ oprot.writeFieldEnd()
+ if self.type1 is not None:
+ oprot.writeFieldBegin('type1', TType.STRING, 2)
+ oprot.writeString(self.type1)
+ oprot.writeFieldEnd()
+ if self.type2 is not None:
+ oprot.writeFieldBegin('type2', TType.STRING, 3)
+ oprot.writeString(self.type2)
+ oprot.writeFieldEnd()
+ if self.fields is not None:
+ oprot.writeFieldBegin('fields', TType.LIST, 4)
+ oprot.writeListBegin(TType.STRUCT, len(self.fields))
+ for iter6 in self.fields:
+ iter6.write(oprot)
+ oprot.writeListEnd()
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.name)
+ value = (value * 31) ^ hash(self.type1)
+ value = (value * 31) ^ hash(self.type2)
+ value = (value * 31) ^ hash(self.fields)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class HiveObjectRef:
+ """
+ Attributes:
+ - objectType
+ - dbName
+ - objectName
+ - partValues
+ - columnName
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.I32, 'objectType', None, None, ), # 1
+ (2, TType.STRING, 'dbName', None, None, ), # 2
+ (3, TType.STRING, 'objectName', None, None, ), # 3
+ (4, TType.LIST, 'partValues', (TType.STRING,None), None, ), # 4
+ (5, TType.STRING, 'columnName', None, None, ), # 5
+ )
+
+ def __init__(self, objectType=None, dbName=None, objectName=None, partValues=None, columnName=None,):
+ self.objectType = objectType
+ self.dbName = dbName
+ self.objectName = objectName
+ self.partValues = partValues
+ self.columnName = columnName
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.I32:
+ self.objectType = iprot.readI32()
+ else:
+ iprot.skip(ftype)
+ elif fid == 2:
+ if ftype == TType.STRING:
+ self.dbName = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 3:
+ if ftype == TType.STRING:
+ self.objectName = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 4:
+ if ftype == TType.LIST:
+ self.partValues = []
+ (_etype10, _size7) = iprot.readListBegin()
+ for _i11 in xrange(_size7):
+ _elem12 = iprot.readString()
+ self.partValues.append(_elem12)
+ iprot.readListEnd()
+ else:
+ iprot.skip(ftype)
+ elif fid == 5:
+ if ftype == TType.STRING:
+ self.columnName = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('HiveObjectRef')
+ if self.objectType is not None:
+ oprot.writeFieldBegin('objectType', TType.I32, 1)
+ oprot.writeI32(self.objectType)
+ oprot.writeFieldEnd()
+ if self.dbName is not None:
+ oprot.writeFieldBegin('dbName', TType.STRING, 2)
+ oprot.writeString(self.dbName)
+ oprot.writeFieldEnd()
+ if self.objectName is not None:
+ oprot.writeFieldBegin('objectName', TType.STRING, 3)
+ oprot.writeString(self.objectName)
+ oprot.writeFieldEnd()
+ if self.partValues is not None:
+ oprot.writeFieldBegin('partValues', TType.LIST, 4)
+ oprot.writeListBegin(TType.STRING, len(self.partValues))
+ for iter13 in self.partValues:
+ oprot.writeString(iter13)
+ oprot.writeListEnd()
+ oprot.writeFieldEnd()
+ if self.columnName is not None:
+ oprot.writeFieldBegin('columnName', TType.STRING, 5)
+ oprot.writeString(self.columnName)
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.objectType)
+ value = (value * 31) ^ hash(self.dbName)
+ value = (value * 31) ^ hash(self.objectName)
+ value = (value * 31) ^ hash(self.partValues)
+ value = (value * 31) ^ hash(self.columnName)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class PrivilegeGrantInfo:
+ """
+ Attributes:
+ - privilege
+ - createTime
+ - grantor
+ - grantorType
+ - grantOption
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.STRING, 'privilege', None, None, ), # 1
+ (2, TType.I32, 'createTime', None, None, ), # 2
+ (3, TType.STRING, 'grantor', None, None, ), # 3
+ (4, TType.I32, 'grantorType', None, None, ), # 4
+ (5, TType.BOOL, 'grantOption', None, None, ), # 5
+ )
+
+ def __init__(self, privilege=None, createTime=None, grantor=None, grantorType=None, grantOption=None,):
+ self.privilege = privilege
+ self.createTime = createTime
+ self.grantor = grantor
+ self.grantorType = grantorType
+ self.grantOption = grantOption
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.STRING:
+ self.privilege = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 2:
+ if ftype == TType.I32:
+ self.createTime = iprot.readI32()
+ else:
+ iprot.skip(ftype)
+ elif fid == 3:
+ if ftype == TType.STRING:
+ self.grantor = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 4:
+ if ftype == TType.I32:
+ self.grantorType = iprot.readI32()
+ else:
+ iprot.skip(ftype)
+ elif fid == 5:
+ if ftype == TType.BOOL:
+ self.grantOption = iprot.readBool()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('PrivilegeGrantInfo')
+ if self.privilege is not None:
+ oprot.writeFieldBegin('privilege', TType.STRING, 1)
+ oprot.writeString(self.privilege)
+ oprot.writeFieldEnd()
+ if self.createTime is not None:
+ oprot.writeFieldBegin('createTime', TType.I32, 2)
+ oprot.writeI32(self.createTime)
+ oprot.writeFieldEnd()
+ if self.grantor is not None:
+ oprot.writeFieldBegin('grantor', TType.STRING, 3)
+ oprot.writeString(self.grantor)
+ oprot.writeFieldEnd()
+ if self.grantorType is not None:
+ oprot.writeFieldBegin('grantorType', TType.I32, 4)
+ oprot.writeI32(self.grantorType)
+ oprot.writeFieldEnd()
+ if self.grantOption is not None:
+ oprot.writeFieldBegin('grantOption', TType.BOOL, 5)
+ oprot.writeBool(self.grantOption)
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.privilege)
+ value = (value * 31) ^ hash(self.createTime)
+ value = (value * 31) ^ hash(self.grantor)
+ value = (value * 31) ^ hash(self.grantorType)
+ value = (value * 31) ^ hash(self.grantOption)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class HiveObjectPrivilege:
+ """
+ Attributes:
+ - hiveObject
+ - principalName
+ - principalType
+ - grantInfo
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.STRUCT, 'hiveObject', (HiveObjectRef, HiveObjectRef.thrift_spec), None, ), # 1
+ (2, TType.STRING, 'principalName', None, None, ), # 2
+ (3, TType.I32, 'principalType', None, None, ), # 3
+ (4, TType.STRUCT, 'grantInfo', (PrivilegeGrantInfo, PrivilegeGrantInfo.thrift_spec), None, ), # 4
+ )
+
+ def __init__(self, hiveObject=None, principalName=None, principalType=None, grantInfo=None,):
+ self.hiveObject = hiveObject
+ self.principalName = principalName
+ self.principalType = principalType
+ self.grantInfo = grantInfo
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.STRUCT:
+ self.hiveObject = HiveObjectRef()
+ self.hiveObject.read(iprot)
+ else:
+ iprot.skip(ftype)
+ elif fid == 2:
+ if ftype == TType.STRING:
+ self.principalName = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 3:
+ if ftype == TType.I32:
+ self.principalType = iprot.readI32()
+ else:
+ iprot.skip(ftype)
+ elif fid == 4:
+ if ftype == TType.STRUCT:
+ self.grantInfo = PrivilegeGrantInfo()
+ self.grantInfo.read(iprot)
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('HiveObjectPrivilege')
+ if self.hiveObject is not None:
+ oprot.writeFieldBegin('hiveObject', TType.STRUCT, 1)
+ self.hiveObject.write(oprot)
+ oprot.writeFieldEnd()
+ if self.principalName is not None:
+ oprot.writeFieldBegin('principalName', TType.STRING, 2)
+ oprot.writeString(self.principalName)
+ oprot.writeFieldEnd()
+ if self.principalType is not None:
+ oprot.writeFieldBegin('principalType', TType.I32, 3)
+ oprot.writeI32(self.principalType)
+ oprot.writeFieldEnd()
+ if self.grantInfo is not None:
+ oprot.writeFieldBegin('grantInfo', TType.STRUCT, 4)
+ self.grantInfo.write(oprot)
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.hiveObject)
+ value = (value * 31) ^ hash(self.principalName)
+ value = (value * 31) ^ hash(self.principalType)
+ value = (value * 31) ^ hash(self.grantInfo)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class PrivilegeBag:
+ """
+ Attributes:
+ - privileges
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.LIST, 'privileges', (TType.STRUCT,(HiveObjectPrivilege, HiveObjectPrivilege.thrift_spec)), None, ), # 1
+ )
+
+ def __init__(self, privileges=None,):
+ self.privileges = privileges
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.LIST:
+ self.privileges = []
+ (_etype17, _size14) = iprot.readListBegin()
+ for _i18 in xrange(_size14):
+ _elem19 = HiveObjectPrivilege()
+ _elem19.read(iprot)
+ self.privileges.append(_elem19)
+ iprot.readListEnd()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('PrivilegeBag')
+ if self.privileges is not None:
+ oprot.writeFieldBegin('privileges', TType.LIST, 1)
+ oprot.writeListBegin(TType.STRUCT, len(self.privileges))
+ for iter20 in self.privileges:
+ iter20.write(oprot)
+ oprot.writeListEnd()
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.privileges)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class PrincipalPrivilegeSet:
+ """
+ Attributes:
+ - userPrivileges
+ - groupPrivileges
+ - rolePrivileges
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.MAP, 'userPrivileges', (TType.STRING,None,TType.LIST,(TType.STRUCT,(PrivilegeGrantInfo, PrivilegeGrantInfo.thrift_spec))), None, ), # 1
+ (2, TType.MAP, 'groupPrivileges', (TType.STRING,None,TType.LIST,(TType.STRUCT,(PrivilegeGrantInfo, PrivilegeGrantInfo.thrift_spec))), None, ), # 2
+ (3, TType.MAP, 'rolePrivileges', (TType.STRING,None,TType.LIST,(TType.STRUCT,(PrivilegeGrantInfo, PrivilegeGrantInfo.thrift_spec))), None, ), # 3
+ )
+
+ def __init__(self, userPrivileges=None, groupPrivileges=None, rolePrivileges=None,):
+ self.userPrivileges = userPrivileges
+ self.groupPrivileges = groupPrivileges
+ self.rolePrivileges = rolePrivileges
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.MAP:
+ self.userPrivileges = {}
+ (_ktype22, _vtype23, _size21 ) = iprot.readMapBegin()
+ for _i25 in xrange(_size21):
+ _key26 = iprot.readString()
+ _val27 = []
+ (_etype31, _size28) = iprot.readListBegin()
+ for _i32 in xrange(_size28):
+ _elem33 = PrivilegeGrantInfo()
+ _elem33.read(iprot)
+ _val27.append(_elem33)
+ iprot.readListEnd()
+ self.userPrivileges[_key26] = _val27
+ iprot.readMapEnd()
+ else:
+ iprot.skip(ftype)
+ elif fid == 2:
+ if ftype == TType.MAP:
+ self.groupPrivileges = {}
+ (_ktype35, _vtype36, _size34 ) = iprot.readMapBegin()
+ for _i38 in xrange(_size34):
+ _key39 = iprot.readString()
+ _val40 = []
+ (_etype44, _size41) = iprot.readListBegin()
+ for _i45 in xrange(_size41):
+ _elem46 = PrivilegeGrantInfo()
+ _elem46.read(iprot)
+ _val40.append(_elem46)
+ iprot.readListEnd()
+ self.groupPrivileges[_key39] = _val40
+ iprot.readMapEnd()
+ else:
+ iprot.skip(ftype)
+ elif fid == 3:
+ if ftype == TType.MAP:
+ self.rolePrivileges = {}
+ (_ktype48, _vtype49, _size47 ) = iprot.readMapBegin()
+ for _i51 in xrange(_size47):
+ _key52 = iprot.readString()
+ _val53 = []
+ (_etype57, _size54) = iprot.readListBegin()
+ for _i58 in xrange(_size54):
+ _elem59 = PrivilegeGrantInfo()
+ _elem59.read(iprot)
+ _val53.append(_elem59)
+ iprot.readListEnd()
+ self.rolePrivileges[_key52] = _val53
+ iprot.readMapEnd()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('PrincipalPrivilegeSet')
+ if self.userPrivileges is not None:
+ oprot.writeFieldBegin('userPrivileges', TType.MAP, 1)
+ oprot.writeMapBegin(TType.STRING, TType.LIST, len(self.userPrivileges))
+ for kiter60,viter61 in self.userPrivileges.items():
+ oprot.writeString(kiter60)
+ oprot.writeListBegin(TType.STRUCT, len(viter61))
+ for iter62 in viter61:
+ iter62.write(oprot)
+ oprot.writeListEnd()
+ oprot.writeMapEnd()
+ oprot.writeFieldEnd()
+ if self.groupPrivileges is not None:
+ oprot.writeFieldBegin('groupPrivileges', TType.MAP, 2)
+ oprot.writeMapBegin(TType.STRING, TType.LIST, len(self.groupPrivileges))
+ for kiter63,viter64 in self.groupPrivileges.items():
+ oprot.writeString(kiter63)
+ oprot.writeListBegin(TType.STRUCT, len(viter64))
+ for iter65 in viter64:
+ iter65.write(oprot)
+ oprot.writeListEnd()
+ oprot.writeMapEnd()
+ oprot.writeFieldEnd()
+ if self.rolePrivileges is not None:
+ oprot.writeFieldBegin('rolePrivileges', TType.MAP, 3)
+ oprot.writeMapBegin(TType.STRING, TType.LIST, len(self.rolePrivileges))
+ for kiter66,viter67 in self.rolePrivileges.items():
+ oprot.writeString(kiter66)
+ oprot.writeListBegin(TType.STRUCT, len(viter67))
+ for iter68 in viter67:
+ iter68.write(oprot)
+ oprot.writeListEnd()
+ oprot.writeMapEnd()
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.userPrivileges)
+ value = (value * 31) ^ hash(self.groupPrivileges)
+ value = (value * 31) ^ hash(self.rolePrivileges)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class GrantRevokePrivilegeRequest:
+ """
+ Attributes:
+ - requestType
+ - privileges
+ - revokeGrantOption
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.I32, 'requestType', None, None, ), # 1
+ (2, TType.STRUCT, 'privileges', (PrivilegeBag, PrivilegeBag.thrift_spec), None, ), # 2
+ (3, TType.BOOL, 'revokeGrantOption', None, None, ), # 3
+ )
+
+ def __init__(self, requestType=None, privileges=None, revokeGrantOption=None,):
+ self.requestType = requestType
+ self.privileges = privileges
+ self.revokeGrantOption = revokeGrantOption
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.I32:
+ self.requestType = iprot.readI32()
+ else:
+ iprot.skip(ftype)
+ elif fid == 2:
+ if ftype == TType.STRUCT:
+ self.privileges = PrivilegeBag()
+ self.privileges.read(iprot)
+ else:
+ iprot.skip(ftype)
+ elif fid == 3:
+ if ftype == TType.BOOL:
+ self.revokeGrantOption = iprot.readBool()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('GrantRevokePrivilegeRequest')
+ if self.requestType is not None:
+ oprot.writeFieldBegin('requestType', TType.I32, 1)
+ oprot.writeI32(self.requestType)
+ oprot.writeFieldEnd()
+ if self.privileges is not None:
+ oprot.writeFieldBegin('privileges', TType.STRUCT, 2)
+ self.privileges.write(oprot)
+ oprot.writeFieldEnd()
+ if self.revokeGrantOption is not None:
+ oprot.writeFieldBegin('revokeGrantOption', TType.BOOL, 3)
+ oprot.writeBool(self.revokeGrantOption)
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.requestType)
+ value = (value * 31) ^ hash(self.privileges)
+ value = (value * 31) ^ hash(self.revokeGrantOption)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class GrantRevokePrivilegeResponse:
+ """
+ Attributes:
+ - success
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.BOOL, 'success', None, None, ), # 1
+ )
+
+ def __init__(self, success=None,):
+ self.success = success
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.BOOL:
+ self.success = iprot.readBool()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('GrantRevokePrivilegeResponse')
+ if self.success is not None:
+ oprot.writeFieldBegin('success', TType.BOOL, 1)
+ oprot.writeBool(self.success)
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.success)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class Role:
+ """
+ Attributes:
+ - roleName
+ - createTime
+ - ownerName
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.STRING, 'roleName', None, None, ), # 1
+ (2, TType.I32, 'createTime', None, None, ), # 2
+ (3, TType.STRING, 'ownerName', None, None, ), # 3
+ )
+
+ def __init__(self, roleName=None, createTime=None, ownerName=None,):
+ self.roleName = roleName
+ self.createTime = createTime
+ self.ownerName = ownerName
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.STRING:
+ self.roleName = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 2:
+ if ftype == TType.I32:
+ self.createTime = iprot.readI32()
+ else:
+ iprot.skip(ftype)
+ elif fid == 3:
+ if ftype == TType.STRING:
+ self.ownerName = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('Role')
+ if self.roleName is not None:
+ oprot.writeFieldBegin('roleName', TType.STRING, 1)
+ oprot.writeString(self.roleName)
+ oprot.writeFieldEnd()
+ if self.createTime is not None:
+ oprot.writeFieldBegin('createTime', TType.I32, 2)
+ oprot.writeI32(self.createTime)
+ oprot.writeFieldEnd()
+ if self.ownerName is not None:
+ oprot.writeFieldBegin('ownerName', TType.STRING, 3)
+ oprot.writeString(self.ownerName)
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.roleName)
+ value = (value * 31) ^ hash(self.createTime)
+ value = (value * 31) ^ hash(self.ownerName)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class RolePrincipalGrant:
+ """
+ Attributes:
+ - roleName
+ - principalName
+ - principalType
+ - grantOption
+ - grantTime
+ - grantorName
+ - grantorPrincipalType
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.STRING, 'roleName', None, None, ), # 1
+ (2, TType.STRING, 'principalName', None, None, ), # 2
+ (3, TType.I32, 'principalType', None, None, ), # 3
+ (4, TType.BOOL, 'grantOption', None, None, ), # 4
+ (5, TType.I32, 'grantTime', None, None, ), # 5
+ (6, TType.STRING, 'grantorName', None, None, ), # 6
+ (7, TType.I32, 'grantorPrincipalType', None, None, ), # 7
+ )
+
+ def __init__(self, roleName=None, principalName=None, principalType=None, grantOption=None, grantTime=None, grantorName=None, grantorPrincipalType=None,):
+ self.roleName = roleName
+ self.principalName = principalName
+ self.principalType = principalType
+ self.grantOption = grantOption
+ self.grantTime = grantTime
+ self.grantorName = grantorName
+ self.grantorPrincipalType = grantorPrincipalType
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.STRING:
+ self.roleName = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 2:
+ if ftype == TType.STRING:
+ self.principalName = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 3:
+ if ftype == TType.I32:
+ self.principalType = iprot.readI32()
+ else:
+ iprot.skip(ftype)
+ elif fid == 4:
+ if ftype == TType.BOOL:
+ self.grantOption = iprot.readBool()
+ else:
+ iprot.skip(ftype)
+ elif fid == 5:
+ if ftype == TType.I32:
+ self.grantTime = iprot.readI32()
+ else:
+ iprot.skip(ftype)
+ elif fid == 6:
+ if ftype == TType.STRING:
+ self.grantorName = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 7:
+ if ftype == TType.I32:
+ self.grantorPrincipalType = iprot.readI32()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('RolePrincipalGrant')
+ if self.roleName is not None:
+ oprot.writeFieldBegin('roleName', TType.STRING, 1)
+ oprot.writeString(self.roleName)
+ oprot.writeFieldEnd()
+ if self.principalName is not None:
+ oprot.writeFieldBegin('principalName', TType.STRING, 2)
+ oprot.writeString(self.principalName)
+ oprot.writeFieldEnd()
+ if self.principalType is not None:
+ oprot.writeFieldBegin('principalType', TType.I32, 3)
+ oprot.writeI32(self.principalType)
+ oprot.writeFieldEnd()
+ if self.grantOption is not None:
+ oprot.writeFieldBegin('grantOption', TType.BOOL, 4)
+ oprot.writeBool(self.grantOption)
+ oprot.writeFieldEnd()
+ if self.grantTime is not None:
+ oprot.writeFieldBegin('grantTime', TType.I32, 5)
+ oprot.writeI32(self.grantTime)
+ oprot.writeFieldEnd()
+ if self.grantorName is not None:
+ oprot.writeFieldBegin('grantorName', TType.STRING, 6)
+ oprot.writeString(self.grantorName)
+ oprot.writeFieldEnd()
+ if self.grantorPrincipalType is not None:
+ oprot.writeFieldBegin('grantorPrincipalType', TType.I32, 7)
+ oprot.writeI32(self.grantorPrincipalType)
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.roleName)
+ value = (value * 31) ^ hash(self.principalName)
+ value = (value * 31) ^ hash(self.principalType)
+ value = (value * 31) ^ hash(self.grantOption)
+ value = (value * 31) ^ hash(self.grantTime)
+ value = (value * 31) ^ hash(self.grantorName)
+ value = (value * 31) ^ hash(self.grantorPrincipalType)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class GetRoleGrantsForPrincipalRequest:
+ """
+ Attributes:
+ - principal_name
+ - principal_type
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.STRING, 'principal_name', None, None, ), # 1
+ (2, TType.I32, 'principal_type', None, None, ), # 2
+ )
+
+ def __init__(self, principal_name=None, principal_type=None,):
+ self.principal_name = principal_name
+ self.principal_type = principal_type
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.STRING:
+ self.principal_name = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 2:
+ if ftype == TType.I32:
+ self.principal_type = iprot.readI32()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('GetRoleGrantsForPrincipalRequest')
+ if self.principal_name is not None:
+ oprot.writeFieldBegin('principal_name', TType.STRING, 1)
+ oprot.writeString(self.principal_name)
+ oprot.writeFieldEnd()
+ if self.principal_type is not None:
+ oprot.writeFieldBegin('principal_type', TType.I32, 2)
+ oprot.writeI32(self.principal_type)
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ if self.principal_name is None:
+ raise TProtocol.TProtocolException(message='Required field principal_name is unset!')
+ if self.principal_type is None:
+ raise TProtocol.TProtocolException(message='Required field principal_type is unset!')
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.principal_name)
+ value = (value * 31) ^ hash(self.principal_type)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class GetRoleGrantsForPrincipalResponse:
+ """
+ Attributes:
+ - principalGrants
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.LIST, 'principalGrants', (TType.STRUCT,(RolePrincipalGrant, RolePrincipalGrant.thrift_spec)), None, ), # 1
+ )
+
+ def __init__(self, principalGrants=None,):
+ self.principalGrants = principalGrants
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.LIST:
+ self.principalGrants = []
+ (_etype72, _size69) = iprot.readListBegin()
+ for _i73 in xrange(_size69):
+ _elem74 = RolePrincipalGrant()
+ _elem74.read(iprot)
+ self.principalGrants.append(_elem74)
+ iprot.readListEnd()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('GetRoleGrantsForPrincipalResponse')
+ if self.principalGrants is not None:
+ oprot.writeFieldBegin('principalGrants', TType.LIST, 1)
+ oprot.writeListBegin(TType.STRUCT, len(self.principalGrants))
+ for iter75 in self.principalGrants:
+ iter75.write(oprot)
+ oprot.writeListEnd()
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ if self.principalGrants is None:
+ raise TProtocol.TProtocolException(message='Required field principalGrants is unset!')
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.principalGrants)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class GetPrincipalsInRoleRequest:
+ """
+ Attributes:
+ - roleName
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.STRING, 'roleName', None, None, ), # 1
+ )
+
+ def __init__(self, roleName=None,):
+ self.roleName = roleName
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.STRING:
+ self.roleName = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('GetPrincipalsInRoleRequest')
+ if self.roleName is not None:
+ oprot.writeFieldBegin('roleName', TType.STRING, 1)
+ oprot.writeString(self.roleName)
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ if self.roleName is None:
+ raise TProtocol.TProtocolException(message='Required field roleName is unset!')
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.roleName)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class GetPrincipalsInRoleResponse:
+ """
+ Attributes:
+ - principalGrants
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.LIST, 'principalGrants', (TType.STRUCT,(RolePrincipalGrant, RolePrincipalGrant.thrift_spec)), None, ), # 1
+ )
+
+ def __init__(self, principalGrants=None,):
+ self.principalGrants = principalGrants
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.LIST:
+ self.principalGrants = []
+ (_etype79, _size76) = iprot.readListBegin()
+ for _i80 in xrange(_size76):
+ _elem81 = RolePrincipalGrant()
+ _elem81.read(iprot)
+ self.principalGrants.append(_elem81)
+ iprot.readListEnd()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('GetPrincipalsInRoleResponse')
+ if self.principalGrants is not None:
+ oprot.writeFieldBegin('principalGrants', TType.LIST, 1)
+ oprot.writeListBegin(TType.STRUCT, len(self.principalGrants))
+ for iter82 in self.principalGrants:
+ iter82.write(oprot)
+ oprot.writeListEnd()
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ if self.principalGrants is None:
+ raise TProtocol.TProtocolException(message='Required field principalGrants is unset!')
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.principalGrants)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class GrantRevokeRoleRequest:
+ """
+ Attributes:
+ - requestType
+ - roleName
+ - principalName
+ - principalType
+ - grantor
+ - grantorType
+ - grantOption
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.I32, 'requestType', None, None, ), # 1
+ (2, TType.STRING, 'roleName', None, None, ), # 2
+ (3, TType.STRING, 'principalName', None, None, ), # 3
+ (4, TType.I32, 'principalType', None, None, ), # 4
+ (5, TType.STRING, 'grantor', None, None, ), # 5
+ (6, TType.I32, 'grantorType', None, None, ), # 6
+ (7, TType.BOOL, 'grantOption', None, None, ), # 7
+ )
+
+ def __init__(self, requestType=None, roleName=None, principalName=None, principalType=None, grantor=None, grantorType=None, grantOption=None,):
+ self.requestType = requestType
+ self.roleName = roleName
+ self.principalName = principalName
+ self.principalType = principalType
+ self.grantor = grantor
+ self.grantorType = grantorType
+ self.grantOption = grantOption
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.I32:
+ self.requestType = iprot.readI32()
+ else:
+ iprot.skip(ftype)
+ elif fid == 2:
+ if ftype == TType.STRING:
+ self.roleName = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 3:
+ if ftype == TType.STRING:
+ self.principalName = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 4:
+ if ftype == TType.I32:
+ self.principalType = iprot.readI32()
+ else:
+ iprot.skip(ftype)
+ elif fid == 5:
+ if ftype == TType.STRING:
+ self.grantor = iprot.readString()
+ else:
+ iprot.skip(ftype)
+ elif fid == 6:
+ if ftype == TType.I32:
+ self.grantorType = iprot.readI32()
+ else:
+ iprot.skip(ftype)
+ elif fid == 7:
+ if ftype == TType.BOOL:
+ self.grantOption = iprot.readBool()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('GrantRevokeRoleRequest')
+ if self.requestType is not None:
+ oprot.writeFieldBegin('requestType', TType.I32, 1)
+ oprot.writeI32(self.requestType)
+ oprot.writeFieldEnd()
+ if self.roleName is not None:
+ oprot.writeFieldBegin('roleName', TType.STRING, 2)
+ oprot.writeString(self.roleName)
+ oprot.writeFieldEnd()
+ if self.principalName is not None:
+ oprot.writeFieldBegin('principalName', TType.STRING, 3)
+ oprot.writeString(self.principalName)
+ oprot.writeFieldEnd()
+ if self.principalType is not None:
+ oprot.writeFieldBegin('principalType', TType.I32, 4)
+ oprot.writeI32(self.principalType)
+ oprot.writeFieldEnd()
+ if self.grantor is not None:
+ oprot.writeFieldBegin('grantor', TType.STRING, 5)
+ oprot.writeString(self.grantor)
+ oprot.writeFieldEnd()
+ if self.grantorType is not None:
+ oprot.writeFieldBegin('grantorType', TType.I32, 6)
+ oprot.writeI32(self.grantorType)
+ oprot.writeFieldEnd()
+ if self.grantOption is not None:
+ oprot.writeFieldBegin('grantOption', TType.BOOL, 7)
+ oprot.writeBool(self.grantOption)
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.requestType)
+ value = (value * 31) ^ hash(self.roleName)
+ value = (value * 31) ^ hash(self.principalName)
+ value = (value * 31) ^ hash(self.principalType)
+ value = (value * 31) ^ hash(self.grantor)
+ value = (value * 31) ^ hash(self.grantorType)
+ value = (value * 31) ^ hash(self.grantOption)
+ return value
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ class GrantRevokeRoleResponse:
+ """
+ Attributes:
+ - success
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.BOOL, 'success', None, None, ), # 1
+ )
+
+ def __init__(self, success=None,):
+ self.success = success
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.BOOL:
+ self.success = iprot.readBool()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('GrantRevokeRoleResponse')
+ if self.success is not None:
+ oprot.writeFieldBegin('success', TType.BOOL, 1)
+ oprot.writeBool(self.success)
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+
+ def validate(self):
+ return
+
+
+ def __hash__(self):
+ value = 17
+ value = (value * 31) ^ hash(self.
<TRUNCATED>
[17/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Wei Zheng)
Posted by se...@apache.org.
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadTable.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadTable.java
index 0000000,a1187c4..6354f77
mode 000000,100644..100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadTable.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadTable.java
@@@ -1,0 -1,243 +1,245 @@@
+ /*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+ package org.apache.hadoop.hive.ql.exec.repl.bootstrap.load.table;
+
+ import org.apache.hadoop.fs.Path;
+ import org.apache.hadoop.hive.metastore.MetaStoreUtils;
+ import org.apache.hadoop.hive.metastore.TableType;
+ import org.apache.hadoop.hive.metastore.api.Database;
+ import org.apache.hadoop.hive.metastore.api.MetaException;
+ import org.apache.hadoop.hive.ql.ErrorMsg;
+ import org.apache.hadoop.hive.ql.exec.ReplCopyTask;
+ import org.apache.hadoop.hive.ql.exec.Task;
+ import org.apache.hadoop.hive.ql.exec.TaskFactory;
+ import org.apache.hadoop.hive.ql.exec.Utilities;
+ import org.apache.hadoop.hive.ql.exec.repl.ReplStateLogWork;
+ import org.apache.hadoop.hive.ql.exec.repl.bootstrap.ReplLoadTask;
+ import org.apache.hadoop.hive.ql.exec.repl.bootstrap.events.TableEvent;
+ import org.apache.hadoop.hive.ql.exec.repl.bootstrap.load.TaskTracker;
+ import org.apache.hadoop.hive.ql.exec.repl.bootstrap.load.util.Context;
+ import org.apache.hadoop.hive.ql.metadata.Table;
+ import org.apache.hadoop.hive.ql.parse.EximUtil;
+ import org.apache.hadoop.hive.ql.parse.ImportSemanticAnalyzer;
+ import org.apache.hadoop.hive.ql.parse.ReplicationSpec;
+ import org.apache.hadoop.hive.ql.parse.SemanticException;
+ import org.apache.hadoop.hive.ql.parse.repl.ReplLogger;
+ import org.apache.hadoop.hive.ql.plan.ImportTableDesc;
+ import org.apache.hadoop.hive.ql.plan.LoadTableDesc;
+ import org.apache.hadoop.hive.ql.plan.MoveWork;
++import org.apache.hadoop.hive.ql.session.SessionState;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+
+ import java.io.IOException;
+ import java.io.Serializable;
+ import java.util.ArrayList;
+ import java.util.HashSet;
+ import java.util.List;
+ import java.util.TreeMap;
+
+ import static org.apache.hadoop.hive.ql.parse.ImportSemanticAnalyzer.isPartitioned;
+
+ public class LoadTable {
+ private final static Logger LOG = LoggerFactory.getLogger(LoadTable.class);
+ // private final Helper helper;
+ private final Context context;
+ private final ReplLogger replLogger;
+ private final TableContext tableContext;
+ private final TaskTracker tracker;
+ private final TableEvent event;
+
+ public LoadTable(TableEvent event, Context context, ReplLogger replLogger,
+ TableContext tableContext, TaskTracker limiter)
+ throws SemanticException, IOException {
+ this.event = event;
+ this.context = context;
+ this.replLogger = replLogger;
+ this.tableContext = tableContext;
+ this.tracker = new TaskTracker(limiter);
+ }
+
+ private void createTableReplLogTask(String tableName, TableType tableType) throws SemanticException {
+ ReplStateLogWork replLogWork = new ReplStateLogWork(replLogger,tableName, tableType);
+ Task<ReplStateLogWork> replLogTask = TaskFactory.get(replLogWork, context.hiveConf);
+ ReplLoadTask.dependency(tracker.tasks(), replLogTask);
+
+ if (tracker.tasks().isEmpty()) {
+ tracker.addTask(replLogTask);
+ } else {
+ ReplLoadTask.dependency(tracker.tasks(), replLogTask);
+
+ List<Task<? extends Serializable>> visited = new ArrayList<>();
+ tracker.updateTaskCount(replLogTask, visited);
+ }
+ }
+
+ public TaskTracker tasks() throws SemanticException {
+ // Path being passed to us is a table dump location. We go ahead and load it in as needed.
+ // If tblName is null, then we default to the table name specified in _metadata, which is good.
+ // or are both specified, in which case, that's what we are intended to create the new table as.
+ try {
+ if (event.shouldNotReplicate()) {
+ return tracker;
+ }
+ String dbName = tableContext.dbNameToLoadIn; //this can never be null or empty;
+ // Create table associated with the import
+ // Executed if relevant, and used to contain all the other details about the table if not.
+ ImportTableDesc tableDesc = tableContext.overrideProperties(event.tableDesc(dbName));
+ Table table = ImportSemanticAnalyzer.tableIfExists(tableDesc, context.hiveDb);
+ ReplicationSpec replicationSpec = event.replicationSpec();
+
+ // Normally, on import, trying to create a table or a partition in a db that does not yet exist
+ // is a error condition. However, in the case of a REPL LOAD, it is possible that we are trying
+ // to create tasks to create a table inside a db that as-of-now does not exist, but there is
+ // a precursor Task waiting that will create it before this is encountered. Thus, we instantiate
+ // defaults and do not error out in that case.
+ // the above will change now since we are going to split replication load in multiple execution
+ // tasks and hence we could have created the database earlier in which case the waitOnPrecursor will
+ // be false and hence if db Not found we should error out.
+ Database parentDb = context.hiveDb.getDatabase(tableDesc.getDatabaseName());
+ if (parentDb == null) {
+ if (!tableContext.waitOnPrecursor()) {
+ throw new SemanticException(
+ ErrorMsg.DATABASE_NOT_EXISTS.getMsg(tableDesc.getDatabaseName()));
+ }
+ }
+
+ if (table == null) {
+ // If table doesn't exist, allow creating a new one only if the database state is older than the update.
+ if ((parentDb != null) && (!replicationSpec
+ .allowReplacementInto(parentDb.getParameters()))) {
+ // If the target table exists and is newer or same as current update based on repl.last.id, then just noop it.
+ return tracker;
+ }
+ } else {
+ if (!replicationSpec.allowReplacementInto(table.getParameters())) {
+ // If the target table exists and is newer or same as current update based on repl.last.id, then just noop it.
+ return tracker;
+ }
+ }
+
+ if (tableDesc.getLocation() == null) {
+ tableDesc.setLocation(location(tableDesc, parentDb));
+ }
+
+
+ /* Note: In the following section, Metadata-only import handling logic is
+ interleaved with regular repl-import logic. The rule of thumb being
+ followed here is that MD-only imports are essentially ALTERs. They do
+ not load data, and should not be "creating" any metadata - they should
+ be replacing instead. The only place it makes sense for a MD-only import
+ to create is in the case of a table that's been dropped and recreated,
+ or in the case of an unpartitioned table. In all other cases, it should
+ behave like a noop or a pure MD alter.
+ */
+ if (table == null) {
+ newTableTasks(tableDesc);
+ } else {
+ existingTableTasks(tableDesc, table, replicationSpec);
+ }
+
+ if (!isPartitioned(tableDesc)) {
+ createTableReplLogTask(tableDesc.getTableName(), tableDesc.tableType());
+ }
+ return tracker;
+ } catch (Exception e) {
+ throw new SemanticException(e);
+ }
+ }
+
+ private void existingTableTasks(ImportTableDesc tblDesc, Table table,
+ ReplicationSpec replicationSpec) {
+ if (!table.isPartitioned()) {
+
+ LOG.debug("table non-partitioned");
+ if (!replicationSpec.allowReplacementInto(table.getParameters())) {
+ return; // silently return, table is newer than our replacement.
+ }
+
+ Task<? extends Serializable> alterTableTask = alterTableTask(tblDesc, replicationSpec);
+ if (replicationSpec.isMetadataOnly()) {
+ tracker.addTask(alterTableTask);
+ } else {
+ Task<?> loadTableTask =
+ loadTableTask(table, replicationSpec, event.metadataPath(), event.metadataPath());
+ alterTableTask.addDependentTask(loadTableTask);
+ tracker.addTask(alterTableTask);
+ }
+ }
+ }
+
+ private void newTableTasks(ImportTableDesc tblDesc) throws SemanticException {
+ Table table;
+ table = new Table(tblDesc.getDatabaseName(), tblDesc.getTableName());
+ // Either we're dropping and re-creating, or the table didn't exist, and we're creating.
+ Task<?> createTableTask =
+ tblDesc.getCreateTableTask(new HashSet<>(), new HashSet<>(), context.hiveConf);
+ if (event.replicationSpec().isMetadataOnly()) {
+ tracker.addTask(createTableTask);
+ return;
+ }
+ if (!isPartitioned(tblDesc)) {
+ LOG.debug("adding dependent CopyWork/MoveWork for table");
+ Task<?> loadTableTask =
+ loadTableTask(table, event.replicationSpec(), new Path(tblDesc.getLocation()),
+ event.metadataPath());
+ createTableTask.addDependentTask(loadTableTask);
+ }
+ tracker.addTask(createTableTask);
+ }
+
+ private String location(ImportTableDesc tblDesc, Database parentDb)
+ throws MetaException, SemanticException {
+ if (!tableContext.waitOnPrecursor()) {
+ return context.warehouse.getDefaultTablePath(parentDb, tblDesc.getTableName()).toString();
+ } else {
+ Path tablePath = new Path(
+ context.warehouse.getDefaultDatabasePath(tblDesc.getDatabaseName()),
+ MetaStoreUtils.encodeTableName(tblDesc.getTableName().toLowerCase())
+ );
+ return context.warehouse.getDnsPath(tablePath).toString();
+ }
+ }
+
+ private Task<?> loadTableTask(Table table, ReplicationSpec replicationSpec, Path tgtPath,
+ Path fromURI) {
+ Path dataPath = new Path(fromURI, EximUtil.DATA_PATH_NAME);
+ Path tmpPath = context.utils.getExternalTmpPath(tgtPath);
+ Task<?> copyTask =
+ ReplCopyTask.getLoadCopyTask(replicationSpec, dataPath, tmpPath, context.hiveConf);
+
+ LoadTableDesc loadTableWork = new LoadTableDesc(
- tmpPath, Utilities.getTableDesc(table), new TreeMap<>(), replicationSpec.isReplace()
++ tmpPath, Utilities.getTableDesc(table), new TreeMap<>(), replicationSpec.isReplace(),
++ SessionState.get().getTxnMgr().getCurrentTxnId()
+ );
+ MoveWork moveWork =
+ new MoveWork(new HashSet<>(), new HashSet<>(), loadTableWork, null, false);
+ Task<?> loadTableTask = TaskFactory.get(moveWork, context.hiveConf);
+ copyTask.addDependentTask(loadTableTask);
+ return copyTask;
+ }
+
+ private Task<? extends Serializable> alterTableTask(ImportTableDesc tableDesc,
+ ReplicationSpec replicationSpec) {
+ tableDesc.setReplaceMode(true);
+ if ((replicationSpec != null) && (replicationSpec.isInReplicationScope())) {
+ tableDesc.setReplicationSpec(replicationSpec);
+ }
+ return tableDesc.getCreateTableTask(new HashSet<>(), new HashSet<>(), context.hiveConf);
+ }
+ }
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizedRowBatchCtx.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizedRowBatchCtx.java
index cfa4e2c,90d1372..b5733ec
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizedRowBatchCtx.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizedRowBatchCtx.java
@@@ -145,12 -162,18 +162,18 @@@ public class VectorizedRowBatchCtx
public static void getPartitionValues(VectorizedRowBatchCtx vrbCtx, Configuration hiveConf,
FileSplit split, Object[] partitionValues) throws IOException {
+ // TODO: this is invalid for SMB. Keep this for now for legacy reasons. See the other overload.
+ MapWork mapWork = Utilities.getMapWork(hiveConf);
+ getPartitionValues(vrbCtx, mapWork, split, partitionValues);
+ }
- Map<Path, PartitionDesc> pathToPartitionInfo = Utilities
- .getMapWork(hiveConf).getPathToPartitionInfo();
+ public static void getPartitionValues(VectorizedRowBatchCtx vrbCtx,
+ MapWork mapWork, FileSplit split, Object[] partitionValues)
+ throws IOException {
+ Map<Path, PartitionDesc> pathToPartitionInfo = mapWork.getPathToPartitionInfo();
PartitionDesc partDesc = HiveFileFormatUtils
- .getPartitionDescFromPathRecursively(pathToPartitionInfo,
+ .getFromPathRecursively(pathToPartitionInfo,
split.getPath(), IOPrepareCache.get().getPartitionDescMap());
getPartitionValues(vrbCtx, partDesc, partitionValues);
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java
index f325c0e,feacdd8..9c9a2d3
--- a/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java
@@@ -36,9 -37,9 +37,10 @@@ import org.apache.hadoop.hive.conf.Hive
import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
import org.apache.hadoop.hive.metastore.api.DataOperationType;
import org.apache.hadoop.hive.metastore.api.hive_metastoreConstants;
+import org.apache.hadoop.hive.metastore.MetaStoreUtils;
import org.apache.hadoop.hive.metastore.TransactionalValidationListener;
import org.apache.hadoop.hive.ql.ErrorMsg;
+ import org.apache.hadoop.hive.ql.io.orc.OrcRecordUpdater;
import org.apache.hadoop.hive.ql.metadata.Table;
import org.apache.hadoop.hive.shims.HadoopShims;
import org.apache.hadoop.hive.shims.HadoopShims.HdfsFileStatusWithId;
@@@ -345,11 -384,7 +385,10 @@@ public class AcidUtils
public static final String SPLIT_UPDATE_STRING = "split_update";
public static final int HASH_BASED_MERGE_BIT = 0x02;
public static final String HASH_BASED_MERGE_STRING = "hash_merge";
+ public static final int INSERT_ONLY_BIT = 0x04;
+ public static final String INSERT_ONLY_STRING = "insert_only";
public static final String DEFAULT_VALUE_STRING = TransactionalValidationListener.DEFAULT_TRANSACTIONAL_PROPERTY;
- public static final String LEGACY_VALUE_STRING = TransactionalValidationListener.LEGACY_TRANSACTIONAL_PROPERTY;
+ public static final String INSERTONLY_VALUE_STRING = TransactionalValidationListener.INSERTONLY_TRANSACTIONAL_PROPERTY;
private AcidOperationalProperties() {
}
@@@ -401,12 -414,6 +430,9 @@@
if (propertiesStr.equalsIgnoreCase(DEFAULT_VALUE_STRING)) {
return AcidOperationalProperties.getDefault();
}
- if (propertiesStr.equalsIgnoreCase(LEGACY_VALUE_STRING)) {
- return AcidOperationalProperties.getLegacy();
- }
+ if (propertiesStr.equalsIgnoreCase(INSERTONLY_VALUE_STRING)) {
+ return AcidOperationalProperties.getInsertOnly();
+ }
AcidOperationalProperties obj = new AcidOperationalProperties();
String[] options = propertiesStr.split("\\|");
for (String option : options) {
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/io/CombineHiveInputFormat.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/io/HiveFileFormatUtils.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcInputFormat.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/MapredParquetInputFormat.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/io/parquet/MapredParquetInputFormat.java
index a70fde6,38aaeed..6178de2
--- a/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/MapredParquetInputFormat.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/MapredParquetInputFormat.java
@@@ -14,16 -14,12 +14,20 @@@
package org.apache.hadoop.hive.ql.io.parquet;
import java.io.IOException;
+import java.util.Map;
+ import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.Path;
+ import org.apache.hadoop.hive.common.io.DataCache;
+ import org.apache.hadoop.hive.common.io.FileMetadataCache;
import org.apache.hadoop.hive.ql.exec.vector.VectorizedInputFormatInterface;
+import org.apache.hadoop.hive.ql.io.HiveFileFormatUtils;
+ import org.apache.hadoop.hive.ql.io.LlapCacheOnlyInputFormatInterface;
+import org.apache.hadoop.hive.ql.io.parquet.serde.ParquetTableUtils;
+import org.apache.hadoop.hive.ql.plan.MapWork;
+import org.apache.hadoop.hive.ql.plan.PartitionDesc;
+import org.apache.hadoop.mapred.FileSplit;
+import org.apache.hadoop.mapred.JobConf;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.hadoop.hive.ql.exec.Utilities;
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/ProjectionPusher.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java
index 01e8a48,5dec791..82804b2
--- a/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java
@@@ -423,11 -423,19 +423,19 @@@ public final class DbTxnManager extend
compBuilder.setExclusive();
compBuilder.setOperationType(DataOperationType.NO_TXN);
break;
-
+ case INSERT_OVERWRITE:
+ t = getTable(output);
+ if (AcidUtils.isAcidTable(t)) {
+ compBuilder.setSemiShared();
+ compBuilder.setOperationType(DataOperationType.UPDATE);
+ } else {
+ compBuilder.setExclusive();
+ compBuilder.setOperationType(DataOperationType.NO_TXN);
+ }
+ break;
case INSERT:
assert t != null;
- if(AcidUtils.isAcidTable(t)) {
+ if(AcidUtils.isFullAcidTable(t)) {
compBuilder.setShared();
}
else {
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
index ae451e2,d661f10..a0b735c
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
@@@ -65,9 -62,9 +65,10 @@@ import org.apache.hadoop.fs.FileStatus
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.PathFilter;
+ import org.apache.hadoop.hive.common.BlobStorageUtils;
import org.apache.hadoop.hive.common.FileUtils;
import org.apache.hadoop.hive.common.HiveStatsUtils;
+import org.apache.hadoop.hive.common.JavaUtils;
import org.apache.hadoop.hive.common.ObjectPair;
import org.apache.hadoop.hive.common.StatsSetupConst;
import org.apache.hadoop.hive.common.classification.InterfaceAudience.LimitedPrivate;
@@@ -3338,8 -3250,9 +3389,9 @@@ private void constructOneLBLocationMap(
// (1) Do not delete the dest dir before doing the move operation.
// (2) It is assumed that subdir and dir are in same encryption zone.
// (3) Move individual files from scr dir to dest dir.
- boolean destIsSubDir = isSubDir(srcf, destf, srcFs, destFs, isSrcLocal);
+ boolean srcIsSubDirOfDest = isSubDir(srcf, destf, srcFs, destFs, isSrcLocal),
+ destIsSubDirOfSrc = isSubDir(destf, srcf, destFs, srcFs, false);
+ final String msg = "Unable to move source " + srcf + " to destination " + destf;
-
try {
if (replace) {
try{
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/optimizer/BucketingSortingReduceSinkOptimizer.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/optimizer/StatsOptimizer.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
index 7fd8f04,a054abb..021507f
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
@@@ -1507,9 -1517,14 +1530,15 @@@ public class DDLSemanticAnalyzer extend
}
Table tab = getTable(tableName, true);
+ // cascade only occurs with partitioned table
+ if (isCascade && !tab.isPartitioned()) {
+ throw new SemanticException(
+ ErrorMsg.ALTER_TABLE_NON_PARTITIONED_TABLE_CASCADE_NOT_SUPPORTED);
+ }
+
// Determine the lock type to acquire
- WriteEntity.WriteType writeType = WriteEntity.determineAlterTableWriteType(op);
+ WriteEntity.WriteType writeType = doForceExclusive
+ ? WriteType.DDL_EXCLUSIVE : WriteEntity.determineAlterTableWriteType(op);
if (!alterPartitions) {
inputs.add(new ReadEntity(tab));
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/parse/EximUtil.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/EximUtil.java
index 2401036,40c34bf..4109de4
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/EximUtil.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/EximUtil.java
@@@ -140,15 -141,15 +141,16 @@@ public class EximUtil
* Initialize the URI where the exported data collection is
* to created for export, or is present for import
*/
- static URI getValidatedURI(HiveConf conf, String dcPath) throws SemanticException {
+ public static URI getValidatedURI(HiveConf conf, String dcPath) throws SemanticException {
try {
- boolean testMode = conf.getBoolVar(HiveConf.ConfVars.HIVETESTMODE);
+ boolean testMode = conf.getBoolVar(HiveConf.ConfVars.HIVETESTMODE)
+ || conf.getBoolVar(HiveConf.ConfVars.HIVEEXIMTESTMODE);
URI uri = new Path(dcPath).toUri();
- String scheme = uri.getScheme();
+ FileSystem fs = FileSystem.get(uri, conf);
+ // Get scheme from FileSystem
+ String scheme = fs.getScheme();
String authority = uri.getAuthority();
String path = uri.getPath();
- FileSystem fs = FileSystem.get(uri, conf);
LOG.info("Path before norm :" + path);
// generate absolute path relative to home directory
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/parse/ExportSemanticAnalyzer.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/ExportSemanticAnalyzer.java
index e534272,b8c6ea9..54ee7ae
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ExportSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ExportSemanticAnalyzer.java
@@@ -18,42 -18,12 +18,46 @@@
package org.apache.hadoop.hive.ql.parse;
+
+import org.apache.hadoop.hive.ql.metadata.HiveException;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.Serializable;
+import java.net.URI;
+import java.util.HashSet;
+import java.util.List;
+
+import org.antlr.runtime.tree.Tree;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FileStatus;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hive.common.FileUtils;
+import org.apache.hadoop.hive.common.ValidReadTxnList;
+import org.apache.hadoop.hive.common.ValidTxnList;
+import org.apache.hadoop.hive.conf.HiveConf;
+import org.apache.hadoop.hive.metastore.MetaStoreUtils;
+import org.apache.hadoop.hive.ql.Context;
+import org.apache.hadoop.hive.ql.ErrorMsg;
+import org.apache.hadoop.hive.ql.QueryState;
+import org.apache.hadoop.hive.ql.exec.ReplCopyTask;
+import org.apache.hadoop.hive.ql.exec.Task;
+import org.apache.hadoop.hive.ql.exec.TaskFactory;
+import org.apache.hadoop.hive.ql.exec.Utilities;
+import org.apache.hadoop.hive.ql.hooks.ReadEntity;
+import org.apache.hadoop.hive.ql.hooks.WriteEntity;
+import org.apache.hadoop.hive.ql.metadata.Hive;
+ import org.antlr.runtime.tree.Tree;
+ import org.apache.hadoop.hive.ql.ErrorMsg;
+ import org.apache.hadoop.hive.ql.QueryState;
import org.apache.hadoop.hive.ql.metadata.InvalidTableException;
+import org.apache.hadoop.hive.ql.metadata.Partition;
+import org.apache.hadoop.hive.ql.metadata.PartitionIterable;
import org.apache.hadoop.hive.ql.metadata.Table;
+import org.apache.hadoop.hive.ql.plan.CopyWork;
+import org.slf4j.Logger;
+ import org.apache.hadoop.hive.ql.parse.repl.dump.TableExport;
/**
* ExportSemanticAnalyzer.
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezUtils.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
index 5ac15af,7f3460f..387582b
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
@@@ -62,12 -59,10 +62,12 @@@ import org.apache.hadoop.hive.ql.metada
import org.apache.hadoop.hive.ql.metadata.InvalidTableException;
import org.apache.hadoop.hive.ql.metadata.Table;
import org.apache.hadoop.hive.ql.parse.repl.load.MetaData;
+ import org.apache.hadoop.hive.ql.parse.repl.load.UpdatedMetaDataTracker;
import org.apache.hadoop.hive.ql.plan.AddPartitionDesc;
+import org.apache.hadoop.hive.ql.plan.CopyWork;
+import org.apache.hadoop.hive.ql.plan.CreateTableDesc;
import org.apache.hadoop.hive.ql.plan.ImportTableDesc;
import org.apache.hadoop.hive.ql.plan.DDLWork;
- import org.apache.hadoop.hive.ql.plan.DropTableDesc;
import org.apache.hadoop.hive.ql.plan.LoadTableDesc;
import org.apache.hadoop.hive.ql.plan.MoveWork;
import org.apache.hadoop.hive.ql.session.SessionState;
@@@ -223,9 -228,8 +234,9 @@@ public class ImportSemanticAnalyzer ext
} catch (Exception e) {
throw new HiveException(e);
}
+ boolean isSourceMm = MetaStoreUtils.isInsertOnlyTable(tblDesc.getTblProps());
- if ((replicationSpec!= null) && replicationSpec.isInReplicationScope()){
+ if ((replicationSpec != null) && replicationSpec.isInReplicationScope()){
tblDesc.setReplicationSpec(replicationSpec);
}
@@@ -318,8 -306,8 +324,8 @@@
} else {
createReplImportTasks(
tblDesc, partitionDescs,
- isPartSpecSet, replicationSpec, waitOnPrecursor, table,
- fromURI, fs, wh, x, txnId, stmtId, isSourceMm);
+ replicationSpec, waitOnPrecursor, table,
- fromURI, fs, wh, x, updatedMetadata);
++ fromURI, fs, wh, x, txnId, stmtId, isSourceMm, updatedMetadata);
}
return tableExists;
}
@@@ -800,8 -734,8 +799,8 @@@
// ensure if destination is not empty only for regular import
Path tgtPath = new Path(table.getDataLocation().toString());
FileSystem tgtFs = FileSystem.get(tgtPath.toUri(), x.getConf());
- checkTargetLocationEmpty(tgtFs, tgtPath, replicationSpec, x);
+ checkTargetLocationEmpty(tgtFs, tgtPath, replicationSpec, x.getLOG());
- loadTable(fromURI, table, false, tgtPath, replicationSpec,x);
+ loadTable(fromURI, table, false, tgtPath, replicationSpec, x, txnId, stmtId, isSourceMm);
}
// Set this to read because we can't overwrite any existing partitions
x.getOutputs().add(new WriteEntity(table, WriteEntity.WriteType.DDL_NO_LOCK));
@@@ -838,14 -769,8 +837,14 @@@
tablePath = wh.getDefaultTablePath(parentDb, tblDesc.getTableName());
}
FileSystem tgtFs = FileSystem.get(tablePath.toUri(), x.getConf());
- checkTargetLocationEmpty(tgtFs, tablePath, replicationSpec,x);
+ checkTargetLocationEmpty(tgtFs, tablePath, replicationSpec,x.getLOG());
- t.addDependentTask(loadTable(fromURI, table, false, tablePath, replicationSpec, x));
+ if (isSourceMm) { // since target table doesn't exist, it should inherit soruce table's properties
+ Map<String, String> tblproperties = table.getParameters();
+ tblproperties.put("transactional", "true");
+ tblproperties.put("transactional_properties", "insert_only");
+ table.setParameters(tblproperties);
+ }
+ t.addDependentTask(loadTable(fromURI, table, false, tablePath, replicationSpec, x, txnId, stmtId, isSourceMm));
}
}
x.getTasks().add(t);
@@@ -866,29 -783,14 +865,15 @@@
private static void createReplImportTasks(
ImportTableDesc tblDesc,
List<AddPartitionDesc> partitionDescs,
- boolean isPartSpecSet, ReplicationSpec replicationSpec, boolean waitOnPrecursor,
+ ReplicationSpec replicationSpec, boolean waitOnPrecursor,
Table table, URI fromURI, FileSystem fs, Warehouse wh,
- EximUtil.SemanticAnalyzerWrapperContext x, Long txnId, int stmtId, boolean isSourceMm)
- EximUtil.SemanticAnalyzerWrapperContext x,
++ EximUtil.SemanticAnalyzerWrapperContext x, Long txnId, int stmtId, boolean isSourceMm,
+ UpdatedMetaDataTracker updatedMetadata)
throws HiveException, URISyntaxException, IOException, MetaException {
+ Task<?> dr = null;
WriteEntity.WriteType lockType = WriteEntity.WriteType.DDL_NO_LOCK;
- if ((table != null) && (isPartitioned(tblDesc) != table.isPartitioned())){
- // If destination table exists, but is partitioned, and we think we're writing to an unpartitioned
- // or if destination table exists, but is unpartitioned and we think we're writing to a partitioned
- // table, then this can only happen because there are drops in the queue that are yet to be processed.
- // So, we check the repl.last.id of the destination, and if it's newer, we no-op. If it's older, we
- // drop and re-create.
- if (replicationSpec.allowReplacementInto(table)){
- dr = dropTableTask(table, x);
- lockType = WriteEntity.WriteType.DDL_EXCLUSIVE;
- table = null; // null it out so we go into the table re-create flow.
- } else {
- return; // noop out of here.
- }
- }
-
// Normally, on import, trying to create a table or a partition in a db that does not yet exist
// is a error condition. However, in the case of a REPL LOAD, it is possible that we are trying
// to create tasks to create a table inside a db that as-of-now does not exist, but there is
@@@ -942,21 -863,18 +949,18 @@@
for (AddPartitionDesc addPartitionDesc : partitionDescs) {
addPartitionDesc.setReplicationSpec(replicationSpec);
t.addDependentTask(
- addSinglePartition(fromURI, fs, tblDesc, table, wh, addPartitionDesc, replicationSpec, x));
+ addSinglePartition(fromURI, fs, tblDesc, table, wh, addPartitionDesc, replicationSpec, x, txnId, stmtId, isSourceMm, ict));
+ if (updatedMetadata != null) {
+ updatedMetadata.addPartition(addPartitionDesc.getPartition(0).getPartSpec());
+ }
}
} else {
x.getLOG().debug("adding dependent CopyWork/MoveWork for table");
- t.addDependentTask(loadTable(fromURI, table, true, new Path(tblDesc.getLocation()),replicationSpec, x));
+ t.addDependentTask(loadTable(fromURI, table, true, new Path(tblDesc.getLocation()), replicationSpec, x, txnId, stmtId, isSourceMm));
}
}
- if (dr == null){
- // Simply create
- x.getTasks().add(t);
- } else {
- // Drop and recreate
- dr.addDependentTask(t);
- x.getTasks().add(dr);
- }
+ // Simply create
+ x.getTasks().add(t);
} else {
// Table existed, and is okay to replicate into, not dropping and re-creating.
if (table.isPartitioned()) {
@@@ -971,15 -887,18 +975,18 @@@
if ((ptn = x.getHive().getPartition(table, partSpec, false)) == null) {
if (!replicationSpec.isMetadataOnly()){
x.getTasks().add(addSinglePartition(
- fromURI, fs, tblDesc, table, wh, addPartitionDesc, replicationSpec, x));
+ fromURI, fs, tblDesc, table, wh, addPartitionDesc, replicationSpec, x, txnId, stmtId, isSourceMm, ict));
+ if (updatedMetadata != null) {
+ updatedMetadata.addPartition(addPartitionDesc.getPartition(0).getPartSpec());
+ }
}
} else {
// If replicating, then the partition already existing means we need to replace, maybe, if
// the destination ptn's repl.last.id is older than the replacement's.
- if (replicationSpec.allowReplacementInto(ptn)){
+ if (replicationSpec.allowReplacementInto(ptn.getParameters())){
if (!replicationSpec.isMetadataOnly()){
x.getTasks().add(addSinglePartition(
- fromURI, fs, tblDesc, table, wh, addPartitionDesc, replicationSpec, x));
+ fromURI, fs, tblDesc, table, wh, addPartitionDesc, replicationSpec, x, txnId, stmtId, isSourceMm, ict));
} else {
x.getTasks().add(alterSinglePartition(
fromURI, fs, tblDesc, table, wh, addPartitionDesc, replicationSpec, ptn, x));
@@@ -1002,13 -921,9 +1009,10 @@@
}
} else {
x.getLOG().debug("table non-partitioned");
- if (!replicationSpec.allowReplacementInto(table)){
- return; // silently return, table is newer than our replacement.
- }
if (!replicationSpec.isMetadataOnly()) {
// repl-imports are replace-into unless the event is insert-into
- loadTable(fromURI, table, replicationSpec.isReplace(), new Path(fromURI), replicationSpec, x);
+ loadTable(fromURI, table, replicationSpec.isReplace(), new Path(fromURI),
+ replicationSpec, x, txnId, stmtId, isSourceMm);
} else {
x.getTasks().add(alterTableTask(tblDesc, x, replicationSpec));
}
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java
index 9b39cd0,fa79700..5e70863
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java
@@@ -227,6 -228,9 +229,9 @@@ public class LoadSemanticAnalyzer exten
+ " and use 'insert... select' to allow Hive to enforce bucketing. " + error);
}
- if(AcidUtils.isAcidTable(ts.tableHandle)) {
++ if(AcidUtils.isAcidTable(ts.tableHandle) && !MetaStoreUtils.isInsertOnlyTable(ts.tableHandle.getParameters())) {
+ throw new SemanticException(ErrorMsg.LOAD_DATA_ON_ACID_TABLE, ts.tableHandle.getCompleteName());
+ }
// make sure the arguments make sense
List<FileStatus> files = applyConstraintsAndGetFiles(fromURI, fromTree, isLocal);
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/parse/ParseContext.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
index 19882eb,6f379da..ab3cbe1
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
@@@ -6851,17 -6896,13 +6855,21 @@@ public class SemanticAnalyzer extends B
AcidUtils.Operation acidOp = AcidUtils.Operation.NOT_ACID;
if (destTableIsAcid) {
acidOp = getAcidType(table_desc.getOutputFileFormatClass(), dest);
- checkAcidConstraints(qb, table_desc, dest_tab, acidOp);
+ checkAcidConstraints(qb, table_desc, dest_tab);
}
- ltd = new LoadTableDesc(queryTmpdir, table_desc, dpCtx, acidOp);
+ if (MetaStoreUtils.isInsertOnlyTable(table_desc.getProperties())) {
+ acidOp = getAcidType(table_desc.getOutputFileFormatClass(), dest);
+ }
+ if (isMmTable) {
+ txnId = SessionState.get().getTxnMgr().getCurrentTxnId();
+ }
+ boolean isReplace = !qb.getParseInfo().isInsertIntoTable(
+ dest_tab.getDbName(), dest_tab.getTableName());
+ ltd = new LoadTableDesc(queryTmpdir, table_desc, dpCtx, acidOp, isReplace, txnId);
+ // For Acid table, Insert Overwrite shouldn't replace the table content. We keep the old
+ // deltas and base and leave them up to the cleaner to clean up
+ ltd.setReplace(!qb.getParseInfo().isInsertIntoTable(dest_tab.getDbName(),
+ dest_tab.getTableName()) && !destTableIsAcid);
ltd.setLbCtx(lbCtx);
loadTableWork.add(ltd);
} else {
@@@ -6915,17 -7011,13 +6923,19 @@@
AcidUtils.Operation acidOp = AcidUtils.Operation.NOT_ACID;
if (destTableIsAcid) {
acidOp = getAcidType(table_desc.getOutputFileFormatClass(), dest);
- checkAcidConstraints(qb, table_desc, dest_tab, acidOp);
+ checkAcidConstraints(qb, table_desc, dest_tab);
}
- ltd = new LoadTableDesc(queryTmpdir, table_desc, dest_part.getSpec(), acidOp);
+ if (MetaStoreUtils.isInsertOnlyTable(dest_part.getTable().getParameters())) {
+ acidOp = getAcidType(table_desc.getOutputFileFormatClass(), dest);
+ }
+ if (isMmTable) {
+ txnId = SessionState.get().getTxnMgr().getCurrentTxnId();
+ }
+ ltd = new LoadTableDesc(queryTmpdir, table_desc, dest_part.getSpec(), acidOp, txnId);
+ // For Acid table, Insert Overwrite shouldn't replace the table content. We keep the old
+ // deltas and base and leave them up to the cleaner to clean up
ltd.setReplace(!qb.getParseInfo().isInsertIntoTable(dest_tab.getDbName(),
- dest_tab.getTableName()));
+ dest_tab.getTableName()) && !destTableIsAcid);
ltd.setLbCtx(lbCtx);
loadTableWork.add(ltd);
@@@ -7091,122 -7226,18 +7101,122 @@@
genPartnCols(dest, input, qb, table_desc, dest_tab, rsCtx);
}
- FileSinkDesc fileSinkDesc = new FileSinkDesc(
- queryTmpdir,
- table_desc,
- conf.getBoolVar(HiveConf.ConfVars.COMPRESSRESULT),
- currentTableId,
- rsCtx.isMultiFileSpray(),
- canBeMerged,
- rsCtx.getNumFiles(),
- rsCtx.getTotalFiles(),
- rsCtx.getPartnCols(),
- dpCtx,
- dest_path);
+ FileSinkDesc fileSinkDesc = createFileSinkDesc(dest, table_desc, dest_part,
+ dest_path, currentTableId, destTableIsAcid, destTableIsTemporary,
+ destTableIsMaterialization, queryTmpdir, rsCtx, dpCtx, lbCtx, fsRS,
- canBeMerged, txnId, isMmCtas);
++ canBeMerged, dest_tab, txnId, isMmCtas);
+ if (isMmCtas) {
+ // Add FSD so that the LoadTask compilation could fix up its path to avoid the move.
+ tableDesc.setWriter(fileSinkDesc);
+ }
+
+ if (SessionState.get().isHiveServerQuery() &&
+ null != table_desc &&
+ table_desc.getSerdeClassName().equalsIgnoreCase(ThriftJDBCBinarySerDe.class.getName()) &&
+ HiveConf.getBoolVar(conf,HiveConf.ConfVars.HIVE_SERVER2_THRIFT_RESULTSET_SERIALIZE_IN_TASKS)) {
+ fileSinkDesc.setIsUsingThriftJDBCBinarySerDe(true);
+ } else {
+ fileSinkDesc.setIsUsingThriftJDBCBinarySerDe(false);
+ }
+
+ Operator output = putOpInsertMap(OperatorFactory.getAndMakeChild(
+ fileSinkDesc, fsRS, input), inputRR);
+
+ handleLineage(ltd, output);
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Created FileSink Plan for clause: " + dest + "dest_path: "
+ + dest_path + " row schema: " + inputRR.toString());
+ }
+
+ FileSinkOperator fso = (FileSinkOperator) output;
+ fso.getConf().setTable(dest_tab);
+ // the following code is used to collect column stats when
+ // hive.stats.autogather=true
+ // and it is an insert overwrite or insert into table
+ if (dest_tab != null && conf.getBoolVar(ConfVars.HIVESTATSAUTOGATHER)
+ && conf.getBoolVar(ConfVars.HIVESTATSCOLAUTOGATHER)
+ && ColumnStatsAutoGatherContext.canRunAutogatherStats(fso)) {
+ if (dest_type.intValue() == QBMetaData.DEST_TABLE) {
+ genAutoColumnStatsGatheringPipeline(qb, table_desc, partSpec, input, qb.getParseInfo()
+ .isInsertIntoTable(dest_tab.getDbName(), dest_tab.getTableName()));
+ } else if (dest_type.intValue() == QBMetaData.DEST_PARTITION) {
+ genAutoColumnStatsGatheringPipeline(qb, table_desc, dest_part.getSpec(), input, qb
+ .getParseInfo().isInsertIntoTable(dest_tab.getDbName(), dest_tab.getTableName()));
+
+ }
+ }
+ return output;
+ }
+
+ private ColsAndTypes deriveFileSinkColTypes(
+ RowResolver inputRR, List<FieldSchema> field_schemas) throws SemanticException {
+ ColsAndTypes result = new ColsAndTypes("", "");
+ ArrayList<ColumnInfo> colInfos = inputRR.getColumnInfos();
+ boolean first = true;
+ for (ColumnInfo colInfo : colInfos) {
+ String[] nm = inputRR.reverseLookup(colInfo.getInternalName());
+
+ if (nm[1] != null) { // non-null column alias
+ colInfo.setAlias(nm[1]);
+ }
+
+ String colName = colInfo.getInternalName(); //default column name
+ if (field_schemas != null) {
+ FieldSchema col = new FieldSchema();
+ if (!("".equals(nm[0])) && nm[1] != null) {
+ colName = unescapeIdentifier(colInfo.getAlias()).toLowerCase(); // remove ``
+ }
+ colName = fixCtasColumnName(colName);
+ col.setName(colName);
+ String typeName = colInfo.getType().getTypeName();
+ // CTAS should NOT create a VOID type
+ if (typeName.equals(serdeConstants.VOID_TYPE_NAME)) {
+ throw new SemanticException(ErrorMsg.CTAS_CREATES_VOID_TYPE.getMsg(colName));
+ }
+ col.setType(typeName);
+ field_schemas.add(col);
+ }
+
+ if (!first) {
+ result.cols = result.cols.concat(",");
+ result.colTypes = result.colTypes.concat(":");
+ }
+
+ first = false;
+ result.cols = result.cols.concat(colName);
+
+ // Replace VOID type with string when the output is a temp table or
+ // local files.
+ // A VOID type can be generated under the query:
+ //
+ // select NULL from tt;
+ // or
+ // insert overwrite local directory "abc" select NULL from tt;
+ //
+ // where there is no column type to which the NULL value should be
+ // converted.
+ //
+ String tName = colInfo.getType().getTypeName();
+ if (tName.equals(serdeConstants.VOID_TYPE_NAME)) {
+ result.colTypes = result.colTypes.concat(serdeConstants.STRING_TYPE_NAME);
+ } else {
+ result.colTypes = result.colTypes.concat(tName);
+ }
+ }
+ return result;
+ }
+
+ private FileSinkDesc createFileSinkDesc(String dest, TableDesc table_desc,
+ Partition dest_part, Path dest_path, int currentTableId,
+ boolean destTableIsAcid, boolean destTableIsTemporary,
+ boolean destTableIsMaterialization, Path queryTmpdir,
+ SortBucketRSCtx rsCtx, DynamicPartitionCtx dpCtx, ListBucketingCtx lbCtx,
- RowSchema fsRS, boolean canBeMerged, Long mmWriteId, boolean isMmCtas) throws SemanticException {
++ RowSchema fsRS, boolean canBeMerged, Table dest_tab, Long mmWriteId, boolean isMmCtas) throws SemanticException {
+ FileSinkDesc fileSinkDesc = new FileSinkDesc(queryTmpdir, table_desc,
+ conf.getBoolVar(HiveConf.ConfVars.COMPRESSRESULT), currentTableId, rsCtx.isMultiFileSpray(),
+ canBeMerged, rsCtx.getNumFiles(), rsCtx.getTotalFiles(), rsCtx.getPartnCols(), dpCtx,
+ dest_path, mmWriteId, isMmCtas);
boolean isHiveServerQuery = SessionState.get().isHiveServerQuery();
fileSinkDesc.setHiveServerQuery(isHiveServerQuery);
@@@ -7448,14 -7395,12 +7456,9 @@@
*/
conf.set(AcidUtils.CONF_ACID_KEY, "true");
- if (!Operation.NOT_ACID.equals(acidOp)) {
- if (table.getNumBuckets() < 1) {
- throw new SemanticException(ErrorMsg.ACID_OP_ON_NONACID_TABLE, table.getTableName());
- }
- if (table.getSortCols() != null && table.getSortCols().size() > 0) {
- throw new SemanticException(ErrorMsg.ACID_NO_SORTED_BUCKETS, table.getTableName());
- }
+ if (table.getSortCols() != null && table.getSortCols().size() > 0) {
+ throw new SemanticException(ErrorMsg.ACID_NO_SORTED_BUCKETS, table.getTableName());
}
-
-
-
}
/**
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/parse/spark/GenSparkUtils.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/spark/GenSparkUtils.java
index d0a82af,4f8ba6f..ffc2daf
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/spark/GenSparkUtils.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/spark/GenSparkUtils.java
@@@ -355,6 -396,52 +396,52 @@@ public class GenSparkUtils
}
/**
+ * Create and add any dependent move tasks.
+ *
+ * This is forked from {@link GenMapRedUtils}. The difference is that it doesn't check
+ * 'isLinkedFileSink' and does not set parent dir for the linked file sinks.
+ */
+ public static Path createMoveTask(Task<? extends Serializable> currTask, boolean chDir,
+ FileSinkOperator fsOp, ParseContext parseCtx, List<Task<MoveWork>> mvTasks,
+ HiveConf hconf, DependencyCollectionTask dependencyTask) {
+
+ Path dest = null;
++ FileSinkDesc fileSinkDesc = fsOp.getConf();
+
+ if (chDir) {
+ dest = fsOp.getConf().getFinalDirName();
+
+ // generate the temporary file
+ // it must be on the same file system as the current destination
+ Context baseCtx = parseCtx.getContext();
+
+ Path tmpDir = baseCtx.getExternalTmpPath(dest);
+
- FileSinkDesc fileSinkDesc = fsOp.getConf();
+ // Change all the linked file sink descriptors
+ if (fileSinkDesc.getLinkedFileSinkDesc() != null) {
+ for (FileSinkDesc fsConf : fileSinkDesc.getLinkedFileSinkDesc()) {
+ fsConf.setDirName(tmpDir);
+ }
+ } else {
+ fileSinkDesc.setDirName(tmpDir);
+ }
+ }
+
+ Task<MoveWork> mvTask = null;
+
+ if (!chDir) {
- mvTask = GenMapRedUtils.findMoveTask(mvTasks, fsOp);
++ mvTask = GenMapRedUtils.findMoveTaskForFsopOutput(mvTasks, fileSinkDesc.getFinalDirName(), false);
+ }
+
+ // Set the move task to be dependent on the current task
+ if (mvTask != null) {
+ GenMapRedUtils.addDependentMoveTasks(mvTask, hconf, currTask, dependencyTask);
+ }
+
+ return dest;
+ }
+
+ /**
* Populate partition pruning information from the pruning sink operator to the
* target MapWork (the MapWork for the big table side). The information include the source table
* name, column name, and partition key expression. It also set up the temporary path used to
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/parse/spark/SparkProcessAnalyzeTable.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/plan/ConditionalResolverMergeFiles.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/plan/FileSinkDesc.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/plan/FileSinkDesc.java
index 955e0e5,a3df166..4732f0a
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/FileSinkDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/FileSinkDesc.java
@@@ -20,9 -20,9 +20,10 @@@ package org.apache.hadoop.hive.ql.plan
import java.util.ArrayList;
import java.util.List;
+ import java.util.Objects;
import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hive.metastore.MetaStoreUtils;
import org.apache.hadoop.hive.ql.io.AcidUtils;
import org.apache.hadoop.hive.ql.metadata.Table;
import org.apache.hadoop.hive.ql.plan.Explain.Level;
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/plan/MapWork.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/plan/TableScanDesc.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/CompactorMR.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java
----------------------------------------------------------------------
diff --cc ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java
index 3600a6b,0f129fc..5a8ac31
--- a/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java
@@@ -487,79 -439,7 +439,6 @@@ public class TestTxnCommands extends Te
}
}
- /**
- * takes raw data and turns it into a string as if from Driver.getResults()
- * sorts rows in dictionary order
- */
- private List<String> stringifyValues(int[][] rowsIn) {
- assert rowsIn.length > 0;
- int[][] rows = rowsIn.clone();
- Arrays.sort(rows, new RowComp());
- List<String> rs = new ArrayList<String>();
- for(int[] row : rows) {
- assert row.length > 0;
- StringBuilder sb = new StringBuilder();
- for(int value : row) {
- sb.append(value).append("\t");
- }
- sb.setLength(sb.length() - 1);
- rs.add(sb.toString());
- }
- return rs;
- }
- private static final class RowComp implements Comparator<int[]> {
- @Override
- public int compare(int[] row1, int[] row2) {
- assert row1 != null && row2 != null && row1.length == row2.length;
- for(int i = 0; i < row1.length; i++) {
- int comp = Integer.compare(row1[i], row2[i]);
- if(comp != 0) {
- return comp;
- }
- }
- return 0;
- }
- }
- private String makeValuesClause(int[][] rows) {
- assert rows.length > 0;
- StringBuilder sb = new StringBuilder("values");
- for(int[] row : rows) {
- assert row.length > 0;
- if(row.length > 1) {
- sb.append("(");
- }
- for(int value : row) {
- sb.append(value).append(",");
- }
- sb.setLength(sb.length() - 1);//remove trailing comma
- if(row.length > 1) {
- sb.append(")");
- }
- sb.append(",");
- }
- sb.setLength(sb.length() - 1);//remove trailing comma
- return sb.toString();
- }
-
- private List<String> runStatementOnDriver(String stmt) throws Exception {
- LOG.info("Running " + stmt);
- CommandProcessorResponse cpr = d.run(stmt);
- if(cpr.getResponseCode() != 0) {
- throw new RuntimeException(stmt + " failed: " + cpr);
- }
- List<String> rs = new ArrayList<String>();
- d.getResults(rs);
- return rs;
- }
- private CommandProcessorResponse runStatementOnDriverNegative(String stmt) throws Exception {
- CommandProcessorResponse cpr = d.run(stmt);
- if(cpr.getResponseCode() != 0) {
- return cpr;
- }
- throw new RuntimeException("Didn't get expected failure!");
- }
--
- // @Ignore
@Test
public void exchangePartition() throws Exception {
runStatementOnDriver("create database ex1");
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands2.java
----------------------------------------------------------------------
diff --cc ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands2.java
index 7a73a17,21b4a2c..bd6e6a0
--- a/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands2.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands2.java
@@@ -85,16 -84,16 +84,17 @@@ public class TestTxnCommands2
protected HiveConf hiveConf;
protected Driver d;
- protected static enum Table {
+ protected enum Table {
ACIDTBL("acidTbl"),
- ACIDTBLPART("acidTblPart"),
+ ACIDTBLPART("acidTblPart", "p"),
NONACIDORCTBL("nonAcidOrcTbl"),
- NONACIDPART("nonAcidPart"),
- NONACIDPART2("nonAcidPart2"),
- ACIDNESTEDPART("acidNestedPart"),
+ NONACIDPART("nonAcidPart", "p"),
+ NONACIDPART2("nonAcidPart2", "p2"),
- ACIDNESTEDPART("acidNestedPart", "p,q");
++ ACIDNESTEDPART("acidNestedPart", "p,q"),
+ MMTBL("mmTbl");
private final String name;
+ private final String partitionColumns;
@Override
public String toString() {
return name;
@@@ -738,14 -841,13 +843,13 @@@
// There should be only 1 directory left: base_0000001.
// Original bucket files, delta directories and previous base directory should have been cleaned up.
status = fs.listStatus(new Path(TEST_WAREHOUSE_DIR + "/" +
- (Table.NONACIDORCTBL).toString().toLowerCase()), FileUtils.STAGING_DIR_PATH_FILTER);
+ (Table.NONACIDORCTBL).toString().toLowerCase()), FileUtils.STAGING_DIR_PATH_FILTER);
Assert.assertEquals(1, status.length);
- Assert.assertEquals("base_0000023", status[0].getPath().getName());
+ Assert.assertEquals("base_0000025", status[0].getPath().getName());
FileStatus[] buckets = fs.listStatus(status[0].getPath(), FileUtils.STAGING_DIR_PATH_FILTER);
Arrays.sort(buckets);
- Assert.assertEquals(BUCKET_COUNT, buckets.length);
- Assert.assertEquals("bucket_00000", buckets[0].getPath().getName());
- Assert.assertEquals("bucket_00001", buckets[1].getPath().getName());
+ Assert.assertEquals(1, buckets.length);
+ Assert.assertEquals("bucket_00001", buckets[0].getPath().getName());
rs = runStatementOnDriver("select a,b from " + Table.NONACIDORCTBL);
resultData = new int[][] {{1, 3}, {3, 4}};
Assert.assertEquals(stringifyValues(resultData), rs);
@@@ -1643,65 -1755,241 +1757,299 @@@
Assert.assertEquals(stringifyValues(rExpected), r);
}
+ @Test
+ public void testBucketCodec() throws Exception {
+ d.destroy();
+ //insert data in "legacy" format
+ hiveConf.setIntVar(HiveConf.ConfVars.TESTMODE_BUCKET_CODEC_VERSION, 0);
+ d = new Driver(hiveConf);
+
+ int[][] targetVals = {{2,1},{4,3},{5,6},{7,8}};
+ runStatementOnDriver("insert into " + Table.ACIDTBL + " " + makeValuesClause(targetVals));
+
+ d.destroy();
+ hiveConf.setIntVar(HiveConf.ConfVars.TESTMODE_BUCKET_CODEC_VERSION, 1);
+ d = new Driver(hiveConf);
+ //do some operations with new format
+ runStatementOnDriver("update " + Table.ACIDTBL + " set b=11 where a in (5,7)");
+ runStatementOnDriver("insert into " + Table.ACIDTBL + " values(11,11)");
+ runStatementOnDriver("delete from " + Table.ACIDTBL + " where a = 7");
+
+ //make sure we get the right data back before/after compactions
+ List<String> r = runStatementOnDriver("select a,b from " + Table.ACIDTBL + " order by a,b");
+ int[][] rExpected = {{2,1},{4,3},{5,11},{11,11}};
+ Assert.assertEquals(stringifyValues(rExpected), r);
+
+ runStatementOnDriver("ALTER TABLE " + Table.ACIDTBL + " COMPACT 'MINOR'");
+ runWorker(hiveConf);
+
+ r = runStatementOnDriver("select a,b from " + Table.ACIDTBL + " order by a,b");
+ Assert.assertEquals(stringifyValues(rExpected), r);
+
+ runStatementOnDriver("ALTER TABLE " + Table.ACIDTBL + " COMPACT 'MAJOR'");
+ runWorker(hiveConf);
+
+ r = runStatementOnDriver("select a,b from " + Table.ACIDTBL + " order by a,b");
+ Assert.assertEquals(stringifyValues(rExpected), r);
+ }
+ /**
+ * Test the scenario when IOW comes in before a MAJOR compaction happens
+ * @throws Exception
+ */
+ @Test
+ public void testInsertOverwrite1() throws Exception {
+ FileSystem fs = FileSystem.get(hiveConf);
+ FileStatus[] status;
+
+ // 1. Insert two rows to an ACID table
+ runStatementOnDriver("insert into " + Table.ACIDTBL + "(a,b) values(1,2)");
+ runStatementOnDriver("insert into " + Table.ACIDTBL + "(a,b) values(3,4)");
+ status = fs.listStatus(new Path(TEST_WAREHOUSE_DIR + "/" +
+ (Table.ACIDTBL).toString().toLowerCase()), FileUtils.STAGING_DIR_PATH_FILTER);
+ // There should be 2 delta dirs in the location
+ Assert.assertEquals(2, status.length);
+ for (int i = 0; i < status.length; i++) {
+ Assert.assertTrue(status[i].getPath().getName().matches("delta_.*"));
+ }
+
+ // 2. INSERT OVERWRITE
+ // Prepare data for the source table
+ runStatementOnDriver("insert into " + Table.NONACIDORCTBL + "(a,b) values(5,6),(7,8)");
+ // Insert overwrite ACID table from source table
+ runStatementOnDriver("insert overwrite table " + Table.ACIDTBL + " select a,b from " + Table.NONACIDORCTBL);
+ status = fs.listStatus(new Path(TEST_WAREHOUSE_DIR + "/" +
+ (Table.ACIDTBL).toString().toLowerCase()), FileUtils.STAGING_DIR_PATH_FILTER);
+ // There should be 2 delta dirs, plus a base dir in the location
+ Assert.assertEquals(3, status.length);
+ boolean sawBase = false;
+ String baseDir = "";
+ int deltaCount = 0;
+ for (int i = 0; i < status.length; i++) {
+ String dirName = status[i].getPath().getName();
+ if (dirName.matches("delta_.*")) {
+ deltaCount++;
+ } else {
+ sawBase = true;
+ baseDir = dirName;
+ Assert.assertTrue(baseDir.matches("base_.*"));
+ }
+ }
+ Assert.assertEquals(2, deltaCount);
+ Assert.assertTrue(sawBase);
+ // Verify query result
+ List<String> rs = runStatementOnDriver("select a,b from " + Table.ACIDTBL + " order by a");
+ int [][] resultData = new int[][] {{5,6},{7,8}};
+ Assert.assertEquals(stringifyValues(resultData), rs);
+
+ // 3. Perform a major compaction. Nothing should change. Both deltas and base dirs should have the same name.
+ // Re-verify directory layout and query result by using the same logic as above
+ runStatementOnDriver("alter table "+ Table.ACIDTBL + " compact 'MAJOR'");
+ runWorker(hiveConf);
+ status = fs.listStatus(new Path(TEST_WAREHOUSE_DIR + "/" +
+ (Table.ACIDTBL).toString().toLowerCase()), FileUtils.STAGING_DIR_PATH_FILTER);
+ // There should be 2 delta dirs, plus a base dir in the location
+ Assert.assertEquals(3, status.length);
+ sawBase = false;
+ deltaCount = 0;
+ for (int i = 0; i < status.length; i++) {
+ String dirName = status[i].getPath().getName();
+ if (dirName.matches("delta_.*")) {
+ deltaCount++;
+ } else {
+ sawBase = true;
+ Assert.assertTrue(dirName.matches("base_.*"));
+ Assert.assertEquals(baseDir, dirName);
+ }
+ }
+ Assert.assertEquals(2, deltaCount);
+ Assert.assertTrue(sawBase);
+ // Verify query result
+ rs = runStatementOnDriver("select a,b from " + Table.ACIDTBL + " order by a");
+ Assert.assertEquals(stringifyValues(resultData), rs);
+
+ // 4. Run Cleaner. It should remove the 2 delta dirs.
+ runCleaner(hiveConf);
+ // There should be only 1 directory left: base_xxxxxxx.
+ // The delta dirs should have been cleaned up.
+ status = fs.listStatus(new Path(TEST_WAREHOUSE_DIR + "/" +
+ (Table.ACIDTBL).toString().toLowerCase()), FileUtils.STAGING_DIR_PATH_FILTER);
+ Assert.assertEquals(1, status.length);
+ Assert.assertTrue(status[0].getPath().getName().matches("base_.*"));
+ Assert.assertEquals(baseDir, status[0].getPath().getName());
+ // Verify query result
+ rs = runStatementOnDriver("select a,b from " + Table.ACIDTBL + " order by a");
+ Assert.assertEquals(stringifyValues(resultData), rs);
+ }
+
+ /**
+ * Test the scenario when IOW comes in after a MAJOR compaction happens
+ * @throws Exception
+ */
+ @Test
+ public void testInsertOverwrite2() throws Exception {
+ FileSystem fs = FileSystem.get(hiveConf);
+ FileStatus[] status;
+
+ // 1. Insert two rows to an ACID table
+ runStatementOnDriver("insert into " + Table.ACIDTBL + "(a,b) values(1,2)");
+ runStatementOnDriver("insert into " + Table.ACIDTBL + "(a,b) values(3,4)");
+ status = fs.listStatus(new Path(TEST_WAREHOUSE_DIR + "/" +
+ (Table.ACIDTBL).toString().toLowerCase()), FileUtils.STAGING_DIR_PATH_FILTER);
+ // There should be 2 delta dirs in the location
+ Assert.assertEquals(2, status.length);
+ for (int i = 0; i < status.length; i++) {
+ Assert.assertTrue(status[i].getPath().getName().matches("delta_.*"));
+ }
+
+ // 2. Perform a major compaction. There should be an extra base dir now.
+ runStatementOnDriver("alter table "+ Table.ACIDTBL + " compact 'MAJOR'");
+ runWorker(hiveConf);
+ status = fs.listStatus(new Path(TEST_WAREHOUSE_DIR + "/" +
+ (Table.ACIDTBL).toString().toLowerCase()), FileUtils.STAGING_DIR_PATH_FILTER);
+ // There should be 2 delta dirs, plus a base dir in the location
+ Assert.assertEquals(3, status.length);
+ boolean sawBase = false;
+ int deltaCount = 0;
+ for (int i = 0; i < status.length; i++) {
+ String dirName = status[i].getPath().getName();
+ if (dirName.matches("delta_.*")) {
+ deltaCount++;
+ } else {
+ sawBase = true;
+ Assert.assertTrue(dirName.matches("base_.*"));
+ }
+ }
+ Assert.assertEquals(2, deltaCount);
+ Assert.assertTrue(sawBase);
+ // Verify query result
+ int [][] resultData = new int[][] {{1,2},{3,4}};
+ List<String> rs = runStatementOnDriver("select a,b from " + Table.ACIDTBL + " order by a");
+ Assert.assertEquals(stringifyValues(resultData), rs);
+
+ // 3. INSERT OVERWRITE
+ // Prepare data for the source table
+ runStatementOnDriver("insert into " + Table.NONACIDORCTBL + "(a,b) values(5,6),(7,8)");
+ // Insert overwrite ACID table from source table
+ runStatementOnDriver("insert overwrite table " + Table.ACIDTBL + " select a,b from " + Table.NONACIDORCTBL);
+ status = fs.listStatus(new Path(TEST_WAREHOUSE_DIR + "/" +
+ (Table.ACIDTBL).toString().toLowerCase()), FileUtils.STAGING_DIR_PATH_FILTER);
+ // There should be 2 delta dirs, plus 2 base dirs in the location
+ Assert.assertEquals(4, status.length);
+ int baseCount = 0;
+ deltaCount = 0;
+ for (int i = 0; i < status.length; i++) {
+ String dirName = status[i].getPath().getName();
+ if (dirName.matches("delta_.*")) {
+ deltaCount++;
+ } else {
+ baseCount++;
+ }
+ }
+ Assert.assertEquals(2, deltaCount);
+ Assert.assertEquals(2, baseCount);
+ // Verify query result
+ resultData = new int[][] {{5,6},{7,8}};
+ rs = runStatementOnDriver("select a,b from " + Table.ACIDTBL + " order by a");
+ Assert.assertEquals(stringifyValues(resultData), rs);
+
+ // 4. Perform another major compaction. Nothing should change. Both deltas and both base dirs
+ // should have the same name.
+ // Re-verify directory layout and query result by using the same logic as above
+ runStatementOnDriver("alter table "+ Table.ACIDTBL + " compact 'MAJOR'");
+ runWorker(hiveConf);
+ status = fs.listStatus(new Path(TEST_WAREHOUSE_DIR + "/" +
+ (Table.ACIDTBL).toString().toLowerCase()), FileUtils.STAGING_DIR_PATH_FILTER);
+ // There should be 2 delta dirs, plus 2 base dirs in the location
+ Assert.assertEquals(4, status.length);
+ baseCount = 0;
+ deltaCount = 0;
+ for (int i = 0; i < status.length; i++) {
+ String dirName = status[i].getPath().getName();
+ if (dirName.matches("delta_.*")) {
+ deltaCount++;
+ } else {
+ Assert.assertTrue(dirName.matches("base_.*"));
+ baseCount++;
+ }
+ }
+ Assert.assertEquals(2, deltaCount);
+ Assert.assertEquals(2, baseCount);
+ // Verify query result
+ rs = runStatementOnDriver("select a,b from " + Table.ACIDTBL + " order by a");
+ Assert.assertEquals(stringifyValues(resultData), rs);
+
+ // 5. Run Cleaner. It should remove the 2 delta dirs and 1 old base dir.
+ runCleaner(hiveConf);
+ // There should be only 1 directory left: base_xxxxxxx.
+ // The delta dirs should have been cleaned up.
+ status = fs.listStatus(new Path(TEST_WAREHOUSE_DIR + "/" +
+ (Table.ACIDTBL).toString().toLowerCase()), FileUtils.STAGING_DIR_PATH_FILTER);
+ Assert.assertEquals(1, status.length);
+ Assert.assertTrue(status[0].getPath().getName().matches("base_.*"));
+ // Verify query result
+ rs = runStatementOnDriver("select a,b from " + Table.ACIDTBL + " order by a");
+ Assert.assertEquals(stringifyValues(resultData), rs);
+ }
+
/**
+ * Test compaction for Micro-managed table
+ * 1. Regular compaction shouldn't impact any valid subdirectories of MM tables
+ * 2. Compactions will only remove subdirectories for aborted transactions of MM tables, if any
+ * @throws Exception
+ */
+ @Test
+ public void testMmTableCompaction() throws Exception {
+ // 1. Insert some rows into MM table
+ runStatementOnDriver("insert into " + Table.MMTBL + "(a,b) values(1,2)");
+ runStatementOnDriver("insert into " + Table.MMTBL + "(a,b) values(3,4)");
+ // There should be 2 delta directories
+ verifyDirAndResult(2);
+
+ // 2. Perform a MINOR compaction. Since nothing was aborted, subdirs should stay.
+ runStatementOnDriver("alter table "+ Table.MMTBL + " compact 'MINOR'");
+ runWorker(hiveConf);
+ verifyDirAndResult(2);
+
+ // 3. Let a transaction be aborted
+ hiveConf.setBoolVar(HiveConf.ConfVars.HIVETESTMODEROLLBACKTXN, true);
+ runStatementOnDriver("insert into " + Table.MMTBL + "(a,b) values(5,6)");
+ hiveConf.setBoolVar(HiveConf.ConfVars.HIVETESTMODEROLLBACKTXN, false);
+ // There should be 3 delta directories. The new one is the aborted one.
+ verifyDirAndResult(3);
+
+ // 4. Perform a MINOR compaction again. This time it will remove the subdir for aborted transaction.
+ runStatementOnDriver("alter table "+ Table.MMTBL + " compact 'MINOR'");
+ runWorker(hiveConf);
+ // The worker should remove the subdir for aborted transaction
+ verifyDirAndResult(2);
+
+ // 5. Run Cleaner. Shouldn't impact anything.
+ runCleaner(hiveConf);
+ verifyDirAndResult(2);
+ }
+
+ private void verifyDirAndResult(int expectedDeltas) throws Exception {
+ FileSystem fs = FileSystem.get(hiveConf);
+ // Verify the content of subdirs
+ FileStatus[] status = fs.listStatus(new Path(TEST_WAREHOUSE_DIR + "/" +
+ (Table.MMTBL).toString().toLowerCase()), FileUtils.STAGING_DIR_PATH_FILTER);
+ int sawDeltaTimes = 0;
+ for (int i = 0; i < status.length; i++) {
+ Assert.assertTrue(status[i].getPath().getName().matches("delta_.*"));
+ sawDeltaTimes++;
+ FileStatus[] files = fs.listStatus(status[i].getPath(), FileUtils.STAGING_DIR_PATH_FILTER);
+ Assert.assertEquals(1, files.length);
+ Assert.assertTrue(files[0].getPath().getName().equals("000000_0"));
+ }
+ Assert.assertEquals(expectedDeltas, sawDeltaTimes);
+
+ // Verify query result
+ int [][] resultData = new int[][] {{1,2}, {3,4}};
+ List<String> rs = runStatementOnDriver("select a,b from " + Table.MMTBL);
+ Assert.assertEquals(stringifyValues(resultData), rs);
+ }
+
+ /**
* takes raw data and turns it into a string as if from Driver.getResults()
* sorts rows in dictionary order
*/
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/test/org/apache/hadoop/hive/ql/io/TestAcidUtils.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestInputOutputFormat.java
----------------------------------------------------------------------
diff --cc ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestInputOutputFormat.java
index 6b19eb1,4c30732..ccd7d8e
--- a/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestInputOutputFormat.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestInputOutputFormat.java
@@@ -40,10 -46,15 +46,7 @@@ import java.util.TreeSet
import org.apache.commons.codec.binary.Base64;
import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.BlockLocation;
-import org.apache.hadoop.fs.FSDataInputStream;
--import org.apache.hadoop.fs.FSDataOutputStream;
-import org.apache.hadoop.fs.FSInputStream;
--import org.apache.hadoop.fs.FileStatus;
--import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.LocatedFileStatus;
--import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.fs.RemoteIterator;
++import org.apache.hadoop.fs.*;
import org.apache.hadoop.fs.permission.FsPermission;
import org.apache.hadoop.hive.common.ValidTxnList;
import org.apache.hadoop.hive.common.type.HiveDecimal;
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/test/org/apache/hadoop/hive/ql/optimizer/TestGenMapRedUtilsCreateConditionalTask.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/test/queries/clientpositive/mm_all.q
----------------------------------------------------------------------
diff --cc ql/src/test/queries/clientpositive/mm_all.q
index 6001e9f,0000000..e23260f
mode 100644,000000..100644
--- a/ql/src/test/queries/clientpositive/mm_all.q
+++ b/ql/src/test/queries/clientpositive/mm_all.q
@@@ -1,370 -1,0 +1,325 @@@
+set hive.mapred.mode=nonstrict;
+set hive.explain.user=false;
+set hive.fetch.task.conversion=none;
+set tez.grouping.min-size=1;
+set tez.grouping.max-size=2;
+set hive.exec.dynamic.partition.mode=nonstrict;
+set hive.support.concurrency=true;
+set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
+
+
+-- Force multiple writers when reading
+drop table intermediate;
+create table intermediate(key int) partitioned by (p int) stored as orc;
+insert into table intermediate partition(p='455') select distinct key from src where key >= 0 order by key desc limit 2;
+insert into table intermediate partition(p='456') select distinct key from src where key is not null order by key asc limit 2;
+insert into table intermediate partition(p='457') select distinct key from src where key >= 100 order by key asc limit 2;
+
+
+drop table part_mm;
+create table part_mm(key int) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only");
+explain insert into table part_mm partition(key_mm=455) select key from intermediate;
+insert into table part_mm partition(key_mm=455) select key from intermediate;
+insert into table part_mm partition(key_mm=456) select key from intermediate;
+insert into table part_mm partition(key_mm=455) select key from intermediate;
+select * from part_mm order by key, key_mm;
+
+-- TODO: doesn't work truncate table part_mm partition(key_mm=455);
+select * from part_mm order by key, key_mm;
+truncate table part_mm;
+select * from part_mm order by key, key_mm;
+drop table part_mm;
+
+drop table simple_mm;
+create table simple_mm(key int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only");
+insert into table simple_mm select key from intermediate;
+select * from simple_mm order by key;
+insert into table simple_mm select key from intermediate;
+select * from simple_mm order by key;
+truncate table simple_mm;
+select * from simple_mm;
+drop table simple_mm;
+
+
+-- simple DP (no bucketing)
+drop table dp_mm;
+
+set hive.exec.dynamic.partition.mode=nonstrict;
+
+set hive.merge.mapredfiles=false;
+set hive.merge.sparkfiles=false;
+set hive.merge.tezfiles=false;
+
+create table dp_mm (key int) partitioned by (key1 string, key2 int) stored as orc
+ tblproperties ("transactional"="true", "transactional_properties"="insert_only");
+
+insert into table dp_mm partition (key1='123', key2) select key, key from intermediate;
+
+select * from dp_mm order by key;
+
+drop table dp_mm;
+
+
+-- union
+
+create table union_mm(id int) tblproperties ("transactional"="true", "transactional_properties"="insert_only");
+insert into table union_mm
+select temps.p from (
+select key as p from intermediate
+union all
+select key + 1 as p from intermediate ) temps;
+
+select * from union_mm order by id;
+
+insert into table union_mm
+select p from
+(
+select key + 1 as p from intermediate
+union all
+select key from intermediate
+) tab group by p
+union all
+select key + 2 as p from intermediate;
+
+select * from union_mm order by id;
+
+insert into table union_mm
+SELECT p FROM
+(
+ SELECT key + 1 as p FROM intermediate
+ UNION ALL
+ SELECT key as p FROM (
+ SELECT distinct key FROM (
+ SELECT key FROM (
+ SELECT key + 2 as key FROM intermediate
+ UNION ALL
+ SELECT key FROM intermediate
+ )t1
+ group by key)t2
+ )t3
+)t4
+group by p;
+
+
+select * from union_mm order by id;
+drop table union_mm;
+
+
+create table partunion_mm(id int) partitioned by (key int) tblproperties ("transactional"="true", "transactional_properties"="insert_only");
+insert into table partunion_mm partition(key)
+select temps.* from (
+select key as p, key from intermediate
+union all
+select key + 1 as p, key + 1 from intermediate ) temps;
+
+select * from partunion_mm order by id;
+drop table partunion_mm;
+
+
+
+create table skew_mm(k1 int, k2 int, k4 int) skewed by (k1, k4) on ((0,0),(1,1),(2,2),(3,3))
+ stored as directories tblproperties ("transactional"="true", "transactional_properties"="insert_only");
+
+insert into table skew_mm
+select key, key, key from intermediate;
+
+select * from skew_mm order by k2, k1, k4;
+drop table skew_mm;
+
+
+create table skew_dp_union_mm(k1 int, k2 int, k4 int) partitioned by (k3 int)
+skewed by (k1, k4) on ((0,0),(1,1),(2,2),(3,3)) stored as directories tblproperties ("transactional"="true", "transactional_properties"="insert_only");
+
+insert into table skew_dp_union_mm partition (k3)
+select key as i, key as j, key as k, key as l from intermediate
+union all
+select key +1 as i, key +2 as j, key +3 as k, key +4 as l from intermediate;
+
+
+select * from skew_dp_union_mm order by k2, k1, k4;
+drop table skew_dp_union_mm;
+
+
+
+set hive.merge.orcfile.stripe.level=true;
+set hive.merge.tezfiles=true;
+set hive.merge.mapfiles=true;
+set hive.merge.mapredfiles=true;
+
+
+create table merge0_mm (id int) stored as orc tblproperties("transactional"="true", "transactional_properties"="insert_only");
+
+insert into table merge0_mm select key from intermediate;
+select * from merge0_mm;
+
+set tez.grouping.split-count=1;
+insert into table merge0_mm select key from intermediate;
+set tez.grouping.split-count=0;
+select * from merge0_mm;
+
+drop table merge0_mm;
+
+
+create table merge2_mm (id int) tblproperties("transactional"="true", "transactional_properties"="insert_only");
+
+insert into table merge2_mm select key from intermediate;
+select * from merge2_mm;
+
+set tez.grouping.split-count=1;
+insert into table merge2_mm select key from intermediate;
+set tez.grouping.split-count=0;
+select * from merge2_mm;
+
+drop table merge2_mm;
+
+
+create table merge1_mm (id int) partitioned by (key int) stored as orc tblproperties("transactional"="true", "transactional_properties"="insert_only");
+
+insert into table merge1_mm partition (key) select key, key from intermediate;
+select * from merge1_mm order by id, key;
+
+set tez.grouping.split-count=1;
+insert into table merge1_mm partition (key) select key, key from intermediate;
+set tez.grouping.split-count=0;
+select * from merge1_mm order by id, key;
+
+drop table merge1_mm;
+
+set hive.merge.tezfiles=false;
+set hive.merge.mapfiles=false;
+set hive.merge.mapredfiles=false;
+
+-- TODO: need to include merge+union+DP, but it's broken for now
+
+
+drop table ctas0_mm;
+create table ctas0_mm tblproperties ("transactional"="true", "transactional_properties"="insert_only") as select * from intermediate;
+select * from ctas0_mm;
+drop table ctas0_mm;
+
+drop table ctas1_mm;
+create table ctas1_mm tblproperties ("transactional"="true", "transactional_properties"="insert_only") as
+ select * from intermediate union all select * from intermediate;
+select * from ctas1_mm;
+drop table ctas1_mm;
+
+
- drop table load0_mm;
- create table load0_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only");
- load data local inpath '../../data/files/kv1.txt' into table load0_mm;
- select count(1) from load0_mm;
- load data local inpath '../../data/files/kv2.txt' into table load0_mm;
- select count(1) from load0_mm;
- load data local inpath '../../data/files/kv2.txt' overwrite into table load0_mm;
- select count(1) from load0_mm;
- drop table load0_mm;
-
-
- drop table intermediate2;
- create table intermediate2 (key string, value string) stored as textfile
- location 'file:${system:test.tmp.dir}/intermediate2';
- load data local inpath '../../data/files/kv1.txt' into table intermediate2;
- load data local inpath '../../data/files/kv2.txt' into table intermediate2;
- load data local inpath '../../data/files/kv3.txt' into table intermediate2;
-
- drop table load1_mm;
- create table load1_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only");
- load data inpath 'file:${system:test.tmp.dir}/intermediate2/kv2.txt' into table load1_mm;
- load data inpath 'file:${system:test.tmp.dir}/intermediate2/kv1.txt' into table load1_mm;
- select count(1) from load1_mm;
- load data local inpath '../../data/files/kv1.txt' into table intermediate2;
- load data local inpath '../../data/files/kv2.txt' into table intermediate2;
- load data local inpath '../../data/files/kv3.txt' into table intermediate2;
- load data inpath 'file:${system:test.tmp.dir}/intermediate2/kv*.txt' overwrite into table load1_mm;
- select count(1) from load1_mm;
- load data local inpath '../../data/files/kv2.txt' into table intermediate2;
- load data inpath 'file:${system:test.tmp.dir}/intermediate2/kv2.txt' overwrite into table load1_mm;
- select count(1) from load1_mm;
- drop table load1_mm;
-
- drop table load2_mm;
- create table load2_mm (key string, value string)
- partitioned by (k int, l int) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only");
- load data local inpath '../../data/files/kv1.txt' into table intermediate2;
- load data local inpath '../../data/files/kv2.txt' into table intermediate2;
- load data local inpath '../../data/files/kv3.txt' into table intermediate2;
- load data inpath 'file:${system:test.tmp.dir}/intermediate2/kv*.txt' into table load2_mm partition(k=5, l=5);
- select count(1) from load2_mm;
- drop table load2_mm;
- drop table intermediate2;
-
-
+drop table multi0_1_mm;
+drop table multi0_2_mm;
+create table multi0_1_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only");
+create table multi0_2_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only");
+
+--from intermediate
+--insert overwrite table multi0_1_mm select key, p
+--insert overwrite table multi0_2_mm select p, key;
+insert into table multi0_1_mm select key, p from intermediate;
+insert into table multi0_2_mm select p, key from intermediate;
+
+select * from multi0_1_mm order by key, key2;
+select * from multi0_2_mm order by key, key2;
+
+set hive.merge.mapredfiles=true;
+set hive.merge.sparkfiles=true;
+set hive.merge.tezfiles=true;
+
+--from intermediate
+--insert into table multi0_1_mm select p, key
+--insert overwrite table multi0_2_mm select key, p;
+insert into table multi0_1_mm select p, key from intermediate;
+insert into table multi0_2_mm select key, p from intermediate;
+select * from multi0_1_mm order by key, key2;
+select * from multi0_2_mm order by key, key2;
+
+set hive.merge.mapredfiles=false;
+set hive.merge.sparkfiles=false;
+set hive.merge.tezfiles=false;
+
+drop table multi0_1_mm;
+drop table multi0_2_mm;
+
+
+drop table multi1_mm;
+create table multi1_mm (key int, key2 int) partitioned by (p int) tblproperties("transactional"="true", "transactional_properties"="insert_only");
+from intermediate
+insert into table multi1_mm partition(p=1) select p, key
+insert into table multi1_mm partition(p=2) select key, p;
+select * from multi1_mm order by key, key2, p;
+--from intermediate
+--insert into table multi1_mm partition(p=2) select p, key
+--insert overwrite table multi1_mm partition(p=1) select key, p;
+insert into table multi1_mm partition(p=2) select p, key from intermediate;
+insert into table multi1_mm partition(p=1) select key, p from intermediate;
+select * from multi1_mm order by key, key2, p;
+
+from intermediate
+insert into table multi1_mm partition(p) select p, key, p
+insert into table multi1_mm partition(p=1) select key, p;
+select key, key2, p from multi1_mm order by key, key2, p;
+
+from intermediate
+insert into table multi1_mm partition(p) select p, key, 1
+insert into table multi1_mm partition(p=1) select key, p;
+select key, key2, p from multi1_mm order by key, key2, p;
+drop table multi1_mm;
+
+
+
+
+set datanucleus.cache.collections=false;
+set hive.stats.autogather=true;
+
+drop table stats_mm;
+create table stats_mm(key int) tblproperties("transactional"="true", "transactional_properties"="insert_only");
+--insert overwrite table stats_mm select key from intermediate;
+insert into table stats_mm select key from intermediate;
+desc formatted stats_mm;
+
+insert into table stats_mm select key from intermediate;
+desc formatted stats_mm;
+drop table stats_mm;
+
+drop table stats2_mm;
+create table stats2_mm tblproperties("transactional"="true", "transactional_properties"="insert_only") as select array(key, value) from src;
+desc formatted stats2_mm;
+drop table stats2_mm;
+
+
+set hive.optimize.skewjoin=true;
+set hive.skewjoin.key=2;
+set hive.optimize.metadataonly=false;
+
+CREATE TABLE skewjoin_mm(key INT, value STRING) STORED AS TEXTFILE tblproperties ("transactional"="true", "transactional_properties"="insert_only");
+FROM src src1 JOIN src src2 ON (src1.key = src2.key) INSERT into TABLE skewjoin_mm SELECT src1.key, src2.value;
+select count(distinct key) from skewjoin_mm;
+drop table skewjoin_mm;
+
+set hive.optimize.skewjoin=false;
+
+set hive.optimize.index.filter=true;
+set hive.auto.convert.join=false;
+CREATE TABLE parquet1_mm(id INT) STORED AS PARQUET tblproperties ("transactional"="true", "transactional_properties"="insert_only");
+INSERT INTO parquet1_mm VALUES(1), (2);
+CREATE TABLE parquet2_mm(id INT, value STRING) STORED AS PARQUET tblproperties ("transactional"="true", "transactional_properties"="insert_only");
+INSERT INTO parquet2_mm VALUES(1, 'value1');
+INSERT INTO parquet2_mm VALUES(1, 'value2');
+select parquet1_mm.id, t1.value, t2.value FROM parquet1_mm
+ JOIN parquet2_mm t1 ON parquet1_mm.id=t1.id
+ JOIN parquet2_mm t2 ON parquet1_mm.id=t2.id
+where t1.value = 'value1' and t2.value = 'value2';
+drop table parquet1_mm;
+drop table parquet2_mm;
+
+set hive.auto.convert.join=true;
+
+
+DROP TABLE IF EXISTS temp1;
+CREATE TEMPORARY TABLE temp1 (a int) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only");
+INSERT INTO temp1 SELECT key FROM intermediate;
+DESC EXTENDED temp1;
+SELECT * FROM temp1;
+
+
+drop table intermediate;
+
+
+
[28/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-14671 : merge master into hive-14535 (Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/7a40541f
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/7a40541f
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/7a40541f
Branch: refs/heads/master
Commit: 7a40541f5f2d302e4577c5c57b4b0b7e1ae13fa8
Parents: e3fb116 a51ae9c
Author: sergey <se...@apache.org>
Authored: Sun Sep 17 17:15:13 2017 -0700
Committer: sergey <se...@apache.org>
Committed: Sun Sep 17 17:15:13 2017 -0700
----------------------------------------------------------------------
.../hive/hcatalog/common/HCatContext.java | 2 +-
.../hive/hcatalog/common/HCatException.java | 5 +
.../apache/hive/hcatalog/data/HCatRecord.java | 2 +-
.../hcatalog/data/schema/HCatFieldSchema.java | 2 +-
.../hive/hcatalog/data/schema/HCatSchema.java | 2 +-
.../hcatalog/mapreduce/HCatInputFormat.java | 2 +-
.../hcatalog/mapreduce/HCatOutputFormat.java | 2 +-
.../hive/hcatalog/mapreduce/OutputJobInfo.java | 4 +
.../apache/hive/hcatalog/pig/HCatLoader.java | 2 +-
.../apache/hive/hcatalog/pig/HCatStorer.java | 2 +-
.../hcatalog/messaging/AddPartitionMessage.java | 5 +
.../hcatalog/messaging/AlterIndexMessage.java | 7 +-
.../messaging/AlterPartitionMessage.java | 5 +
.../hcatalog/messaging/AlterTableMessage.java | 5 +
.../messaging/CreateDatabaseMessage.java | 5 +
.../messaging/CreateFunctionMessage.java | 5 +
.../hcatalog/messaging/CreateIndexMessage.java | 7 +-
.../hcatalog/messaging/CreateTableMessage.java | 5 +
.../hcatalog/messaging/DropDatabaseMessage.java | 5 +
.../hcatalog/messaging/DropFunctionMessage.java | 7 +-
.../hcatalog/messaging/DropIndexMessage.java | 7 +-
.../messaging/DropPartitionMessage.java | 5 +
.../hcatalog/messaging/DropTableMessage.java | 5 +
.../hcatalog/messaging/HCatEventMessage.java | 4 +
.../hive/hcatalog/messaging/InsertMessage.java | 5 +
.../hcatalog/messaging/MessageDeserializer.java | 4 +
.../hive/hcatalog/messaging/MessageFactory.java | 4 +
.../hive/hcatalog/api/HCatAddPartitionDesc.java | 4 +
.../apache/hive/hcatalog/api/HCatClient.java | 2 +
.../hive/hcatalog/api/HCatCreateDBDesc.java | 4 +
.../hive/hcatalog/api/HCatCreateTableDesc.java | 4 +
.../apache/hive/hcatalog/api/HCatDatabase.java | 4 +
.../hcatalog/api/HCatNotificationEvent.java | 4 +
.../apache/hive/hcatalog/api/HCatPartition.java | 4 +
.../org/apache/hive/hcatalog/api/HCatTable.java | 4 +
.../hive/hcatalog/api/MetadataSerializer.java | 2 +
.../apache/hive/hcatalog/api/repl/Command.java | 4 +
.../hive/hcatalog/api/repl/ReplicationTask.java | 4 +-
.../java/org/apache/hadoop/hive/ql/Context.java | 12 +-
.../stats/annotation/StatsRulesProcFactory.java | 36 ++++-
.../hadoop/hive/ql/parse/SemanticAnalyzer.java | 2 +-
.../queries/clientpositive/acid_view_delete.q | 35 +++++
.../clientpositive/acid_view_delete.q.out | 141 +++++++++++++++++++
43 files changed, 363 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/7a40541f/hcatalog/core/src/main/java/org/apache/hive/hcatalog/mapreduce/HCatOutputFormat.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/7a40541f/ql/src/java/org/apache/hadoop/hive/ql/Context.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/7a40541f/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
[25/50] [abbrv] hive git commit: Merge branch 'master' into hive-14535
Posted by se...@apache.org.
Merge branch 'master' into hive-14535
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/9a9f2540
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/9a9f2540
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/9a9f2540
Branch: refs/heads/master
Commit: 9a9f25409f4db9b3798aa529bb5531264cecd282
Parents: bb1c0f2 50fb6f3
Author: sergey <se...@apache.org>
Authored: Fri Sep 15 12:47:20 2017 -0700
Committer: sergey <se...@apache.org>
Committed: Fri Sep 15 12:47:20 2017 -0700
----------------------------------------------------------------------
.gitignore | 1 +
.../org/apache/hive/beeline/HiveSchemaTool.java | 5 +-
.../apache/hive/beeline/TestHiveSchemaTool.java | 9 +-
.../common/classification/RetrySemantics.java | 54 -
.../org/apache/hadoop/hive/conf/HiveConf.java | 34 +-
.../listener/DbNotificationListener.java | 14 +-
.../hive/hcatalog/streaming/TestStreaming.java | 2 +-
.../src/test/queries/clientpositive/load_data.q | 20 +
.../test/results/clientpositive/load_data.q.out | 59 +
.../hadoop/hive/metastore/TestFilterHooks.java | 3 +-
.../hive/ql/parse/TestReplicationScenarios.java | 124 +-
...TestReplicationScenariosAcrossInstances.java | 9 +-
.../hive/ql/txn/compactor/TestCompactor.java | 40 +-
.../test/resources/testconfiguration.properties | 1 +
.../impl/LlapZookeeperRegistryImpl.java | 17 +-
.../hive/registry/impl/TezAmInstance.java | 76 +
.../hive/registry/impl/TezAmRegistryImpl.java | 118 ++
.../hive/registry/impl/ZkRegistryBase.java | 37 +-
.../hive/llap/cache/EvictionDispatcher.java | 27 +-
.../hive/llap/io/api/impl/LlapIoImpl.java | 42 +-
.../llap/io/decode/OrcColumnVectorProducer.java | 6 +-
.../llap/io/encoded/OrcEncodedDataReader.java | 345 +++--
.../hive/llap/io/metadata/MetadataCache.java | 537 +++++++
.../llap/io/metadata/OrcFileEstimateErrors.java | 5 +-
.../hive/llap/io/metadata/OrcFileMetadata.java | 114 +-
.../hive/llap/io/metadata/OrcMetadataCache.java | 163 ---
.../llap/io/metadata/OrcStripeMetadata.java | 123 +-
.../io/metadata/ParquetMetadataCacheImpl.java | 353 -----
.../TestIncrementalObjectSizeEstimator.java | 4 +-
.../hive/llap/cache/TestOrcMetadataCache.java | 159 ++-
llap-tez/pom.xml | 34 +
.../tezplugins/LlapTaskSchedulerService.java | 83 +-
.../endpoint/LlapPluginServerImpl.java | 11 +-
.../TestLlapTaskSchedulerService.java | 1 +
metastore/pom.xml | 39 -
.../upgrade/derby/045-HIVE-16886.derby.sql | 1 +
.../upgrade/derby/hive-schema-3.0.0.derby.sql | 6 +
.../derby/upgrade-2.3.0-to-3.0.0.derby.sql | 1 +
.../upgrade/mssql/030-HIVE-16886.mssql.sql | 1 +
.../upgrade/mssql/hive-schema-3.0.0.mssql.sql | 2 +
.../mssql/upgrade-2.3.0-to-3.0.0.mssql.sql | 1 +
.../upgrade/mysql/045-HIVE-16886.mysql.sql | 1 +
.../upgrade/mysql/hive-schema-3.0.0.mysql.sql | 2 +
.../mysql/upgrade-2.3.0-to-3.0.0.mysql.sql | 1 +
.../upgrade/oracle/045-HIVE-16886.oracle.sql | 1 +
.../upgrade/oracle/hive-schema-3.0.0.oracle.sql | 1 +
.../oracle/upgrade-2.3.0-to-3.0.0.oracle.sql | 1 +
.../postgres/044-HIVE-16886.postgres.sql | 1 +
.../postgres/hive-schema-3.0.0.postgres.sql | 2 +
.../upgrade-2.3.0-to-3.0.0.postgres.sql | 1 +
.../apache/hadoop/hive/metastore/Metastore.java | 1331 ------------------
.../hive/metastore/AggregateStatsCache.java | 573 --------
.../hadoop/hive/metastore/DatabaseProduct.java | 75 -
.../hive/metastore/DefaultHiveMetaHook.java | 51 -
.../DefaultMetaStoreFilterHookImpl.java | 102 --
.../hadoop/hive/metastore/FileFormatProxy.java | 64 -
.../hive/metastore/HiveMetaException.java | 42 -
.../hadoop/hive/metastore/HiveMetaHook.java | 96 --
.../hive/metastore/HiveMetaHookLoader.java | 39 -
.../hadoop/hive/metastore/HiveMetaStore.java | 11 +-
.../hive/metastore/HiveMetaStoreClient.java | 5 +-
.../hive/metastore/HiveMetaStoreFsImpl.java | 52 -
.../hive/metastore/IExtrapolatePartStatus.java | 85 --
.../hadoop/hive/metastore/IHMSHandler.java | 28 -
.../hadoop/hive/metastore/IMetaStoreClient.java | 2 +-
.../hive/metastore/IMetaStoreSchemaInfo.java | 107 --
.../metastore/LinearExtrapolatePartStatus.java | 106 --
.../hive/metastore/LockComponentBuilder.java | 121 --
.../hive/metastore/LockRequestBuilder.java | 168 ---
.../hive/metastore/MetaStoreDirectSql.java | 21 +-
.../metastore/MetaStoreEndFunctionContext.java | 59 -
.../metastore/MetaStoreEndFunctionListener.java | 58 -
.../hadoop/hive/metastore/MetaStoreFS.java | 43 -
.../hive/metastore/MetaStoreFilterHook.java | 132 --
.../hadoop/hive/metastore/MetaStoreInit.java | 112 --
.../hive/metastore/MetaStoreSchemaInfo.java | 234 ---
.../metastore/MetaStoreSchemaInfoFactory.java | 65 -
.../hadoop/hive/metastore/MetaStoreThread.java | 63 -
.../hadoop/hive/metastore/ObjectStore.java | 102 +-
.../hive/metastore/PartitionDropOptions.java | 54 -
.../metastore/PartitionExpressionProxy.java | 73 -
.../hive/metastore/TServerSocketKeepAlive.java | 47 -
.../apache/hadoop/hive/metastore/TableType.java | 26 -
.../hive/metastore/annotation/NoReconnect.java | 29 -
.../metastore/hooks/JDOConnectionURLHook.java | 53 -
.../spec/CompositePartitionSpecProxy.java | 228 ---
.../spec/PartitionListComposingSpecProxy.java | 171 ---
.../partition/spec/PartitionSpecProxy.java | 199 ---
.../spec/PartitionSpecWithSharedSDProxy.java | 172 ---
.../hive/metastore/repl/DumpDirCleanerTask.java | 45 +
.../hive/metastore/tools/HiveSchemaHelper.java | 640 ---------
.../hive/metastore/tools/SQLGenerator.java | 172 +++
.../hadoop/hive/metastore/txn/TxnHandler.java | 134 +-
.../hadoop/hive/metastore/metastore.proto | 29 -
.../hive/metastore/TestAggregateStatsCache.java | 266 ----
.../hive/metastore/TestLockRequestBuilder.java | 584 --------
.../metastore/TestMetaStoreSchemaFactory.java | 67 -
.../hive/metastore/TestMetaStoreSchemaInfo.java | 52 -
.../hadoop/hive/metastore/TestObjectStore.java | 163 ++-
.../hadoop/hive/metastore/txn/TestTxnUtils.java | 9 +-
.../org/apache/hadoop/hive/ql/ErrorMsg.java | 9 +-
.../hive/ql/exec/AbstractFileMergeOperator.java | 60 +-
.../org/apache/hadoop/hive/ql/exec/DDLTask.java | 24 +-
.../apache/hadoop/hive/ql/exec/Utilities.java | 5 +
.../hadoop/hive/ql/exec/repl/ReplDumpTask.java | 32 +
.../ql/exec/repl/bootstrap/ReplLoadTask.java | 32 +-
.../ql/exec/repl/bootstrap/ReplLoadWork.java | 9 +-
.../repl/bootstrap/events/BootstrapEvent.java | 2 +-
.../repl/bootstrap/events/ConstraintEvent.java | 24 +
.../filesystem/ConstraintEventsIterator.java | 90 ++
.../events/filesystem/FSConstraintEvent.java | 39 +
.../repl/bootstrap/load/LoadConstraint.java | 119 ++
.../bootstrap/load/table/LoadPartitions.java | 110 +-
.../repl/bootstrap/load/table/LoadTable.java | 3 +-
.../exec/repl/bootstrap/load/util/Context.java | 4 +-
.../exec/repl/bootstrap/load/util/PathInfo.java | 90 ++
.../repl/bootstrap/load/util/PathUtils.java | 68 +-
.../ql/exec/tez/SessionExpirationTracker.java | 3 +-
.../hadoop/hive/ql/exec/tez/TezSessionPool.java | 93 +-
.../hive/ql/exec/tez/TezSessionPoolManager.java | 34 +-
.../hive/ql/exec/tez/TezSessionPoolSession.java | 8 +-
.../hive/ql/exec/tez/TezSessionState.java | 40 +-
.../apache/hadoop/hive/ql/exec/tez/TezTask.java | 5 +-
.../org/apache/hadoop/hive/ql/io/AcidUtils.java | 4 +-
.../hadoop/hive/ql/io/orc/LocalCache.java | 8 +-
.../hadoop/hive/ql/io/orc/OrcInputFormat.java | 11 +
.../hive/ql/io/orc/encoded/EncodedReader.java | 14 +
.../ql/io/orc/encoded/EncodedReaderImpl.java | 534 +++++--
.../hadoop/hive/ql/io/orc/encoded/Reader.java | 4 +
.../hive/ql/io/orc/encoded/ReaderImpl.java | 11 +-
.../apache/hadoop/hive/ql/metadata/Hive.java | 43 +-
.../hive/ql/parse/DDLSemanticAnalyzer.java | 25 +-
.../apache/hadoop/hive/ql/parse/EximUtil.java | 5 +-
.../hadoop/hive/ql/parse/GenTezUtils.java | 3 +-
.../ql/parse/ReplicationSemanticAnalyzer.java | 1 +
.../hive/ql/parse/repl/dump/TableExport.java | 9 +-
.../repl/dump/io/ConstraintsSerializer.java | 71 +
.../repl/load/message/AddForeignKeyHandler.java | 16 +-
.../message/AddNotNullConstraintHandler.java | 7 +-
.../repl/load/message/AddPrimaryKeyHandler.java | 7 +-
.../message/AddUniqueConstraintHandler.java | 6 +-
.../hadoop/hive/ql/plan/DropTableDesc.java | 7 +
.../AuthorizationMetaStoreFilterHook.java | 4 +-
.../hadoop/hive/ql/session/SessionState.java | 10 +-
.../hive/ql/txn/compactor/CompactorThread.java | 23 +-
.../apache/hadoop/hive/ql/TestTxnCommands2.java | 18 +-
.../hive/ql/exec/tez/SampleTezSessionState.java | 12 +-
.../hive/ql/exec/tez/TestTezSessionPool.java | 14 +-
.../hadoop/hive/ql/exec/tez/TestTezTask.java | 3 +-
.../hive/ql/txn/compactor/CompactorTest.java | 2 +-
.../queries/clientnegative/merge_negative_4.q | 6 +
.../queries/clientnegative/merge_negative_5.q | 14 +
.../clientpositive/dynamic_semijoin_reduction.q | 1 +
.../test/queries/clientpositive/mapjoin_hint.q | 1 +
.../test/queries/clientpositive/orc_merge13.q | 44 +
.../tez_union_dynamic_partition_2.q | 27 +
.../clientnegative/merge_negative_3.q.out | 2 +-
.../clientnegative/merge_negative_4.q.out | 19 +
.../clientnegative/merge_negative_5.q.out | 67 +
.../llap/dynamic_semijoin_reduction.q.out | 48 +-
.../llap/dynamic_semijoin_reduction_2.q.out | 24 +-
.../llap/dynamic_semijoin_reduction_3.q.out | 14 +-
.../llap/dynamic_semijoin_reduction_sw.q.out | 16 +-
.../llap/dynamic_semijoin_user_level.q.out | 32 +-
.../clientpositive/llap/mapjoin_hint.q.out | 4 +-
.../results/clientpositive/llap/mergejoin.q.out | 12 +-
.../clientpositive/llap/orc_llap_counters.q.out | 98 +-
.../llap/orc_llap_counters1.q.out | 11 +-
.../clientpositive/llap/orc_ppd_basic.q.out | 147 +-
.../llap/orc_ppd_schema_evol_3a.q.out | 156 +-
.../clientpositive/llap/semijoin_hint.q.out | 12 +-
.../llap/tez_union_dynamic_partition_2.q.out | 219 +++
.../vectorized_dynamic_semijoin_reduction.q.out | 36 +-
...vectorized_dynamic_semijoin_reduction2.q.out | 32 +-
.../results/clientpositive/orc_merge13.q.out | 248 ++++
.../hive/serde2/avro/AvroDeserializer.java | 22 +-
.../lazy/fast/LazySimpleSerializeWrite.java | 4 +-
.../ObjectInspectorConverters.java | 8 +-
standalone-metastore/pom.xml | 50 +
.../gen/thrift/gen-cpp/ThriftHiveMetastore.cpp | 32 +-
.../gen/thrift/gen-cpp/ThriftHiveMetastore.h | 12 +-
.../hive/metastore/api/ThriftHiveMetastore.java | 140 +-
.../gen-php/metastore/ThriftHiveMetastore.php | 31 +-
.../hive_metastore/ThriftHiveMetastore.py | 25 +-
.../gen/thrift/gen-rb/thrift_hive_metastore.rb | 7 +-
.../common/classification/RetrySemantics.java | 57 +
.../hive/metastore/AggregateStatsCache.java | 567 ++++++++
.../hadoop/hive/metastore/DatabaseProduct.java | 75 +
.../hive/metastore/DefaultHiveMetaHook.java | 51 +
.../DefaultMetaStoreFilterHookImpl.java | 102 ++
.../hadoop/hive/metastore/FileFormatProxy.java | 64 +
.../hive/metastore/HiveMetaException.java | 42 +
.../hadoop/hive/metastore/HiveMetaHook.java | 95 ++
.../hive/metastore/HiveMetaHookLoader.java | 39 +
.../hive/metastore/HiveMetaStoreFsImpl.java | 53 +
.../hive/metastore/IExtrapolatePartStatus.java | 85 ++
.../hadoop/hive/metastore/IHMSHandler.java | 28 +
.../hive/metastore/IMetaStoreSchemaInfo.java | 108 ++
.../metastore/LinearExtrapolatePartStatus.java | 106 ++
.../hive/metastore/LockComponentBuilder.java | 121 ++
.../hive/metastore/LockRequestBuilder.java | 168 +++
.../metastore/MetaStoreEndFunctionContext.java | 59 +
.../metastore/MetaStoreEndFunctionListener.java | 58 +
.../hadoop/hive/metastore/MetaStoreFS.java | 43 +
.../hive/metastore/MetaStoreFilterHook.java | 132 ++
.../hadoop/hive/metastore/MetaStoreInit.java | 109 ++
.../hive/metastore/MetaStoreSchemaInfo.java | 234 +++
.../metastore/MetaStoreSchemaInfoFactory.java | 64 +
.../hadoop/hive/metastore/MetaStoreThread.java | 58 +
.../hive/metastore/PartitionDropOptions.java | 54 +
.../metastore/PartitionExpressionProxy.java | 73 +
.../hive/metastore/TServerSocketKeepAlive.java | 47 +
.../apache/hadoop/hive/metastore/TableType.java | 26 +
.../annotation/MetastoreVersionAnnotation.java | 85 ++
.../hive/metastore/annotation/NoReconnect.java | 29 +
.../metastore/hooks/JDOConnectionURLHook.java | 53 +
.../spec/CompositePartitionSpecProxy.java | 226 +++
.../spec/PartitionListComposingSpecProxy.java | 171 +++
.../partition/spec/PartitionSpecProxy.java | 199 +++
.../spec/PartitionSpecWithSharedSDProxy.java | 172 +++
.../hive/metastore/tools/HiveSchemaHelper.java | 641 +++++++++
.../hadoop/hive/metastore/utils/FileUtils.java | 66 +
.../hadoop/hive/metastore/utils/JavaUtils.java | 37 +
.../hive/metastore/utils/MetaStoreUtils.java | 41 +
.../metastore/utils/MetastoreVersionInfo.java | 133 ++
.../hadoop/hive/metastore/metastore.proto | 29 +
.../src/main/resources/saveVersion.sh | 91 ++
.../src/main/thrift/hive_metastore.thrift | 2 +-
.../hive/metastore/TestAggregateStatsCache.java | 267 ++++
.../hive/metastore/TestLockRequestBuilder.java | 584 ++++++++
.../metastore/TestMetaStoreSchemaFactory.java | 69 +
.../hive/metastore/TestMetaStoreSchemaInfo.java | 52 +
.../hive/common/io/FileMetadataCache.java | 8 +-
233 files changed, 10377 insertions(+), 8544 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/itests/src/test/resources/testconfiguration.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
----------------------------------------------------------------------
diff --cc metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
index d2038c5,3053dcb..c65baa4
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
@@@ -241,8 -242,8 +244,9 @@@ public class ObjectStore implements Raw
private boolean isInitialized = false;
private PersistenceManager pm = null;
+ private SQLGenerator sqlGenerator = null;
private MetaStoreDirectSql directSql = null;
+ private DatabaseProduct dbType = null;
private PartitionExpressionProxy expressionProxy = null;
private Configuration hiveConf;
private volatile int openTrasactionCalls = 0;
@@@ -430,9 -431,17 +434,18 @@@
LOG.info("ObjectStore, initialize called");
prop = dsProps;
pm = getPersistenceManager();
+ try {
+ String productName = MetaStoreDirectSql.getProductName(pm);
+ sqlGenerator = new SQLGenerator(
+ DatabaseProduct.determineDatabaseProduct(productName),
+ new HiveConf(hiveConf, ObjectStore.class));
+ } catch (SQLException e) {
+ LOG.error("error trying to figure out the database product", e);
+ throw new RuntimeException(e);
+ }
isInitialized = pm != null;
if (isInitialized) {
+ dbType = determineDatabaseProduct();
expressionProxy = createExpressionProxy(hiveConf);
if (HiveConf.getBoolVar(getConf(), ConfVars.METASTORE_TRY_DIRECT_SQL)) {
String schema = prop.getProperty("javax.jdo.mapping.Schema");
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
----------------------------------------------------------------------
diff --cc metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
index 75eba79,7882dad..176fc4c
--- a/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
+++ b/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
@@@ -59,9 -57,21 +57,23 @@@ import org.mockito.Mockito
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableList;
import javax.jdo.Query;
+ import java.util.Arrays;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.List;
+ import java.util.Set;
+ import java.util.concurrent.BrokenBarrierException;
+ import java.util.concurrent.CyclicBarrier;
+ import java.util.concurrent.ExecutionException;
+ import java.util.concurrent.ExecutorService;
+ import java.util.concurrent.Executors;
+ import java.util.concurrent.TimeUnit;
+
+ import static org.junit.Assert.assertEquals;
+ import static org.junit.Assert.assertTrue;
public class TestObjectStore {
private ObjectStore objectStore = null;
@@@ -287,8 -282,8 +299,8 @@@
public void testPartitionOps() throws MetaException, InvalidObjectException, NoSuchObjectException, InvalidInputException {
Database db1 = new Database(DB1, "description", "locationurl", null);
objectStore.createDatabase(db1);
- StorageDescriptor sd = new StorageDescriptor(null, "location", null, null, false, 0, new SerDeInfo("SerDeName", "serializationLib", null), null, null, null);
+ StorageDescriptor sd = createFakeSd("location");
- HashMap<String,String> tableParams = new HashMap<String,String>();
+ HashMap<String, String> tableParams = new HashMap<>();
tableParams.put("EXTERNAL", "false");
FieldSchema partitionKey1 = new FieldSchema("Country", ColumnType.STRING_TYPE_NAME, "");
FieldSchema partitionKey2 = new FieldSchema("State", ColumnType.STRING_TYPE_NAME, "");
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/ql/src/java/org/apache/hadoop/hive/ql/exec/AbstractFileMergeOperator.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/AbstractFileMergeOperator.java
index 70e764e,6bba057..6b98ecd
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/AbstractFileMergeOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/AbstractFileMergeOperator.java
@@@ -224,50 -216,63 +232,78 @@@ public abstract class AbstractFileMerge
@Override
public void closeOp(boolean abort) throws HiveException {
try {
- if (!abort) {
- // if outPath does not exist, then it means all paths within combine split are skipped as
- // they are incompatible for merge (for example: files without stripe stats).
- // Those files will be added to incompatFileSet
- if (fs.exists(outPath)) {
- FileStatus fss = fs.getFileStatus(outPath);
+ if (abort) {
+ if (!autoDelete || isMmTable) {
+ fs.delete(outPath, true);
+ }
+ return;
+ }
+ // if outPath does not exist, then it means all paths within combine split are skipped as
+ // they are incompatible for merge (for example: files without stripe stats).
+ // Those files will be added to incompatFileSet
+ if (fs.exists(outPath)) {
+ FileStatus fss = fs.getFileStatus(outPath);
+ if (!isMmTable) {
if (!fs.rename(outPath, finalPath)) {
- throw new IOException(
- "Unable to rename " + outPath + " to " + finalPath);
+ throw new IOException("Unable to rename " + outPath + " to " + finalPath);
}
- LOG.info("renamed path " + outPath + " to " + finalPath + " . File" +
- " size is "
- + fss.getLen());
+ LOG.info("Renamed path " + outPath + " to " + finalPath
+ + "(" + fss.getLen() + " bytes).");
+ } else {
+ assert finalPath.equals(outPath);
+ // There's always just one file that we have merged.
+ // The union/DP/etc. should already be account for in the path.
+ Utilities.writeMmCommitManifest(Lists.newArrayList(outPath),
+ tmpPath.getParent(), fs, taskId, conf.getTxnId(), conf.getStmtId(), null);
+ LOG.info("Merged into " + finalPath + "(" + fss.getLen() + " bytes).");
}
+ }
+ // move any incompatible files to final path
+ if (incompatFileSet != null && !incompatFileSet.isEmpty()) {
+ if (isMmTable) {
+ // We only support query-time merge for MM tables, so don't handle this.
+ throw new HiveException("Incompatible files should not happen in MM tables.");
+ }
- for (Path incompatFile : incompatFileSet) {
- Path destDir = finalPath.getParent();
- try {
- Utilities.renameOrMoveFiles(fs, incompatFile, destDir);
- LOG.info("Moved incompatible file " + incompatFile + " to " +
- destDir);
- } catch (HiveException e) {
- LOG.error("Unable to move " + incompatFile + " to " + destDir);
- throw new IOException(e);
+ Path destDir = finalPath.getParent();
+ Path destPath = destDir;
+ // move any incompatible files to final path
+ if (incompatFileSet != null && !incompatFileSet.isEmpty()) {
+ for (Path incompatFile : incompatFileSet) {
+ // check if path conforms to Hive's file name convention. Hive expects filenames to be in specific format
+ // like 000000_0, but "LOAD DATA" commands can let you add any files to any partitions/tables without
+ // renaming. This can cause MoveTask to remove files in some cases where MoveTask assumes the files are
+ // are generated by speculatively executed tasks.
+ // Example: MoveTask thinks the following files are same
+ // part-m-00000_1417075294718
+ // part-m-00001_1417075294718
+ // Assumes 1417075294718 as taskId and retains only large file supposedly generated by speculative execution.
+ // This can result in data loss in case of CONCATENATE/merging. Filter out files that does not match Hive's
+ // filename convention.
+ if (!Utilities.isHiveManagedFile(incompatFile)) {
+ // rename un-managed files to conform to Hive's naming standard
+ // Example:
+ // /warehouse/table/part-m-00000_1417075294718 will get renamed to /warehouse/table/.hive-staging/000000_0
+ // If staging directory already contains the file, taskId_copy_N naming will be used.
+ final String taskId = Utilities.getTaskId(jc);
+ Path destFilePath = new Path(destDir, new Path(taskId));
+ for (int counter = 1; fs.exists(destFilePath); counter++) {
+ destFilePath = new Path(destDir, taskId + (Utilities.COPY_KEYWORD + counter));
+ }
+ LOG.warn("Path doesn't conform to Hive's expectation. Renaming {} to {}", incompatFile, destFilePath);
+ destPath = destFilePath;
+ }
+
+ try {
+ Utilities.renameOrMoveFiles(fs, incompatFile, destPath);
+ LOG.info("Moved incompatible file " + incompatFile + " to " + destPath);
+ } catch (HiveException e) {
+ LOG.error("Unable to move " + incompatFile + " to " + destPath);
+ throw new IOException(e);
+ }
}
}
- } else {
- if (!autoDelete) {
- fs.delete(outPath, true);
- }
++
}
} catch (IOException e) {
throw new HiveException("Failed to close AbstractFileMergeOperator", e);
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadPartitions.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadPartitions.java
index 2ae18cf,acf9746..522444e
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadPartitions.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadPartitions.java
@@@ -44,8 -45,7 +45,9 @@@ import org.apache.hadoop.hive.ql.plan.D
import org.apache.hadoop.hive.ql.plan.ImportTableDesc;
import org.apache.hadoop.hive.ql.plan.LoadTableDesc;
import org.apache.hadoop.hive.ql.plan.MoveWork;
+import org.apache.hadoop.hive.ql.session.SessionState;
+import org.mortbay.jetty.servlet.AbstractSessionManager;
+ import org.datanucleus.util.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadTable.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcInputFormat.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/ql/src/java/org/apache/hadoop/hive/ql/parse/EximUtil.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezUtils.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezUtils.java
index 8f94679,40d4fad..cf1d14c
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezUtils.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezUtils.java
@@@ -314,9 -315,9 +315,9 @@@ public class GenTezUtils
linked = context.linkedFileSinks.get(path);
linked.add(desc);
- desc.setDirName(new Path(path, "" + linked.size()));
+ desc.setDirName(new Path(path, AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + linked.size()));
+ Utilities.LOG14535.info("removing union - new desc with " + desc.getDirName() + "; parent " + path);
desc.setLinkedFileSink(true);
- desc.setParentDir(path);
desc.setLinkedFileSinkDesc(linked);
}
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/CompactorThread.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands2.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreThread.java
----------------------------------------------------------------------
diff --cc standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreThread.java
index 0000000,10f7732..6ef2e35
mode 000000,100644..100644
--- a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreThread.java
+++ b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreThread.java
@@@ -1,0 -1,57 +1,58 @@@
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ package org.apache.hadoop.hive.metastore;
+
+ import org.apache.hadoop.conf.Configurable;
+ import org.apache.hadoop.conf.Configuration;
+ import org.apache.hadoop.hive.metastore.api.MetaException;
+
+ import java.util.concurrent.atomic.AtomicBoolean;
+
+ /**
+ * A thread that runs in the metastore, separate from the threads in the thrift service.
+ */
+ public interface MetaStoreThread extends Configurable {
+
+ /**
+ * Set the id for this thread.
+ * @param threadId id of the thread
+ */
+ void setThreadId(int threadId);
+
+ /**
+ * Initialize the thread. This must not be called until after
+ * {@link #setConf(Configuration)} and {@link #setThreadId(int)}
+ * have been called.
+ * @param stop a flag to watch for when to stop. If this value is set to true,
+ * the thread will terminate the next time through its main loop.
+ * @param looped a flag that is set to true everytime a thread goes through it's main loop.
+ * This is purely for testing so that tests can assure themselves that the thread
+ * has run through it's loop once. The test can set this value to false. The
+ * thread should then assure that the loop has been gone completely through at
+ * least once.
+ */
++ // TODO: move these test parameters to more specific places... there's no need to have them here
+ void init(AtomicBoolean stop, AtomicBoolean looped) throws MetaException;
+
+ /**
+ * Run the thread in the background. This must not be called until
+ * {@link MetaStoreThread#init(java.util.concurrent.atomic.AtomicBoolean,java.util.concurrent.atomic.AtomicBoolean)} has
+ * been called.
+ */
+ void start();
+ }
http://git-wip-us.apache.org/repos/asf/hive/blob/9a9f2540/standalone-metastore/src/main/thrift/hive_metastore.thrift
----------------------------------------------------------------------
[21/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Wei Zheng)
Posted by se...@apache.org.
http://git-wip-us.apache.org/repos/asf/hive/blob/18d13385/ql/src/test/results/clientpositive/mm_all.q.out
----------------------------------------------------------------------
diff --cc ql/src/test/results/clientpositive/mm_all.q.out
index ea60414,0000000..b69ac00
mode 100644,000000..100644
--- a/ql/src/test/results/clientpositive/mm_all.q.out
+++ b/ql/src/test/results/clientpositive/mm_all.q.out
@@@ -1,2147 -1,0 +1,2116 @@@
+PREHOOK: query: drop table intermediate
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table intermediate
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table intermediate(key int) partitioned by (p int) stored as orc
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@intermediate
+POSTHOOK: query: create table intermediate(key int) partitioned by (p int) stored as orc
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@intermediate
+PREHOOK: query: insert into table intermediate partition(p='455') select distinct key from src where key >= 0 order by key desc limit 2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: default@intermediate@p=455
+POSTHOOK: query: insert into table intermediate partition(p='455') select distinct key from src where key >= 0 order by key desc limit 2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: default@intermediate@p=455
+POSTHOOK: Lineage: intermediate PARTITION(p=455).key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ]
+PREHOOK: query: insert into table intermediate partition(p='456') select distinct key from src where key is not null order by key asc limit 2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: default@intermediate@p=456
+POSTHOOK: query: insert into table intermediate partition(p='456') select distinct key from src where key is not null order by key asc limit 2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: default@intermediate@p=456
+POSTHOOK: Lineage: intermediate PARTITION(p=456).key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ]
+PREHOOK: query: insert into table intermediate partition(p='457') select distinct key from src where key >= 100 order by key asc limit 2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: default@intermediate@p=457
+POSTHOOK: query: insert into table intermediate partition(p='457') select distinct key from src where key >= 100 order by key asc limit 2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: default@intermediate@p=457
+POSTHOOK: Lineage: intermediate PARTITION(p=457).key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ]
+PREHOOK: query: drop table part_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table part_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table part_mm(key int) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@part_mm
+POSTHOOK: query: create table part_mm(key int) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@part_mm
+PREHOOK: query: explain insert into table part_mm partition(key_mm=455) select key from intermediate
+PREHOOK: type: QUERY
+POSTHOOK: query: explain insert into table part_mm partition(key_mm=455) select key from intermediate
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+ Stage-1 is a root stage
+ Stage-7 depends on stages: Stage-1 , consists of Stage-4, Stage-3, Stage-5
+ Stage-4
+ Stage-0 depends on stages: Stage-4, Stage-3, Stage-6
+ Stage-2 depends on stages: Stage-0
+ Stage-3
+ Stage-5
+ Stage-6 depends on stages: Stage-5
+
+STAGE PLANS:
+ Stage: Stage-1
+ Map Reduce
+ Map Operator Tree:
+ TableScan
+ alias: intermediate
+ Statistics: Num rows: 6 Data size: 24 Basic stats: COMPLETE Column stats: NONE
+ Select Operator
+ expressions: key (type: int)
+ outputColumnNames: _col0
+ Statistics: Num rows: 6 Data size: 24 Basic stats: COMPLETE Column stats: NONE
+ File Output Operator
+ compressed: false
+ Statistics: Num rows: 6 Data size: 24 Basic stats: COMPLETE Column stats: NONE
+ 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: default.part_mm
+ Write Type: INSERT
+
+ Stage: Stage-7
+ Conditional Operator
+
+ Stage: Stage-4
+ Move Operator
+ files:
+ hdfs directory: true
+#### A masked pattern was here ####
+
+ Stage: Stage-0
+ Move Operator
+ tables:
+ partition:
+ key_mm 455
+ 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: default.part_mm
+ micromanaged table: true
+
+ Stage: Stage-2
+ Stats-Aggr Operator
+
+ Stage: Stage-3
+ Merge File Operator
+ Map Operator Tree:
+ ORC File Merge Operator
+ merge level: stripe
+ input format: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
+
+ Stage: Stage-5
+ Merge File Operator
+ Map Operator Tree:
+ ORC File Merge Operator
+ merge level: stripe
+ input format: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
+
+ Stage: Stage-6
+ Move Operator
+ files:
+ hdfs directory: true
+#### A masked pattern was here ####
+
+PREHOOK: query: insert into table part_mm partition(key_mm=455) select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@part_mm@key_mm=455
+POSTHOOK: query: insert into table part_mm partition(key_mm=455) select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@part_mm@key_mm=455
+POSTHOOK: Lineage: part_mm PARTITION(key_mm=455).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: insert into table part_mm partition(key_mm=456) select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@part_mm@key_mm=456
+POSTHOOK: query: insert into table part_mm partition(key_mm=456) select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@part_mm@key_mm=456
+POSTHOOK: Lineage: part_mm PARTITION(key_mm=456).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: insert into table part_mm partition(key_mm=455) select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@part_mm@key_mm=455
+POSTHOOK: query: insert into table part_mm partition(key_mm=455) select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@part_mm@key_mm=455
+POSTHOOK: Lineage: part_mm PARTITION(key_mm=455).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from part_mm order by key, key_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part_mm
+PREHOOK: Input: default@part_mm@key_mm=455
+PREHOOK: Input: default@part_mm@key_mm=456
+#### A masked pattern was here ####
+POSTHOOK: query: select * from part_mm order by key, key_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part_mm
+POSTHOOK: Input: default@part_mm@key_mm=455
+POSTHOOK: Input: default@part_mm@key_mm=456
+#### A masked pattern was here ####
+0 455
+0 455
+0 456
+10 455
+10 455
+10 456
+97 455
+97 455
+97 456
+98 455
+98 455
+98 456
+100 455
+100 455
+100 456
+103 455
+103 455
+103 456
+PREHOOK: query: select * from part_mm order by key, key_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part_mm
+PREHOOK: Input: default@part_mm@key_mm=455
+PREHOOK: Input: default@part_mm@key_mm=456
+#### A masked pattern was here ####
+POSTHOOK: query: select * from part_mm order by key, key_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part_mm
+POSTHOOK: Input: default@part_mm@key_mm=455
+POSTHOOK: Input: default@part_mm@key_mm=456
+#### A masked pattern was here ####
+0 455
+0 455
+0 456
+10 455
+10 455
+10 456
+97 455
+97 455
+97 456
+98 455
+98 455
+98 456
+100 455
+100 455
+100 456
+103 455
+103 455
+103 456
+PREHOOK: query: truncate table part_mm
+PREHOOK: type: TRUNCATETABLE
+PREHOOK: Output: default@part_mm@key_mm=455
+PREHOOK: Output: default@part_mm@key_mm=456
+POSTHOOK: query: truncate table part_mm
+POSTHOOK: type: TRUNCATETABLE
+POSTHOOK: Output: default@part_mm@key_mm=455
+POSTHOOK: Output: default@part_mm@key_mm=456
+PREHOOK: query: select * from part_mm order by key, key_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part_mm
+PREHOOK: Input: default@part_mm@key_mm=455
+PREHOOK: Input: default@part_mm@key_mm=456
+#### A masked pattern was here ####
+POSTHOOK: query: select * from part_mm order by key, key_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part_mm
+POSTHOOK: Input: default@part_mm@key_mm=455
+POSTHOOK: Input: default@part_mm@key_mm=456
+#### A masked pattern was here ####
+PREHOOK: query: drop table part_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@part_mm
+PREHOOK: Output: default@part_mm
+POSTHOOK: query: drop table part_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@part_mm
+POSTHOOK: Output: default@part_mm
+PREHOOK: query: drop table simple_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table simple_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table simple_mm(key int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@simple_mm
+POSTHOOK: query: create table simple_mm(key int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@simple_mm
+PREHOOK: query: insert into table simple_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@simple_mm
+POSTHOOK: query: insert into table simple_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@simple_mm
+POSTHOOK: Lineage: simple_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from simple_mm order by key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@simple_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from simple_mm order by key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@simple_mm
+#### A masked pattern was here ####
+0
+10
+97
+98
+100
+103
+PREHOOK: query: insert into table simple_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@simple_mm
+POSTHOOK: query: insert into table simple_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@simple_mm
+POSTHOOK: Lineage: simple_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from simple_mm order by key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@simple_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from simple_mm order by key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@simple_mm
+#### A masked pattern was here ####
+0
+0
+10
+10
+97
+97
+98
+98
+100
+100
+103
+103
+PREHOOK: query: truncate table simple_mm
+PREHOOK: type: TRUNCATETABLE
+PREHOOK: Output: default@simple_mm
+POSTHOOK: query: truncate table simple_mm
+POSTHOOK: type: TRUNCATETABLE
+POSTHOOK: Output: default@simple_mm
+PREHOOK: query: select * from simple_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@simple_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from simple_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@simple_mm
+#### A masked pattern was here ####
+PREHOOK: query: drop table simple_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@simple_mm
+PREHOOK: Output: default@simple_mm
+POSTHOOK: query: drop table simple_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@simple_mm
+POSTHOOK: Output: default@simple_mm
+PREHOOK: query: drop table dp_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table dp_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table dp_mm (key int) partitioned by (key1 string, key2 int) stored as orc
+ tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@dp_mm
+POSTHOOK: query: create table dp_mm (key int) partitioned by (key1 string, key2 int) stored as orc
+ tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@dp_mm
+PREHOOK: query: insert into table dp_mm partition (key1='123', key2) select key, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@dp_mm@key1=123
+POSTHOOK: query: insert into table dp_mm partition (key1='123', key2) select key, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@dp_mm@key1=123/key2=0
+POSTHOOK: Output: default@dp_mm@key1=123/key2=10
+POSTHOOK: Output: default@dp_mm@key1=123/key2=100
+POSTHOOK: Output: default@dp_mm@key1=123/key2=103
+POSTHOOK: Output: default@dp_mm@key1=123/key2=97
+POSTHOOK: Output: default@dp_mm@key1=123/key2=98
+POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=0).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=100).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=103).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=10).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=97).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=98).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from dp_mm order by key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@dp_mm
+PREHOOK: Input: default@dp_mm@key1=123/key2=0
+PREHOOK: Input: default@dp_mm@key1=123/key2=10
+PREHOOK: Input: default@dp_mm@key1=123/key2=100
+PREHOOK: Input: default@dp_mm@key1=123/key2=103
+PREHOOK: Input: default@dp_mm@key1=123/key2=97
+PREHOOK: Input: default@dp_mm@key1=123/key2=98
+#### A masked pattern was here ####
+POSTHOOK: query: select * from dp_mm order by key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@dp_mm
+POSTHOOK: Input: default@dp_mm@key1=123/key2=0
+POSTHOOK: Input: default@dp_mm@key1=123/key2=10
+POSTHOOK: Input: default@dp_mm@key1=123/key2=100
+POSTHOOK: Input: default@dp_mm@key1=123/key2=103
+POSTHOOK: Input: default@dp_mm@key1=123/key2=97
+POSTHOOK: Input: default@dp_mm@key1=123/key2=98
+#### A masked pattern was here ####
+0 123 0
+10 123 10
+97 123 97
+98 123 98
+100 123 100
+103 123 103
+PREHOOK: query: drop table dp_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@dp_mm
+PREHOOK: Output: default@dp_mm
+POSTHOOK: query: drop table dp_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@dp_mm
+POSTHOOK: Output: default@dp_mm
+PREHOOK: query: create table union_mm(id int) tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@union_mm
+POSTHOOK: query: create table union_mm(id int) tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@union_mm
+PREHOOK: query: insert into table union_mm
+select temps.p from (
+select key as p from intermediate
+union all
+select key + 1 as p from intermediate ) temps
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@union_mm
+POSTHOOK: query: insert into table union_mm
+select temps.p from (
+select key as p from intermediate
+union all
+select key + 1 as p from intermediate ) temps
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@union_mm
+POSTHOOK: Lineage: union_mm.id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from union_mm order by id
+PREHOOK: type: QUERY
+PREHOOK: Input: default@union_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from union_mm order by id
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@union_mm
+#### A masked pattern was here ####
+0
+1
+10
+11
+97
+98
+98
+99
+100
+101
+103
+104
+PREHOOK: query: insert into table union_mm
+select p from
+(
+select key + 1 as p from intermediate
+union all
+select key from intermediate
+) tab group by p
+union all
+select key + 2 as p from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@union_mm
+POSTHOOK: query: insert into table union_mm
+select p from
+(
+select key + 1 as p from intermediate
+union all
+select key from intermediate
+) tab group by p
+union all
+select key + 2 as p from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@union_mm
+POSTHOOK: Lineage: union_mm.id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from union_mm order by id
+PREHOOK: type: QUERY
+PREHOOK: Input: default@union_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from union_mm order by id
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@union_mm
+#### A masked pattern was here ####
+0
+0
+1
+1
+2
+10
+10
+11
+11
+12
+97
+97
+98
+98
+98
+99
+99
+99
+100
+100
+100
+101
+101
+102
+103
+103
+104
+104
+105
+PREHOOK: query: insert into table union_mm
+SELECT p FROM
+(
+ SELECT key + 1 as p FROM intermediate
+ UNION ALL
+ SELECT key as p FROM (
+ SELECT distinct key FROM (
+ SELECT key FROM (
+ SELECT key + 2 as key FROM intermediate
+ UNION ALL
+ SELECT key FROM intermediate
+ )t1
+ group by key)t2
+ )t3
+)t4
+group by p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@union_mm
+POSTHOOK: query: insert into table union_mm
+SELECT p FROM
+(
+ SELECT key + 1 as p FROM intermediate
+ UNION ALL
+ SELECT key as p FROM (
+ SELECT distinct key FROM (
+ SELECT key FROM (
+ SELECT key + 2 as key FROM intermediate
+ UNION ALL
+ SELECT key FROM intermediate
+ )t1
+ group by key)t2
+ )t3
+)t4
+group by p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@union_mm
+POSTHOOK: Lineage: union_mm.id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from union_mm order by id
+PREHOOK: type: QUERY
+PREHOOK: Input: default@union_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from union_mm order by id
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@union_mm
+#### A masked pattern was here ####
+0
+0
+0
+1
+1
+1
+2
+2
+10
+10
+10
+11
+11
+11
+12
+12
+97
+97
+97
+98
+98
+98
+98
+99
+99
+99
+99
+100
+100
+100
+100
+101
+101
+101
+102
+102
+103
+103
+103
+104
+104
+104
+105
+105
+PREHOOK: query: drop table union_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@union_mm
+PREHOOK: Output: default@union_mm
+POSTHOOK: query: drop table union_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@union_mm
+POSTHOOK: Output: default@union_mm
+PREHOOK: query: create table partunion_mm(id int) partitioned by (key int) tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@partunion_mm
+POSTHOOK: query: create table partunion_mm(id int) partitioned by (key int) tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@partunion_mm
+PREHOOK: query: insert into table partunion_mm partition(key)
+select temps.* from (
+select key as p, key from intermediate
+union all
+select key + 1 as p, key + 1 from intermediate ) temps
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@partunion_mm
+POSTHOOK: query: insert into table partunion_mm partition(key)
+select temps.* from (
+select key as p, key from intermediate
+union all
+select key + 1 as p, key + 1 from intermediate ) temps
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@partunion_mm@key=0
+POSTHOOK: Output: default@partunion_mm@key=1
+POSTHOOK: Output: default@partunion_mm@key=10
+POSTHOOK: Output: default@partunion_mm@key=100
+POSTHOOK: Output: default@partunion_mm@key=101
+POSTHOOK: Output: default@partunion_mm@key=103
+POSTHOOK: Output: default@partunion_mm@key=104
+POSTHOOK: Output: default@partunion_mm@key=11
+POSTHOOK: Output: default@partunion_mm@key=97
+POSTHOOK: Output: default@partunion_mm@key=98
+POSTHOOK: Output: default@partunion_mm@key=99
+POSTHOOK: Lineage: partunion_mm PARTITION(key=0).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=100).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=101).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=103).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=104).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=10).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=11).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=1).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=97).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=98).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=99).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from partunion_mm order by id
+PREHOOK: type: QUERY
+PREHOOK: Input: default@partunion_mm
+PREHOOK: Input: default@partunion_mm@key=0
+PREHOOK: Input: default@partunion_mm@key=1
+PREHOOK: Input: default@partunion_mm@key=10
+PREHOOK: Input: default@partunion_mm@key=100
+PREHOOK: Input: default@partunion_mm@key=101
+PREHOOK: Input: default@partunion_mm@key=103
+PREHOOK: Input: default@partunion_mm@key=104
+PREHOOK: Input: default@partunion_mm@key=11
+PREHOOK: Input: default@partunion_mm@key=97
+PREHOOK: Input: default@partunion_mm@key=98
+PREHOOK: Input: default@partunion_mm@key=99
+#### A masked pattern was here ####
+POSTHOOK: query: select * from partunion_mm order by id
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@partunion_mm
+POSTHOOK: Input: default@partunion_mm@key=0
+POSTHOOK: Input: default@partunion_mm@key=1
+POSTHOOK: Input: default@partunion_mm@key=10
+POSTHOOK: Input: default@partunion_mm@key=100
+POSTHOOK: Input: default@partunion_mm@key=101
+POSTHOOK: Input: default@partunion_mm@key=103
+POSTHOOK: Input: default@partunion_mm@key=104
+POSTHOOK: Input: default@partunion_mm@key=11
+POSTHOOK: Input: default@partunion_mm@key=97
+POSTHOOK: Input: default@partunion_mm@key=98
+POSTHOOK: Input: default@partunion_mm@key=99
+#### A masked pattern was here ####
+0 0
+1 1
+10 10
+11 11
+97 97
+98 98
+98 98
+99 99
+100 100
+101 101
+103 103
+104 104
+PREHOOK: query: drop table partunion_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@partunion_mm
+PREHOOK: Output: default@partunion_mm
+POSTHOOK: query: drop table partunion_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@partunion_mm
+POSTHOOK: Output: default@partunion_mm
+PREHOOK: query: create table skew_mm(k1 int, k2 int, k4 int) skewed by (k1, k4) on ((0,0),(1,1),(2,2),(3,3))
+ stored as directories tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@skew_mm
+POSTHOOK: query: create table skew_mm(k1 int, k2 int, k4 int) skewed by (k1, k4) on ((0,0),(1,1),(2,2),(3,3))
+ stored as directories tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@skew_mm
+PREHOOK: query: insert into table skew_mm
+select key, key, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@skew_mm
+POSTHOOK: query: insert into table skew_mm
+select key, key, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@skew_mm
+POSTHOOK: Lineage: skew_mm.k1 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_mm.k2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_mm.k4 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from skew_mm order by k2, k1, k4
+PREHOOK: type: QUERY
+PREHOOK: Input: default@skew_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from skew_mm order by k2, k1, k4
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@skew_mm
+#### A masked pattern was here ####
+0 0 0
+10 10 10
+97 97 97
+98 98 98
+100 100 100
+103 103 103
+PREHOOK: query: drop table skew_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@skew_mm
+PREHOOK: Output: default@skew_mm
+POSTHOOK: query: drop table skew_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@skew_mm
+POSTHOOK: Output: default@skew_mm
+PREHOOK: query: create table skew_dp_union_mm(k1 int, k2 int, k4 int) partitioned by (k3 int)
+skewed by (k1, k4) on ((0,0),(1,1),(2,2),(3,3)) stored as directories tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@skew_dp_union_mm
+POSTHOOK: query: create table skew_dp_union_mm(k1 int, k2 int, k4 int) partitioned by (k3 int)
+skewed by (k1, k4) on ((0,0),(1,1),(2,2),(3,3)) stored as directories tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@skew_dp_union_mm
+PREHOOK: query: insert into table skew_dp_union_mm partition (k3)
+select key as i, key as j, key as k, key as l from intermediate
+union all
+select key +1 as i, key +2 as j, key +3 as k, key +4 as l from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@skew_dp_union_mm
+POSTHOOK: query: insert into table skew_dp_union_mm partition (k3)
+select key as i, key as j, key as k, key as l from intermediate
+union all
+select key +1 as i, key +2 as j, key +3 as k, key +4 as l from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@skew_dp_union_mm@k3=0
+POSTHOOK: Output: default@skew_dp_union_mm@k3=10
+POSTHOOK: Output: default@skew_dp_union_mm@k3=100
+POSTHOOK: Output: default@skew_dp_union_mm@k3=101
+POSTHOOK: Output: default@skew_dp_union_mm@k3=102
+POSTHOOK: Output: default@skew_dp_union_mm@k3=103
+POSTHOOK: Output: default@skew_dp_union_mm@k3=104
+POSTHOOK: Output: default@skew_dp_union_mm@k3=107
+POSTHOOK: Output: default@skew_dp_union_mm@k3=14
+POSTHOOK: Output: default@skew_dp_union_mm@k3=4
+POSTHOOK: Output: default@skew_dp_union_mm@k3=97
+POSTHOOK: Output: default@skew_dp_union_mm@k3=98
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=0).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=0).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=0).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=100).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=100).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=100).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=101).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=101).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=101).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=102).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=102).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=102).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=103).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=103).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=103).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=104).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=104).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=104).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=107).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=107).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=107).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=10).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=10).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=10).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=14).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=14).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=14).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=4).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=4).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=4).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=97).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=97).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=97).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=98).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=98).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=98).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from skew_dp_union_mm order by k2, k1, k4
+PREHOOK: type: QUERY
+PREHOOK: Input: default@skew_dp_union_mm
+PREHOOK: Input: default@skew_dp_union_mm@k3=0
+PREHOOK: Input: default@skew_dp_union_mm@k3=10
+PREHOOK: Input: default@skew_dp_union_mm@k3=100
+PREHOOK: Input: default@skew_dp_union_mm@k3=101
+PREHOOK: Input: default@skew_dp_union_mm@k3=102
+PREHOOK: Input: default@skew_dp_union_mm@k3=103
+PREHOOK: Input: default@skew_dp_union_mm@k3=104
+PREHOOK: Input: default@skew_dp_union_mm@k3=107
+PREHOOK: Input: default@skew_dp_union_mm@k3=14
+PREHOOK: Input: default@skew_dp_union_mm@k3=4
+PREHOOK: Input: default@skew_dp_union_mm@k3=97
+PREHOOK: Input: default@skew_dp_union_mm@k3=98
+#### A masked pattern was here ####
+POSTHOOK: query: select * from skew_dp_union_mm order by k2, k1, k4
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@skew_dp_union_mm
+POSTHOOK: Input: default@skew_dp_union_mm@k3=0
+POSTHOOK: Input: default@skew_dp_union_mm@k3=10
+POSTHOOK: Input: default@skew_dp_union_mm@k3=100
+POSTHOOK: Input: default@skew_dp_union_mm@k3=101
+POSTHOOK: Input: default@skew_dp_union_mm@k3=102
+POSTHOOK: Input: default@skew_dp_union_mm@k3=103
+POSTHOOK: Input: default@skew_dp_union_mm@k3=104
+POSTHOOK: Input: default@skew_dp_union_mm@k3=107
+POSTHOOK: Input: default@skew_dp_union_mm@k3=14
+POSTHOOK: Input: default@skew_dp_union_mm@k3=4
+POSTHOOK: Input: default@skew_dp_union_mm@k3=97
+POSTHOOK: Input: default@skew_dp_union_mm@k3=98
+#### A masked pattern was here ####
+0 0 0 0
+1 2 3 4
+10 10 10 10
+11 12 13 14
+97 97 97 97
+98 98 98 98
+98 99 100 101
+99 100 101 102
+100 100 100 100
+101 102 103 104
+103 103 103 103
+104 105 106 107
+PREHOOK: query: drop table skew_dp_union_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@skew_dp_union_mm
+PREHOOK: Output: default@skew_dp_union_mm
+POSTHOOK: query: drop table skew_dp_union_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@skew_dp_union_mm
+POSTHOOK: Output: default@skew_dp_union_mm
+PREHOOK: query: create table merge0_mm (id int) stored as orc tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@merge0_mm
+POSTHOOK: query: create table merge0_mm (id int) stored as orc tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@merge0_mm
+PREHOOK: query: insert into table merge0_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@merge0_mm
+POSTHOOK: query: insert into table merge0_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@merge0_mm
+POSTHOOK: Lineage: merge0_mm.id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from merge0_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@merge0_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from merge0_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@merge0_mm
+#### A masked pattern was here ####
+98
+97
+0
+10
+100
+103
+PREHOOK: query: insert into table merge0_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@merge0_mm
+POSTHOOK: query: insert into table merge0_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@merge0_mm
+POSTHOOK: Lineage: merge0_mm.id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from merge0_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@merge0_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from merge0_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@merge0_mm
+#### A masked pattern was here ####
+98
+97
+0
+10
+100
+103
+98
+97
+0
+10
+100
+103
+PREHOOK: query: drop table merge0_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@merge0_mm
+PREHOOK: Output: default@merge0_mm
+POSTHOOK: query: drop table merge0_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@merge0_mm
+POSTHOOK: Output: default@merge0_mm
+PREHOOK: query: create table merge2_mm (id int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@merge2_mm
+POSTHOOK: query: create table merge2_mm (id int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@merge2_mm
+PREHOOK: query: insert into table merge2_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@merge2_mm
+POSTHOOK: query: insert into table merge2_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@merge2_mm
+POSTHOOK: Lineage: merge2_mm.id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from merge2_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@merge2_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from merge2_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@merge2_mm
+#### A masked pattern was here ####
+98
+97
+0
+10
+100
+103
+PREHOOK: query: insert into table merge2_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@merge2_mm
+POSTHOOK: query: insert into table merge2_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@merge2_mm
+POSTHOOK: Lineage: merge2_mm.id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from merge2_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@merge2_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from merge2_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@merge2_mm
+#### A masked pattern was here ####
+98
+97
+0
+10
+100
+103
+98
+97
+0
+10
+100
+103
+PREHOOK: query: drop table merge2_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@merge2_mm
+PREHOOK: Output: default@merge2_mm
+POSTHOOK: query: drop table merge2_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@merge2_mm
+POSTHOOK: Output: default@merge2_mm
+PREHOOK: query: create table merge1_mm (id int) partitioned by (key int) stored as orc tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@merge1_mm
+POSTHOOK: query: create table merge1_mm (id int) partitioned by (key int) stored as orc tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@merge1_mm
+PREHOOK: query: insert into table merge1_mm partition (key) select key, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@merge1_mm
+POSTHOOK: query: insert into table merge1_mm partition (key) select key, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@merge1_mm@key=0
+POSTHOOK: Output: default@merge1_mm@key=10
+POSTHOOK: Output: default@merge1_mm@key=100
+POSTHOOK: Output: default@merge1_mm@key=103
+POSTHOOK: Output: default@merge1_mm@key=97
+POSTHOOK: Output: default@merge1_mm@key=98
+POSTHOOK: Lineage: merge1_mm PARTITION(key=0).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=100).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=103).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=10).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=97).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=98).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from merge1_mm order by id, key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@merge1_mm
+PREHOOK: Input: default@merge1_mm@key=0
+PREHOOK: Input: default@merge1_mm@key=10
+PREHOOK: Input: default@merge1_mm@key=100
+PREHOOK: Input: default@merge1_mm@key=103
+PREHOOK: Input: default@merge1_mm@key=97
+PREHOOK: Input: default@merge1_mm@key=98
+#### A masked pattern was here ####
+POSTHOOK: query: select * from merge1_mm order by id, key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@merge1_mm
+POSTHOOK: Input: default@merge1_mm@key=0
+POSTHOOK: Input: default@merge1_mm@key=10
+POSTHOOK: Input: default@merge1_mm@key=100
+POSTHOOK: Input: default@merge1_mm@key=103
+POSTHOOK: Input: default@merge1_mm@key=97
+POSTHOOK: Input: default@merge1_mm@key=98
+#### A masked pattern was here ####
+0 0
+10 10
+97 97
+98 98
+100 100
+103 103
+PREHOOK: query: insert into table merge1_mm partition (key) select key, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@merge1_mm
+POSTHOOK: query: insert into table merge1_mm partition (key) select key, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@merge1_mm@key=0
+POSTHOOK: Output: default@merge1_mm@key=10
+POSTHOOK: Output: default@merge1_mm@key=100
+POSTHOOK: Output: default@merge1_mm@key=103
+POSTHOOK: Output: default@merge1_mm@key=97
+POSTHOOK: Output: default@merge1_mm@key=98
+POSTHOOK: Lineage: merge1_mm PARTITION(key=0).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=100).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=103).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=10).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=97).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=98).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from merge1_mm order by id, key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@merge1_mm
+PREHOOK: Input: default@merge1_mm@key=0
+PREHOOK: Input: default@merge1_mm@key=10
+PREHOOK: Input: default@merge1_mm@key=100
+PREHOOK: Input: default@merge1_mm@key=103
+PREHOOK: Input: default@merge1_mm@key=97
+PREHOOK: Input: default@merge1_mm@key=98
+#### A masked pattern was here ####
+POSTHOOK: query: select * from merge1_mm order by id, key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@merge1_mm
+POSTHOOK: Input: default@merge1_mm@key=0
+POSTHOOK: Input: default@merge1_mm@key=10
+POSTHOOK: Input: default@merge1_mm@key=100
+POSTHOOK: Input: default@merge1_mm@key=103
+POSTHOOK: Input: default@merge1_mm@key=97
+POSTHOOK: Input: default@merge1_mm@key=98
+#### A masked pattern was here ####
+0 0
+0 0
+10 10
+10 10
+97 97
+97 97
+98 98
+98 98
+100 100
+100 100
+103 103
+103 103
+PREHOOK: query: drop table merge1_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@merge1_mm
+PREHOOK: Output: default@merge1_mm
+POSTHOOK: query: drop table merge1_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@merge1_mm
+POSTHOOK: Output: default@merge1_mm
+PREHOOK: query: drop table ctas0_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table ctas0_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table ctas0_mm tblproperties ("transactional"="true", "transactional_properties"="insert_only") as select * from intermediate
+PREHOOK: type: CREATETABLE_AS_SELECT
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: database:default
+PREHOOK: Output: default@ctas0_mm
+POSTHOOK: query: create table ctas0_mm tblproperties ("transactional"="true", "transactional_properties"="insert_only") as select * from intermediate
+POSTHOOK: type: CREATETABLE_AS_SELECT
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@ctas0_mm
+POSTHOOK: Lineage: ctas0_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: ctas0_mm.p SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+PREHOOK: query: select * from ctas0_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ctas0_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from ctas0_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ctas0_mm
+#### A masked pattern was here ####
+98 455
+97 455
+0 456
+10 456
+100 457
+103 457
+PREHOOK: query: drop table ctas0_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@ctas0_mm
+PREHOOK: Output: default@ctas0_mm
+POSTHOOK: query: drop table ctas0_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@ctas0_mm
+POSTHOOK: Output: default@ctas0_mm
+PREHOOK: query: drop table ctas1_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table ctas1_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table ctas1_mm tblproperties ("transactional"="true", "transactional_properties"="insert_only") as
+ select * from intermediate union all select * from intermediate
+PREHOOK: type: CREATETABLE_AS_SELECT
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: database:default
+PREHOOK: Output: default@ctas1_mm
+POSTHOOK: query: create table ctas1_mm tblproperties ("transactional"="true", "transactional_properties"="insert_only") as
+ select * from intermediate union all select * from intermediate
+POSTHOOK: type: CREATETABLE_AS_SELECT
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@ctas1_mm
+POSTHOOK: Lineage: ctas1_mm.key EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: ctas1_mm.p EXPRESSION [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+PREHOOK: query: select * from ctas1_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ctas1_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from ctas1_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ctas1_mm
+#### A masked pattern was here ####
+98 455
+98 455
+97 455
+97 455
+0 456
+0 456
+10 456
+10 456
+100 457
+100 457
+103 457
+103 457
+PREHOOK: query: drop table ctas1_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@ctas1_mm
+PREHOOK: Output: default@ctas1_mm
+POSTHOOK: query: drop table ctas1_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@ctas1_mm
+POSTHOOK: Output: default@ctas1_mm
+PREHOOK: query: drop table multi0_1_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table multi0_1_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: drop table multi0_2_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table multi0_2_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table multi0_1_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@multi0_1_mm
+POSTHOOK: query: create table multi0_1_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@multi0_1_mm
+PREHOOK: query: create table multi0_2_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@multi0_2_mm
+POSTHOOK: query: create table multi0_2_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@multi0_2_mm
+PREHOOK: query: insert into table multi0_1_mm select key, p from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi0_1_mm
+POSTHOOK: query: insert into table multi0_1_mm select key, p from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi0_1_mm
+POSTHOOK: Lineage: multi0_1_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi0_1_mm.key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+PREHOOK: query: insert into table multi0_2_mm select p, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi0_2_mm
+POSTHOOK: query: insert into table multi0_2_mm select p, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi0_2_mm
+POSTHOOK: Lineage: multi0_2_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi0_2_mm.key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from multi0_1_mm order by key, key2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi0_1_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from multi0_1_mm order by key, key2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi0_1_mm
+#### A masked pattern was here ####
+0 456
+10 456
+97 455
+98 455
+100 457
+103 457
+PREHOOK: query: select * from multi0_2_mm order by key, key2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi0_2_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from multi0_2_mm order by key, key2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi0_2_mm
+#### A masked pattern was here ####
+455 97
+455 98
+456 0
+456 10
+457 100
+457 103
+PREHOOK: query: insert into table multi0_1_mm select p, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi0_1_mm
+POSTHOOK: query: insert into table multi0_1_mm select p, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi0_1_mm
+POSTHOOK: Lineage: multi0_1_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi0_1_mm.key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: insert into table multi0_2_mm select key, p from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi0_2_mm
+POSTHOOK: query: insert into table multi0_2_mm select key, p from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi0_2_mm
+POSTHOOK: Lineage: multi0_2_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi0_2_mm.key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+PREHOOK: query: select * from multi0_1_mm order by key, key2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi0_1_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from multi0_1_mm order by key, key2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi0_1_mm
+#### A masked pattern was here ####
+0 456
+10 456
+97 455
+98 455
+100 457
+103 457
+455 97
+455 98
+456 0
+456 10
+457 100
+457 103
+PREHOOK: query: select * from multi0_2_mm order by key, key2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi0_2_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from multi0_2_mm order by key, key2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi0_2_mm
+#### A masked pattern was here ####
+0 456
+10 456
+97 455
+98 455
+100 457
+103 457
+455 97
+455 98
+456 0
+456 10
+457 100
+457 103
+PREHOOK: query: drop table multi0_1_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@multi0_1_mm
+PREHOOK: Output: default@multi0_1_mm
+POSTHOOK: query: drop table multi0_1_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@multi0_1_mm
+POSTHOOK: Output: default@multi0_1_mm
+PREHOOK: query: drop table multi0_2_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@multi0_2_mm
+PREHOOK: Output: default@multi0_2_mm
+POSTHOOK: query: drop table multi0_2_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@multi0_2_mm
+POSTHOOK: Output: default@multi0_2_mm
+PREHOOK: query: drop table multi1_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table multi1_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table multi1_mm (key int, key2 int) partitioned by (p int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@multi1_mm
+POSTHOOK: query: create table multi1_mm (key int, key2 int) partitioned by (p int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@multi1_mm
+PREHOOK: query: from intermediate
+insert into table multi1_mm partition(p=1) select p, key
+insert into table multi1_mm partition(p=2) select key, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi1_mm@p=1
+PREHOOK: Output: default@multi1_mm@p=2
+POSTHOOK: query: from intermediate
+insert into table multi1_mm partition(p=1) select p, key
+insert into table multi1_mm partition(p=2) select key, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: Output: default@multi1_mm@p=2
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=2).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=2).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+PREHOOK: query: select * from multi1_mm order by key, key2, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi1_mm
+PREHOOK: Input: default@multi1_mm@p=1
+PREHOOK: Input: default@multi1_mm@p=2
+#### A masked pattern was here ####
+POSTHOOK: query: select * from multi1_mm order by key, key2, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi1_mm
+POSTHOOK: Input: default@multi1_mm@p=1
+POSTHOOK: Input: default@multi1_mm@p=2
+#### A masked pattern was here ####
+0 456 2
+10 456 2
+97 455 2
+98 455 2
+100 457 2
+103 457 2
+455 97 1
+455 98 1
+456 0 1
+456 10 1
+457 100 1
+457 103 1
+PREHOOK: query: insert into table multi1_mm partition(p=2) select p, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi1_mm@p=2
+POSTHOOK: query: insert into table multi1_mm partition(p=2) select p, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi1_mm@p=2
+POSTHOOK: Lineage: multi1_mm PARTITION(p=2).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=2).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: insert into table multi1_mm partition(p=1) select key, p from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: query: insert into table multi1_mm partition(p=1) select key, p from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+PREHOOK: query: select * from multi1_mm order by key, key2, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi1_mm
+PREHOOK: Input: default@multi1_mm@p=1
+PREHOOK: Input: default@multi1_mm@p=2
+#### A masked pattern was here ####
+POSTHOOK: query: select * from multi1_mm order by key, key2, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi1_mm
+POSTHOOK: Input: default@multi1_mm@p=1
+POSTHOOK: Input: default@multi1_mm@p=2
+#### A masked pattern was here ####
+0 456 1
+0 456 2
+10 456 1
+10 456 2
+97 455 1
+97 455 2
+98 455 1
+98 455 2
+100 457 1
+100 457 2
+103 457 1
+103 457 2
+455 97 1
+455 97 2
+455 98 1
+455 98 2
+456 0 1
+456 0 2
+456 10 1
+456 10 2
+457 100 1
+457 100 2
+457 103 1
+457 103 2
+PREHOOK: query: from intermediate
+insert into table multi1_mm partition(p) select p, key, p
+insert into table multi1_mm partition(p=1) select key, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi1_mm
+PREHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: query: from intermediate
+insert into table multi1_mm partition(p) select p, key, p
+insert into table multi1_mm partition(p=1) select key, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi1_mm@p=1
- POSTHOOK: Output: default@multi1_mm@p=455
- POSTHOOK: Output: default@multi1_mm@p=456
- POSTHOOK: Output: default@multi1_mm@p=457
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
- POSTHOOK: Lineage: multi1_mm PARTITION(p=455).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
- POSTHOOK: Lineage: multi1_mm PARTITION(p=455).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
- POSTHOOK: Lineage: multi1_mm PARTITION(p=456).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
- POSTHOOK: Lineage: multi1_mm PARTITION(p=456).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
- POSTHOOK: Lineage: multi1_mm PARTITION(p=457).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
- POSTHOOK: Lineage: multi1_mm PARTITION(p=457).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
++POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
++POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select key, key2, p from multi1_mm order by key, key2, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi1_mm
+PREHOOK: Input: default@multi1_mm@p=1
+PREHOOK: Input: default@multi1_mm@p=2
- PREHOOK: Input: default@multi1_mm@p=455
- PREHOOK: Input: default@multi1_mm@p=456
- PREHOOK: Input: default@multi1_mm@p=457
+#### A masked pattern was here ####
+POSTHOOK: query: select key, key2, p from multi1_mm order by key, key2, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi1_mm
+POSTHOOK: Input: default@multi1_mm@p=1
+POSTHOOK: Input: default@multi1_mm@p=2
- POSTHOOK: Input: default@multi1_mm@p=455
- POSTHOOK: Input: default@multi1_mm@p=456
- POSTHOOK: Input: default@multi1_mm@p=457
+#### A masked pattern was here ####
+0 456 1
+0 456 1
+0 456 2
+10 456 1
+10 456 1
+10 456 2
+97 455 1
+97 455 1
+97 455 2
+98 455 1
+98 455 1
+98 455 2
+100 457 1
+100 457 1
+100 457 2
+103 457 1
+103 457 1
+103 457 2
+455 97 1
+455 97 2
- 455 97 455
+455 98 1
+455 98 2
- 455 98 455
+456 0 1
+456 0 2
- 456 0 456
+456 10 1
+456 10 2
- 456 10 456
+457 100 1
+457 100 2
- 457 100 457
+457 103 1
+457 103 2
- 457 103 457
+PREHOOK: query: from intermediate
+insert into table multi1_mm partition(p) select p, key, 1
+insert into table multi1_mm partition(p=1) select key, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi1_mm
+PREHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: query: from intermediate
+insert into table multi1_mm partition(p) select p, key, 1
+insert into table multi1_mm partition(p=1) select key, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select key, key2, p from multi1_mm order by key, key2, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi1_mm
+PREHOOK: Input: default@multi1_mm@p=1
+PREHOOK: Input: default@multi1_mm@p=2
- PREHOOK: Input: default@multi1_mm@p=455
- PREHOOK: Input: default@multi1_mm@p=456
- PREHOOK: Input: default@multi1_mm@p=457
+#### A masked pattern was here ####
+POSTHOOK: query: select key, key2, p from multi1_mm order by key, key2, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi1_mm
+POSTHOOK: Input: default@multi1_mm@p=1
+POSTHOOK: Input: default@multi1_mm@p=2
- POSTHOOK: Input: default@multi1_mm@p=455
- POSTHOOK: Input: default@multi1_mm@p=456
- POSTHOOK: Input: default@multi1_mm@p=457
+#### A masked pattern was here ####
+0 456 1
+0 456 1
+0 456 1
+0 456 2
+10 456 1
+10 456 1
+10 456 1
+10 456 2
+97 455 1
+97 455 1
+97 455 1
+97 455 2
+98 455 1
+98 455 1
+98 455 1
+98 455 2
+100 457 1
+100 457 1
+100 457 1
+100 457 2
+103 457 1
+103 457 1
+103 457 1
+103 457 2
+455 97 1
+455 97 1
+455 97 2
- 455 97 455
+455 98 1
+455 98 1
+455 98 2
- 455 98 455
+456 0 1
+456 0 1
+456 0 2
- 456 0 456
+456 10 1
+456 10 1
+456 10 2
- 456 10 456
+457 100 1
+457 100 1
+457 100 2
- 457 100 457
+457 103 1
+457 103 1
+457 103 2
- 457 103 457
+PREHOOK: query: drop table multi1_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@multi1_mm
+PREHOOK: Output: default@multi1_mm
+POSTHOOK: query: drop table multi1_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@multi1_mm
+POSTHOOK: Output: default@multi1_mm
+PREHOOK: query: drop table stats_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table stats_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table stats_mm(key int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@stats_mm
+POSTHOOK: query: create table stats_mm(key int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@stats_mm
+PREHOOK: query: insert into table stats_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@stats_mm
+POSTHOOK: query: insert into table stats_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@stats_mm
+POSTHOOK: Lineage: stats_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: desc formatted stats_mm
+PREHOOK: type: DESCTABLE
+PREHOOK: Input: default@stats_mm
+POSTHOOK: query: desc formatted stats_mm
+POSTHOOK: type: DESCTABLE
+POSTHOOK: Input: default@stats_mm
+# col_name data_type comment
+
+key int
+
+# Detailed Table Information
+Database: default
+#### A masked pattern was here ####
+Retention: 0
+#### A masked pattern was here ####
+Table Type: MANAGED_TABLE
+Table Parameters:
+ COLUMN_STATS_ACCURATE {\"BASIC_STATS\":\"true\"}
+ numFiles 1
+ numRows 6
+ rawDataSize 13
+ totalSize 19
+ transactional true
+ transactional_properties insert_only
+#### A masked pattern was here ####
+
+# Storage Information
+SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+InputFormat: org.apache.hadoop.mapred.TextInputFormat
+OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+Compressed: No
+Num Buckets: -1
+Bucket Columns: []
+Sort Columns: []
+Storage Desc Params:
+ serialization.format 1
+PREHOOK: query: insert into table stats_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@stats_mm
+POSTHOOK: query: insert into table stats_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@stats_mm
+POSTHOOK: Lineage: stats_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: desc formatted stats_mm
+PREHOOK: type: DESCTABLE
+PREHOOK: Input: default@stats_mm
+POSTHOOK: query: desc formatted stats_mm
+POSTHOOK: type: DESCTABLE
+POSTHOOK: Input: default@stats_mm
+# col_name data_type comment
+
+key int
+
+# Detailed Table Information
+Database: default
+#### A masked pattern was here ####
+Retention: 0
+#### A masked pattern was here ####
+Table Type: MANAGED_TABLE
+Table Parameters:
+ COLUMN_STATS_ACCURATE {\"BASIC_STATS\":\"true\"}
+ numFiles 2
+ numRows 12
+ rawDataSize 26
+ totalSize 38
+ transactional true
+ transactional_properties insert_only
+#### A masked pattern was here ####
+
+# Storage Information
+SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+InputFormat: org.apache.hadoop.mapred.TextInputFormat
+OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+Compressed: No
+Num Buckets: -1
+Bucket Columns: []
+Sort Columns: []
+Storage Desc Params:
+ serialization.format 1
+PREHOOK: query: drop table stats_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@stats_mm
+PREHOOK: Output: default@stats_mm
+POSTHOOK: query: drop table stats_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@stats_mm
+POSTHOOK: Output: default@stats_mm
+PREHOOK: query: drop table stats2_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table stats2_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table stats2_mm tblproperties("transactional"="true", "transactional_properties"="insert_only") as select array(key, value) from src
+PREHOOK: type: CREATETABLE_AS_SELECT
+PREHOOK: Input: default@src
+PREHOOK: Output: database:default
+PREHOOK: Output: default@stats2_mm
+POSTHOOK: query: create table stats2_mm tblproperties("transactional"="true", "transactional_properties"="insert_only") as select array(key, value) from src
+POSTHOOK: type: CREATETABLE_AS_SELECT
+POSTHOOK: Input: default@src
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@stats2_mm
+POSTHOOK: Lineage: stats2_mm._c0 EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), (src)src.FieldSchema(name:value, type:string, comment:default), ]
+PREHOOK: query: desc formatted stats2_mm
+PREHOOK: type: DESCTABLE
+PREHOOK: Input: default@stats2_mm
+POSTHOOK: query: desc formatted stats2_mm
+POSTHOOK: type: DESCTABLE
+POSTHOOK: Input: default@stats2_mm
+# col_name data_type comment
+
+_c0 array<string>
+
+# Detailed Table Information
+Database: default
+#### A masked pattern was here ####
+Retention: 0
+#### A masked pattern was here ####
+Table Type: MANAGED_TABLE
+Table Parameters:
+ COLUMN_STATS_ACCURATE {\"BASIC_STATS\":\"true\"}
+ numFiles 1
+ numRows 500
+ rawDataSize 5312
+ totalSize 5812
+ transactional true
+ transactional_properties insert_only
+#### A masked pattern was here ####
+
+# Storage Information
+SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+InputFormat: org.apache.hadoop.mapred.TextInputFormat
+OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+Compressed: No
+Num Buckets: -1
+Bucket Columns: []
+Sort Columns: []
+Storage Desc Params:
+ serialization.format 1
+PREHOOK: query: drop table stats2_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@stats2_mm
+PREHOOK: Output: default@stats2_mm
+POSTHOOK: query: drop table stats2_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@stats2_mm
+POSTHOOK: Output: default@stats2_mm
+PREHOOK: query: CREATE TABLE skewjoin_mm(key INT, value STRING) STORED AS TEXTFILE tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@skewjoin_mm
+POSTHOOK: query: CREATE TABLE skewjoin_mm(key INT, value STRING) STORED AS TEXTFILE tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@skewjoin_mm
+PREHOOK: query: FROM src src1 JOIN src src2 ON (src1.key = src2.key) INSERT into TABLE skewjoin_mm SELECT src1.key, src2.value
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: default@skewjoin_mm
+POSTHOOK: query: FROM src src1 JOIN src src2 ON (src1.key = src2.key) INSERT into TABLE skewjoin_mm SELECT src1.key, src2.value
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: default@skewjoin_mm
+POSTHOOK: Lineage: skewjoin_mm.key EXPRESSION [(src)src1.FieldSchema(name:key, type:string, comment:default), ]
+POSTHOOK: Lineage: skewjoin_mm.value SIMPLE [(src)src2.FieldSchema(name:value, type:string, comment:default), ]
+PREHOOK: query: select count(distinct key) from skewjoin_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@skewjoin_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select count(distinct key) from skewjoin_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@skewjoin_mm
+#### A masked pattern was here ####
+309
+PREHOOK: query: drop table skewjoin_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@skewjoin_mm
+PREHOOK: Output: default@skewjoin_mm
+POSTHOOK: query: drop table skewjoin_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@skewjoin_mm
+POSTHOOK: Output: default@skewjoin_mm
+PREHOOK: query: CREATE TABLE parquet1_mm(id INT) STORED AS PARQUET tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@parquet1_mm
+POSTHOOK: query: CREATE TABLE parquet1_mm(id INT) STORED AS PARQUET tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@parquet1_mm
+PREHOOK: query: INSERT INTO parquet1_mm VALUES(1), (2)
+PREHOOK: type: QUERY
+PREHOOK: Output: default@parquet1_mm
+POSTHOOK: query: INSERT INTO parquet1_mm VALUES(1), (2)
+POSTHOOK: type: QUERY
+POSTHOOK: Output: default@parquet1_mm
+POSTHOOK: Lineage: parquet1_mm.id EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col1, type:string, comment:), ]
+PREHOOK: query: CREATE TABLE parquet2_mm(id INT, value STRING) STORED AS PARQUET tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@parquet2_mm
+POSTHOOK: query: CREATE TABLE parquet2_mm(id INT, value STRING) STORED AS PARQUET tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@parquet2_mm
+PREHOOK: query: INSERT INTO parquet2_mm VALUES(1, 'value1')
+PREHOOK: type: QUERY
+PREHOOK: Output: default@parquet2_mm
+POSTHOOK: query: INSERT INTO parquet2_mm VALUES(1, 'value1')
+POSTHOOK: type: QUERY
+POSTHOOK: Output: default@parquet2_mm
+POSTHOOK: Lineage: parquet2_mm.id EXPRESSION [(values__tmp__table__2)values__tmp__table__2.FieldSchema(name:tmp_values_col1, type:string, comment:), ]
+POSTHOOK: Lineage: parquet2_mm.value SIMPLE [(values__tmp__table__2)values__tmp__table__2.FieldSchema(name:tmp_values_col2, type:string, comment:), ]
+PREHOOK: query: INSERT INTO parquet2_mm VALUES(1, 'value2')
+PREHOOK: type: QUERY
+PREHOOK: Output: default@parquet2_mm
+POSTHOOK: query: INSERT INTO parquet2_mm VALUES(1, 'value2')
+POSTHOOK: type: QUERY
+POSTHOOK: Output: default@parquet2_mm
+POSTHOOK: Lineage: parquet2_mm.id EXPRESSION [(values__tmp__table__3)values__tmp__table__3.FieldSchema(name:tmp_values_col1, type:string, comment:), ]
+POSTHOOK: Lineage: parquet2_mm.value SIMPLE [(values__tmp__table__3)values__tmp__table__3.FieldSchema(name:tmp_values_col2, type:string, comment:), ]
+PREHOOK: query: select parquet1_mm.id, t1.value, t2.value FROM parquet1_mm
+ JOIN parquet2_mm t1 ON parquet1_mm.id=t1.id
+ JOIN parquet2_mm t2 ON parquet1_mm.id=t2.id
+where t1.value = 'value1' and t2.value = 'value2'
+PREHOOK: type: QUERY
+PREHOOK: Input: default@parquet1_mm
+PREHOOK: Input: default@parquet2_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select parquet1_mm.id, t1.value, t2.value FROM parquet1_mm
+ JOIN parquet2_mm t1 ON parquet1_mm.id=t1.id
+ JOIN parquet2_mm t2 ON parquet1_mm.id=t2.id
+where t1.value = 'value1' and t2.value = 'value2'
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@parquet1_mm
+POSTHOOK: Input: default@parquet2_mm
+#### A masked pattern was here ####
+1 value1 value2
+PREHOOK: query: drop table parquet1_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@parquet1_mm
+PREHOOK: Output: default@parquet1_mm
+POSTHOOK: query: drop table parquet1_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@parquet1_mm
+POSTHOOK: Output: default@parquet1_mm
+PREHOOK: query: drop table parquet2_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@parquet2_mm
+PREHOOK: Output: default@parquet2_mm
+POSTHOOK: query: drop table parquet2_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@parquet2_mm
+POSTHOOK: Output: default@parquet2_mm
+PREHOOK: query: DROP TABLE IF EXISTS temp1
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: DROP TABLE IF EXISTS temp1
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: CREATE TEMPORARY TABLE temp1 (a int) TBLPROPERTIES
<TRUNCATED>
[33/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Sergey Shelukhin)
Posted by se...@apache.org.
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
index b000745,c8ad795..ed527b8
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
@@@ -392,12 -435,110 +390,12 @@@ public class MoveTask extends Task<Move
// deal with dynamic partitions
DynamicPartitionCtx dpCtx = tbd.getDPCtx();
if (dpCtx != null && dpCtx.getNumDPCols() > 0) { // dynamic partitions
-
- List<LinkedHashMap<String, String>> dps = Utilities.getFullDPSpecs(conf, dpCtx);
-
- console.printInfo(System.getProperty("line.separator"));
- long startTime = System.currentTimeMillis();
- // load the list of DP partitions and return the list of partition specs
- // TODO: In a follow-up to HIVE-1361, we should refactor loadDynamicPartitions
- // to use Utilities.getFullDPSpecs() to get the list of full partSpecs.
- // After that check the number of DPs created to not exceed the limit and
- // iterate over it and call loadPartition() here.
- // The reason we don't do inside HIVE-1361 is the latter is large and we
- // want to isolate any potential issue it may introduce.
- Map<Map<String, String>, Partition> dp =
- db.loadDynamicPartitions(
- tbd.getSourcePath(),
- tbd.getTable().getTableName(),
- tbd.getPartitionSpec(),
- tbd.getReplace(),
- dpCtx.getNumDPCols(),
- isSkewedStoredAsDirs(tbd),
- work.getLoadTableWork().getWriteType() != AcidUtils.Operation.NOT_ACID,
- work.getLoadTableWork().getCurrentTransactionId(), hasFollowingStatsTask(),
- work.getLoadTableWork().getWriteType());
-
- // publish DP columns to its subscribers
- if (dps != null && dps.size() > 0) {
- pushFeed(FeedType.DYNAMIC_PARTITIONS, dp.values());
- }
-
- String loadTime = "\t Time taken to load dynamic partitions: " +
- (System.currentTimeMillis() - startTime)/1000.0 + " seconds";
- console.printInfo(loadTime);
- LOG.info(loadTime);
-
- if (dp.size() == 0 && conf.getBoolVar(HiveConf.ConfVars.HIVE_ERROR_ON_EMPTY_PARTITION)) {
- throw new HiveException("This query creates no partitions." +
- " To turn off this error, set hive.error.on.empty.partition=false.");
- }
-
- startTime = System.currentTimeMillis();
- // for each partition spec, get the partition
- // and put it to WriteEntity for post-exec hook
- for(Map.Entry<Map<String, String>, Partition> entry : dp.entrySet()) {
- Partition partn = entry.getValue();
-
- if (bucketCols != null || sortCols != null) {
- updatePartitionBucketSortColumns(
- db, table, partn, bucketCols, numBuckets, sortCols);
- }
-
- WriteEntity enty = new WriteEntity(partn,
- getWriteType(tbd, work.getLoadTableWork().getWriteType()));
- if (work.getOutputs() != null) {
- DDLTask.addIfAbsentByName(enty, work.getOutputs());
- }
- // Need to update the queryPlan's output as well so that post-exec hook get executed.
- // This is only needed for dynamic partitioning since for SP the the WriteEntity is
- // constructed at compile time and the queryPlan already contains that.
- // For DP, WriteEntity creation is deferred at this stage so we need to update
- // queryPlan here.
- if (queryPlan.getOutputs() == null) {
- queryPlan.setOutputs(new LinkedHashSet<WriteEntity>());
- }
- queryPlan.getOutputs().add(enty);
-
- // update columnar lineage for each partition
- dc = new DataContainer(table.getTTable(), partn.getTPartition());
-
- // Don't set lineage on delete as we don't have all the columns
- if (work.getLineagState() != null &&
- work.getLoadTableWork().getWriteType() != AcidUtils.Operation.DELETE &&
- work.getLoadTableWork().getWriteType() != AcidUtils.Operation.UPDATE) {
- work.getLineagState().setLineage(tbd.getSourcePath(), dc,
- table.getCols());
- }
- LOG.info("\tLoading partition " + entry.getKey());
- }
- console.printInfo("\t Time taken for adding to write entity : " +
- (System.currentTimeMillis() - startTime)/1000.0 + " seconds");
- dc = null; // reset data container to prevent it being added again.
+ dc = handleDynParts(db, table, tbd, ti, dpCtx);
} else { // static partitions
- List<String> partVals = MetaStoreUtils.getPvals(table.getPartCols(),
- tbd.getPartitionSpec());
- db.validatePartitionNameCharacters(partVals);
- db.loadPartition(tbd.getSourcePath(), tbd.getTable().getTableName(),
- tbd.getPartitionSpec(), tbd.getReplace(),
- tbd.getInheritTableSpecs(), isSkewedStoredAsDirs(tbd), work.isSrcLocal(),
- work.getLoadTableWork().getWriteType() != AcidUtils.Operation.NOT_ACID, hasFollowingStatsTask());
- Partition partn = db.getPartition(table, tbd.getPartitionSpec(), false);
-
- if (bucketCols != null || sortCols != null) {
- updatePartitionBucketSortColumns(db, table, partn, bucketCols,
- numBuckets, sortCols);
- }
-
- dc = new DataContainer(table.getTTable(), partn.getTPartition());
- // add this partition to post-execution hook
- if (work.getOutputs() != null) {
- DDLTask.addIfAbsentByName(new WriteEntity(partn,
- getWriteType(tbd, work.getLoadTableWork().getWriteType())), work.getOutputs());
- }
- }
+ dc = handleStaticParts(db, table, tbd, ti);
+ }
}
- if (SessionState.get() != null && dc != null) {
+ if (work.getLineagState() != null && dc != null) {
// If we are doing an update or a delete the number of columns in the table will not
// match the number of columns in the file sink. For update there will be one too many
// (because of the ROW__ID), and in the case of the delete there will be just the
@@@ -445,231 -586,6 +443,231 @@@
return (1);
}
}
+
+ private DataContainer handleStaticParts(Hive db, Table table, LoadTableDesc tbd,
+ TaskInformation ti) throws HiveException, IOException, InvalidOperationException {
+ List<String> partVals = MetaStoreUtils.getPvals(table.getPartCols(), tbd.getPartitionSpec());
+ db.validatePartitionNameCharacters(partVals);
+ Utilities.LOG14535.info("loadPartition called from " + tbd.getSourcePath()
+ + " into " + tbd.getTable().getTableName());
+ db.loadPartition(tbd.getSourcePath(), tbd.getTable().getTableName(),
+ tbd.getPartitionSpec(), tbd.getReplace(),
+ tbd.getInheritTableSpecs(), isSkewedStoredAsDirs(tbd), work.isSrcLocal(),
+ work.getLoadTableWork().getWriteType() != AcidUtils.Operation.NOT_ACID &&
+ !tbd.isMmTable(),
+ hasFollowingStatsTask(), tbd.getTxnId(), tbd.getStmtId());
+ Partition partn = db.getPartition(table, tbd.getPartitionSpec(), false);
+
+ // See the comment inside updatePartitionBucketSortColumns.
+ if (!tbd.isMmTable() && (ti.bucketCols != null || ti.sortCols != null)) {
+ updatePartitionBucketSortColumns(db, table, partn, ti.bucketCols,
+ ti.numBuckets, ti.sortCols);
+ }
+
+ DataContainer dc = new DataContainer(table.getTTable(), partn.getTPartition());
+ // add this partition to post-execution hook
+ if (work.getOutputs() != null) {
+ DDLTask.addIfAbsentByName(new WriteEntity(partn,
+ getWriteType(tbd, work.getLoadTableWork().getWriteType())), work.getOutputs());
+ }
+ return dc;
+ }
+
+ private DataContainer handleDynParts(Hive db, Table table, LoadTableDesc tbd,
+ TaskInformation ti, DynamicPartitionCtx dpCtx) throws HiveException,
+ IOException, InvalidOperationException {
+ DataContainer dc;
+ List<LinkedHashMap<String, String>> dps = Utilities.getFullDPSpecs(conf, dpCtx);
+
+ console.printInfo(System.getProperty("line.separator"));
+ long startTime = System.currentTimeMillis();
+ // load the list of DP partitions and return the list of partition specs
+ // TODO: In a follow-up to HIVE-1361, we should refactor loadDynamicPartitions
+ // to use Utilities.getFullDPSpecs() to get the list of full partSpecs.
+ // After that check the number of DPs created to not exceed the limit and
+ // iterate over it and call loadPartition() here.
+ // The reason we don't do inside HIVE-1361 is the latter is large and we
+ // want to isolate any potential issue it may introduce.
+ if (tbd.isMmTable() && !tbd.isCommitMmWrite()) {
+ throw new HiveException("Only single-partition LoadTableDesc can skip commiting write ID");
+ }
+ Map<Map<String, String>, Partition> dp =
+ db.loadDynamicPartitions(
+ tbd.getSourcePath(),
+ tbd.getTable().getTableName(),
+ tbd.getPartitionSpec(),
+ tbd.getReplace(),
+ dpCtx.getNumDPCols(),
+ (tbd.getLbCtx() == null) ? 0 : tbd.getLbCtx().calculateListBucketingLevel(),
+ work.getLoadTableWork().getWriteType() != AcidUtils.Operation.NOT_ACID &&
+ !tbd.isMmTable(),
- SessionState.get().getTxnMgr().getCurrentTxnId(), tbd.getStmtId(), hasFollowingStatsTask(),
++ work.getLoadTableWork().getTxnId(), tbd.getStmtId(), hasFollowingStatsTask(),
+ work.getLoadTableWork().getWriteType());
+
+ // publish DP columns to its subscribers
+ if (dps != null && dps.size() > 0) {
+ pushFeed(FeedType.DYNAMIC_PARTITIONS, dp.values());
+ }
+
+ String loadTime = "\t Time taken to load dynamic partitions: " +
+ (System.currentTimeMillis() - startTime)/1000.0 + " seconds";
+ console.printInfo(loadTime);
+ LOG.info(loadTime);
+
+ if (dp.size() == 0 && conf.getBoolVar(HiveConf.ConfVars.HIVE_ERROR_ON_EMPTY_PARTITION)) {
+ throw new HiveException("This query creates no partitions." +
+ " To turn off this error, set hive.error.on.empty.partition=false.");
+ }
+
+ startTime = System.currentTimeMillis();
+ // for each partition spec, get the partition
+ // and put it to WriteEntity for post-exec hook
+ for(Map.Entry<Map<String, String>, Partition> entry : dp.entrySet()) {
+ Partition partn = entry.getValue();
+
+ // See the comment inside updatePartitionBucketSortColumns.
+ if (!tbd.isMmTable() && (ti.bucketCols != null || ti.sortCols != null)) {
+ updatePartitionBucketSortColumns(
+ db, table, partn, ti.bucketCols, ti.numBuckets, ti.sortCols);
+ }
+
+ WriteEntity enty = new WriteEntity(partn,
+ getWriteType(tbd, work.getLoadTableWork().getWriteType()));
+ if (work.getOutputs() != null) {
+ DDLTask.addIfAbsentByName(enty, work.getOutputs());
+ }
+ // Need to update the queryPlan's output as well so that post-exec hook get executed.
+ // This is only needed for dynamic partitioning since for SP the the WriteEntity is
+ // constructed at compile time and the queryPlan already contains that.
+ // For DP, WriteEntity creation is deferred at this stage so we need to update
+ // queryPlan here.
+ if (queryPlan.getOutputs() == null) {
+ queryPlan.setOutputs(new LinkedHashSet<WriteEntity>());
+ }
+ queryPlan.getOutputs().add(enty);
+
+ // update columnar lineage for each partition
+ dc = new DataContainer(table.getTTable(), partn.getTPartition());
+
+ // Don't set lineage on delete as we don't have all the columns
- if (SessionState.get() != null &&
++ if (work.getLineagState() != null &&
+ work.getLoadTableWork().getWriteType() != AcidUtils.Operation.DELETE &&
+ work.getLoadTableWork().getWriteType() != AcidUtils.Operation.UPDATE) {
- SessionState.get().getLineageState().setLineage(tbd.getSourcePath(), dc,
++ work.getLineagState().setLineage(tbd.getSourcePath(), dc,
+ table.getCols());
+ }
+ LOG.info("\tLoading partition " + entry.getKey());
+ }
+ console.printInfo("\t Time taken for adding to write entity : " +
+ (System.currentTimeMillis() - startTime)/1000.0 + " seconds");
+ dc = null; // reset data container to prevent it being added again.
+ return dc;
+ }
+
+ private void inferTaskInformation(TaskInformation ti) {
+ // Find the first ancestor of this MoveTask which is some form of map reduce task
+ // (Either standard, local, or a merge)
+ while (ti.task.getParentTasks() != null && ti.task.getParentTasks().size() == 1) {
+ ti.task = (Task)ti.task.getParentTasks().get(0);
+ // If it was a merge task or a local map reduce task, nothing can be inferred
+ if (ti.task instanceof MergeFileTask || ti.task instanceof MapredLocalTask) {
+ break;
+ }
+
+ // If it's a standard map reduce task, check what, if anything, it inferred about
+ // the directory this move task is moving
+ if (ti.task instanceof MapRedTask) {
+ MapredWork work = (MapredWork)ti.task.getWork();
+ MapWork mapWork = work.getMapWork();
+ ti.bucketCols = mapWork.getBucketedColsByDirectory().get(ti.path);
+ ti.sortCols = mapWork.getSortedColsByDirectory().get(ti.path);
+ if (work.getReduceWork() != null) {
+ ti.numBuckets = work.getReduceWork().getNumReduceTasks();
+ }
+
+ if (ti.bucketCols != null || ti.sortCols != null) {
+ // This must be a final map reduce task (the task containing the file sink
+ // operator that writes the final output)
+ assert work.isFinalMapRed();
+ }
+ break;
+ }
+
+ // If it's a move task, get the path the files were moved from, this is what any
+ // preceding map reduce task inferred information about, and moving does not invalidate
+ // those assumptions
+ // This can happen when a conditional merge is added before the final MoveTask, but the
+ // condition for merging is not met, see GenMRFileSink1.
+ if (ti.task instanceof MoveTask) {
+ MoveTask mt = (MoveTask)ti.task;
+ if (mt.getWork().getLoadFileWork() != null) {
+ ti.path = mt.getWork().getLoadFileWork().getSourcePath().toUri().toString();
+ }
+ }
+ }
+ }
+
+ private void checkFileFormats(Hive db, LoadTableDesc tbd, Table table)
+ throws HiveException {
+ if (work.getCheckFileFormat()) {
+ // Get all files from the src directory
+ FileStatus[] dirs;
+ ArrayList<FileStatus> files;
+ FileSystem srcFs; // source filesystem
+ try {
+ srcFs = tbd.getSourcePath().getFileSystem(conf);
+ dirs = srcFs.globStatus(tbd.getSourcePath());
+ files = new ArrayList<FileStatus>();
+ for (int i = 0; (dirs != null && i < dirs.length); i++) {
+ files.addAll(Arrays.asList(srcFs.listStatus(dirs[i].getPath(), FileUtils.HIDDEN_FILES_PATH_FILTER)));
+ // We only check one file, so exit the loop when we have at least
+ // one.
+ if (files.size() > 0) {
+ break;
+ }
+ }
+ } catch (IOException e) {
+ throw new HiveException(
+ "addFiles: filesystem error in check phase", e);
+ }
+
+ // handle file format check for table level
+ if (HiveConf.getBoolVar(conf, HiveConf.ConfVars.HIVECHECKFILEFORMAT)) {
+ boolean flag = true;
+ // work.checkFileFormat is set to true only for Load Task, so assumption here is
+ // dynamic partition context is null
+ if (tbd.getDPCtx() == null) {
+ if (tbd.getPartitionSpec() == null || tbd.getPartitionSpec().isEmpty()) {
+ // Check if the file format of the file matches that of the table.
+ flag = HiveFileFormatUtils.checkInputFormat(
+ srcFs, conf, tbd.getTable().getInputFileFormatClass(), files);
+ } else {
+ // Check if the file format of the file matches that of the partition
+ Partition oldPart = db.getPartition(table, tbd.getPartitionSpec(), false);
+ if (oldPart == null) {
+ // this means we have just created a table and are specifying partition in the
+ // load statement (without pre-creating the partition), in which case lets use
+ // table input format class. inheritTableSpecs defaults to true so when a new
+ // partition is created later it will automatically inherit input format
+ // from table object
+ flag = HiveFileFormatUtils.checkInputFormat(
+ srcFs, conf, tbd.getTable().getInputFileFormatClass(), files);
+ } else {
+ flag = HiveFileFormatUtils.checkInputFormat(
+ srcFs, conf, oldPart.getInputFormatClass(), files);
+ }
+ }
+ if (!flag) {
+ throw new HiveException(ErrorMsg.WRONG_FILE_FORMAT);
+ }
+ } else {
+ LOG.warn("Skipping file format check as dpCtx is not null");
+ }
+ }
+ }
+ }
+
+
/**
* so to make sure we crate WriteEntity with the right WriteType. This is (at this point) only
* for consistency since LockManager (which is the only thing that pays attention to WriteType)
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadPartitions.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadPartitions.java
index 05698d1,5c6ef9f..51c4090
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadPartitions.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadPartitions.java
@@@ -240,10 -238,10 +240,11 @@@ public class LoadPartitions
Path tmpPath) {
LoadTableDesc loadTableWork = new LoadTableDesc(
tmpPath, Utilities.getTableDesc(table), partSpec.getPartSpec(),
- event.replicationSpec().isReplace());
+ event.replicationSpec().isReplace(), SessionState.get().getTxnMgr().getCurrentTxnId()
+ );
loadTableWork.setInheritTableSpecs(false);
- MoveWork work = new MoveWork(new HashSet<>(), new HashSet<>(), loadTableWork, null, false);
+ MoveWork work = new MoveWork(new HashSet<>(), new HashSet<>(), loadTableWork, null, false,
+ context.sessionStateLineageState);
return TaskFactory.get(work, context.hiveConf);
}
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadTable.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadTable.java
index afc04a3,a9a9162..65a3a59
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadTable.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadTable.java
@@@ -225,11 -224,10 +225,12 @@@ public class LoadTable
ReplCopyTask.getLoadCopyTask(replicationSpec, dataPath, tmpPath, context.hiveConf);
LoadTableDesc loadTableWork = new LoadTableDesc(
- tmpPath, Utilities.getTableDesc(table), new TreeMap<>(), replicationSpec.isReplace());
+ tmpPath, Utilities.getTableDesc(table), new TreeMap<>(), replicationSpec.isReplace(),
+ SessionState.get().getTxnMgr().getCurrentTxnId()
+ );
MoveWork moveWork =
- new MoveWork(new HashSet<>(), new HashSet<>(), loadTableWork, null, false);
+ new MoveWork(new HashSet<>(), new HashSet<>(), loadTableWork, null, false,
+ context.sessionStateLineageState);
Task<?> loadTableTask = TaskFactory.get(moveWork, context.hiveConf);
copyTask.addDependentTask(loadTableTask);
return copyTask;
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/hooks/WriteEntity.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
index 6dfa607,25cca7b..6a56407
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
@@@ -1364,29 -1353,9 +1364,31 @@@ public final class GenMapRedUtils
cplan.setInputformat("org.apache.hadoop.hive.ql.io.CombineHiveInputFormat");
// NOTE: we should gather stats in MR1 rather than MR2 at merge job since we don't
// know if merge MR2 will be triggered at execution time
- Task<MoveWork> mvTask = GenMapRedUtils.findMoveTask(mvTasks, fsOutput);
+ MoveWork dummyMv = null;
+ if (srcMmWriteId == null) {
+ // Only create the movework for non-MM table. No action needed for a MM table.
+ Utilities.LOG14535.info("creating dummy movetask for merge (with lfd)");
+ dummyMv = new MoveWork(null, null, null,
- new LoadFileDesc(inputDirName, finalName, true, null, null, false), false);
++ new LoadFileDesc(inputDirName, finalName, true, null, null, false), false,
++ SessionState.get().getLineageState());
+ } else {
+ // TODO# create the noop MoveWork to avoid q file changes for now. Should be removed w/the flag just before merge
+ dummyMv = new MoveWork(null, null, null,
- new LoadFileDesc(inputDirName, finalName, true, null, null, false), false);
++ new LoadFileDesc(inputDirName, finalName, true, null, null, false), false,
++ SessionState.get().getLineageState());
+ dummyMv.setNoop(true);
+ }
+ // Use the original fsOp path here in case of MM - while the new FSOP merges files inside the
+ // MM directory, the original MoveTask still commits based on the parent. Note that this path
+ // can only be triggered for a merge that's part of insert for now; MM tables do not support
+ // concatenate. Keeping the old logic for non-MM tables with temp directories and stuff.
+ Path fsopPath = srcMmWriteId != null ? fsInputDesc.getFinalDirName() : finalName;
+ Utilities.LOG14535.info("Looking for MoveTask to make it dependant on the conditional tasks");
+
+ Task<MoveWork> mvTask = GenMapRedUtils.findMoveTaskForFsopOutput(
+ mvTasks, fsopPath, fsInputDesc.isMmTable());
ConditionalTask cndTsk = GenMapRedUtils.createCondTask(conf, currTask, dummyMv, work,
- fsInputDesc.getFinalDirName(), finalName, mvTask, dependencyTask);
+ fsInputDesc.getMergeInputDirName(), finalName, mvTask, dependencyTask);
// keep the dynamic partition context in conditional task resolver context
ConditionalResolverMergeFilesCtx mrCtx =
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
index fdeeacf,e70a72c..36bb89f
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
@@@ -1090,10 -1088,11 +1095,11 @@@ public class DDLSemanticAnalyzer extend
Path queryTmpdir = ctx.getExternalTmpPath(newTblPartLoc);
truncateTblDesc.setOutputDir(queryTmpdir);
LoadTableDesc ltd = new LoadTableDesc(queryTmpdir, tblDesc,
- partSpec == null ? new HashMap<String, String>() : partSpec, null);
- partSpec == null ? new HashMap<>() : partSpec);
++ partSpec == null ? new HashMap<>() : partSpec, null);
ltd.setLbCtx(lbCtx);
- Task<MoveWork> moveTsk = TaskFactory
- .get(new MoveWork(null, null, ltd, null, false, SessionState.get().getLineageState()),
- conf);
+ @SuppressWarnings("unchecked")
- Task<MoveWork> moveTsk = TaskFactory.get(new MoveWork(null, null, ltd, null, false), conf);
++ Task<MoveWork> moveTsk = TaskFactory.get(new MoveWork(
++ null, null, ltd, null, false, SessionState.get().getLineageState()), conf);
truncateTask.addDependentTask(moveTsk);
// Recalculate the HDFS stats if auto gather stats is set
@@@ -1736,11 -1722,12 +1742,12 @@@
TableDesc tblDesc = Utilities.getTableDesc(tblObj);
Path queryTmpdir = ctx.getExternalTmpPath(newTblPartLoc);
mergeDesc.setOutputDir(queryTmpdir);
+ // No need to handle MM tables - unsupported path.
LoadTableDesc ltd = new LoadTableDesc(queryTmpdir, tblDesc,
- partSpec == null ? new HashMap<>() : partSpec);
+ partSpec == null ? new HashMap<>() : partSpec, null);
ltd.setLbCtx(lbCtx);
- Task<MoveWork> moveTsk = TaskFactory.get(new MoveWork(null, null, ltd, null, false), conf);
- Task<MoveWork> moveTsk = TaskFactory
- .get(new MoveWork(null, null, ltd, null, false, SessionState.get().getLineageState()),
- conf);
++ Task<MoveWork> moveTsk = TaskFactory.get(
++ new MoveWork(null, null, ltd, null, false, SessionState.get().getLineageState()), conf);
mergeTask.addDependentTask(moveTsk);
if (conf.getBoolVar(HiveConf.ConfVars.HIVESTATSAUTOGATHER)) {
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/parse/EximUtil.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
index 36c0c98,751bda0..b9f28eb
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
@@@ -360,36 -343,17 +360,36 @@@ public class ImportSemanticAnalyzer ext
return tblDesc;
}
+
private static Task<?> loadTable(URI fromURI, Table table, boolean replace, Path tgtPath,
- ReplicationSpec replicationSpec, EximUtil.SemanticAnalyzerWrapperContext x) {
+ ReplicationSpec replicationSpec, EximUtil.SemanticAnalyzerWrapperContext x,
+ Long txnId, int stmtId, boolean isSourceMm) {
Path dataPath = new Path(fromURI.toString(), EximUtil.DATA_PATH_NAME);
- Path tmpPath = x.getCtx().getExternalTmpPath(tgtPath);
- Task<?> copyTask = ReplCopyTask.getLoadCopyTask(replicationSpec, dataPath, tmpPath, x.getConf());
- LoadTableDesc loadTableWork = new LoadTableDesc(tmpPath,
- Utilities.getTableDesc(table), new TreeMap<>(),
- replace);
- Task<?> loadTableTask = TaskFactory.get(new MoveWork(x.getInputs(),
- x.getOutputs(), loadTableWork, null, false, SessionState.get().getLineageState()),
- x.getConf());
+ Path destPath = !MetaStoreUtils.isInsertOnlyTable(table.getParameters()) ? x.getCtx().getExternalTmpPath(tgtPath)
+ : new Path(tgtPath, AcidUtils.deltaSubdir(txnId, txnId, stmtId));
+ Utilities.LOG14535.info("adding import work for table with source location: "
+ + dataPath + "; table: " + tgtPath + "; copy destination " + destPath + "; mm "
+ + txnId + " (src " + isSourceMm + ") for " + (table == null ? "a new table" : table.getTableName()));
+
+ Task<?> copyTask = null;
+ if (replicationSpec.isInReplicationScope()) {
+ if (isSourceMm || isAcid(txnId)) {
+ // TODO: ReplCopyTask is completely screwed. Need to support when it's not as screwed.
+ throw new RuntimeException("Replicating MM and ACID tables is not supported");
+ }
+ copyTask = ReplCopyTask.getLoadCopyTask(replicationSpec, dataPath, destPath, x.getConf());
+ } else {
+ CopyWork cw = new CopyWork(dataPath, destPath, false);
+ cw.setSkipSourceMmDirs(isSourceMm);
+ copyTask = TaskFactory.get(cw, x.getConf());
+ }
+
+ LoadTableDesc loadTableWork = new LoadTableDesc(destPath,
- Utilities.getTableDesc(table), new TreeMap<String, String>(), replace, txnId);
++ Utilities.getTableDesc(table), new TreeMap<>(), replace, txnId);
+ loadTableWork.setTxnId(txnId);
+ loadTableWork.setStmtId(stmtId);
- MoveWork mv = new MoveWork(x.getInputs(), x.getOutputs(), loadTableWork, null, false);
++ MoveWork mv = new MoveWork(x.getInputs(), x.getOutputs(), loadTableWork, null, false, SessionState.get().getLineageState());
+ Task<?> loadTableTask = TaskFactory.get(mv, x.getConf());
copyTask.addDependentTask(loadTableTask);
x.getTasks().add(copyTask);
return loadTableTask;
@@@ -450,40 -413,19 +455,40 @@@
+ partSpecToString(partSpec.getPartSpec())
+ " with source location: " + srcLocation);
Path tgtLocation = new Path(partSpec.getLocation());
- Path tmpPath = x.getCtx().getExternalTmpPath(tgtLocation);
- Task<?> copyTask = ReplCopyTask.getLoadCopyTask(
- replicationSpec, new Path(srcLocation), tmpPath, x.getConf());
+ Path destPath = !MetaStoreUtils.isInsertOnlyTable(table.getParameters()) ? x.getCtx().getExternalTmpPath(tgtLocation)
+ : new Path(tgtLocation, AcidUtils.deltaSubdir(txnId, txnId, stmtId));
+ Path moveTaskSrc = !MetaStoreUtils.isInsertOnlyTable(table.getParameters()) ? destPath : tgtLocation;
+ Utilities.LOG14535.info("adding import work for partition with source location: "
+ + srcLocation + "; target: " + tgtLocation + "; copy dest " + destPath + "; mm "
+ + txnId + " (src " + isSourceMm + ") for " + partSpecToString(partSpec.getPartSpec()));
+
+
+ Task<?> copyTask = null;
+ if (replicationSpec.isInReplicationScope()) {
+ if (isSourceMm || isAcid(txnId)) {
+ // TODO: ReplCopyTask is completely screwed. Need to support when it's not as screwed.
+ throw new RuntimeException("Replicating MM and ACID tables is not supported");
+ }
+ copyTask = ReplCopyTask.getLoadCopyTask(
+ replicationSpec, new Path(srcLocation), destPath, x.getConf());
+ } else {
+ CopyWork cw = new CopyWork(new Path(srcLocation), destPath, false);
+ cw.setSkipSourceMmDirs(isSourceMm);
+ copyTask = TaskFactory.get(cw, x.getConf());
+ }
+
Task<?> addPartTask = TaskFactory.get(new DDLWork(x.getInputs(),
x.getOutputs(), addPartitionDesc), x.getConf());
- LoadTableDesc loadTableWork = new LoadTableDesc(tmpPath,
- Utilities.getTableDesc(table),
- partSpec.getPartSpec(), replicationSpec.isReplace());
+ LoadTableDesc loadTableWork = new LoadTableDesc(moveTaskSrc, Utilities.getTableDesc(table),
+ partSpec.getPartSpec(), replicationSpec.isReplace(), txnId);
+ loadTableWork.setTxnId(txnId);
+ loadTableWork.setStmtId(stmtId);
loadTableWork.setInheritTableSpecs(false);
+ // Do not commit the write ID from each task; need to commit once.
+ // TODO: we should just change the import to use a single MoveTask, like dynparts.
+ loadTableWork.setIntermediateInMmWrite(isAcid(txnId));
Task<?> loadPartTask = TaskFactory.get(new MoveWork(
- x.getInputs(), x.getOutputs(), loadTableWork, null, false), x.getConf());
- x.getInputs(), x.getOutputs(), loadTableWork, null, false,
- SessionState.get().getLineageState()),
- x.getConf());
++ x.getInputs(), x.getOutputs(), loadTableWork, null, false, SessionState.get().getLineageState()), x.getConf());
copyTask.addDependentTask(loadPartTask);
addPartTask.addDependentTask(loadPartTask);
x.getTasks().add(copyTask);
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
index 3475c7c,4814fcd..df50aab
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
@@@ -6858,15 -6902,10 +6861,18 @@@ public class SemanticAnalyzer extends B
acidOp = getAcidType(table_desc.getOutputFileFormatClass(), dest);
checkAcidConstraints(qb, table_desc, dest_tab);
}
- Long currentTransactionId = acidOp == Operation.NOT_ACID ? null :
+ if (MetaStoreUtils.isInsertOnlyTable(table_desc.getProperties())) {
+ acidOp = getAcidType(table_desc.getOutputFileFormatClass(), dest);
+ }
+ if (isMmTable) {
+ txnId = SessionState.get().getTxnMgr().getCurrentTxnId();
++ } else {
++ txnId = acidOp == Operation.NOT_ACID ? null :
+ SessionState.get().getTxnMgr().getCurrentTxnId();
- ltd = new LoadTableDesc(queryTmpdir, table_desc, dpCtx, acidOp,
- currentTransactionId);
+ }
+ boolean isReplace = !qb.getParseInfo().isInsertIntoTable(
+ dest_tab.getDbName(), dest_tab.getTableName());
+ ltd = new LoadTableDesc(queryTmpdir, table_desc, dpCtx, acidOp, isReplace, txnId);
// For Acid table, Insert Overwrite shouldn't replace the table content. We keep the old
// deltas and base and leave them up to the cleaner to clean up
ltd.setReplace(!qb.getParseInfo().isInsertIntoTable(dest_tab.getDbName(),
@@@ -6926,13 -7020,10 +6932,16 @@@
acidOp = getAcidType(table_desc.getOutputFileFormatClass(), dest);
checkAcidConstraints(qb, table_desc, dest_tab);
}
- Long currentTransactionId = (acidOp == Operation.NOT_ACID) ? null :
+ if (MetaStoreUtils.isInsertOnlyTable(dest_part.getTable().getParameters())) {
+ acidOp = getAcidType(table_desc.getOutputFileFormatClass(), dest);
+ }
+ if (isMmTable) {
+ txnId = SessionState.get().getTxnMgr().getCurrentTxnId();
++ } else {
++ txnId = (acidOp == Operation.NOT_ACID) ? null :
+ SessionState.get().getTxnMgr().getCurrentTxnId();
- ltd = new LoadTableDesc(queryTmpdir, table_desc, dest_part.getSpec(), acidOp,
- currentTransactionId);
+ }
+ ltd = new LoadTableDesc(queryTmpdir, table_desc, dest_part.getSpec(), acidOp, txnId);
// For Acid table, Insert Overwrite shouldn't replace the table content. We keep the old
// deltas and base and leave them up to the cleaner to clean up
ltd.setReplace(!qb.getParseInfo().isInsertIntoTable(dest_tab.getDbName(),
@@@ -7015,9 -7150,8 +7024,9 @@@
}
boolean isDfsDir = (dest_type.intValue() == QBMetaData.DEST_DFS_FILE);
+ // Create LFD even for MM CTAS - it's a no-op move, but it still seems to be used for stats.
loadFileWork.add(new LoadFileDesc(tblDesc, viewDesc, queryTmpdir, dest_path, isDfsDir, cols,
- colTypes, destTableIsAcid ? Operation.INSERT : Operation.NOT_ACID, isMmCtas));
- colTypes, destTableIsAcid ? Operation.INSERT : Operation.NOT_ACID));
++ colTypes, destTableIsAcid ? Operation.INSERT : Operation.NOT_ACID, isMmCtas));
if (tblDesc == null) {
if (viewDesc != null) {
table_desc = PlanUtils.getTableDesc(viewDesc, cols, colTypes);
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/parse/TaskCompiler.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/TaskCompiler.java
index 356ab6f,f0089fc..752a934
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/TaskCompiler.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/TaskCompiler.java
@@@ -18,17 -18,8 +18,19 @@@
package org.apache.hadoop.hive.ql.parse;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.hadoop.hive.ql.io.AcidUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+ import com.google.common.collect.Interner;
+ import com.google.common.collect.Interners;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hive.common.HiveStatsUtils;
import org.apache.hadoop.hive.conf.HiveConf;
@@@ -228,17 -227,47 +239,19 @@@ public abstract class TaskCompiler
}
}
- boolean oneLoadFile = true;
+ boolean oneLoadFileForCtas = true;
for (LoadFileDesc lfd : loadFileWork) {
if (pCtx.getQueryProperties().isCTAS() || pCtx.getQueryProperties().isMaterializedView()) {
- assert (oneLoadFile); // should not have more than 1 load file for
- // CTAS
- // make the movetask's destination directory the table's destination.
- Path location;
- String loc = pCtx.getQueryProperties().isCTAS() ?
- pCtx.getCreateTable().getLocation() : pCtx.getCreateViewDesc().getLocation();
- if (loc == null) {
- // get the default location
- Path targetPath;
- try {
- String protoName = null;
- if (pCtx.getQueryProperties().isCTAS()) {
- protoName = pCtx.getCreateTable().getTableName();
- } else if (pCtx.getQueryProperties().isMaterializedView()) {
- protoName = pCtx.getCreateViewDesc().getViewName();
- }
- String[] names = Utilities.getDbTableName(protoName);
- if (!db.databaseExists(names[0])) {
- throw new SemanticException("ERROR: The database " + names[0]
- + " does not exist.");
- }
- Warehouse wh = new Warehouse(conf);
- targetPath = wh.getDefaultTablePath(db.getDatabase(names[0]), names[1]);
- } catch (HiveException | MetaException e) {
- throw new SemanticException(e);
- }
-
- location = targetPath;
- } else {
- location = new Path(loc);
+ if (!oneLoadFileForCtas) { // should not have more than 1 load file for CTAS.
+ throw new SemanticException(
+ "One query is not expected to contain multiple CTAS loads statements");
}
- lfd.setTargetDir(location);
-
- oneLoadFile = false;
+ setLoadFileLocation(pCtx, lfd);
+ oneLoadFileForCtas = false;
}
- mvTask.add(TaskFactory.get(new MoveWork(null, null, null, lfd, false), conf));
+ mvTask.add(TaskFactory
+ .get(new MoveWork(null, null, null, lfd, false, SessionState.get().getLineageState()),
+ conf));
}
}
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadDesc.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/plan/LoadDesc.java
index 45d4fb0,023d247..9477df6
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadDesc.java
@@@ -35,8 -35,8 +35,9 @@@ public class LoadDesc implements Serial
* Need to remember whether this is an acid compliant operation, and if so whether it is an
* insert, update, or delete.
*/
- private final AcidUtils.Operation writeType;
+ final AcidUtils.Operation writeType;
+
+
public LoadDesc(final Path sourcePath, AcidUtils.Operation writeType) {
this.sourcePath = sourcePath;
this.writeType = writeType;
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadFileDesc.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/plan/LoadFileDesc.java
index 0032648,0292af5..d90acce
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadFileDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadFileDesc.java
@@@ -51,8 -48,8 +51,8 @@@ public class LoadFileDesc extends LoadD
public LoadFileDesc(final CreateTableDesc createTableDesc, final CreateViewDesc createViewDesc,
final Path sourcePath, final Path targetDir, final boolean isDfsDir,
- final String columns, final String columnTypes, AcidUtils.Operation writeType) {
- this(sourcePath, targetDir, isDfsDir, columns, columnTypes, writeType);
+ final String columns, final String columnTypes, AcidUtils.Operation writeType, boolean isMmCtas) {
- this(sourcePath, targetDir, isDfsDir, columns, columnTypes, writeType, isMmCtas);
++ this(sourcePath, targetDir, isDfsDir, columns, columnTypes, writeType, isMmCtas);
if (createTableDesc != null && createTableDesc.getDatabaseName() != null
&& createTableDesc.getTableName() != null) {
destinationCreateTable = (createTableDesc.getTableName().contains(".") ? "" : createTableDesc
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
index e893ab5,90a970c..85d1324
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
@@@ -18,13 -18,7 +18,9 @@@
package org.apache.hadoop.hive.ql.plan;
- import java.io.Serializable;
- import java.util.LinkedHashMap;
- import java.util.Map;
-
import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hive.metastore.MetaStoreUtils;
+import org.apache.hadoop.hive.ql.exec.Utilities;
import org.apache.hadoop.hive.ql.io.AcidUtils;
import org.apache.hadoop.hive.ql.plan.Explain.Level;
@@@ -39,8 -37,10 +39,8 @@@ public class LoadTableDesc extends Load
private ListBucketingCtx lbCtx;
private boolean inheritTableSpecs = true; //For partitions, flag controlling whether the current
//table specs are to be used
- private Long txnId;
- /*
- if the writeType above is NOT_ACID then the currentTransactionId will be null
- */
- private final Long currentTransactionId;
+ private int stmtId;
++ private Long currentTransactionId;
// TODO: the below seems like they should just be combined into partitionDesc
private org.apache.hadoop.hive.ql.plan.TableDesc table;
@@@ -59,15 -59,13 +60,14 @@@
}
public LoadTableDesc(final Path sourcePath,
- final org.apache.hadoop.hive.ql.plan.TableDesc table,
+ final TableDesc table,
final Map<String, String> partitionSpec,
final boolean replace,
- final AcidUtils.Operation writeType,
- Long txnId) {
+ final AcidUtils.Operation writeType, Long currentTransactionId) {
super(sourcePath, writeType);
- this.currentTransactionId = currentTransactionId;
- init(table, partitionSpec, replace);
+ Utilities.LOG14535.info("creating part LTD from " + sourcePath + " to "
+ + ((table.getProperties() == null) ? "null" : table.getTableName()));
- init(table, partitionSpec, replace, txnId);
++ init(table, partitionSpec, replace, currentTransactionId);
}
/**
@@@ -105,17 -103,16 +105,17 @@@
}
public LoadTableDesc(final Path sourcePath,
- final org.apache.hadoop.hive.ql.plan.TableDesc table,
+ final TableDesc table,
final DynamicPartitionCtx dpCtx,
- final AcidUtils.Operation writeType, Long currentTransactionId) {
+ final AcidUtils.Operation writeType,
+ boolean isReplace, Long txnId) {
super(sourcePath, writeType);
+ Utilities.LOG14535.info("creating LTD from " + sourcePath + " to " + table.getTableName()/*, new Exception()*/);
this.dpCtx = dpCtx;
- this.currentTransactionId = currentTransactionId;
if (dpCtx != null && dpCtx.getPartSpec() != null && partitionSpec == null) {
- init(table, dpCtx.getPartSpec(), true);
+ init(table, dpCtx.getPartSpec(), isReplace, txnId);
} else {
- init(table, new LinkedHashMap<String, String>(), isReplace, txnId);
- init(table, new LinkedHashMap<>(), true);
++ init(table, new LinkedHashMap<>(), isReplace, txnId);
}
}
@@@ -127,7 -123,6 +127,7 @@@
this.table = table;
this.partitionSpec = partitionSpec;
this.replace = replace;
- this.txnId = txnId;
++ this.currentTransactionId = txnId;
}
@Explain(displayName = "table", explainLevels = { Level.USER, Level.DEFAULT, Level.EXTENDED })
@@@ -196,27 -182,7 +196,27 @@@
this.lbCtx = lbCtx;
}
- public Long getTxnId() {
- return txnId;
- public long getCurrentTransactionId() {
- return writeType == AcidUtils.Operation.NOT_ACID ? 0L : currentTransactionId;
++ public long getTxnId() {
++ return currentTransactionId == null ? 0 : currentTransactionId;
+ }
+
+ public void setTxnId(Long txnId) {
- this.txnId = txnId;
++ this.currentTransactionId = txnId;
+ }
+
+ public int getStmtId() {
+ return stmtId;
+ }
+
+ public void setStmtId(int stmtId) {
+ this.stmtId = stmtId;
+ }
+
+ public void setIntermediateInMmWrite(boolean b) {
+ this.commitMmWriteId = !b;
+ }
+
+ public boolean isCommitMmWrite() {
+ return commitMmWriteId;
}
}
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/plan/MoveWork.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/plan/MoveWork.java
index 8594edf,00c0ce3..f6303ba
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/MoveWork.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/MoveWork.java
@@@ -56,22 -61,22 +62,26 @@@ public class MoveWork implements Serial
* List of inserted partitions
*/
protected List<Partition> movedParts;
+ private boolean isNoop;
public MoveWork() {
+ sessionStateLineageState = null;
}
- private MoveWork(HashSet<ReadEntity> inputs, HashSet<WriteEntity> outputs) {
++
+ private MoveWork(HashSet<ReadEntity> inputs, HashSet<WriteEntity> outputs,
+ LineageState lineageState) {
this.inputs = inputs;
this.outputs = outputs;
+ sessionStateLineageState = lineageState;
}
public MoveWork(HashSet<ReadEntity> inputs, HashSet<WriteEntity> outputs,
final LoadTableDesc loadTableWork, final LoadFileDesc loadFileWork,
- boolean checkFileFormat, boolean srcLocal) {
- this(inputs, outputs);
+ boolean checkFileFormat, boolean srcLocal, LineageState lineageState) {
+ this(inputs, outputs, lineageState);
+ Utilities.LOG14535.info("Creating MoveWork " + System.identityHashCode(this)
+ + " with " + loadTableWork + "; " + loadFileWork);
this.loadTableWork = loadTableWork;
this.loadFileWork = loadFileWork;
this.checkFileFormat = checkFileFormat;
@@@ -80,8 -85,11 +90,8 @@@
public MoveWork(HashSet<ReadEntity> inputs, HashSet<WriteEntity> outputs,
final LoadTableDesc loadTableWork, final LoadFileDesc loadFileWork,
- boolean checkFileFormat) {
- this(inputs, outputs, loadTableWork, loadFileWork, checkFileFormat, false);
+ boolean checkFileFormat, LineageState lineageState) {
- this(inputs, outputs, lineageState);
- this.loadTableWork = loadTableWork;
- this.loadFileWork = loadFileWork;
- this.checkFileFormat = checkFileFormat;
++ this(inputs, outputs, loadTableWork, loadFileWork, checkFileFormat, false, lineageState);
}
public MoveWork(final MoveWork o) {
@@@ -153,11 -162,7 +164,15 @@@
this.srcLocal = srcLocal;
}
+ public void setNoop(boolean b) {
+ this.isNoop = true;
+ }
+
+ public boolean isNoop() {
+ return this.isNoop;
+ }
++
+ public LineageState getLineagState() {
+ return sessionStateLineageState;
+ }
}
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/CompactorMR.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/test/org/apache/hadoop/hive/ql/optimizer/TestGenMapRedUtilsCreateConditionalTask.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/test/results/clientpositive/tez/explainuser_3.q.out
----------------------------------------------------------------------
diff --cc ql/src/test/results/clientpositive/tez/explainuser_3.q.out
index 9f764b8,a331bf7..7e89478
--- a/ql/src/test/results/clientpositive/tez/explainuser_3.q.out
+++ b/ql/src/test/results/clientpositive/tez/explainuser_3.q.out
@@@ -509,13 -509,13 +509,13 @@@ Stage-
Conditional Operator
Stage-1
Map 1 vectorized
- File Output Operator [FS_10]
+ File Output Operator [FS_8]
table:{"name:":"default.orc_merge5"}
- Select Operator [SEL_9] (rows=306 width=335)
+ Select Operator [SEL_9] (rows=1 width=352)
Output:["_col0","_col1","_col2","_col3","_col4"]
- Filter Operator [FIL_8] (rows=306 width=335)
+ Filter Operator [FIL_8] (rows=1 width=352)
predicate:(userid <= 13)
- TableScan [TS_0] (rows=919 width=335)
+ TableScan [TS_0] (rows=1 width=352)
default@orc_merge5,orc_merge5,Tbl:COMPLETE,Col:NONE,Output:["userid","string1","subtype","decimal1","ts"]
Stage-4(CONDITIONAL)
File Merge
[34/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-14671 : merge master into hive-14535 (Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/379d9bab
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/379d9bab
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/379d9bab
Branch: refs/heads/master
Commit: 379d9babdd43d459b0acfb7663527850320fdbb6
Parents: 5b3c797 fb07a11
Author: sergey <se...@apache.org>
Authored: Wed Sep 27 13:22:07 2017 -0700
Committer: sergey <se...@apache.org>
Committed: Wed Sep 27 13:22:07 2017 -0700
----------------------------------------------------------------------
.../hive/common/ValidCompactorTxnList.java | 8 +-
.../hadoop/hive/common/ValidReadTxnList.java | 7 +-
.../apache/hadoop/hive/common/ValidTxnList.java | 4 +
.../org/apache/hadoop/hive/conf/HiveConf.java | 62 +-
.../druid/io/DruidQueryBasedInputFormat.java | 7 +-
.../results/positive/hbase_custom_key2.q.out | 2 +-
.../results/positive/hbase_custom_key3.q.out | 2 +-
.../results/positive/hbase_ppd_key_range.q.out | 2 +-
.../test/results/positive/hbase_pushdown.q.out | 2 +-
.../test/results/positive/hbase_queries.q.out | 2 +-
.../hbase_single_sourced_multi_insert.q.out | 4 +-
hcatalog/core/pom.xml | 7 +
.../apache/hive/hcatalog/cli/TestPermsGrp.java | 5 +-
.../mapreduce/TestHCatMultiOutputFormat.java | 4 +-
.../mapreduce/TestHCatPartitionPublish.java | 5 +-
hcatalog/webhcat/java-client/pom.xml | 7 +
.../hive/hcatalog/api/TestHCatClient.java | 6 +-
hcatalog/webhcat/svr/pom.xml | 7 +
.../hive/hcatalog/templeton/TestWebHCatE2e.java | 4 +-
.../antlr4/org/apache/hive/hplsql/Hplsql.g4 | 7 +
.../main/java/org/apache/hive/hplsql/Copy.java | 10 +-
.../main/java/org/apache/hive/hplsql/Exec.java | 8 +
.../main/java/org/apache/hive/hplsql/Meta.java | 71 +-
.../main/java/org/apache/hive/hplsql/Row.java | 7 +
.../main/java/org/apache/hive/hplsql/Stmt.java | 281 +
.../apache/hive/hplsql/functions/Function.java | 3 +
hplsql/src/main/resources/hplsql-site.xml | 2 -
.../org/apache/hive/hplsql/TestHplsqlLocal.java | 10 +
hplsql/src/test/queries/db/summary.sql | 15 +
.../src/test/queries/local/create_function5.sql | 11 +
.../test/queries/local/create_procedure4.sql | 10 +
hplsql/src/test/results/db/summary.out.txt | 47 +
.../test/results/local/create_function3.out.txt | 2 +
.../test/results/local/create_function4.out.txt | 1 +
.../test/results/local/create_function5.out.txt | 8 +
.../results/local/create_procedure4.out.txt | 8 +
.../mapjoin/MapJoinMultiKeyBench.java | 94 +-
.../mapjoin/MapJoinOneLongKeyBench.java | 94 +-
.../mapjoin/MapJoinOneStringKeyBench.java | 94 +-
.../security/TestHadoopAuthBridge23.java | 4 +-
itests/hive-unit/pom.xml | 8 +-
.../AbstractTestAuthorizationApiAuthorizer.java | 4 +-
.../hadoop/hive/metastore/TestFilterHooks.java | 4 +-
...TestHiveMetaStoreWithEnvironmentContext.java | 4 +-
.../hive/metastore/TestMarkPartitionRemote.java | 2 +-
.../metastore/TestMetaStoreAuthorization.java | 2 +-
.../TestMetaStoreEndFunctionListener.java | 4 +-
.../metastore/TestMetaStoreEventListener.java | 4 +-
.../TestMetaStoreEventListenerOnlyOnCommit.java | 4 +-
.../metastore/TestMetaStoreInitListener.java | 4 +-
.../metastore/TestMetaStoreListenersError.java | 4 +-
.../hive/metastore/TestMetaStoreMetrics.java | 4 +-
.../hive/metastore/TestRemoteHiveMetaStore.java | 4 +-
.../TestRemoteHiveMetaStoreIpAddress.java | 4 +-
.../hive/metastore/TestRetryingHMSHandler.java | 4 +-
...estDDLWithRemoteMetastoreSecondNamenode.java | 6 +-
.../hadoop/hive/ql/parse/TestCopyUtils.java | 137 +
.../hadoop/hive/ql/parse/TestExportImport.java | 10 +-
.../hive/ql/parse/TestReplicationScenarios.java | 163 +-
...TestReplicationScenariosAcrossInstances.java | 29 +
.../hadoop/hive/ql/parse/WarehouseInstance.java | 97 +-
.../security/StorageBasedMetastoreTestBase.java | 6 +-
.../TestAuthorizationPreEventListener.java | 6 +-
.../TestClientSideAuthorizationProvider.java | 6 +-
.../TestMetastoreAuthorizationProvider.java | 6 +-
.../TestMultiAuthorizationPreEventListener.java | 6 +-
.../hive/ql/txn/compactor/TestCompactor.java | 4 +-
.../apache/hive/jdbc/TestJdbcWithMiniHS2.java | 82 +
.../apache/hive/jdbc/TestJdbcWithMiniLlap.java | 74 +
.../jdbc/TestServiceDiscoveryWithMiniHS2.java | 22 +
.../cli/session/TestHiveSessionImpl.java | 3 +-
.../service/cli/session/TestQueryDisplay.java | 3 +-
.../thrift/ThriftCliServiceMessageSizeTest.java | 4 +-
.../test/resources/testconfiguration.properties | 6 +-
itests/util/pom.xml | 6 +
.../org/apache/hadoop/hive/ql/QTestUtil.java | 2 +-
.../org/apache/hive/jdbc/miniHS2/MiniHS2.java | 12 +-
.../hive/cli/control/TestDanglingQOuts.java | 120 +
.../org/apache/hive/jdbc/HiveConnection.java | 15 +
.../org/apache/hive/jdbc/HiveStatement.java | 11 +
jdbc/src/java/org/apache/hive/jdbc/Utils.java | 15 +
.../hive/jdbc/ZooKeeperHiveClientHelper.java | 118 +-
.../hive/llap/tez/LlapProtocolClientProxy.java | 37 +-
.../hive/registry/impl/TezAmInstance.java | 9 +-
.../hadoop/hive/llap/TestAsyncPbRpcProxy.java | 8 +-
.../plugin/rpc/LlapPluginProtocolProtos.java | 260 +-
.../hadoop/hive/llap/AsyncPbRpcProxy.java | 83 +-
.../llap/impl/LlapPluginProtocolClientImpl.java | 5 +-
.../hadoop/hive/llap/impl/ProtobufProxy.java | 31 +-
.../src/protobuf/LlapPluginProtocol.proto | 5 +-
llap-server/pom.xml | 8 +
.../services/impl/TestLlapWebServices.java | 4 +-
.../tezplugins/LlapTaskSchedulerService.java | 4 +-
.../endpoint/LlapPluginServerImpl.java | 23 +-
metastore/pom.xml | 11 +
.../hadoop/hive/metastore/HiveAlterHandler.java | 31 +-
.../hadoop/hive/metastore/HiveMetaStore.java | 42 +-
.../hive/metastore/MetaStoreDirectSql.java | 10 +-
.../hadoop/hive/metastore/MetaStoreUtils.java | 165 +-
.../hadoop/hive/metastore/ObjectStore.java | 3 +-
.../hadoop/hive/metastore/txn/TxnUtils.java | 8 +-
.../hive/metastore/MetaStoreTestUtils.java | 147 +
.../metastore/TestHiveMetaStoreGetMetaConf.java | 2 +-
.../TestHiveMetaStorePartitionSpecs.java | 2 +-
.../TestRetriesInRetryingHMSHandler.java | 2 +-
.../txn/TestValidCompactorTxnList.java | 6 +-
pom.xml | 8 +-
ql/pom.xml | 21 +-
.../metastore/SynchronizedMetaStoreClient.java | 24 +
.../java/org/apache/hadoop/hive/ql/Driver.java | 41 +-
.../apache/hadoop/hive/ql/DriverContext.java | 2 +-
.../hadoop/hive/ql/exec/ColumnStatsTask.java | 3 +-
.../hive/ql/exec/ColumnStatsUpdateTask.java | 3 +-
.../hadoop/hive/ql/exec/ConditionalTask.java | 7 +-
.../org/apache/hadoop/hive/ql/exec/DDLTask.java | 34 +-
.../hive/ql/exec/ExplainSQRewriteTask.java | 5 +
.../apache/hadoop/hive/ql/exec/ExplainTask.java | 68 +-
.../apache/hadoop/hive/ql/exec/FetchTask.java | 5 +
.../hadoop/hive/ql/exec/FunctionTask.java | 8 +
.../apache/hadoop/hive/ql/exec/MoveTask.java | 32 +-
.../apache/hadoop/hive/ql/exec/NodeUtils.java | 7 +-
.../hadoop/hive/ql/exec/OperatorUtils.java | 4 +-
.../org/apache/hadoop/hive/ql/exec/Task.java | 61 +-
.../apache/hadoop/hive/ql/exec/Utilities.java | 106 +-
.../hadoop/hive/ql/exec/mr/ExecDriver.java | 7 +-
.../hadoop/hive/ql/exec/mr/MapRedTask.java | 2 -
.../hadoop/hive/ql/exec/repl/ReplDumpTask.java | 5 +
.../ql/exec/repl/bootstrap/ReplLoadTask.java | 8 +-
.../ql/exec/repl/bootstrap/ReplLoadWork.java | 20 +-
.../bootstrap/load/table/LoadPartitions.java | 3 +-
.../repl/bootstrap/load/table/LoadTable.java | 3 +-
.../exec/repl/bootstrap/load/util/Context.java | 15 +-
.../ql/exec/spark/HiveSparkClientFactory.java | 16 +-
.../ql/exec/spark/RemoteHiveSparkClient.java | 6 +-
.../hadoop/hive/ql/exec/tez/AmPluginNode.java | 43 +
.../ql/exec/tez/GuaranteedTasksAllocator.java | 171 +
.../ql/exec/tez/LlapPluginEndpointClient.java | 30 +
.../exec/tez/LlapPluginEndpointClientImpl.java | 123 +
.../ql/exec/tez/QueryAllocationManager.java | 32 +
.../hadoop/hive/ql/exec/tez/TezSessionPool.java | 85 +-
.../hive/ql/exec/tez/TezSessionPoolManager.java | 59 +-
.../hive/ql/exec/tez/TezSessionPoolSession.java | 55 +-
.../hive/ql/exec/tez/TezSessionState.java | 29 +-
.../apache/hadoop/hive/ql/exec/tez/TezTask.java | 23 +-
.../hadoop/hive/ql/exec/tez/WmTezSession.java | 121 +
.../hive/ql/exec/tez/WorkloadManager.java | 372 +
.../ql/exec/tez/monitoring/TezJobMonitor.java | 2 +
.../org/apache/hadoop/hive/ql/hooks/Entity.java | 28 +-
.../hadoop/hive/ql/hooks/LineageInfo.java | 2 +-
.../hadoop/hive/ql/hooks/WriteEntity.java | 5 +
.../org/apache/hadoop/hive/ql/io/AcidUtils.java | 5 +-
.../apache/hadoop/hive/ql/io/BucketCodec.java | 23 +-
.../hadoop/hive/ql/io/merge/MergeFileTask.java | 1 -
.../hadoop/hive/ql/log/LogDivertAppender.java | 25 +-
.../hive/ql/log/LogDivertAppenderForTest.java | 18 +-
.../apache/hadoop/hive/ql/metadata/Hive.java | 20 +-
.../hive/ql/optimizer/GenMapRedUtils.java | 8 +-
.../HiveJoinPushTransitivePredicatesRule.java | 21 +-
.../HiveReduceExpressionsWithStatsRule.java | 60 +-
.../hive/ql/optimizer/lineage/LineageCtx.java | 3 +-
.../physical/LlapClusterStateForCompile.java | 105 +-
.../hadoop/hive/ql/parse/CalcitePlanner.java | 19 +-
.../hive/ql/parse/DDLSemanticAnalyzer.java | 45 +-
.../apache/hadoop/hive/ql/parse/EximUtil.java | 15 +
.../org/apache/hadoop/hive/ql/parse/HiveLexer.g | 2 +
.../apache/hadoop/hive/ql/parse/HiveParser.g | 13 +-
.../hadoop/hive/ql/parse/IdentifiersParser.g | 4 +-
.../hive/ql/parse/ImportSemanticAnalyzer.java | 47 +-
.../hive/ql/parse/LoadSemanticAnalyzer.java | 7 +-
.../ql/parse/ReplicationSemanticAnalyzer.java | 10 +-
.../hadoop/hive/ql/parse/SemanticAnalyzer.java | 16 +-
.../hive/ql/parse/SemanticAnalyzerFactory.java | 2 +
.../hadoop/hive/ql/parse/TaskCompiler.java | 40 +-
.../hadoop/hive/ql/parse/repl/CopyUtils.java | 11 +-
.../repl/dump/events/AddForeignKeyHandler.java | 8 +
.../events/AddNotNullConstraintHandler.java | 8 +
.../repl/dump/events/AddPrimaryKeyHandler.java | 8 +
.../dump/events/AddUniqueConstraintHandler.java | 8 +
.../ql/parse/repl/dump/io/FileOperations.java | 5 +-
.../repl/load/message/DropTableHandler.java | 2 +-
.../hive/ql/parse/spark/SparkCompiler.java | 6 +-
.../hive/ql/plan/ColumnStatsUpdateWork.java | 12 +-
.../hadoop/hive/ql/plan/ColumnStatsWork.java | 11 +-
.../org/apache/hadoop/hive/ql/plan/DDLWork.java | 16 +
.../hadoop/hive/ql/plan/DropTableDesc.java | 28 +-
.../org/apache/hadoop/hive/ql/plan/Explain.java | 3 +
.../hadoop/hive/ql/plan/ExprNodeDesc.java | 5 +
.../hive/ql/plan/ExprNodeGenericFuncDesc.java | 23 +
.../apache/hadoop/hive/ql/plan/FilterDesc.java | 12 +-
.../hadoop/hive/ql/plan/HiveOperation.java | 3 +-
.../hadoop/hive/ql/plan/KillQueryDesc.java | 45 +
.../apache/hadoop/hive/ql/plan/LoadDesc.java | 3 +-
.../hadoop/hive/ql/plan/LoadFileDesc.java | 2 +-
.../hadoop/hive/ql/plan/LoadTableDesc.java | 36 +-
.../apache/hadoop/hive/ql/plan/MoveWork.java | 27 +-
.../apache/hadoop/hive/ql/plan/PlanUtils.java | 17 +-
.../hive/ql/plan/ShowCompactionsDesc.java | 5 +-
.../authorization/AuthorizationUtils.java | 2 +
.../authorization/plugin/HiveOperationType.java | 1 +
.../plugin/HivePrivilegeObject.java | 8 +-
.../plugin/sqlstd/Operation2Privilege.java | 2 +
.../hadoop/hive/ql/session/KillQuery.java | 25 +
.../hadoop/hive/ql/session/LineageState.java | 26 +-
.../hadoop/hive/ql/session/NullKillQuery.java | 28 +
.../hadoop/hive/ql/session/SessionState.java | 20 +
.../apache/hadoop/hive/ql/stats/StatsUtils.java | 50 +-
.../hive/ql/txn/compactor/CompactorMR.java | 9 +-
.../org/apache/hadoop/hive/ql/udf/UDFType.java | 8 +
.../hive/ql/udf/generic/GenericUDFOPAnd.java | 2 +
.../hive/ql/udf/generic/GenericUDFOPOr.java | 2 +
.../hadoop/hive/ql/exec/TestExplainTask.java | 8 +-
.../hadoop/hive/ql/exec/TestUtilities.java | 22 +
.../hive/ql/exec/tez/SampleTezSessionState.java | 27 +-
.../exec/tez/TestGuaranteedTaskAllocator.java | 151 +
.../TestHostAffinitySplitLocationProvider.java | 8 +-
.../hive/ql/exec/tez/TestTezSessionPool.java | 38 +-
.../hadoop/hive/ql/exec/tez/TestTezTask.java | 16 +-
.../hive/ql/exec/tez/TestWorkloadManager.java | 173 +
.../hadoop/hive/ql/metadata/TestHiveRemote.java | 4 +-
...TestGenMapRedUtilsCreateConditionalTask.java | 62 +-
.../TestHiveReduceExpressionsWithStatsRule.java | 203 +
.../TestSQL11ReservedKeyWordsNegative.java | 13 +
.../TestSQLStdHiveAccessControllerHS2.java | 2 +-
.../clientnegative/authorization_kill_query.q | 15 +
.../clientnegative/subquery_missing_from.q | 1 -
.../clientnegative/subquery_select_no_source.q | 2 -
.../clientpositive/bucket_map_join_tez1.q | 149 +-
.../clientpositive/bucket_map_join_tez2.q | 57 +-
.../clientpositive/drop_deleted_partitions.q | 18 +
ql/src/test/queries/clientpositive/kill_query.q | 7 +
.../queries/clientpositive/optimize_join_ptp.q | 16 +
.../queries/clientpositive/remove_exprs_stats.q | 20 +
.../spark_combine_equivalent_work_2.q | 41 +
.../authorization_kill_query.q.out | 34 +
.../authorization_uri_import.q.out | 40 -
.../results/clientnegative/orc_merge1.q.out | 75 -
.../results/clientnegative/orc_merge2.q.out | 75 -
.../results/clientnegative/orc_merge3.q.out | 75 -
.../results/clientnegative/orc_merge4.q.out | 87 -
.../results/clientnegative/orc_merge5.q.out | 75 -
.../clientnegative/subquery_missing_from.q.out | 3 -
.../subquery_select_no_source.q.out | 1 -
.../clientnegative/subquery_shared_alias.q.out | 1 -
.../clientpositive/alter_merge_orc.q.out | 263 -
.../clientpositive/alter_merge_stats_orc.q.out | 382 -
.../annotate_stats_deep_filters.q.out | 4 +-
.../clientpositive/annotate_stats_filter.q.out | 2 +-
.../clientpositive/annotate_stats_groupby.q.out | 22 +-
.../annotate_stats_groupby2.q.out | 12 +-
.../annotate_stats_join_pkfk.q.out | 14 +-
.../clientpositive/annotate_stats_select.q.out | 8 +-
.../clientpositive/annotate_stats_table.q.out | 4 +-
.../clientpositive/authorization_2.q.out | 667 -
.../clientpositive/autoColumnStats_1.q.out | 1379 -
.../clientpositive/autoColumnStats_2.q.out | 1500 -
.../results/clientpositive/auto_join20.q.out | 2 +-
.../results/clientpositive/auto_join28.q.out | 2 +-
.../results/clientpositive/auto_join29.q.out | 14 +-
.../results/clientpositive/auto_join30.q.out | 2183 --
.../results/clientpositive/auto_join4.q.out | 4 +-
.../results/clientpositive/auto_join5.q.out | 2 +-
.../results/clientpositive/auto_join6.q.out | 4 +-
.../results/clientpositive/auto_join7.q.out | 6 +-
.../results/clientpositive/auto_join8.q.out | 4 +-
.../clientpositive/auto_join_filters.q.out | 540 -
.../clientpositive/auto_join_nulls.q.out | 217 -
.../auto_join_reordering_values.q.out | 2 +-
.../clientpositive/auto_smb_mapjoin_14.q.out | 1792 -
.../clientpositive/auto_sortmerge_join_16.q.out | 256 -
.../clientpositive/auto_sortmerge_join_5.q.out | 42 +-
.../clientpositive/auto_sortmerge_join_6.q.out | 1353 -
.../clientpositive/auto_sortmerge_join_8.q.out | 1459 -
.../clientpositive/auto_sortmerge_join_9.q.out | 4820 ---
.../clientpositive/beeline/mapjoin2.q.out | 4 +
.../materialized_view_create_rewrite.q.out | 4 +-
.../beeline/select_dummy_source.q.out | 22 +-
.../clientpositive/beeline/smb_mapjoin_1.q.out | 10 +-
.../clientpositive/beeline/smb_mapjoin_10.q.out | 2 +-
.../clientpositive/beeline/smb_mapjoin_2.q.out | 20 +-
.../clientpositive/beeline/smb_mapjoin_3.q.out | 10 +-
.../test/results/clientpositive/bucket4.q.out | 467 -
.../test/results/clientpositive/bucket5.q.out | 610 -
.../test/results/clientpositive/bucket6.q.out | 189 -
.../results/clientpositive/bucket_groupby.q.out | 1635 -
.../results/clientpositive/bucket_many.q.out | 222 -
.../clientpositive/bucketcontext_5.q.out | 14 +-
.../clientpositive/bucketcontext_6.q.out | 6 +-
.../bucketizedhiveinputformat.q.out | 116 -
.../results/clientpositive/bucketmapjoin1.q.out | 1341 -
.../results/clientpositive/bucketmapjoin2.q.out | 1738 -
.../results/clientpositive/bucketmapjoin3.q.out | 1168 -
.../results/clientpositive/bucketmapjoin4.q.out | 1050 -
.../results/clientpositive/bucketmapjoin5.q.out | 8 +-
.../results/clientpositive/bucketmapjoin6.q.out | 146 -
.../results/clientpositive/bucketmapjoin7.q.out | 298 -
.../clientpositive/bucketmapjoin_negative.q.out | 4 +-
.../bucketmapjoin_negative2.q.out | 4 +-
.../bucketmapjoin_negative3.q.out | 126 +-
.../results/clientpositive/bucketpruning1.q.out | 2282 --
.../bucketsortoptimize_insert_2.q.out | 1244 -
.../bucketsortoptimize_insert_6.q.out | 1323 -
.../bucketsortoptimize_insert_7.q.out | 468 -
.../test/results/clientpositive/cbo_const.q.out | 2 +-
.../test/results/clientpositive/cbo_gby.q.out | 124 -
.../test/results/clientpositive/cbo_join.q.out | 15028 --------
.../test/results/clientpositive/cbo_limit.q.out | 90 -
.../cbo_rp_annotate_stats_groupby.q.out | 22 +-
.../results/clientpositive/cbo_rp_gby.q.out | 124 -
.../results/clientpositive/cbo_rp_join.q.out | 15028 --------
.../results/clientpositive/cbo_rp_join1.q.out | 64 +-
.../results/clientpositive/cbo_rp_limit.q.out | 90 -
.../clientpositive/cbo_rp_lineage2.q.out | 675 -
.../clientpositive/cbo_rp_outer_join_ppr.q.out | 4 +-
.../clientpositive/cbo_rp_semijoin.q.out | 440 -
.../clientpositive/cbo_rp_subq_exists.q.out | 283 -
.../results/clientpositive/cbo_rp_subq_in.q.out | 151 -
.../clientpositive/cbo_rp_subq_not_in.q.out | 365 -
.../cbo_rp_udaf_percentile_approx_23.q.out | 8 +-
.../clientpositive/cbo_rp_udf_udaf.q.out | 123 -
.../cbo_rp_udf_udaf_stats_opt.q.out | 124 -
.../clientpositive/cbo_rp_unionDistinct_2.q.out | 551 -
.../results/clientpositive/cbo_rp_views.q.out | 237 -
.../clientpositive/cbo_rp_windowing_2.q.out | 2339 --
.../results/clientpositive/cbo_semijoin.q.out | 440 -
.../results/clientpositive/cbo_subq_in.q.out | 151 -
.../clientpositive/cbo_subq_not_in.q.out | 365 -
.../results/clientpositive/cbo_udf_udaf.q.out | 125 -
.../results/clientpositive/cbo_union_view.q.out | 6 +-
.../test/results/clientpositive/cbo_views.q.out | 237 -
.../test/results/clientpositive/cluster.q.out | 1449 -
.../columnStatsUpdateForStatsOptimizer_1.q.out | 961 -
.../clientpositive/column_access_stats.q.out | 869 -
.../columnstats_part_coltype.q.out | 441 -
.../clientpositive/columnstats_tbllvl.q.out | 24 +-
.../clientpositive/compute_stats_date.q.out | 4 +-
.../clientpositive/constant_prop_1.q.out | 2 +-
.../clientpositive/constant_prop_3.q.out | 2 +-
.../clientpositive/constprog_semijoin.q.out | 812 -
.../clientpositive/correlated_join_keys.q.out | 8 +-
.../clientpositive/correlationoptimizer1.q.out | 3091 --
.../clientpositive/correlationoptimizer10.q.out | 4 +-
.../clientpositive/correlationoptimizer13.q.out | 2 +-
.../clientpositive/correlationoptimizer2.q.out | 2257 --
.../clientpositive/correlationoptimizer3.q.out | 1422 -
.../clientpositive/correlationoptimizer4.q.out | 1862 -
.../clientpositive/correlationoptimizer5.q.out | 350 +-
.../clientpositive/correlationoptimizer6.q.out | 3918 ---
.../clientpositive/correlationoptimizer9.q.out | 8 +-
ql/src/test/results/clientpositive/count.q.out | 752 -
.../test/results/clientpositive/database.q.out | 1484 -
.../clientpositive/dbtxnmgr_showlocks.q.out | 4 +-
.../clientpositive/decimal_precision.q.out | 4 +-
.../clientpositive/decimal_precision2.q.out | 10 +-
.../results/clientpositive/decimal_udf.q.out | 178 +-
.../results/clientpositive/decimal_udf2.q.out | 16 +-
.../disable_merge_for_bucketing.q.out | 474 -
.../display_colstats_tbllvl.q.out | 8 +-
.../clientpositive/distinct_windowing.q.out | 60 +-
.../distinct_windowing_no_cbo.q.out | 104 +-
.../drop_deleted_partitions.q.out | 74 +
.../drop_partition_with_stats.q.out | 496 -
.../clientpositive/drop_table_with_index.q.out | 12 +-
.../dynpart_sort_opt_vectorization.q.out | 2430 --
.../dynpart_sort_optimization.q.out | 3041 --
.../dynpart_sort_optimization2.q.out | 1750 -
.../clientpositive/empty_dir_in_table.q.out | 46 -
.../encryption_join_unencrypted_tbl.q.out | 8 +-
.../test/results/clientpositive/escape1.q.out | Bin 54831 -> 0 bytes
.../test/results/clientpositive/escape2.q.out | Bin 78516 -> 0 bytes
.../results/clientpositive/except_all.q.out | 6 +-
.../clientpositive/exchgpartition2lel.q.out | 203 -
...rnal_table_with_space_in_location_path.q.out | 88 -
.../extrapolate_part_stats_partial_ndv.q.out | 1307 -
.../file_with_header_footer.q.out | 184 -
.../clientpositive/filter_cond_pushdown.q.out | 6 +-
.../clientpositive/filter_cond_pushdown2.q.out | 42 +-
.../filter_cond_pushdown_HIVE_15647.q.out | 10 +-
.../clientpositive/filter_join_breaktask.q.out | 60 +-
.../results/clientpositive/flatten_and_or.q.out | 2 +-
.../clientpositive/fold_eq_with_case_when.q.out | 2 +-
.../clientpositive/folder_predicate.q.out | 14 +-
.../clientpositive/fouter_join_ppr.q.out | 8 +-
.../clientpositive/gen_udf_example_add10.q.out | 12 +-
.../results/clientpositive/global_limit.q.out | 1677 -
.../test/results/clientpositive/groupby10.q.out | 80 +-
.../test/results/clientpositive/groupby2.q.out | 130 -
.../clientpositive/groupby_grouping_id2.q.out | 234 -
.../clientpositive/groupby_grouping_id3.q.out | 32 +-
.../groupby_grouping_sets_grouping.q.out | 226 +-
.../groupby_multi_single_reducer3.q.out | 20 +-
.../clientpositive/groupby_position.q.out | 2 +-
.../clientpositive/groupby_resolution.q.out | 792 -
.../test/results/clientpositive/having2.q.out | 2 +-
.../identity_project_remove_skip.q.out | 2 +-
.../clientpositive/import_exported_table.q.out | 28 -
.../results/clientpositive/index_auto.q.out | 6 +-
.../clientpositive/index_auto_mult_tables.q.out | 6 +-
.../index_auto_mult_tables_compact.q.out | 6 +-
.../clientpositive/index_auto_self_join.q.out | 12 +-
.../clientpositive/index_auto_unused.q.out | 6 +-
.../index_bitmap_compression.q.out | 4 +-
.../clientpositive/index_compression.q.out | 4 +-
.../results/clientpositive/index_serde.q.out | 8 +-
.../infer_bucket_sort_bucketed_table.q.out | 121 -
.../infer_bucket_sort_map_operators.q.out | 8 +-
.../clientpositive/infer_const_type.q.out | 8 +-
.../test/results/clientpositive/input12.q.out | 2 +-
.../test/results/clientpositive/input13.q.out | 4 +-
.../results/clientpositive/input16_cc.q.out | 534 -
.../test/results/clientpositive/input22.q.out | 12 +-
.../results/clientpositive/input3_limit.q.out | 16 +-
ql/src/test/results/clientpositive/input4.q.out | 2 +-
.../results/clientpositive/input_part2.q.out | 4 +-
.../results/clientpositive/input_part4.q.out | 2 +-
.../clientpositive/input_testxpath4.q.out | 4 +-
.../test/results/clientpositive/insert1.q.out | 2 +-
.../clientpositive/insert_dir_distcp.q.out | 14 -
.../insert_into_with_schema.q.out | 348 -
ql/src/test/results/clientpositive/join1.q.out | 1143 -
ql/src/test/results/clientpositive/join19.q.out | 6 +-
ql/src/test/results/clientpositive/join20.q.out | 2 +-
.../clientpositive/join32_lessSize.q.out | 2651 --
ql/src/test/results/clientpositive/join4.q.out | 4 +-
ql/src/test/results/clientpositive/join40.q.out | 2 +-
ql/src/test/results/clientpositive/join45.q.out | 2 +-
ql/src/test/results/clientpositive/join5.q.out | 2 +-
ql/src/test/results/clientpositive/join6.q.out | 4 +-
ql/src/test/results/clientpositive/join7.q.out | 6 +-
ql/src/test/results/clientpositive/join8.q.out | 4 +-
.../clientpositive/join_acid_non_acid.q.out | 54 -
.../results/clientpositive/join_filters.q.out | 1484 -
.../results/clientpositive/join_hive_626.q.out | 2 +-
.../results/clientpositive/join_nulls.q.out | 652 -
.../results/clientpositive/join_nullsafe.q.out | 1589 -
.../results/clientpositive/join_parse.q.out | 2 +-
.../results/clientpositive/join_reorder2.q.out | 4 +-
.../results/clientpositive/join_reorder3.q.out | 4 +-
.../test/results/clientpositive/join_star.q.out | 170 +-
.../results/clientpositive/kill_query.q.out | 36 +
.../results/clientpositive/lateral_view.q.out | 900 -
.../clientpositive/leftsemijoin_mr.q.out | 98 -
.../clientpositive/limit_join_transpose.q.out | 1813 -
.../results/clientpositive/limit_pushdown.q.out | 1432 -
.../clientpositive/limit_pushdown3.q.out | 1407 -
.../test/results/clientpositive/lineage2.q.out | 705 -
.../test/results/clientpositive/lineage3.q.out | 388 -
.../clientpositive/list_bucket_dml_10.q.out | 357 -
.../list_bucket_query_multiskew_2.q.out | 2 +-
.../llap/acid_bucket_pruning.q.out | 8 +-
.../llap/acid_vectorization.q.out | 120 -
.../llap/acid_vectorization_partition.q.out | 60 -
.../llap/acid_vectorization_project.q.out | 73 -
.../alter_table_invalidate_column_stats.q.out | 966 -
.../clientpositive/llap/auto_join29.q.out | 14 +-
.../llap/auto_sortmerge_join_5.q.out | 46 +-
.../llap/bucket_map_join_tez1.q.out | 4401 ++-
.../llap/bucket_map_join_tez2.q.out | 1340 +-
.../clientpositive/llap/bucketmapjoin1.q.out | 16 +-
.../clientpositive/llap/bucketmapjoin4.q.out | 44 +-
.../clientpositive/llap/bucketpruning1.q.out | 26 +-
.../llap/bucketsortoptimize_insert_7.q.out | 4 +-
.../clientpositive/llap/cbo_rp_subq_in.q.out | 123 -
.../llap/cbo_rp_subq_not_in.q.out | 345 -
.../llap/column_table_stats.q.out | 4 +-
.../llap/constprog_semijoin.q.out | 2 +-
.../llap/correlationoptimizer4.q.out | 324 +-
.../results/clientpositive/llap/count.q.out | 130 +-
.../clientpositive/llap/delete_orig_table.q.out | 61 -
.../llap/dynamic_partition_pruning.q.out | 10 +-
.../llap/dynamic_semijoin_reduction.q.out | 22 +-
.../llap/dynamic_semijoin_reduction_2.q.out | 8 +-
.../llap/dynamic_semijoin_reduction_3.q.out | 8 +-
.../llap/dynamic_semijoin_reduction_sw.q.out | 8 +-
.../llap/dynamic_semijoin_user_level.q.out | 14 +-
.../llap/dynpart_sort_opt_vectorization.q.out | 30 +-
.../llap/dynpart_sort_optimization.q.out | 322 +-
.../llap/dynpart_sort_optimization2.q.out | 64 +-
.../clientpositive/llap/except_distinct.q.out | 10 +-
.../clientpositive/llap/explainuser_1.q.out | 142 +-
.../clientpositive/llap/explainuser_2.q.out | 70 +-
.../clientpositive/llap/explainuser_3.q.out | 522 -
.../clientpositive/llap/explainuser_4.q.out | 12 +-
.../llap/filter_join_breaktask.q.out | 76 +-
.../clientpositive/llap/groupby_sort_1_23.q.out | 4310 ---
.../llap/groupby_sort_skew_1_23.q.out | 4482 ---
.../llap/hybridgrace_hashjoin_2.q.out | 8 +-
.../llap/identity_project_remove_skip.q.out | 2 +-
.../results/clientpositive/llap/insert1.q.out | 2 +-
.../llap/insert_acid_dynamic_partition.q.out | 48 -
.../llap/insert_acid_not_bucketed.q.out | 36 -
.../llap/insert_values_acid_not_bucketed.q.out | 26 -
.../llap/insert_values_orig_table.q.out | 80 -
.../clientpositive/llap/join32_lessSize.q.out | 2 +-
.../results/clientpositive/llap/join43.q.out | 616 -
.../llap/join_is_not_distinct_from.q.out | 102 +-
.../clientpositive/llap/join_nullsafe.q.out | 102 +-
.../clientpositive/llap/kill_query.q.out | 36 +
.../clientpositive/llap/llap_reader.q.out | 167 -
.../results/clientpositive/llap/mapjoin2.q.out | 4 +
.../clientpositive/llap/mapjoin_hint.q.out | 79 +-
.../clientpositive/llap/mapjoin_mapjoin.q.out | 4 +-
.../results/clientpositive/llap/mergejoin.q.out | 6 +-
.../clientpositive/llap/multiMapJoin1.q.out | 8 +-
.../clientpositive/llap/multi_insert.q.out | 32 +-
...i_insert_move_tasks_share_dependencies.q.out | 3765 --
.../clientpositive/llap/optimize_join_ptp.q.out | 130 +
.../results/clientpositive/llap/orc_llap.q.out | 1205 -
.../clientpositive/llap/orc_merge12.q.out | 822 -
.../clientpositive/llap/orc_merge5.q.out | 16 +-
.../clientpositive/llap/orc_merge6.q.out | 16 +-
.../clientpositive/llap/orc_merge7.q.out | 12 +-
.../llap/orc_merge_incompat1.q.out | 8 +-
.../llap/orc_merge_incompat2.q.out | 6 +-
.../llap/orc_predicate_pushdown.q.out | 20 +-
.../llap/orc_vectorization_ppd.q.out | 288 -
.../llap/parquet_ppd_decimal.q.out | 856 -
.../llap/parquet_predicate_pushdown.q.out | 22 +-
.../test/results/clientpositive/llap/pcs.q.out | 1780 -
.../clientpositive/llap/ptf_matchpath.q.out | 42 +-
.../clientpositive/llap/script_env_var1.q.out | 14 -
.../clientpositive/llap/script_env_var2.q.out | 14 -
.../clientpositive/llap/script_pipe.q.out | 125 -
.../clientpositive/llap/scriptfile1.q.out | 59 -
.../llap/select_dummy_source.q.out | 10 +-
.../clientpositive/llap/semijoin_hint.q.out | 32 +-
.../llap/show_create_database.q.out | 19 -
.../results/clientpositive/llap/skewjoin.q.out | 6 +-
.../clientpositive/llap/smb_mapjoin_15.q.out | 4 +-
.../clientpositive/llap/smb_mapjoin_4.q.out | 224 +-
.../clientpositive/llap/smb_mapjoin_5.q.out | 224 +-
.../results/clientpositive/llap/sqlmerge.q.out | 4 +-
.../results/clientpositive/llap/stats11.q.out | 16 +-
.../clientpositive/llap/subquery_in.q.out | 4 +-
.../clientpositive/llap/subquery_multi.q.out | 348 +-
.../clientpositive/llap/subquery_notin.q.out | 12 +-
.../clientpositive/llap/subquery_null_agg.q.out | 2 +-
.../clientpositive/llap/subquery_scalar.q.out | 122 +-
.../llap/tez_dynpart_hashjoin_1.q.out | 12 +-
.../llap/tez_join_result_complex.q.out | 212 +-
.../clientpositive/llap/tez_nway_join.q.out | 90 +-
.../llap/tez_union_group_by.q.out | 2 +-
.../llap/tez_vector_dynpart_hashjoin_1.q.out | 12 +-
.../clientpositive/llap/transform1.q.out | 138 -
.../clientpositive/llap/transform2.q.out | 9 -
.../clientpositive/llap/transform_ppr1.q.out | 493 -
.../clientpositive/llap/transform_ppr2.q.out | 399 -
.../clientpositive/llap/union_view.q.out | 1209 -
.../clientpositive/llap/update_orig_table.q.out | 62 -
.../clientpositive/llap/vector_const.q.out | 64 -
.../clientpositive/llap/vector_date_1.q.out | 4 +-
.../llap/vector_decimal_cast.q.out | 2 +-
.../llap/vector_decimal_expressions.q.out | 2 +-
.../llap/vector_empty_where.q.out | 676 -
.../vector_groupby_grouping_sets_grouping.q.out | 4 +-
.../clientpositive/llap/vector_interval_2.q.out | 12 +-
.../llap/vector_interval_mapjoin.q.out | 4 +-
.../clientpositive/llap/vector_join.q.out | 104 -
.../llap/vector_join_part_col_char.q.out | 173 -
.../llap/vector_mapjoin_reduce.q.out | 2 +-
.../llap/vector_mr_diff_schema_alias.q.out | 2 +-
.../llap/vector_multi_insert.q.out | 2 +-
.../llap/vector_non_constant_in_expr.q.out | 51 -
.../llap/vector_non_string_partition.q.out | 276 -
.../vector_orc_string_reader_empty_dict.q.out | 62 -
.../clientpositive/llap/vector_order_null.q.out | 1382 -
.../llap/vector_outer_reference_windowed.q.out | 1435 -
.../llap/vector_string_decimal.q.out | 135 -
.../llap/vector_tablesample_rows.q.out | 403 -
.../clientpositive/llap/vector_udf2.q.out | 188 -
.../clientpositive/llap/vector_windowing.q.out | 9768 ------
.../llap/vector_windowing_expressions.q.out | 2022 --
.../llap/vector_windowing_gby.q.out | 314 -
.../llap/vector_windowing_gby2.q.out | 1158 -
.../vector_windowing_multipartitioning.q.out | 11587 ------
.../llap/vector_windowing_navfn.q.out | 84 +-
.../llap/vector_windowing_order_null.q.out | 1232 -
.../vector_windowing_range_multiorder.q.out | 12584 -------
.../llap/vector_windowing_rank.q.out | 1860 -
.../llap/vector_windowing_streaming.q.out | 1036 -
.../llap/vector_windowing_windowspec.q.out | 2374 --
.../llap/vector_windowing_windowspec4.q.out | 223 -
.../clientpositive/llap/vectorization_0.q.out | 8 +-
.../clientpositive/llap/vectorization_1.q.out | 2 +-
.../clientpositive/llap/vectorization_10.q.out | 2 +-
.../clientpositive/llap/vectorization_12.q.out | 2 +-
.../clientpositive/llap/vectorization_13.q.out | 4 +-
.../clientpositive/llap/vectorization_14.q.out | 2 +-
.../clientpositive/llap/vectorization_15.q.out | 2 +-
.../clientpositive/llap/vectorization_16.q.out | 2 +-
.../clientpositive/llap/vectorization_17.q.out | 2 +-
.../clientpositive/llap/vectorization_2.q.out | 2 +-
.../clientpositive/llap/vectorization_3.q.out | 2 +-
.../clientpositive/llap/vectorization_4.q.out | 2 +-
.../clientpositive/llap/vectorization_5.q.out | 2 +-
.../clientpositive/llap/vectorization_6.q.out | 2 +-
.../clientpositive/llap/vectorization_7.q.out | 4 +-
.../clientpositive/llap/vectorization_8.q.out | 4 +-
.../clientpositive/llap/vectorization_9.q.out | 2 +-
.../llap/vectorization_decimal_date.q.out | 2 +-
.../llap/vectorization_div0.q.out | 615 -
.../llap/vectorization_limit.q.out | 942 -
.../llap/vectorization_offset_limit.q.out | 187 -
.../llap/vectorization_short_regress.q.out | 20 +-
.../clientpositive/llap/vectorized_case.q.out | 4 +-
.../llap/vectorized_context.q.out | 2 +-
.../vectorized_dynamic_partition_pruning.q.out | 10 +-
.../vectorized_dynamic_semijoin_reduction.q.out | 16 +-
...vectorized_dynamic_semijoin_reduction2.q.out | 16 +-
.../llap/vectorized_mapjoin2.q.out | 213 -
.../llap/vectorized_nested_mapjoin.q.out | 2 +-
.../llap/vectorized_string_funcs.q.out | 2 +-
.../llap/windowing_windowspec.q.out | 955 -
.../clientpositive/llap_partitioned.q.out | 2003 --
.../clientpositive/llap_uncompressed.q.out | 2 +-
.../clientpositive/load_dyn_part13.q.out | 2 +-
.../results/clientpositive/load_dyn_part5.q.out | 1033 -
.../test/results/clientpositive/load_fs2.q.out | 121 -
.../load_hdfs_file_with_space_in_the_name.q.out | 25 -
.../clientpositive/louter_join_ppr.q.out | 8 +-
.../test/results/clientpositive/mapjoin2.q.out | 4 +
.../mapjoin_filter_on_outerjoin.q.out | 4 +-
.../clientpositive/mapjoin_mapjoin.q.out | 4 +-
.../test/results/clientpositive/masking_1.q.out | 2 +-
.../test/results/clientpositive/masking_3.q.out | 2 +-
.../clientpositive/masking_disablecbo_1.q.out | 2 +-
.../clientpositive/masking_disablecbo_3.q.out | 12 +-
.../materialized_view_create_rewrite.q.out | 4 +-
.../results/clientpositive/metadataonly1.q.out | 1956 --
.../clientpositive/min_structvalue.q.out | 45 -
.../results/clientpositive/multiMapJoin1.q.out | 3081 --
.../results/clientpositive/multiMapJoin2.q.out | 3464 --
.../clientpositive/multi_column_in.q.out | 408 -
.../clientpositive/multi_column_in_single.q.out | 370 -
.../results/clientpositive/multi_insert.q.out | 2749 --
.../clientpositive/multi_insert_gby.q.out | 2 +-
.../clientpositive/multi_insert_gby4.q.out | 2 +-
.../multi_insert_lateral_view.q.out | 1586 -
...i_insert_move_tasks_share_dependencies.q.out | 56 +-
.../multi_insert_with_join2.q.out | 14 +-
.../clientpositive/nested_column_pruning.q.out | 2 +-
.../clientpositive/non_native_window_udf.q.out | 52 -
.../results/clientpositive/nonmr_fetch.q.out | 2 +-
.../results/clientpositive/nullscript.q.out | 8 +-
.../results/clientpositive/offset_limit.q.out | 276 -
.../offset_limit_ppd_optimizer.q.out | 1387 -
.../clientpositive/optimize_nullscan.q.out | 2054 --
.../results/clientpositive/orc_analyze.q.out | 1544 -
.../results/clientpositive/orc_create.q.out | 782 -
.../test/results/clientpositive/orc_llap.q.out | 1153 -
.../clientpositive/orc_llap_nonvector.q.out | 1302 -
.../results/clientpositive/orc_merge5.q.out | 16 +-
.../results/clientpositive/orc_merge6.q.out | 16 +-
.../results/clientpositive/orc_merge7.q.out | 605 -
.../clientpositive/orc_merge_incompat1.q.out | 8 +-
.../clientpositive/orc_merge_incompat2.q.out | 6 +-
.../results/clientpositive/orc_ppd_date.q.out | 301 -
.../clientpositive/orc_ppd_decimal.q.out | 490 -
.../clientpositive/orc_ppd_schema_evol_3a.q.out | 544 -
.../clientpositive/orc_ppd_timestamp.q.out | 292 -
.../clientpositive/orc_ppd_varchar.q.out | 220 -
.../clientpositive/orc_predicate_pushdown.q.out | 1132 -
.../clientpositive/orc_split_elimination.q.out | 532 -
.../results/clientpositive/order_null.q.out | 210 -
.../results/clientpositive/outer_join_ppr.q.out | 4 +-
.../clientpositive/parallel_orderby.q.out | 10 +-
.../parquet_int96_timestamp.q.out | 535 -
.../parquet_predicate_pushdown.q.out | 1276 -
.../results/clientpositive/parquet_types.q.out | 379 -
.../clientpositive/partition_multilevels.q.out | 1624 -
.../clientpositive/partition_pruning.q.out | 396 -
.../partition_wise_fileformat2.q.out | 4 +-
ql/src/test/results/clientpositive/pcr.q.out | 2 +-
ql/src/test/results/clientpositive/pcs.q.out | 6 +-
.../results/clientpositive/perf/query1.q.out | 2 +-
.../results/clientpositive/perf/query10.q.out | 2 +-
.../results/clientpositive/perf/query11.q.out | 2 +-
.../results/clientpositive/perf/query13.q.out | 8 +-
.../results/clientpositive/perf/query14.q.out | 30 +-
.../results/clientpositive/perf/query15.q.out | 4 +-
.../results/clientpositive/perf/query16.q.out | 2 +-
.../results/clientpositive/perf/query17.q.out | 4 +-
.../results/clientpositive/perf/query18.q.out | 6 +-
.../results/clientpositive/perf/query19.q.out | 4 +-
.../results/clientpositive/perf/query21.q.out | 2 +-
.../results/clientpositive/perf/query22.q.out | 2 +-
.../results/clientpositive/perf/query23.q.out | 8 +-
.../results/clientpositive/perf/query24.q.out | 8 +-
.../results/clientpositive/perf/query25.q.out | 8 +-
.../results/clientpositive/perf/query26.q.out | 4 +-
.../results/clientpositive/perf/query27.q.out | 4 +-
.../results/clientpositive/perf/query28.q.out | 12 +-
.../results/clientpositive/perf/query29.q.out | 6 +-
.../results/clientpositive/perf/query3.q.out | 2 +-
.../results/clientpositive/perf/query31.q.out | 4 +-
.../results/clientpositive/perf/query33.q.out | 10 +-
.../results/clientpositive/perf/query34.q.out | 4 +-
.../results/clientpositive/perf/query35.q.out | 2 +-
.../results/clientpositive/perf/query36.q.out | 2 +-
.../results/clientpositive/perf/query37.q.out | 2 +-
.../results/clientpositive/perf/query38.q.out | 8 +-
.../results/clientpositive/perf/query39.q.out | 6 +-
.../results/clientpositive/perf/query4.q.out | 2 +-
.../results/clientpositive/perf/query40.q.out | 2 +-
.../results/clientpositive/perf/query42.q.out | 2 +-
.../results/clientpositive/perf/query45.q.out | 4 +-
.../results/clientpositive/perf/query46.q.out | 4 +-
.../results/clientpositive/perf/query47.q.out | 6 +-
.../results/clientpositive/perf/query48.q.out | 6 +-
.../results/clientpositive/perf/query49.q.out | 14 +-
.../results/clientpositive/perf/query5.q.out | 8 +-
.../results/clientpositive/perf/query50.q.out | 6 +-
.../results/clientpositive/perf/query51.q.out | 2 +-
.../results/clientpositive/perf/query52.q.out | 2 +-
.../results/clientpositive/perf/query53.q.out | 2 +-
.../results/clientpositive/perf/query54.q.out | 8 +-
.../results/clientpositive/perf/query55.q.out | 2 +-
.../results/clientpositive/perf/query56.q.out | 8 +-
.../results/clientpositive/perf/query57.q.out | 6 +-
.../results/clientpositive/perf/query58.q.out | 10 +-
.../results/clientpositive/perf/query59.q.out | 4 +-
.../results/clientpositive/perf/query6.q.out | 6 +-
.../results/clientpositive/perf/query60.q.out | 8 +-
.../results/clientpositive/perf/query61.q.out | 8 +-
.../results/clientpositive/perf/query62.q.out | 164 -
.../results/clientpositive/perf/query63.q.out | 2 +-
.../results/clientpositive/perf/query64.q.out | 6 +-
.../results/clientpositive/perf/query65.q.out | 4 +-
.../results/clientpositive/perf/query66.q.out | 4 +-
.../results/clientpositive/perf/query67.q.out | 4 +-
.../results/clientpositive/perf/query68.q.out | 6 +-
.../results/clientpositive/perf/query69.q.out | 2 +-
.../results/clientpositive/perf/query7.q.out | 4 +-
.../results/clientpositive/perf/query70.q.out | 4 +-
.../results/clientpositive/perf/query71.q.out | 6 +-
.../results/clientpositive/perf/query72.q.out | 4 +-
.../results/clientpositive/perf/query73.q.out | 4 +-
.../results/clientpositive/perf/query74.q.out | 8 +-
.../results/clientpositive/perf/query75.q.out | 2 +-
.../results/clientpositive/perf/query76.q.out | 4 +-
.../results/clientpositive/perf/query79.q.out | 4 +-
.../results/clientpositive/perf/query80.q.out | 6 +-
.../results/clientpositive/perf/query82.q.out | 2 +-
.../results/clientpositive/perf/query83.q.out | 4 +-
.../results/clientpositive/perf/query85.q.out | 10 +-
.../results/clientpositive/perf/query86.q.out | 4 +-
.../results/clientpositive/perf/query87.q.out | 12 +-
.../results/clientpositive/perf/query89.q.out | 2 +-
.../results/clientpositive/perf/query91.q.out | 6 +-
.../results/clientpositive/perf/query93.q.out | 2 +-
.../results/clientpositive/perf/query94.q.out | 2 +-
.../results/clientpositive/perf/query95.q.out | 2 +-
.../results/clientpositive/perf/query97.q.out | 2 +-
.../results/clientpositive/perf/query99.q.out | 4 +-
.../results/clientpositive/pointlookup.q.out | 2 +-
.../results/clientpositive/ppd_clusterby.q.out | 4 +-
.../test/results/clientpositive/ppd_gby.q.out | 4 +-
.../test/results/clientpositive/ppd_gby2.q.out | 4 +-
.../results/clientpositive/ppd_gby_join.q.out | 8 +-
.../test/results/clientpositive/ppd_join.q.out | 8 +-
.../test/results/clientpositive/ppd_join2.q.out | 8 +-
.../test/results/clientpositive/ppd_join3.q.out | 16 +-
.../test/results/clientpositive/ppd_join4.q.out | 2 +-
.../test/results/clientpositive/ppd_join5.q.out | 2 +-
.../clientpositive/ppd_multi_insert.q.out | 8 +-
.../clientpositive/ppd_outer_join1.q.out | 4 +-
.../clientpositive/ppd_outer_join2.q.out | 4 +-
.../clientpositive/ppd_outer_join3.q.out | 4 +-
.../clientpositive/ppd_outer_join4.q.out | 8 +-
.../clientpositive/ppd_repeated_alias.q.out | 52 +-
.../results/clientpositive/ppd_udf_case.q.out | 2 +-
.../results/clientpositive/ppd_udf_col.q.out | 4 +-
.../results/clientpositive/ppd_union_view.q.out | 744 -
.../clientpositive/ppr_allchildsarenull.q.out | 2 +-
.../results/clientpositive/ppr_pushdown.q.out | 328 -
ql/src/test/results/clientpositive/ptf.q.out | 5014 ---
.../results/clientpositive/ptf_matchpath.q.out | 42 +-
.../results/clientpositive/ptf_streaming.q.out | 2724 --
.../clientpositive/ql_rewrite_gbtoidx.q.out | 2531 --
.../ql_rewrite_gbtoidx_cbo_1.q.out | 2527 --
.../ql_rewrite_gbtoidx_cbo_2.q.out | 3863 --
ql/src/test/results/clientpositive/quote1.q.out | 2 +-
.../results/clientpositive/quotedid_smb.q.out | 81 -
.../clientpositive/rand_partitionpruner3.q.out | 2 +-
.../clientpositive/rcfile_createas1.q.out | 205 -
.../results/clientpositive/rcfile_merge1.q.out | 1270 -
.../results/clientpositive/rcfile_merge2.q.out | 255 -
.../results/clientpositive/rcfile_merge3.q.out | 194 -
.../results/clientpositive/rcfile_merge4.q.out | 204 -
.../clientpositive/rcfile_null_value.q.out | 2 +-
.../clientpositive/reduce_deduplicate.q.out | 360 -
.../reduce_deduplicate_extended.q.out | 4976 ---
.../results/clientpositive/remote_script.q.out | 49 -
.../clientpositive/remove_exprs_stats.q.out | 224 +
.../clientpositive/router_join_ppr.q.out | 8 +-
.../test/results/clientpositive/sample10.q.out | 473 -
.../test/results/clientpositive/sample8.q.out | 4 +-
.../clientpositive/schema_evol_stats.q.out | 384 -
.../clientpositive/schemeAuthority.q.out | 84 -
.../clientpositive/schemeAuthority2.q.out | 53 -
.../clientpositive/selectDistinctStar.q.out | 4856 ---
.../clientpositive/select_dummy_source.q.out | 22 +-
.../clientpositive/select_unquote_and.q.out | 2 +-
.../clientpositive/select_unquote_or.q.out | 2 +-
.../test/results/clientpositive/semijoin.q.out | 2601 --
.../test/results/clientpositive/semijoin2.q.out | 4 +-
.../test/results/clientpositive/semijoin4.q.out | 2 +-
.../test/results/clientpositive/semijoin5.q.out | 4 +-
.../test/results/clientpositive/skewjoin.q.out | 6 +-
.../clientpositive/skewjoin_mapjoin1.q.out | 16 +-
.../clientpositive/skewjoin_mapjoin10.q.out | 16 +-
.../clientpositive/skewjoin_mapjoin11.q.out | 8 +-
.../clientpositive/skewjoin_mapjoin2.q.out | 8 +-
.../clientpositive/skewjoin_mapjoin3.q.out | 8 +-
.../clientpositive/skewjoin_mapjoin4.q.out | 12 +-
.../clientpositive/skewjoin_mapjoin6.q.out | 8 +-
.../clientpositive/skewjoin_mapjoin7.q.out | 16 +-
.../clientpositive/skewjoin_mapjoin9.q.out | 8 +-
.../skewjoin_union_remove_1.q.out | 16 +-
.../skewjoin_union_remove_2.q.out | 12 +-
.../results/clientpositive/skewjoinopt1.q.out | 16 +-
.../results/clientpositive/skewjoinopt10.q.out | 8 +-
.../results/clientpositive/skewjoinopt11.q.out | 16 +-
.../results/clientpositive/skewjoinopt12.q.out | 8 +-
.../results/clientpositive/skewjoinopt14.q.out | 8 +-
.../results/clientpositive/skewjoinopt15.q.out | 740 -
.../results/clientpositive/skewjoinopt16.q.out | 8 +-
.../results/clientpositive/skewjoinopt17.q.out | 16 +-
.../results/clientpositive/skewjoinopt19.q.out | 8 +-
.../results/clientpositive/skewjoinopt2.q.out | 16 +-
.../results/clientpositive/skewjoinopt20.q.out | 8 +-
.../results/clientpositive/skewjoinopt21.q.out | 8 +-
.../results/clientpositive/skewjoinopt3.q.out | 8 +-
.../results/clientpositive/skewjoinopt4.q.out | 16 +-
.../results/clientpositive/skewjoinopt5.q.out | 8 +-
.../results/clientpositive/skewjoinopt6.q.out | 8 +-
.../results/clientpositive/skewjoinopt7.q.out | 12 +-
.../results/clientpositive/skewjoinopt8.q.out | 12 +-
.../results/clientpositive/skiphf_aggr.q.out | 255 -
.../results/clientpositive/smb_mapjoin9.q.out | 4 +-
.../results/clientpositive/smb_mapjoin_1.q.out | 10 +-
.../results/clientpositive/smb_mapjoin_10.q.out | 2 +-
.../results/clientpositive/smb_mapjoin_14.q.out | 1233 -
.../results/clientpositive/smb_mapjoin_15.q.out | 766 -
.../results/clientpositive/smb_mapjoin_17.q.out | 674 -
.../results/clientpositive/smb_mapjoin_18.q.out | 448 -
.../results/clientpositive/smb_mapjoin_19.q.out | 250 -
.../results/clientpositive/smb_mapjoin_2.q.out | 20 +-
.../results/clientpositive/smb_mapjoin_25.q.out | 96 +-
.../results/clientpositive/smb_mapjoin_3.q.out | 10 +-
.../results/clientpositive/smb_mapjoin_4.q.out | 829 -
.../results/clientpositive/smb_mapjoin_5.q.out | 829 -
.../results/clientpositive/smb_mapjoin_6.q.out | 2719 --
.../results/clientpositive/smb_mapjoin_8.q.out | 468 -
.../clientpositive/sort_merge_join_desc_2.q.out | 2 +-
.../clientpositive/sort_merge_join_desc_3.q.out | 2 +-
.../clientpositive/sort_merge_join_desc_4.q.out | 4 +-
.../clientpositive/sort_merge_join_desc_8.q.out | 4 +-
.../clientpositive/spark/auto_join20.q.out | 2 +-
.../clientpositive/spark/auto_join25.q.out | 116 -
.../clientpositive/spark/auto_join28.q.out | 2 +-
.../clientpositive/spark/auto_join29.q.out | 14 +-
.../clientpositive/spark/auto_join32.q.out | 580 -
.../clientpositive/spark/auto_join4.q.out | 4 +-
.../clientpositive/spark/auto_join5.q.out | 2 +-
.../clientpositive/spark/auto_join6.q.out | 4 +-
.../clientpositive/spark/auto_join7.q.out | 6 +-
.../clientpositive/spark/auto_join8.q.out | 4 +-
.../spark/auto_join_reordering_values.q.out | 2 +-
.../spark/auto_sortmerge_join_11.q.out | 1548 -
.../spark/auto_sortmerge_join_2.q.out | 644 -
.../spark/auto_sortmerge_join_5.q.out | 30 +-
.../spark/bucket_map_join_tez1.q.out | 4265 ++-
.../spark/bucket_map_join_tez2.q.out | 1330 +-
.../clientpositive/spark/bucketmapjoin1.q.out | 16 +-
.../clientpositive/spark/bucketmapjoin4.q.out | 44 +-
.../clientpositive/spark/bucketmapjoin5.q.out | 8 +-
.../spark/bucketmapjoin_negative.q.out | 4 +-
.../spark/bucketmapjoin_negative2.q.out | 4 +-
.../spark/bucketmapjoin_negative3.q.out | 126 +-
.../spark/bucketsortoptimize_insert_7.q.out | 4 +-
.../clientpositive/spark/char_join1.q.out | 153 -
.../spark/constprog_semijoin.q.out | 2 +-
.../results/clientpositive/spark/count.q.out | 130 +-
.../spark/dynamic_rdd_cache.q.out | 8 +-
.../spark/filter_join_breaktask.q.out | 48 +-
.../spark/gen_udf_example_add10.q.out | 12 +-
.../clientpositive/spark/groupby10.q.out | 72 +-
.../spark/groupby_multi_single_reducer3.q.out | 20 +-
.../clientpositive/spark/groupby_position.q.out | 2 +-
.../spark/identity_project_remove_skip.q.out | 2 +-
.../spark/index_auto_self_join.q.out | 8 +-
.../spark/infer_bucket_sort_convert_join.q.out | 128 -
.../results/clientpositive/spark/input12.q.out | 2 +-
.../results/clientpositive/spark/input13.q.out | 4 +-
.../clientpositive/spark/input_part2.q.out | 4 +-
.../results/clientpositive/spark/insert1.q.out | 420 -
.../results/clientpositive/spark/join19.q.out | 6 +-
.../results/clientpositive/spark/join20.q.out | 2 +-
.../clientpositive/spark/join32_lessSize.q.out | 2 +-
.../results/clientpositive/spark/join4.q.out | 4 +-
.../results/clientpositive/spark/join40.q.out | 3846 --
.../results/clientpositive/spark/join5.q.out | 2 +-
.../results/clientpositive/spark/join6.q.out | 4 +-
.../results/clientpositive/spark/join7.q.out | 6 +-
.../results/clientpositive/spark/join8.q.out | 4 +-
.../clientpositive/spark/join_empty.q.out | 56 -
.../clientpositive/spark/join_filters.q.out | 1364 -
.../clientpositive/spark/join_hive_626.q.out | 2 +-
.../clientpositive/spark/join_nulls.q.out | 652 -
.../clientpositive/spark/join_nullsafe.q.out | 116 +-
.../clientpositive/spark/join_reorder2.q.out | 4 +-
.../clientpositive/spark/join_reorder3.q.out | 4 +-
.../clientpositive/spark/join_star.q.out | 140 +-
.../clientpositive/spark/load_dyn_part13.q.out | 2 +-
.../clientpositive/spark/louter_join_ppr.q.out | 8 +-
.../spark/mapjoin_filter_on_outerjoin.q.out | 4 +-
.../clientpositive/spark/mapjoin_hook.q.out | 61 -
.../clientpositive/spark/mapjoin_mapjoin.q.out | 4 +-
.../clientpositive/spark/multi_insert.q.out | 32 +-
.../clientpositive/spark/multi_insert_gby.q.out | 2 +-
...i_insert_move_tasks_share_dependencies.q.out | 56 +-
.../spark/multi_insert_union_src.q.out | 372 -
.../spark/multi_insert_with_join2.q.out | 1006 -
.../clientpositive/spark/orc_analyze.q.out | 1038 -
.../clientpositive/spark/orc_merge5.q.out | 16 +-
.../clientpositive/spark/orc_merge6.q.out | 16 +-
.../clientpositive/spark/orc_merge7.q.out | 12 +-
.../spark/orc_merge_incompat1.q.out | 8 +-
.../spark/orc_merge_incompat2.q.out | 6 +-
.../clientpositive/spark/outer_join_ppr.q.out | 4 +-
.../clientpositive/spark/parallel_orderby.q.out | 10 +-
.../test/results/clientpositive/spark/pcr.q.out | 2 +-
.../clientpositive/spark/ppd_gby_join.q.out | 8 +-
.../results/clientpositive/spark/ppd_join.q.out | 8 +-
.../clientpositive/spark/ppd_join2.q.out | 8 +-
.../clientpositive/spark/ppd_join3.q.out | 16 +-
.../clientpositive/spark/ppd_join4.q.out | 137 -
.../clientpositive/spark/ppd_join5.q.out | 2 +-
.../clientpositive/spark/ppd_multi_insert.q.out | 8 +-
.../clientpositive/spark/ppd_outer_join1.q.out | 4 +-
.../clientpositive/spark/ppd_outer_join2.q.out | 4 +-
.../clientpositive/spark/ppd_outer_join3.q.out | 4 +-
.../clientpositive/spark/ppd_outer_join4.q.out | 8 +-
.../clientpositive/spark/ptf_matchpath.q.out | 42 +-
.../spark/ql_rewrite_gbtoidx.q.out | 2645 --
.../spark/ql_rewrite_gbtoidx_cbo_1.q.out | 2641 --
.../clientpositive/spark/router_join_ppr.q.out | 8 +-
.../results/clientpositive/spark/sample8.q.out | 4 +-
.../results/clientpositive/spark/skewjoin.q.out | 6 +-
.../spark/skewjoin_union_remove_1.q.out | 16 +-
.../spark/skewjoin_union_remove_2.q.out | 12 +-
.../clientpositive/spark/skewjoinopt1.q.out | 16 +-
.../clientpositive/spark/skewjoinopt10.q.out | 4 +-
.../clientpositive/spark/skewjoinopt11.q.out | 4 +-
.../clientpositive/spark/skewjoinopt12.q.out | 8 +-
.../clientpositive/spark/skewjoinopt14.q.out | 6 +-
.../clientpositive/spark/skewjoinopt15.q.out | 16 +-
.../clientpositive/spark/skewjoinopt16.q.out | 8 +-
.../clientpositive/spark/skewjoinopt17.q.out | 12 +-
.../clientpositive/spark/skewjoinopt19.q.out | 4 +-
.../clientpositive/spark/skewjoinopt2.q.out | 16 +-
.../clientpositive/spark/skewjoinopt20.q.out | 4 +-
.../clientpositive/spark/skewjoinopt3.q.out | 8 +-
.../clientpositive/spark/skewjoinopt4.q.out | 8 +-
.../clientpositive/spark/skewjoinopt5.q.out | 8 +-
.../clientpositive/spark/skewjoinopt6.q.out | 8 +-
.../clientpositive/spark/skewjoinopt7.q.out | 12 +-
.../clientpositive/spark/skewjoinopt8.q.out | 12 +-
.../clientpositive/spark/smb_mapjoin9.q.out | 402 -
.../clientpositive/spark/smb_mapjoin_1.q.out | 58 +-
.../clientpositive/spark/smb_mapjoin_10.q.out | 2 +-
.../clientpositive/spark/smb_mapjoin_15.q.out | 4 +-
.../clientpositive/spark/smb_mapjoin_2.q.out | 68 +-
.../clientpositive/spark/smb_mapjoin_25.q.out | 80 +-
.../clientpositive/spark/smb_mapjoin_3.q.out | 58 +-
.../clientpositive/spark/smb_mapjoin_4.q.out | 224 +-
.../clientpositive/spark/smb_mapjoin_5.q.out | 224 +-
.../spark/sort_merge_join_desc_1.q.out | 127 -
.../spark/sort_merge_join_desc_2.q.out | 133 -
.../spark/sort_merge_join_desc_3.q.out | 133 -
.../spark/sort_merge_join_desc_4.q.out | 155 -
.../spark/sort_merge_join_desc_5.q.out | 262 -
.../spark/sort_merge_join_desc_6.q.out | 355 -
.../spark/sort_merge_join_desc_7.q.out | 479 -
.../spark/sort_merge_join_desc_8.q.out | 283 -
.../spark/spark_combine_equivalent_work_2.q.out | 232 +
.../spark/spark_dynamic_partition_pruning.q.out | 14 +-
.../spark_dynamic_partition_pruning_3.q.out | 2 +-
.../spark/spark_explainuser_1.q.out | 138 +-
.../spark/spark_use_file_size_for_mapjoin.q.out | 257 -
...k_vectorized_dynamic_partition_pruning.q.out | 14 +-
.../clientpositive/spark/subquery_in.q.out | 4 +-
.../clientpositive/spark/transform1.q.out | 138 -
.../clientpositive/spark/transform_ppr1.q.out | 2 +-
.../clientpositive/spark/union_view.q.out | 22 +-
.../spark/vector_mapjoin_reduce.q.out | 2 +-
.../spark/vector_tablesample_rows.q.out | 424 -
.../clientpositive/spark/vectorization_0.q.out | 8 +-
.../clientpositive/spark/vectorization_1.q.out | 2 +-
.../clientpositive/spark/vectorization_10.q.out | 2 +-
.../clientpositive/spark/vectorization_12.q.out | 2 +-
.../clientpositive/spark/vectorization_13.q.out | 4 +-
.../clientpositive/spark/vectorization_14.q.out | 2 +-
.../clientpositive/spark/vectorization_15.q.out | 2 +-
.../clientpositive/spark/vectorization_16.q.out | 2 +-
.../clientpositive/spark/vectorization_17.q.out | 2 +-
.../clientpositive/spark/vectorization_2.q.out | 2 +-
.../clientpositive/spark/vectorization_3.q.out | 2 +-
.../clientpositive/spark/vectorization_4.q.out | 2 +-
.../clientpositive/spark/vectorization_5.q.out | 2 +-
.../clientpositive/spark/vectorization_6.q.out | 2 +-
.../clientpositive/spark/vectorization_7.q.out | 480 -
.../clientpositive/spark/vectorization_8.q.out | 454 -
.../clientpositive/spark/vectorization_9.q.out | 2 +-
.../spark/vectorization_decimal_date.q.out | 2 +-
.../spark/vectorization_div0.q.out | 4 +-
.../spark/vectorization_short_regress.q.out | 20 +-
.../spark/vectorized_bucketmapjoin1.q.out | 375 -
.../clientpositive/spark/vectorized_case.q.out | 4 +-
.../spark/vectorized_nested_mapjoin.q.out | 2 +-
.../spark/vectorized_string_funcs.q.out | 2 +-
.../special_character_in_tabnames_1.q.out | 19607 -----------
.../special_character_in_tabnames_2.q.out | 6 +-
.../test/results/clientpositive/stats11.q.out | 1291 -
.../results/clientpositive/subquery_in.q.out | 956 -
.../clientpositive/subquery_in_having.q.out | 312 +-
.../results/clientpositive/subquery_notin.q.out | 1620 -
.../results/clientpositive/subquery_views.q.out | 595 -
.../table_access_keys_stats.q.out | 606 -
.../clientpositive/table_nonprintable.q.out | 72 -
.../results/clientpositive/temp_table.q.out | 634 -
.../clientpositive/temp_table_external.q.out | 34 -
.../clientpositive/tez/explainanalyze_2.q.out | 58 +-
.../clientpositive/tez/explainanalyze_3.q.out | 6 +-
.../clientpositive/tez/explainanalyze_4.q.out | 12 +-
.../clientpositive/tez/explainanalyze_5.q.out | 8 +-
.../clientpositive/tez/explainuser_3.q.out | 6 +-
.../tez/hybridgrace_hashjoin_2.q.out | 8 +-
.../clientpositive/tez/stats_filemetadata.q.out | 54 -
.../clientpositive/tez/vector_acid3.q.out | 29 -
.../tez/vector_adaptor_usage_mode.q.out | 706 -
.../clientpositive/tez/vector_aggregate_9.q.out | 201 -
.../tez/vector_aggregate_without_gby.q.out | 70 -
.../tez/vector_auto_smb_mapjoin_14.q.out | 2314 --
.../tez/vector_between_columns.q.out | 365 -
.../clientpositive/tez/vector_between_in.q.out | 1691 -
.../tez/vector_binary_join_groupby.q.out | 586 -
.../clientpositive/tez/vector_bround.q.out | 67 -
.../clientpositive/tez/vector_bucket.q.out | 125 -
.../tez/vector_cast_constant.q.out | 262 -
.../clientpositive/tez/vector_char_2.q.out | 430 -
.../clientpositive/tez/vector_char_4.q.out | 198 -
.../clientpositive/tez/vector_char_cast.q.out | 33 -
.../tez/vector_char_mapjoin1.q.out | 678 -
.../clientpositive/tez/vector_char_simple.q.out | 311 -
.../clientpositive/tez/vector_coalesce.q.out | 601 -
.../clientpositive/tez/vector_coalesce_2.q.out | 393 -
.../clientpositive/tez/vectorization_div0.q.out | 4 +-
.../tez_join_result_complex.q.out | 1337 -
.../results/clientpositive/timestamptz_1.q.out | 2 +-
.../results/clientpositive/transform_ppr1.q.out | 2 +-
.../results/clientpositive/uber_reduce.q.out | 31 -
.../clientpositive/udaf_collect_set_2.q.out | 742 -
.../udaf_percentile_approx_23.q.out | 8 +-
.../results/clientpositive/udf_mask_hash.q.out | 6 +-
.../clientpositive/udf_trunc_number.q.out | 20 +-
.../results/clientpositive/udtf_stack.q.out | 18 +-
.../clientpositive/unionDistinct_1.q.out | 16654 ---------
.../clientpositive/unionDistinct_2.q.out | 551 -
.../clientpositive/union_fast_stats.q.out | 646 -
.../clientpositive/union_remove_26.q.out | 823 -
.../clientpositive/union_top_level.q.out | 1396 -
.../results/clientpositive/union_view.q.out | 16 +-
.../results/clientpositive/varchar_udf1.q.out | 453 -
.../vector_adaptor_usage_mode.q.out | 931 -
.../vector_auto_smb_mapjoin_14.q.out | 1805 -
.../clientpositive/vector_between_in.q.out | 943 -
.../clientpositive/vector_complex_all.q.out | 229 -
.../clientpositive/vector_count_distinct.q.out | 1356 -
.../results/clientpositive/vector_date_1.q.out | 4 +-
.../clientpositive/vector_decimal_2.q.out | 1458 -
.../clientpositive/vector_decimal_cast.q.out | 2 +-
.../vector_decimal_expressions.q.out | 2 +-
.../clientpositive/vector_decimal_udf.q.out | 2638 --
.../clientpositive/vector_inner_join.q.out | 851 -
.../clientpositive/vector_interval_2.q.out | 1550 -
.../vector_interval_mapjoin.q.out | 4 +-
.../results/clientpositive/vector_join30.q.out | 2220 --
.../clientpositive/vector_join_filters.q.out | 224 -
.../clientpositive/vector_join_nulls.q.out | 197 -
.../vector_leftsemi_mapjoin.q.out | 13610 --------
.../clientpositive/vector_mapjoin_reduce.q.out | 2 +-
.../vector_mr_diff_schema_alias.q.out | 2 +-
.../clientpositive/vector_multi_insert.q.out | 2 +-
.../clientpositive/vector_nullsafe_join.q.out | 1210 -
.../vector_number_compare_projection.q.out | 716 -
.../clientpositive/vector_outer_join5.q.out | 1308 -
.../vector_partition_diff_num_cols.q.out | 579 -
.../vector_partitioned_date_time.q.out | 2048 --
.../clientpositive/vector_ptf_part_simple.q.out | 2895 --
.../vector_tablesample_rows.q.out | 2 +-
.../results/clientpositive/vector_udf1.q.out | 1641 -
.../vector_windowing_expressions.q.out | 74 +-
.../vector_windowing_multipartitioning.q.out | 132 +-
.../vector_windowing_order_null.q.out | 112 +-
.../vector_windowing_range_multiorder.q.out | 152 +-
.../clientpositive/vector_windowing_rank.q.out | 152 +-
.../vector_windowing_streaming.q.out | 16 +-
.../vector_windowing_windowspec.q.out | 154 +-
.../clientpositive/vectorization_0.q.out | 30981 -----------------
.../clientpositive/vectorization_1.q.out | 2 +-
.../clientpositive/vectorization_10.q.out | 2 +-
.../clientpositive/vectorization_12.q.out | 2 +-
.../clientpositive/vectorization_13.q.out | 4 +-
.../clientpositive/vectorization_14.q.out | 2 +-
.../clientpositive/vectorization_15.q.out | 2 +-
.../clientpositive/vectorization_16.q.out | 2 +-
.../clientpositive/vectorization_17.q.out | 2 +-
.../clientpositive/vectorization_2.q.out | 2 +-
.../clientpositive/vectorization_3.q.out | 2 +-
.../clientpositive/vectorization_4.q.out | 2 +-
.../clientpositive/vectorization_5.q.out | 2 +-
.../clientpositive/vectorization_6.q.out | 2 +-
.../clientpositive/vectorization_7.q.out | 4 +-
.../clientpositive/vectorization_8.q.out | 4 +-
.../clientpositive/vectorization_9.q.out | 2 +-
.../vectorization_decimal_date.q.out | 2 +-
.../clientpositive/vectorization_div0.q.out | 4 +-
.../vectorization_short_regress.q.out | 3336 --
.../clientpositive/vectorized_case.q.out | 4 +-
.../clientpositive/vectorized_context.q.out | 2 +-
.../clientpositive/vectorized_mapjoin2.q.out | 14 +-
.../vectorized_nested_mapjoin.q.out | 129 -
.../clientpositive/vectorized_parquet.q.out | 333 -
.../results/clientpositive/vectorized_ptf.q.out | 8440 -----
.../vectorized_string_funcs.q.out | 2 +-
.../test/results/clientpositive/view_cbo.q.out | 2 +-
.../test/results/clientpositive/windowing.q.out | 2439 --
.../clientpositive/windowing_windowspec2.q.out | 3084 --
.../ConstantObjectInspector.java | 5 +
.../objectinspector/ListObjectInspector.java | 5 +
.../objectinspector/MapObjectInspector.java | 5 +
.../serde2/objectinspector/ObjectInspector.java | 5 +
.../serde2/objectinspector/StructField.java | 5 +
.../objectinspector/StructObjectInspector.java | 5 +
.../serde2/objectinspector/UnionObject.java | 5 +
.../objectinspector/UnionObjectInspector.java | 5 +
.../primitive/BinaryObjectInspector.java | 5 +
.../primitive/BooleanObjectInspector.java | 4 +
.../primitive/ByteObjectInspector.java | 4 +
.../primitive/DateObjectInspector.java | 4 +
.../primitive/DoubleObjectInspector.java | 4 +
.../primitive/FloatObjectInspector.java | 4 +
.../primitive/HiveCharObjectInspector.java | 4 +
.../primitive/HiveDecimalObjectInspector.java | 4 +
.../HiveIntervalDayTimeObjectInspector.java | 4 +
.../HiveIntervalYearMonthObjectInspector.java | 4 +
.../primitive/HiveVarcharObjectInspector.java | 4 +
.../primitive/IntObjectInspector.java | 4 +
.../primitive/LongObjectInspector.java | 4 +
.../PrimitiveObjectInspectorUtils.java | 4 +
.../primitive/ShortObjectInspector.java | 4 +
.../primitive/StringObjectInspector.java | 4 +
.../primitive/TimestampObjectInspector.java | 4 +
.../primitive/VoidObjectInspector.java | 4 +
.../hive/serde2/typeinfo/BaseCharTypeInfo.java | 5 +
.../hive/serde2/typeinfo/ListTypeInfo.java | 4 +
.../hive/serde2/typeinfo/MapTypeInfo.java | 4 +
.../hive/serde2/typeinfo/PrimitiveTypeInfo.java | 4 +
.../hive/serde2/typeinfo/StructTypeInfo.java | 4 +
.../hadoop/hive/serde2/typeinfo/TypeInfo.java | 4 +
.../hive/serde2/typeinfo/UnionTypeInfo.java | 4 +
service-rpc/if/TCLIService.thrift | 10 +
.../src/gen/thrift/gen-cpp/TCLIService.cpp | 383 +
.../src/gen/thrift/gen-cpp/TCLIService.h | 126 +
.../gen-cpp/TCLIService_server.skeleton.cpp | 5 +
.../gen/thrift/gen-cpp/TCLIService_types.cpp | 172 +
.../src/gen/thrift/gen-cpp/TCLIService_types.h | 84 +
.../hive/service/rpc/thrift/TCLIService.java | 858 +
.../hive/service/rpc/thrift/TGetQueryIdReq.java | 394 +
.../service/rpc/thrift/TGetQueryIdResp.java | 389 +
.../src/gen/thrift/gen-php/TCLIService.php | 216 +
service-rpc/src/gen/thrift/gen-php/Types.php | 155 +
.../gen-py/TCLIService/TCLIService-remote | 7 +
.../thrift/gen-py/TCLIService/TCLIService.py | 189 +
.../src/gen/thrift/gen-py/TCLIService/ttypes.py | 135 +
.../src/gen/thrift/gen-rb/t_c_l_i_service.rb | 54 +
.../gen/thrift/gen-rb/t_c_l_i_service_types.rb | 34 +
service/pom.xml | 7 +
.../org/apache/hive/service/cli/CLIService.java | 10 +
.../service/cli/EmbeddedCLIServiceClient.java | 6 +
.../apache/hive/service/cli/ICLIService.java | 3 +
.../service/cli/operation/OperationManager.java | 25 +-
.../service/cli/session/HiveSessionImpl.java | 9 +
.../service/cli/session/SessionManager.java | 7 +
.../thrift/RetryingThriftCLIServiceClient.java | 6 +
.../service/cli/thrift/ThriftCLIService.java | 11 +
.../cli/thrift/ThriftCLIServiceClient.java | 11 +
.../apache/hive/service/server/HiveServer2.java | 24 +-
.../hive/service/server/KillQueryImpl.java | 53 +
.../cli/session/TestSessionManagerMetrics.java | 3 +-
.../cli/thrift/ThriftCLIServiceTest.java | 4 +-
.../thrift/ThriftCliServiceTestWithCookie.java | 4 +-
.../hive/service/server/TestHS2HttpServer.java | 4 +-
storage-api/pom.xml | 2 +-
1205 files changed, 24074 insertions(+), 443973 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/itests/src/test/resources/testconfiguration.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
----------------------------------------------------------------------
diff --cc metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
index 1672222,b51446d..0442e21
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
@@@ -1948,61 -1814,6 +1817,59 @@@ public class MetaStoreUtils
return cols;
}
+ // TODO The following two utility methods can be moved to AcidUtils once no class in metastore is relying on them,
+ // right now ObjectStore.getAllMmTablesForCleanup is calling these method
+ /**
+ * Checks if a table is an ACID table that only supports INSERT, but not UPDATE/DELETE
+ * @param params table properties
+ * @return true if table is an INSERT_ONLY table, false otherwise
+ */
+ public static boolean isInsertOnlyTable(Map<String, String> params) {
+ return isInsertOnlyTable(params, false);
+ }
+
++ // TODO: CTAS for MM may currently be broken. It used to work. See the old code and why isCtas isn't used?
+ public static boolean isInsertOnlyTable(Map<String, String> params, boolean isCtas) {
+ String transactionalProp = params.get(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES);
+ return (transactionalProp != null && "insert_only".equalsIgnoreCase(transactionalProp));
+ }
+
+ public static boolean isInsertOnlyTable(Properties params) {
- // TODO# redirect for now - fix before merge
- HashMap<String, String> testMap = new HashMap<String, String>();
- for (String n : params.stringPropertyNames()) {
- testMap.put(n, params.getProperty(n));
- }
- return isInsertOnlyTable(testMap);
++ String transactionalProp = params.getProperty(
++ hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES);
++ return (transactionalProp != null && "insert_only".equalsIgnoreCase(transactionalProp));
+ }
+
+ /** The method for altering table props; may set the table to MM, non-MM, or not affect MM. */
+ public static Boolean isToInsertOnlyTable(Map<String, String> props) {
+ // TODO: Setting these separately is a very hairy issue in certain combinations, since we
+ // cannot decide what type of table this becomes without taking both into account, and
+ // in many cases the conversion might be illegal.
+ // The only thing we allow is tx = true w/o tx-props, for backward compat.
+ String transactional = props.get(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL);
+ String transactionalProp = props.get(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES);
+ if (transactional == null && transactionalProp == null) return null; // Not affected.
+ boolean isSetToTxn = "true".equalsIgnoreCase(transactional);
+ if (transactionalProp == null) {
+ if (isSetToTxn) return false; // Assume the full ACID table.
+ throw new RuntimeException("Cannot change '" + hive_metastoreConstants.TABLE_IS_TRANSACTIONAL
+ + "' without '" + hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES + "'");
+ }
+ if (!"insert_only".equalsIgnoreCase(transactionalProp)) return false; // Not MM.
+ if (!isSetToTxn) {
+ throw new RuntimeException("Cannot set '"
+ + hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES + "' to 'insert_only' without "
+ + "setting '" + hive_metastoreConstants.TABLE_IS_TRANSACTIONAL + "' to 'true'");
+ }
+ return true;
+ }
+
+ public static boolean isRemovedInsertOnlyTable(Set<String> removedSet) {
+ boolean hasTxn = removedSet.contains(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL),
+ hasProps = removedSet.contains(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES);
+ return hasTxn || hasProps;
+ }
+
// given a list of partStats, this function will give you an aggr stats
public static List<ColumnStatisticsObj> aggrPartitionStats(List<ColumnStatistics> partStats,
String dbName, String tableName, List<String> partNames, List<String> colNames,
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
index 5dc0cea,2cf5bfd..8414a78
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
@@@ -182,11 -179,10 +182,12 @@@ import org.apache.hadoop.hive.ql.plan.F
import org.apache.hadoop.hive.ql.plan.GrantDesc;
import org.apache.hadoop.hive.ql.plan.GrantRevokeRoleDDL;
import org.apache.hadoop.hive.ql.plan.InsertTableDesc;
+ import org.apache.hadoop.hive.ql.plan.KillQueryDesc;
import org.apache.hadoop.hive.ql.plan.ListBucketingCtx;
+import org.apache.hadoop.hive.ql.plan.LoadMultiFilesDesc;
import org.apache.hadoop.hive.ql.plan.LockDatabaseDesc;
import org.apache.hadoop.hive.ql.plan.LockTableDesc;
+import org.apache.hadoop.hive.ql.plan.MoveWork;
import org.apache.hadoop.hive.ql.plan.MsckDesc;
import org.apache.hadoop.hive.ql.plan.OperatorDesc;
import org.apache.hadoop.hive.ql.plan.OrcFileMergeDesc;
@@@ -4067,215 -4089,7 +4086,215 @@@ public class DDLTask extends Task<DDLWo
throw new HiveException(ErrorMsg.UNSUPPORTED_ALTER_TBL_OP, alterTbl.getOp().toString());
}
- return 0;
+ return null;
+ }
+
+ private List<Task<?>> alterTableDropProps(AlterTableDesc alterTbl, Table tbl,
+ Partition part, EnvironmentContext environmentContext) throws HiveException {
+ if (StatsSetupConst.USER.equals(environmentContext.getProperties()
+ .get(StatsSetupConst.STATS_GENERATED))) {
+ // drop a stats parameter, which triggers recompute stats update automatically
+ environmentContext.getProperties().remove(StatsSetupConst.DO_NOT_UPDATE_STATS);
+ }
+
+ List<Task<?>> result = null;
+ if (part == null) {
+ Set<String> removedSet = alterTbl.getProps().keySet();
+ boolean isFromMmTable = MetaStoreUtils.isInsertOnlyTable(tbl.getParameters()),
+ isRemoved = MetaStoreUtils.isRemovedInsertOnlyTable(removedSet);
+ if (isFromMmTable && isRemoved) {
+ result = generateRemoveMmTasks(tbl);
+ }
+ }
+ Iterator<String> keyItr = alterTbl.getProps().keySet().iterator();
+ while (keyItr.hasNext()) {
+ if (part != null) {
+ part.getTPartition().getParameters().remove(keyItr.next());
+ } else {
+ tbl.getTTable().getParameters().remove(keyItr.next());
+ }
+ }
+ return result;
+ }
+
+ private List<Task<?>> generateRemoveMmTasks(Table tbl) throws HiveException {
+ // To avoid confusion from nested MM directories when table is converted back and forth, we
+ // want to rename mm_ dirs to remove the prefix; however, given the unpredictable nested
+ // directory handling in Hive/MR, we will instead move all the files into the root directory.
+ // We will also delete any directories that are not committed.
+ // Note that this relies on locks. Note also that we only do the renames AFTER the metastore
+ // operation commits. Deleting uncommitted things is safe, but moving stuff before we convert
+ // could cause data loss.
+ List<Path> allMmDirs = new ArrayList<>();
+ if (tbl.isStoredAsSubDirectories()) {
+ // TODO: support this? we only bail because it's a PITA and hardly anyone seems to care.
+ throw new HiveException("Converting list bucketed tables stored as subdirectories "
+ + " to and from MM is not supported");
+ }
+ List<String> bucketCols = tbl.getBucketCols();
+ if (bucketCols != null && !bucketCols.isEmpty()
+ && HiveConf.getBoolVar(conf, ConfVars.HIVE_STRICT_CHECKS_BUCKETING)) {
+ throw new HiveException("Converting bucketed tables from MM is not supported by default; "
+ + "copying files from multiple MM directories may potentially break the buckets. You "
+ + "can set " + ConfVars.HIVE_STRICT_CHECKS_BUCKETING.varname
+ + " to false for this query if you want to force the conversion.");
+ }
+ Hive db = getHive();
+ String value = conf.get(ValidTxnList.VALID_TXNS_KEY);
+ ValidTxnList validTxnList = value == null ? new ValidReadTxnList() : new ValidReadTxnList(value);
+ if (tbl.getPartitionKeys().size() > 0) {
+ PartitionIterable parts = new PartitionIterable(db, tbl, null,
+ HiveConf.getIntVar(conf, ConfVars.METASTORE_BATCH_RETRIEVE_MAX));
+ Iterator<Partition> partIter = parts.iterator();
+ while (partIter.hasNext()) {
+ Partition part = partIter.next();
+ checkMmLb(part);
+ handleRemoveMm(part.getDataLocation(), validTxnList, allMmDirs);
+ }
+ } else {
+ checkMmLb(tbl);
+ handleRemoveMm(tbl.getDataLocation(), validTxnList, allMmDirs);
+ }
+ List<Path> targetPaths = new ArrayList<>(allMmDirs.size());
+ List<String> targetPrefix = new ArrayList<>(allMmDirs.size());
+ int prefixLen = JavaUtils.DELTA_PREFIX.length();
+ for (int i = 0; i < allMmDirs.size(); ++i) {
+ Path src = allMmDirs.get(i);
+ Path tgt = src.getParent();
+ String prefix = src.getName().substring(prefixLen + 1) + "_";
+ Utilities.LOG14535.info("Will move " + src + " to " + tgt + " (prefix " + prefix + ")");
+ targetPaths.add(tgt);
+ targetPrefix.add(prefix);
+ }
+ // Don't set inputs and outputs - the locks have already been taken so it's pointless.
- MoveWork mw = new MoveWork(null, null, null, null, false);
++ MoveWork mw = new MoveWork(null, null, null, null, false, SessionState.get().getLineageState());
+ mw.setMultiFilesDesc(new LoadMultiFilesDesc(
+ allMmDirs, targetPaths, targetPrefix, true, null, null));
+ return Lists.<Task<?>>newArrayList(TaskFactory.get(mw, conf));
+ }
+
+ private void checkMmLb(Table tbl) throws HiveException {
+ if (!tbl.isStoredAsSubDirectories()) return;
+ // TODO: support this?
+ throw new HiveException("Converting list bucketed tables stored as subdirectories "
+ + " to and from MM is not supported");
+ }
+
+ private void checkMmLb(Partition part) throws HiveException {
+ if (!part.isStoredAsSubDirectories()) return;
+ // TODO: support this?
+ throw new HiveException("Converting list bucketed tables stored as subdirectories "
+ + " to and from MM is not supported. Please create a table in the desired format.");
+ }
+
+ private void handleRemoveMm(
+ Path path, ValidTxnList validTxnList, List<Path> result) throws HiveException {
+ // Note: doesn't take LB into account; that is not presently supported here (throws above).
+ try {
+ FileSystem fs = path.getFileSystem(conf);
+ for (FileStatus file : fs.listStatus(path)) {
+ Path childPath = file.getPath();
+ if (!file.isDirectory()) {
+ ensureDelete(fs, childPath, "a non-directory file");
+ continue;
+ }
+ Long writeId = JavaUtils.extractTxnId(childPath);
+ if (writeId == null) {
+ ensureDelete(fs, childPath, "an unknown directory");
+ } else if (!validTxnList.isTxnValid(writeId)) {
+ // Assume no concurrent active writes - we rely on locks here. We could check and fail.
+ ensureDelete(fs, childPath, "an uncommitted directory");
+ } else {
+ result.add(childPath);
+ }
+ }
+ } catch (IOException ex) {
+ throw new HiveException(ex);
+ }
+ }
+
+ private static void ensureDelete(FileSystem fs, Path path, String what) throws IOException {
+ Utilities.LOG14535.info("Deleting " + what + " " + path);
+ try {
+ if (!fs.delete(path, true)) throw new IOException("delete returned false");
+ } catch (Exception ex) {
+ String error = "Couldn't delete " + path + "; cannot remove MM setting from the table";
+ LOG.error(error, ex);
+ throw (ex instanceof IOException) ? (IOException)ex : new IOException(ex);
+ }
+ }
+
+ private List<Task<?>> generateAddMmTasks(Table tbl) throws HiveException {
+ // We will move all the files in the table/partition directories into the first MM
+ // directory, then commit the first write ID.
+ List<Path> srcs = new ArrayList<>(), tgts = new ArrayList<>();
+ long mmWriteId = 0;
+ try {
+ HiveTxnManager txnManager = SessionState.get().getTxnMgr();
+ if (txnManager.isTxnOpen()) {
+ mmWriteId = txnManager.getCurrentTxnId();
+ } else {
+ mmWriteId = txnManager.openTxn(new Context(conf), conf.getUser());
+ txnManager.commitTxn();
+ }
+ } catch (Exception e) {
+ String errorMessage = "FAILED: Error in acquiring locks: " + e.getMessage();
+ console.printError(errorMessage, "\n"
+ + org.apache.hadoop.util.StringUtils.stringifyException(e));
+ }
+ int stmtId = 0;
+ String mmDir = AcidUtils.deltaSubdir(mmWriteId, mmWriteId, stmtId);
+ Hive db = getHive();
+ if (tbl.getPartitionKeys().size() > 0) {
+ PartitionIterable parts = new PartitionIterable(db, tbl, null,
+ HiveConf.getIntVar(conf, ConfVars.METASTORE_BATCH_RETRIEVE_MAX));
+ Iterator<Partition> partIter = parts.iterator();
+ while (partIter.hasNext()) {
+ Partition part = partIter.next();
+ checkMmLb(part);
+ Path src = part.getDataLocation(), tgt = new Path(src, mmDir);
+ srcs.add(src);
+ tgts.add(tgt);
+ Utilities.LOG14535.info("Will move " + src + " to " + tgt);
+ }
+ } else {
+ checkMmLb(tbl);
+ Path src = tbl.getDataLocation(), tgt = new Path(src, mmDir);
+ srcs.add(src);
+ tgts.add(tgt);
+ Utilities.LOG14535.info("Will move " + src + " to " + tgt);
+ }
+ // Don't set inputs and outputs - the locks have already been taken so it's pointless.
- MoveWork mw = new MoveWork(null, null, null, null, false);
++ MoveWork mw = new MoveWork(null, null, null, null, false, SessionState.get().getLineageState());
+ mw.setMultiFilesDesc(new LoadMultiFilesDesc(srcs, tgts, true, null, null));
+ ImportCommitWork icw = new ImportCommitWork(tbl.getDbName(), tbl.getTableName(), mmWriteId, stmtId);
+ Task<?> mv = TaskFactory.get(mw, conf), ic = TaskFactory.get(icw, conf);
+ mv.addDependentTask(ic);
+ return Lists.<Task<?>>newArrayList(mv);
+ }
+
+ private List<Task<?>> alterTableAddProps(AlterTableDesc alterTbl, Table tbl,
+ Partition part, EnvironmentContext environmentContext) throws HiveException {
+ if (StatsSetupConst.USER.equals(environmentContext.getProperties()
+ .get(StatsSetupConst.STATS_GENERATED))) {
+ environmentContext.getProperties().remove(StatsSetupConst.DO_NOT_UPDATE_STATS);
+ }
+ List<Task<?>> result = null;
+ if (part != null) {
+ part.getTPartition().getParameters().putAll(alterTbl.getProps());
+ } else {
+ boolean isFromMmTable = MetaStoreUtils.isInsertOnlyTable(tbl.getParameters());
+ Boolean isToMmTable = MetaStoreUtils.isToInsertOnlyTable(alterTbl.getProps());
+ if (isToMmTable != null) {
+ if (!isFromMmTable && isToMmTable) {
+ result = generateAddMmTasks(tbl);
+ } else if (isFromMmTable && !isToMmTable) {
+ result = generateRemoveMmTasks(tbl);
+ }
+ }
+ tbl.getTTable().getParameters().putAll(alterTbl.getProps());
+ }
+ return result;
}
private int dropConstraint(Hive db, AlterTableDesc alterTbl)
http://git-wip-us.apache.org/repos/asf/hive/blob/379d9bab/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchTask.java
----------------------------------------------------------------------
[48/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-14671 : merge master into hive-14535 (Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/d7b6272a
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/d7b6272a
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/d7b6272a
Branch: refs/heads/master
Commit: d7b6272ad4b59619f5bfa7698c2823efdc938273
Parents: 98c5b63 857347f
Author: sergey <se...@apache.org>
Authored: Tue Oct 10 15:23:31 2017 -0700
Committer: sergey <se...@apache.org>
Committed: Tue Oct 10 15:23:31 2017 -0700
----------------------------------------------------------------------
.../hadoop/hive/cli/control/CliConfigs.java | 1 +
.../spark/spark_explainuser_1.q.out | 72 ++++++++++----------
2 files changed, 38 insertions(+), 35 deletions(-)
----------------------------------------------------------------------
[43/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-14671 : merge master into hive-14535 (Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/14c94820
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/14c94820
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/14c94820
Branch: refs/heads/master
Commit: 14c9482017f5bb7263e0893023cc47a8d37ec3de
Parents: 6401597 d376157
Author: sergey <se...@apache.org>
Authored: Tue Oct 3 20:33:47 2017 -0700
Committer: sergey <se...@apache.org>
Committed: Tue Oct 3 20:33:47 2017 -0700
----------------------------------------------------------------------
.../hadoop/hive/druid/DruidStorageHandler.java | 8 +-
.../ExpressionTemplates/IfExprColumnScalar.txt | 4 +
.../org/apache/hadoop/hive/ql/exec/DDLTask.java | 49 +-
.../apache/hadoop/hive/ql/metadata/Hive.java | 95 +-
.../metadata/HiveMaterializedViewsRegistry.java | 8 +-
.../apache/hadoop/hive/ql/metadata/Table.java | 5 +-
...tedDynPartitionTimeGranularityOptimizer.java | 12 +-
.../ql/optimizer/calcite/HiveCalciteUtil.java | 12 +-
.../ql/optimizer/calcite/RelOptHiveTable.java | 78 +-
.../rules/views/HiveMaterializedViewRule.java | 27 +-
.../hadoop/hive/ql/parse/CalcitePlanner.java | 168 +-
.../hadoop/hive/ql/parse/SemanticAnalyzer.java | 5 +-
.../hadoop/hive/ql/plan/CreateTableDesc.java | 19 +-
.../hadoop/hive/ql/plan/CreateViewDesc.java | 1 +
.../apache/hadoop/hive/ql/plan/PlanUtils.java | 99 +-
.../materialized_view_create_rewrite_2.q | 88 +
.../materialized_view_rewrite_ssb.q | 346 ++++
.../materialized_view_rewrite_ssb_2.q | 347 ++++
.../queries/clientpositive/vector_if_expr_2.q | 19 +
.../clientpositive/llap/subquery_notin.q.out | 116 +-
.../materialized_view_create_rewrite_2.q.out | 574 ++++++
.../materialized_view_describe.q.out | 12 +-
.../materialized_view_rewrite_ssb.q.out | 1621 +++++++++++++++++
.../materialized_view_rewrite_ssb_2.q.out | 1627 ++++++++++++++++++
.../outer_reference_windowed.q.out | 34 +-
.../clientpositive/vector_if_expr_2.q.out | 117 ++
.../vector_outer_reference_windowed.q.out | 34 +-
27 files changed, 5303 insertions(+), 222 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/14c94820/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/14c94820/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
index 7464a29,b0e68b1..37ee6b6
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
@@@ -51,10 -51,8 +51,11 @@@ import java.util.concurrent.ExecutorSer
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicInteger;
+ import java.util.stream.Collectors;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableMap;
+
import javax.jdo.JDODataStoreException;
import org.apache.calcite.plan.RelOptMaterialization;
@@@ -63,13 -61,10 +64,12 @@@ import org.apache.hadoop.conf.Configura
import org.apache.hadoop.fs.FileChecksum;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.PathFilter;
- import org.apache.hadoop.hive.common.BlobStorageUtils;
import org.apache.hadoop.hive.common.FileUtils;
import org.apache.hadoop.hive.common.HiveStatsUtils;
+import org.apache.hadoop.hive.common.JavaUtils;
import org.apache.hadoop.hive.common.ObjectPair;
import org.apache.hadoop.hive.common.StatsSetupConst;
import org.apache.hadoop.hive.common.classification.InterfaceAudience.LimitedPrivate;
http://git-wip-us.apache.org/repos/asf/hive/blob/14c94820/ql/src/java/org/apache/hadoop/hive/ql/metadata/Table.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/14c94820/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/14c94820/ql/src/java/org/apache/hadoop/hive/ql/plan/CreateTableDesc.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/14c94820/ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java
----------------------------------------------------------------------
[50/50] [abbrv] hive git commit: HIVE-15212 : merge branch into
master (Sergey Shelukhin, reviewed by Eugene Koifman, Gunther Hagleitner,
Wei Zheng, Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-15212 : merge branch into master (Sergey Shelukhin, reviewed by Eugene Koifman, Gunther Hagleitner, Wei Zheng, Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/c1a1d596
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/c1a1d596
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/c1a1d596
Branch: refs/heads/master
Commit: c1a1d5960a639155e5c48b8223b501ad17b37e1f
Parents: 9375cf3 ba9cd79
Author: sergey <se...@apache.org>
Authored: Thu Oct 12 17:11:09 2017 -0700
Committer: sergey <se...@apache.org>
Committed: Thu Oct 12 17:11:09 2017 -0700
----------------------------------------------------------------------
.../apache/hadoop/hive/common/FileUtils.java | 25 +-
.../hadoop/hive/common/HiveStatsUtils.java | 47 +-
.../apache/hadoop/hive/common/JavaUtils.java | 67 +
.../org/apache/hadoop/hive/conf/HiveConf.java | 15 +-
.../apache/hive/common/util/MockFileSystem.java | 622 ++++++
.../mapreduce/FileOutputCommitterContainer.java | 2 +-
.../hcatalog/mapreduce/HCatOutputFormat.java | 6 +
.../listener/DummyRawStoreFailEvent.java | 1 +
.../hadoop/hive/ql/history/TestHiveHistory.java | 3 +-
.../test/resources/testconfiguration.properties | 4 +-
.../io/encoded/VectorDeserializeOrcWriter.java | 3 +-
.../upgrade/derby/hive-schema-2.2.0.derby.sql | 1 +
.../upgrade/mssql/hive-schema-2.2.0.mssql.sql | 1 +
.../upgrade/oracle/hive-schema-2.2.0.oracle.sql | 1 -
.../postgres/hive-schema-2.2.0.postgres.sql | 1 +
.../hadoop/hive/metastore/HiveMetaStore.java | 150 +-
.../hive/metastore/HiveMetaStoreClient.java | 7 +-
.../hadoop/hive/metastore/MetaStoreUtils.java | 10 +
.../hadoop/hive/metastore/ObjectStore.java | 87 +-
.../TransactionalValidationListener.java | 42 +-
.../hive/metastore/cache/CachedStore.java | 5 +
.../DummyRawStoreForJdoConnection.java | 3 -
.../hadoop/hive/metastore/TestObjectStore.java | 22 +-
.../java/org/apache/hadoop/hive/ql/Context.java | 5 +-
.../java/org/apache/hadoop/hive/ql/Driver.java | 4 +-
.../hive/ql/exec/AbstractFileMergeOperator.java | 168 +-
.../apache/hadoop/hive/ql/exec/CopyTask.java | 64 +-
.../org/apache/hadoop/hive/ql/exec/DDLTask.java | 233 +-
.../hive/ql/exec/DependencyCollectionTask.java | 1 -
.../hadoop/hive/ql/exec/FetchOperator.java | 54 +-
.../apache/hadoop/hive/ql/exec/FetchTask.java | 1 +
.../hadoop/hive/ql/exec/FileSinkOperator.java | 365 ++-
.../hive/ql/exec/HashTableSinkOperator.java | 5 +
.../hadoop/hive/ql/exec/ImportCommitTask.java | 62 +
.../hadoop/hive/ql/exec/ImportCommitWork.java | 54 +
.../hadoop/hive/ql/exec/JoinOperator.java | 4 +-
.../apache/hadoop/hive/ql/exec/MoveTask.java | 531 +++--
.../hive/ql/exec/OrcFileMergeOperator.java | 11 +-
.../hive/ql/exec/RCFileMergeOperator.java | 3 +-
.../hadoop/hive/ql/exec/ReplCopyTask.java | 4 +-
.../hadoop/hive/ql/exec/StatsNoJobTask.java | 9 +-
.../apache/hadoop/hive/ql/exec/StatsTask.java | 9 +-
.../hadoop/hive/ql/exec/TableScanOperator.java | 4 +-
.../apache/hadoop/hive/ql/exec/TaskFactory.java | 2 +
.../apache/hadoop/hive/ql/exec/Utilities.java | 800 +++++--
.../bootstrap/load/table/LoadPartitions.java | 6 +-
.../repl/bootstrap/load/table/LoadTable.java | 5 +-
.../hadoop/hive/ql/exec/tez/SplitGrouper.java | 4 +-
.../ql/exec/vector/VectorizedRowBatchCtx.java | 2 +-
.../hadoop/hive/ql/hooks/WriteEntity.java | 3 +-
.../hive/ql/index/HiveIndexedInputFormat.java | 2 +-
.../org/apache/hadoop/hive/ql/io/AcidUtils.java | 124 +-
.../hive/ql/io/CombineHiveInputFormat.java | 42 +-
.../hive/ql/io/CombineHiveRecordReader.java | 2 +-
.../ql/io/HiveContextAwareRecordReader.java | 2 +-
.../hadoop/hive/ql/io/HiveFileFormatUtils.java | 42 +-
.../hadoop/hive/ql/io/HiveInputFormat.java | 91 +-
.../hadoop/hive/ql/io/merge/MergeFileWork.java | 7 +-
.../hadoop/hive/ql/io/orc/OrcInputFormat.java | 2 +-
.../ql/io/parquet/MapredParquetInputFormat.java | 8 +
.../hive/ql/io/parquet/ProjectionPusher.java | 24 +-
.../hadoop/hive/ql/lockmgr/DbTxnManager.java | 6 +-
.../apache/hadoop/hive/ql/metadata/Hive.java | 400 +++-
.../hadoop/hive/ql/metadata/Partition.java | 1 +
.../apache/hadoop/hive/ql/metadata/Table.java | 1 -
.../formatting/TextMetaDataFormatter.java | 119 +-
.../ql/optimizer/AbstractBucketJoinProc.java | 7 +
.../BucketingSortingReduceSinkOptimizer.java | 15 +-
.../hive/ql/optimizer/GenMRTableScan1.java | 1 +
.../hive/ql/optimizer/GenMapRedUtils.java | 306 +--
.../hadoop/hive/ql/optimizer/SamplePruner.java | 8 +-
.../physical/BucketingSortingOpProcFactory.java | 7 +
.../physical/GenMRSkewJoinProcessor.java | 2 +-
.../physical/GenSparkSkewJoinProcessor.java | 4 +-
.../physical/LocalMapJoinProcFactory.java | 2 +-
.../optimizer/physical/SamplingOptimizer.java | 15 +
.../ql/optimizer/physical/SkewJoinResolver.java | 27 +-
.../hive/ql/optimizer/physical/Vectorizer.java | 1 +
.../physical/index/IndexWhereProcessor.java | 2 +-
.../optimizer/unionproc/UnionProcFactory.java | 6 +-
.../ql/parse/AlterTablePartMergeFilesDesc.java | 9 +
.../hive/ql/parse/BaseSemanticAnalyzer.java | 3 +-
.../hive/ql/parse/DDLSemanticAnalyzer.java | 52 +-
.../apache/hadoop/hive/ql/parse/EximUtil.java | 9 +-
.../hive/ql/parse/ExportSemanticAnalyzer.java | 34 +
.../hadoop/hive/ql/parse/GenTezUtils.java | 5 +-
.../hive/ql/parse/ImportSemanticAnalyzer.java | 182 +-
.../hadoop/hive/ql/parse/IndexUpdater.java | 19 +-
.../hive/ql/parse/LoadSemanticAnalyzer.java | 16 +-
.../hadoop/hive/ql/parse/ParseContext.java | 8 -
.../hive/ql/parse/ProcessAnalyzeTable.java | 1 +
.../hadoop/hive/ql/parse/SemanticAnalyzer.java | 569 ++---
.../hadoop/hive/ql/parse/TaskCompiler.java | 155 +-
.../hadoop/hive/ql/parse/TypeCheckCtx.java | 2 +-
.../hive/ql/parse/spark/GenSparkUtils.java | 4 +-
.../parse/spark/SparkProcessAnalyzeTable.java | 2 +-
.../ql/plan/ConditionalResolverMergeFiles.java | 38 +-
.../apache/hadoop/hive/ql/plan/CopyWork.java | 52 +-
.../hadoop/hive/ql/plan/CreateTableDesc.java | 22 +
.../hadoop/hive/ql/plan/FileMergeDesc.java | 27 +
.../hadoop/hive/ql/plan/FileSinkDesc.java | 56 +-
.../apache/hadoop/hive/ql/plan/LoadDesc.java | 1 +
.../hadoop/hive/ql/plan/LoadFileDesc.java | 22 +-
.../hadoop/hive/ql/plan/LoadMultiFilesDesc.java | 12 +
.../hadoop/hive/ql/plan/LoadTableDesc.java | 74 +-
.../org/apache/hadoop/hive/ql/plan/MapWork.java | 12 +
.../apache/hadoop/hive/ql/plan/MoveWork.java | 14 +-
.../hadoop/hive/ql/plan/PartitionDesc.java | 11 +
.../apache/hadoop/hive/ql/plan/PlanUtils.java | 14 -
.../apache/hadoop/hive/ql/plan/TableDesc.java | 10 +-
.../hadoop/hive/ql/plan/TableScanDesc.java | 2 +-
.../hive/ql/stats/fs/FSStatsAggregator.java | 8 +-
.../hive/ql/stats/fs/FSStatsPublisher.java | 8 +-
.../hive/ql/txn/compactor/CompactorMR.java | 36 +
.../hive/ql/txn/compactor/CompactorThread.java | 1 -
.../hadoop/hive/ql/txn/compactor/Initiator.java | 6 +
.../apache/hadoop/hive/ql/TestTxnCommands.java | 1 -
.../apache/hadoop/hive/ql/TestTxnCommands2.java | 83 +-
.../hadoop/hive/ql/exec/TestExecDriver.java | 2 +-
.../hive/ql/exec/TestFileSinkOperator.java | 3 +-
.../apache/hadoop/hive/ql/io/TestAcidUtils.java | 6 +-
.../hive/ql/io/TestHiveFileFormatUtils.java | 24 +-
.../hive/ql/io/orc/TestInputOutputFormat.java | 11 +-
.../hadoop/hive/ql/metadata/TestHive.java | 4 +-
...TestGenMapRedUtilsCreateConditionalTask.java | 20 +-
.../queries/clientnegative/mm_concatenate.q | 8 +
ql/src/test/queries/clientnegative/mm_convert.q | 10 +
.../queries/clientnegative/mm_truncate_cols.q | 3 +
ql/src/test/queries/clientpositive/mm_all.q | 326 +++
ql/src/test/queries/clientpositive/mm_buckets.q | 66 +
.../queries/clientpositive/mm_conversions.q | 42 +
.../clientpositive/mm_exchangepartition.q | 68 +
ql/src/test/queries/clientpositive/mm_exim.q | 98 +
.../test/queries/clientpositive/mm_loaddata.q | 53 +
.../results/clientnegative/mm_concatenate.q.out | 18 +
.../results/clientnegative/mm_convert.q.out | 17 +
.../clientnegative/mm_truncate_cols.q.out | 9 +
.../clientpositive/llap/mm_conversions.q.out | 309 +++
ql/src/test/results/clientpositive/mm_all.q.out | 2097 ++++++++++++++++++
.../results/clientpositive/mm_buckets.q.out | 489 ++++
.../results/clientpositive/mm_conversions.q.out | 309 +++
.../clientpositive/mm_exchangepartition.q.out | 382 ++++
.../test/results/clientpositive/mm_exim.q.out | 557 +++++
.../results/clientpositive/mm_loaddata.q.out | 296 +++
.../clientpositive/tez/explainuser_3.q.out | 6 +-
.../gen/thrift/gen-cpp/hive_metastore_types.cpp | 8 +-
.../gen/thrift/gen-cpp/hive_metastore_types.h | 3 +-
.../hive/metastore/api/ClientCapability.java | 5 +-
.../src/gen/thrift/gen-php/metastore/Types.php | 2 +
.../gen/thrift/gen-py/hive_metastore/ttypes.py | 3 +
.../gen/thrift/gen-rb/hive_metastore_types.rb | 5 +-
.../hadoop/hive/metastore/MetaStoreThread.java | 1 +
.../apache/hadoop/hive/metastore/Warehouse.java | 15 +-
.../hadoop/hive/metastore/model/MTable.java | 4 +-
.../src/main/resources/package.jdo | 12 +-
.../src/main/thrift/hive_metastore.thrift | 5 +-
156 files changed, 9969 insertions(+), 1721 deletions(-)
----------------------------------------------------------------------
[29/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-14671 : merge master into hive-14535 (Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/1fb04f36
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/1fb04f36
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/1fb04f36
Branch: refs/heads/master
Commit: 1fb04f36619483cc5a64e5963ddb8a097a68c9ba
Parents: 7a40541 5608300
Author: sergey <se...@apache.org>
Authored: Wed Sep 20 11:40:50 2017 +1000
Committer: sergey <se...@apache.org>
Committed: Wed Sep 20 11:40:50 2017 +1000
----------------------------------------------------------------------
.../hadoop/hive/cli/TestCliSessionState.java | 4 +-
data/files/filterCard.txt | 101 +
.../apache/hive/hcatalog/cli/HCatDriver.java | 3 +-
.../apache/hive/hcatalog/common/HCatUtil.java | 4 +-
.../hive/hcatalog/mapreduce/HCatTableInfo.java | 4 +-
.../hive/hcatalog/mapreduce/InputJobInfo.java | 4 +-
.../hive/hcatalog/mapreduce/OutputJobInfo.java | 4 +-
.../apache/hive/hcatalog/cli/TestPermsGrp.java | 4 +-
.../hive/hcatalog/cli/TestSemanticAnalysis.java | 24 +-
.../hcatalog/mapreduce/HCatMapReduceTest.java | 8 +-
.../mapreduce/TestHCatPartitionPublish.java | 3 +-
.../hcatalog/mapreduce/TestPassProperties.java | 4 +-
.../apache/hive/hcatalog/pig/PigHCatUtil.java | 4 +-
.../hcatalog/pig/TestHCatLoaderEncryption.java | 7 +-
.../hive/hcatalog/api/HCatClientHMSImpl.java | 4 +-
.../apache/hive/hcatalog/api/HCatPartition.java | 3 +-
.../org/apache/hive/hcatalog/api/HCatTable.java | 6 +-
.../listener/DummyRawStoreFailEvent.java | 7 +
.../mapreduce/TestSequenceFileReadWrite.java | 6 +-
.../hive/metastore/TestHiveMetaStore.java | 2 +-
.../hive/metastore/TestReplChangeManager.java | 44 +-
.../hadoop/hive/ql/history/TestHiveHistory.java | 4 +-
.../TestSemanticAnalyzerHookLoading.java | 4 +-
.../hive/ql/parse/TestReplicationScenarios.java | 106 +-
.../hadoop/hive/hbase/HBaseQTestUtil.java | 4 +-
.../org/apache/hadoop/hive/ql/QTestUtil.java | 6 +-
.../hadoop/hive/metastore/HiveMetaStore.java | 15 +-
.../hive/metastore/HiveMetaStoreClient.java | 8 +-
.../hadoop/hive/metastore/IMetaStoreClient.java | 6 +-
.../hadoop/hive/metastore/MetaStoreUtils.java | 24 +-
.../hadoop/hive/metastore/ObjectStore.java | 250 +-
.../apache/hadoop/hive/metastore/RawStore.java | 6 +
.../hive/metastore/ReplChangeManager.java | 392 --
.../apache/hadoop/hive/metastore/Warehouse.java | 644 --
.../hive/metastore/cache/CachedStore.java | 9 +
.../DummyRawStoreControlledCommit.java | 7 +
.../DummyRawStoreForJdoConnection.java | 7 +
.../java/org/apache/hadoop/hive/ql/Context.java | 3 +
.../org/apache/hadoop/hive/ql/exec/DDLTask.java | 8 +-
.../apache/hadoop/hive/ql/exec/StatsTask.java | 3 +-
.../ql/exec/repl/bootstrap/ReplLoadTask.java | 5 +-
.../bootstrap/load/table/LoadPartitions.java | 2 +-
.../repl/bootstrap/load/table/LoadTable.java | 2 +-
.../exec/repl/bootstrap/load/util/PathInfo.java | 4 +
.../ql/exec/vector/VectorDeserializeRow.java | 4 +-
.../hive/ql/hooks/EnforceReadOnlyTables.java | 2 +-
.../hadoop/hive/ql/lockmgr/DummyTxnManager.java | 5 +-
.../hadoop/hive/ql/lockmgr/HiveLockObject.java | 5 +-
.../hive/ql/metadata/HiveMetaStoreChecker.java | 3 +-
.../RewriteQueryUsingAggregateIndexCtx.java | 3 +-
.../stats/annotation/StatsRulesProcFactory.java | 89 +-
.../hive/ql/parse/ImportSemanticAnalyzer.java | 3 +-
.../hive/ql/parse/MacroSemanticAnalyzer.java | 4 +-
.../hadoop/hive/ql/parse/SemanticAnalyzer.java | 2 +-
.../repl/dump/events/AddPartitionHandler.java | 18 +-
.../repl/dump/events/AlterPartitionHandler.java | 6 +-
.../repl/dump/events/AlterTableHandler.java | 40 +-
.../parse/repl/dump/events/InsertHandler.java | 5 +
.../plugin/sqlstd/SQLAuthorizationUtils.java | 4 +-
.../hadoop/hive/ql/session/SessionState.java | 2 +-
.../hadoop/hive/ql/exec/TestExecDriver.java | 22 +-
.../hadoop/hive/ql/metadata/TestHive.java | 37 +-
.../hive/ql/session/TestSessionState.java | 9 +-
.../orc_avro_partition_uniontype.q | 9 +
.../annotate_stats_deep_filters.q.out | 4 +-
.../annotate_stats_join_pkfk.q.out | 48 +-
.../clientpositive/llap/explainuser_1.q.out | 54 +-
.../llap/vector_decimal_cast.q.out | 4 +-
.../clientpositive/llap/vector_if_expr.q.out | 10 +-
.../clientpositive/llap/vectorization_0.q.out | 12 +-
.../clientpositive/llap/vectorization_10.q.out | 6 +-
.../clientpositive/llap/vectorization_17.q.out | 10 +-
.../clientpositive/llap/vectorization_7.q.out | 16 +-
.../llap/vectorization_short_regress.q.out | 8 +-
.../llap/vectorized_nested_mapjoin.q.out | 12 +-
.../orc_avro_partition_uniontype.q.out | 40 +
.../results/clientpositive/perf/query23.q.out | 2 +-
.../clientpositive/spark/vectorization_10.q.out | 6 +-
.../clientpositive/spark/vectorization_12.q.out | 18 +-
.../clientpositive/spark/vectorization_17.q.out | 10 +-
.../clientpositive/vectorization_10.q.out | 6 +-
.../clientpositive/vectorization_12.q.out | 18 +-
.../clientpositive/vectorization_17.q.out | 10 +-
.../clientpositive/vectorization_7.q.out | 16 +-
.../ObjectInspectorConverters.java | 4 +-
.../SettableUnionObjectInspector.java | 6 +-
.../StandardUnionObjectInspector.java | 16 +-
.../TestObjectInspectorConverters.java | 30 +-
standalone-metastore/pom.xml | 11 +
.../gen/thrift/gen-cpp/ThriftHiveMetastore.cpp | 2575 ++++----
.../gen/thrift/gen-cpp/ThriftHiveMetastore.h | 142 +
.../ThriftHiveMetastore_server.skeleton.cpp | 5 +
.../gen/thrift/gen-cpp/hive_metastore_types.cpp | 2395 +++++---
.../gen/thrift/gen-cpp/hive_metastore_types.h | 181 +
.../hive/metastore/api/AbortTxnsRequest.java | 32 +-
.../metastore/api/AddDynamicPartitions.java | 32 +-
.../metastore/api/ClearFileMetadataRequest.java | 32 +-
.../hive/metastore/api/ClientCapabilities.java | 32 +-
.../hive/metastore/api/CompactionRequest.java | 44 +-
.../hive/metastore/api/FireEventRequest.java | 32 +-
.../hadoop/hive/metastore/api/Function.java | 36 +-
.../metastore/api/GetAllFunctionsResponse.java | 36 +-
.../api/GetFileMetadataByExprRequest.java | 32 +-
.../api/GetFileMetadataByExprResult.java | 48 +-
.../metastore/api/GetFileMetadataRequest.java | 32 +-
.../metastore/api/GetFileMetadataResult.java | 44 +-
.../metastore/api/GetOpenTxnsInfoResponse.java | 36 +-
.../hive/metastore/api/GetOpenTxnsResponse.java | 32 +-
.../hive/metastore/api/GetTablesRequest.java | 32 +-
.../hive/metastore/api/GetTablesResult.java | 36 +-
.../api/HeartbeatTxnRangeResponse.java | 64 +-
.../metastore/api/InsertEventRequestData.java | 64 +-
.../hadoop/hive/metastore/api/LockRequest.java | 36 +-
.../api/NotificationEventResponse.java | 36 +-
.../hive/metastore/api/OpenTxnsResponse.java | 32 +-
.../metastore/api/PartitionValuesRequest.java | 1222 ++++
.../metastore/api/PartitionValuesResponse.java | 443 ++
.../hive/metastore/api/PartitionValuesRow.java | 438 ++
.../metastore/api/PutFileMetadataRequest.java | 64 +-
.../hive/metastore/api/ShowCompactResponse.java | 36 +-
.../hive/metastore/api/ShowLocksResponse.java | 36 +-
.../hive/metastore/api/ThriftHiveMetastore.java | 5667 +++++++++++-------
.../gen-php/metastore/ThriftHiveMetastore.php | 1582 +++--
.../src/gen/thrift/gen-php/metastore/Types.php | 1040 +++-
.../hive_metastore/ThriftHiveMetastore-remote | 7 +
.../hive_metastore/ThriftHiveMetastore.py | 1109 ++--
.../gen/thrift/gen-py/hive_metastore/ttypes.py | 685 ++-
.../gen/thrift/gen-rb/hive_metastore_types.rb | 67 +
.../gen/thrift/gen-rb/thrift_hive_metastore.rb | 66 +
.../hive/metastore/ReplChangeManager.java | 393 ++
.../apache/hadoop/hive/metastore/Warehouse.java | 619 ++
.../hive/metastore/conf/MetastoreConf.java | 8 +
.../hadoop/hive/metastore/utils/FileUtils.java | 304 +-
.../hadoop/hive/metastore/utils/HdfsUtils.java | 75 +
.../hive/metastore/utils/MetaStoreUtils.java | 15 +
.../src/main/thrift/hive_metastore.thrift | 22 +
136 files changed, 14652 insertions(+), 7762 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/itests/hcatalog-unit/src/test/java/org/apache/hive/hcatalog/listener/DummyRawStoreFailEvent.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/history/TestHiveHistory.java
----------------------------------------------------------------------
diff --cc itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/history/TestHiveHistory.java
index 39f98e4,bec715d..e519785
--- a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/history/TestHiveHistory.java
+++ b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/history/TestHiveHistory.java
@@@ -101,10 -101,10 +101,10 @@@ public class TestHiveHistory extends Te
cols.add("key");
cols.add("value");
for (String src : srctables) {
- db.dropTable(MetaStoreUtils.DEFAULT_DATABASE_NAME, src, true, true);
+ db.dropTable(Warehouse.DEFAULT_DATABASE_NAME, src, true, true);
db.createTable(src, cols, null, TextInputFormat.class,
IgnoreKeyTextOutputFormat.class);
- db.loadTable(hadoopDataFile[i], src, false, false, false, false, false);
+ db.loadTable(hadoopDataFile[i], src, false, false, false, false, false, null, 0, false);
i++;
}
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/metastore/src/java/org/apache/hadoop/hive/metastore/cache/CachedStore.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/metastore/src/test/org/apache/hadoop/hive/metastore/DummyRawStoreForJdoConnection.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/ql/src/java/org/apache/hadoop/hive/ql/Context.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsTask.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadPartitions.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadTable.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
index 814910d,ed004fe..36c0c98
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
@@@ -64,8 -61,6 +64,7 @@@ import org.apache.hadoop.hive.ql.metada
import org.apache.hadoop.hive.ql.parse.repl.load.MetaData;
import org.apache.hadoop.hive.ql.parse.repl.load.UpdatedMetaDataTracker;
import org.apache.hadoop.hive.ql.plan.AddPartitionDesc;
+import org.apache.hadoop.hive.ql.plan.CopyWork;
- import org.apache.hadoop.hive.ql.plan.CreateTableDesc;
import org.apache.hadoop.hive.ql.plan.ImportTableDesc;
import org.apache.hadoop.hive.ql.plan.DDLWork;
import org.apache.hadoop.hive.ql.plan.LoadTableDesc;
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/ql/src/test/org/apache/hadoop/hive/ql/exec/TestExecDriver.java
----------------------------------------------------------------------
diff --cc ql/src/test/org/apache/hadoop/hive/ql/exec/TestExecDriver.java
index 61eab3d,c0c496f..75ea16f
--- a/ql/src/test/org/apache/hadoop/hive/ql/exec/TestExecDriver.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/exec/TestExecDriver.java
@@@ -137,10 -137,10 +137,10 @@@ public class TestExecDriver extends Tes
cols.add("key");
cols.add("value");
for (String src : srctables) {
- db.dropTable(MetaStoreUtils.DEFAULT_DATABASE_NAME, src, true, true);
+ db.dropTable(Warehouse.DEFAULT_DATABASE_NAME, src, true, true);
db.createTable(src, cols, null, TextInputFormat.class,
HiveIgnoreKeyTextOutputFormat.class);
- db.loadTable(hadoopDataFile[i], src, false, true, false, false, false);
+ db.loadTable(hadoopDataFile[i], src, false, true, false, false, false, null, 0, false);
i++;
}
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/ql/src/test/org/apache/hadoop/hive/ql/metadata/TestHive.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/standalone-metastore/src/gen/thrift/gen-cpp/hive_metastore_types.cpp
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/standalone-metastore/src/gen/thrift/gen-cpp/hive_metastore_types.h
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/standalone-metastore/src/gen/thrift/gen-php/metastore/Types.php
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/standalone-metastore/src/gen/thrift/gen-py/hive_metastore/ttypes.py
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/standalone-metastore/src/gen/thrift/gen-rb/hive_metastore_types.rb
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/Warehouse.java
----------------------------------------------------------------------
diff --cc standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/Warehouse.java
index 0000000,649437f..df2453b
mode 000000,100755..100755
--- a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/Warehouse.java
+++ b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/Warehouse.java
@@@ -1,0 -1,610 +1,619 @@@
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ package org.apache.hadoop.hive.metastore;
+
+ import java.io.FileNotFoundException;
+ import java.io.IOException;
+ import java.util.AbstractList;
+ import java.util.ArrayList;
+ import java.util.LinkedHashMap;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Map.Entry;
++import java.util.Set;
+ import java.util.regex.Matcher;
+ import java.util.regex.Pattern;
+
+ import org.apache.commons.lang.StringUtils;
+ import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
+ import org.apache.hadoop.hive.metastore.conf.MetastoreConf.ConfVars;
+ import org.apache.hadoop.hive.metastore.utils.FileUtils;
+ import org.apache.hadoop.hive.metastore.utils.HdfsUtils;
+ import org.apache.hadoop.hive.metastore.utils.JavaUtils;
+ import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+ import org.apache.hadoop.conf.Configuration;
+ import org.apache.hadoop.fs.ContentSummary;
+ import org.apache.hadoop.fs.FileStatus;
+ import org.apache.hadoop.fs.FileSystem;
+ import org.apache.hadoop.fs.Path;
+ import org.apache.hadoop.fs.permission.FsAction;
+ import org.apache.hadoop.hive.metastore.ReplChangeManager.RecycleType;
+ import org.apache.hadoop.hive.metastore.api.Database;
+ import org.apache.hadoop.hive.metastore.api.FieldSchema;
+ import org.apache.hadoop.hive.metastore.api.MetaException;
+ import org.apache.hadoop.hive.metastore.api.Partition;
+ import org.apache.hadoop.hive.metastore.api.StorageDescriptor;
+ import org.apache.hadoop.hive.metastore.api.Table;
+ import org.apache.hadoop.util.ReflectionUtils;
+
+ /**
+ * This class represents a warehouse where data of Hive tables is stored
+ */
+ public class Warehouse {
+ public static final String DEFAULT_DATABASE_NAME = "default";
+ public static final String DEFAULT_DATABASE_COMMENT = "Default Hive database";
+ public static final String DEFAULT_SERIALIZATION_FORMAT = "1";
+ public static final String DATABASE_WAREHOUSE_SUFFIX = ".db";
+
+ private Path whRoot;
+ private final Configuration conf;
+ private final String whRootString;
+
+ public static final Logger LOG = LoggerFactory.getLogger("hive.metastore.warehouse");
+
+ private MetaStoreFS fsHandler = null;
+ private boolean storageAuthCheck = false;
+ private ReplChangeManager cm = null;
+
+ public Warehouse(Configuration conf) throws MetaException {
+ this.conf = conf;
+ whRootString = MetastoreConf.getVar(conf, ConfVars.WAREHOUSE);
+ if (StringUtils.isBlank(whRootString)) {
+ throw new MetaException(ConfVars.WAREHOUSE.varname
+ + " is not set in the config or blank");
+ }
+ fsHandler = getMetaStoreFsHandler(conf);
+ cm = ReplChangeManager.getInstance(conf);
+ storageAuthCheck = MetastoreConf.getBoolVar(conf, ConfVars.AUTHORIZATION_STORAGE_AUTH_CHECKS);
+ }
+
+ private MetaStoreFS getMetaStoreFsHandler(Configuration conf)
+ throws MetaException {
+ String handlerClassStr = MetastoreConf.getVar(conf, ConfVars.FS_HANDLER_CLS);
+ try {
+ Class<? extends MetaStoreFS> handlerClass = (Class<? extends MetaStoreFS>) Class
+ .forName(handlerClassStr, true, JavaUtils.getClassLoader());
+ MetaStoreFS handler = ReflectionUtils.newInstance(handlerClass, conf);
+ return handler;
+ } catch (ClassNotFoundException e) {
+ throw new MetaException("Error in loading MetaStoreFS handler."
+ + e.getMessage());
+ }
+ }
+
+
+ /**
+ * Helper functions to convert IOException to MetaException
+ */
+ public static FileSystem getFs(Path f, Configuration conf) throws MetaException {
+ try {
+ return f.getFileSystem(conf);
+ } catch (IOException e) {
+ MetaStoreUtils.logAndThrowMetaException(e);
+ }
+ return null;
+ }
+
+ public FileSystem getFs(Path f) throws MetaException {
+ return getFs(f, conf);
+ }
+
+
+ /**
+ * Hadoop File System reverse lookups paths with raw ip addresses The File
+ * System URI always contains the canonical DNS name of the Namenode.
+ * Subsequently, operations on paths with raw ip addresses cause an exception
+ * since they don't match the file system URI.
+ *
+ * This routine solves this problem by replacing the scheme and authority of a
+ * path with the scheme and authority of the FileSystem that it maps to.
+ *
+ * @param path
+ * Path to be canonicalized
+ * @return Path with canonical scheme and authority
+ */
+ public static Path getDnsPath(Path path, Configuration conf) throws MetaException {
+ FileSystem fs = getFs(path, conf);
+ return (new Path(fs.getUri().getScheme(), fs.getUri().getAuthority(), path
+ .toUri().getPath()));
+ }
+
+ public Path getDnsPath(Path path) throws MetaException {
+ return getDnsPath(path, conf);
+ }
+
+ /**
+ * Resolve the configured warehouse root dir with respect to the configuration
+ * This involves opening the FileSystem corresponding to the warehouse root
+ * dir (but that should be ok given that this is only called during DDL
+ * statements for non-external tables).
+ */
+ public Path getWhRoot() throws MetaException {
+ if (whRoot != null) {
+ return whRoot;
+ }
+ whRoot = getDnsPath(new Path(whRootString));
+ return whRoot;
+ }
+
+ public Path getDatabasePath(Database db) throws MetaException {
+ if (db.getName().equalsIgnoreCase(DEFAULT_DATABASE_NAME)) {
+ return getWhRoot();
+ }
+ return new Path(db.getLocationUri());
+ }
+
+ public Path getDefaultDatabasePath(String dbName) throws MetaException {
+ if (dbName.equalsIgnoreCase(DEFAULT_DATABASE_NAME)) {
+ return getWhRoot();
+ }
+ return new Path(getWhRoot(), dbName.toLowerCase() + DATABASE_WAREHOUSE_SUFFIX);
+ }
+
+ /**
+ * Returns the default location of the table path using the parent database's location
+ * @param db Database where the table is created
+ * @param tableName table name
+ * @return
+ * @throws MetaException
+ */
+ public Path getDefaultTablePath(Database db, String tableName)
+ throws MetaException {
+ return getDnsPath(new Path(getDatabasePath(db), MetaStoreUtils.encodeTableName(tableName.toLowerCase())));
+ }
+
+ public static String getQualifiedName(Table table) {
+ return table.getDbName() + "." + table.getTableName();
+ }
+
+ public static String getQualifiedName(Partition partition) {
+ return partition.getDbName() + "." + partition.getTableName() + partition.getValues();
+ }
+
+ public boolean mkdirs(Path f) throws MetaException {
+ FileSystem fs;
+ try {
+ fs = getFs(f);
+ return FileUtils.mkdir(fs, f);
+ } catch (IOException e) {
+ MetaStoreUtils.logAndThrowMetaException(e);
+ }
+ return false;
+ }
+
+ public boolean renameDir(Path sourcePath, Path destPath, boolean needCmRecycle) throws MetaException {
+ try {
+ if (needCmRecycle) {
+ // Copy the source files to cmroot. As the client will move the source files to another
+ // location, we should make a copy of the files to cmroot instead of moving it.
+ cm.recycle(sourcePath, RecycleType.COPY, true);
+ }
+ FileSystem fs = getFs(sourcePath);
+ return FileUtils.rename(fs, sourcePath, destPath);
+ } catch (Exception ex) {
+ MetaStoreUtils.logAndThrowMetaException(ex);
+ }
+ return false;
+ }
+
+ void addToChangeManagement(Path file) throws MetaException {
+ cm.recycle(file, RecycleType.COPY, true);
+ }
+
+ public boolean deleteDir(Path f, boolean recursive) throws MetaException {
+ return deleteDir(f, recursive, false);
+ }
+
+ public boolean deleteDir(Path f, boolean recursive, boolean ifPurge) throws MetaException {
+ cm.recycle(f, RecycleType.MOVE, ifPurge);
+ FileSystem fs = getFs(f);
+ return fsHandler.deleteDir(fs, f, recursive, ifPurge, conf);
+ }
+
+ public void recycleDirToCmPath(Path f, boolean ifPurge) throws MetaException {
+ cm.recycle(f, RecycleType.MOVE, ifPurge);
+ return;
+ }
+
+ public boolean isEmpty(Path path) throws IOException, MetaException {
+ ContentSummary contents = getFs(path).getContentSummary(path);
+ if (contents != null && contents.getFileCount() == 0 && contents.getDirectoryCount() == 1) {
+ return true;
+ }
+ return false;
+ }
+
+ public boolean isWritable(Path path) throws IOException {
+ if (!storageAuthCheck) {
+ // no checks for non-secure hadoop installations
+ return true;
+ }
+ if (path == null) { //what??!!
+ return false;
+ }
+ final FileStatus stat;
+ final FileSystem fs;
+ try {
+ fs = getFs(path);
+ stat = fs.getFileStatus(path);
+ HdfsUtils.checkFileAccess(fs, stat, FsAction.WRITE);
+ return true;
+ } catch (FileNotFoundException fnfe){
+ // File named by path doesn't exist; nothing to validate.
+ return true;
+ } catch (Exception e) {
+ // all other exceptions are considered as emanating from
+ // unauthorized accesses
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Exception when checking if path (" + path + ")", e);
+ }
+ return false;
+ }
+ }
+
+ private static String escapePathName(String path) {
+ return FileUtils.escapePathName(path);
+ }
+
+ private static String unescapePathName(String path) {
+ return FileUtils.unescapePathName(path);
+ }
+
+ /**
+ * Given a partition specification, return the path corresponding to the
+ * partition spec. By default, the specification does not include dynamic partitions.
+ * @param spec
+ * @return string representation of the partition specification.
+ * @throws MetaException
+ */
+ public static String makePartPath(Map<String, String> spec)
+ throws MetaException {
+ return makePartName(spec, true);
+ }
+
+ /**
+ * Makes a partition name from a specification
+ * @param spec
+ * @param addTrailingSeperator if true, adds a trailing separator e.g. 'ds=1/'
+ * @return partition name
+ * @throws MetaException
+ */
+ public static String makePartName(Map<String, String> spec,
+ boolean addTrailingSeperator)
+ throws MetaException {
+ StringBuilder suffixBuf = new StringBuilder();
+ int i = 0;
+ for (Entry<String, String> e : spec.entrySet()) {
+ if (e.getValue() == null || e.getValue().length() == 0) {
+ throw new MetaException("Partition spec is incorrect. " + spec);
+ }
+ if (i>0) {
+ suffixBuf.append(Path.SEPARATOR);
+ }
+ suffixBuf.append(escapePathName(e.getKey()));
+ suffixBuf.append('=');
+ suffixBuf.append(escapePathName(e.getValue()));
+ i++;
+ }
+ if (addTrailingSeperator) {
+ suffixBuf.append(Path.SEPARATOR);
+ }
+ return suffixBuf.toString();
+ }
+ /**
+ * Given a dynamic partition specification, return the path corresponding to the
+ * static part of partition specification. This is basically a copy of makePartName
+ * but we get rid of MetaException since it is not serializable.
+ * @param spec
+ * @return string representation of the static part of the partition specification.
+ */
+ public static String makeDynamicPartName(Map<String, String> spec) {
+ StringBuilder suffixBuf = new StringBuilder();
+ for (Entry<String, String> e : spec.entrySet()) {
+ if (e.getValue() != null && e.getValue().length() > 0) {
+ suffixBuf.append(escapePathName(e.getKey()));
+ suffixBuf.append('=');
+ suffixBuf.append(escapePathName(e.getValue()));
+ suffixBuf.append(Path.SEPARATOR);
+ } else { // stop once we see a dynamic partition
+ break;
+ }
+ }
+ return suffixBuf.toString();
+ }
+
+ static final Pattern pat = Pattern.compile("([^/]+)=([^/]+)");
+
+ private static final Pattern slash = Pattern.compile("/");
+
+ /**
+ * Extracts values from partition name without the column names.
+ * @param name Partition name.
+ * @param result The result. Must be pre-sized to the expected number of columns.
+ */
+ public static AbstractList<String> makeValsFromName(
+ String name, AbstractList<String> result) throws MetaException {
+ assert name != null;
+ String[] parts = slash.split(name, 0);
+ if (result == null) {
+ result = new ArrayList<>(parts.length);
+ for (int i = 0; i < parts.length; ++i) {
+ result.add(null);
+ }
+ } else if (parts.length != result.size()) {
+ throw new MetaException(
+ "Expected " + result.size() + " components, got " + parts.length + " (" + name + ")");
+ }
+ for (int i = 0; i < parts.length; ++i) {
+ int eq = parts[i].indexOf('=');
+ if (eq <= 0) {
+ throw new MetaException("Unexpected component " + parts[i]);
+ }
+ result.set(i, unescapePathName(parts[i].substring(eq + 1)));
+ }
+ return result;
+ }
+
+ public static LinkedHashMap<String, String> makeSpecFromName(String name)
+ throws MetaException {
+ if (name == null || name.isEmpty()) {
+ throw new MetaException("Partition name is invalid. " + name);
+ }
+ LinkedHashMap<String, String> partSpec = new LinkedHashMap<>();
- makeSpecFromName(partSpec, new Path(name));
++ makeSpecFromName(partSpec, new Path(name), null);
+ return partSpec;
+ }
+
- public static void makeSpecFromName(Map<String, String> partSpec, Path currPath) {
++ public static boolean makeSpecFromName(Map<String, String> partSpec, Path currPath,
++ Set<String> requiredKeys) {
+ List<String[]> kvs = new ArrayList<>();
+ do {
+ String component = currPath.getName();
+ Matcher m = pat.matcher(component);
+ if (m.matches()) {
+ String k = unescapePathName(m.group(1));
+ String v = unescapePathName(m.group(2));
+ String[] kv = new String[2];
+ kv[0] = k;
+ kv[1] = v;
+ kvs.add(kv);
+ }
+ currPath = currPath.getParent();
+ } while (currPath != null && !currPath.getName().isEmpty());
+
+ // reverse the list since we checked the part from leaf dir to table's base dir
+ for (int i = kvs.size(); i > 0; i--) {
- partSpec.put(kvs.get(i - 1)[0], kvs.get(i - 1)[1]);
++ String key = kvs.get(i - 1)[0];
++ if (requiredKeys != null) {
++ requiredKeys.remove(key);
++ }
++ partSpec.put(key, kvs.get(i - 1)[1]);
+ }
++ if (requiredKeys == null || requiredKeys.isEmpty()) return true;
++ LOG.warn("Cannot create partition spec from " + currPath + "; missing keys " + requiredKeys);
++ return false;
+ }
+
+ public static Map<String, String> makeEscSpecFromName(String name) throws MetaException {
+
+ if (name == null || name.isEmpty()) {
+ throw new MetaException("Partition name is invalid. " + name);
+ }
+ LinkedHashMap<String, String> partSpec = new LinkedHashMap<>();
+
+ Path currPath = new Path(name);
+
+ List<String[]> kvs = new ArrayList<>();
+ do {
+ String component = currPath.getName();
+ Matcher m = pat.matcher(component);
+ if (m.matches()) {
+ String k = m.group(1);
+ String v = m.group(2);
+ String[] kv = new String[2];
+ kv[0] = k;
+ kv[1] = v;
+ kvs.add(kv);
+ }
+ currPath = currPath.getParent();
+ } while (currPath != null && !currPath.getName().isEmpty());
+
+ // reverse the list since we checked the part from leaf dir to table's base dir
+ for (int i = kvs.size(); i > 0; i--) {
+ partSpec.put(kvs.get(i - 1)[0], kvs.get(i - 1)[1]);
+ }
+
+ return partSpec;
+ }
+
+ /**
+ * Returns the default partition path of a table within a given database and partition key value
+ * pairs. It uses the database location and appends it the table name and the partition key,value
+ * pairs to create the Path for the partition directory
+ *
+ * @param db - parent database which is used to get the base location of the partition directory
+ * @param tableName - table name for the partitions
+ * @param pm - Partition key value pairs
+ * @return
+ * @throws MetaException
+ */
+ public Path getDefaultPartitionPath(Database db, String tableName,
+ Map<String, String> pm) throws MetaException {
+ return getPartitionPath(getDefaultTablePath(db, tableName), pm);
+ }
+
+ /**
+ * Returns the path object for the given partition key-value pairs and the base location
+ *
+ * @param tblPath - the base location for the partitions. Typically the table location
+ * @param pm - Partition key value pairs
+ * @return
+ * @throws MetaException
+ */
+ public Path getPartitionPath(Path tblPath, Map<String, String> pm)
+ throws MetaException {
+ return new Path(tblPath, makePartPath(pm));
+ }
+
+ /**
+ * Given a database, a table and the partition key value pairs this method returns the Path object
+ * corresponding to the partition key value pairs. It uses the table location if available else
+ * uses the database location for constructing the path corresponding to the partition key-value
+ * pairs
+ *
+ * @param db - Parent database of the given table
+ * @param table - Table for which the partition key-values are given
+ * @param vals - List of values for the partition keys
+ * @return Path corresponding to the partition key-value pairs
+ * @throws MetaException
+ */
+ public Path getPartitionPath(Database db, Table table, List<String> vals)
+ throws MetaException {
+ List<FieldSchema> partKeys = table.getPartitionKeys();
+ if (partKeys == null || (partKeys.size() != vals.size())) {
+ throw new MetaException("Invalid number of partition keys found for " + table.getTableName());
+ }
+ Map<String, String> pm = new LinkedHashMap<>(vals.size());
+ int i = 0;
+ for (FieldSchema key : partKeys) {
+ pm.put(key.getName(), vals.get(i));
+ i++;
+ }
+
+ if (table.getSd().getLocation() != null) {
+ return getPartitionPath(getDnsPath(new Path(table.getSd().getLocation())), pm);
+ } else {
+ return getDefaultPartitionPath(db, table.getTableName(), pm);
+ }
+ }
+
+ public boolean isDir(Path f) throws MetaException {
+ FileSystem fs;
+ try {
+ fs = getFs(f);
+ FileStatus fstatus = fs.getFileStatus(f);
+ if (!fstatus.isDir()) {
+ return false;
+ }
+ } catch (FileNotFoundException e) {
+ return false;
+ } catch (IOException e) {
+ MetaStoreUtils.logAndThrowMetaException(e);
+ }
+ return true;
+ }
+
+ public static String makePartName(List<FieldSchema> partCols,
+ List<String> vals) throws MetaException {
+ return makePartName(partCols, vals, null);
+ }
+
+ /**
+ * @param desc
+ * @return array of FileStatus objects corresponding to the files
+ * making up the passed storage description
+ */
+ public FileStatus[] getFileStatusesForSD(StorageDescriptor desc)
+ throws MetaException {
+ return getFileStatusesForLocation(desc.getLocation());
+ }
+
+ /**
+ * @param location
+ * @return array of FileStatus objects corresponding to the files
+ * making up the passed storage description
+ */
+ public FileStatus[] getFileStatusesForLocation(String location)
+ throws MetaException {
+ try {
+ Path path = new Path(location);
+ FileSystem fileSys = path.getFileSystem(conf);
+ return FileUtils.getFileStatusRecurse(path, -1, fileSys);
+ } catch (IOException ioe) {
+ MetaStoreUtils.logAndThrowMetaException(ioe);
+ }
+ return null;
+ }
+
+ /**
+ * @param db database
+ * @param table table
+ * @return array of FileStatus objects corresponding to the files making up the passed
+ * unpartitioned table
+ */
+ public FileStatus[] getFileStatusesForUnpartitionedTable(Database db, Table table)
+ throws MetaException {
+ Path tablePath = getDnsPath(new Path(table.getSd().getLocation()));
+ try {
+ FileSystem fileSys = tablePath.getFileSystem(conf);
+ return FileUtils.getFileStatusRecurse(tablePath, -1, fileSys);
+ } catch (IOException ioe) {
+ MetaStoreUtils.logAndThrowMetaException(ioe);
+ }
+ return null;
+ }
+
+ /**
+ * Makes a valid partition name.
+ * @param partCols The partition columns
+ * @param vals The partition values
+ * @param defaultStr
+ * The default name given to a partition value if the respective value is empty or null.
+ * @return An escaped, valid partition name.
+ * @throws MetaException
+ */
+ public static String makePartName(List<FieldSchema> partCols,
+ List<String> vals, String defaultStr) throws MetaException {
+ if ((partCols.size() != vals.size()) || (partCols.size() == 0)) {
+ String errorStr = "Invalid partition key & values; keys [";
+ for (FieldSchema fs : partCols) {
+ errorStr += (fs.getName() + ", ");
+ }
+ errorStr += "], values [";
+ for (String val : vals) {
+ errorStr += (val + ", ");
+ }
+ throw new MetaException(errorStr + "]");
+ }
+ List<String> colNames = new ArrayList<>();
+ for (FieldSchema col: partCols) {
+ colNames.add(col.getName());
+ }
+ return FileUtils.makePartName(colNames, vals, defaultStr);
+ }
+
+ public static List<String> getPartValuesFromPartName(String partName)
+ throws MetaException {
+ LinkedHashMap<String, String> partSpec = Warehouse.makeSpecFromName(partName);
+ List<String> values = new ArrayList<>();
+ values.addAll(partSpec.values());
+ return values;
+ }
+
+ public static Map<String, String> makeSpecFromValues(List<FieldSchema> partCols,
+ List<String> values) {
+ Map<String, String> spec = new LinkedHashMap<>();
+ for (int i = 0; i < values.size(); i++) {
+ spec.put(partCols.get(i).getName(), values.get(i));
+ }
+ return spec;
+ }
+ }
http://git-wip-us.apache.org/repos/asf/hive/blob/1fb04f36/standalone-metastore/src/main/thrift/hive_metastore.thrift
----------------------------------------------------------------------
[22/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Wei Zheng)
Posted by se...@apache.org.
HIVE-14671 : merge master into hive-14535 (Wei Zheng)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/18d13385
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/18d13385
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/18d13385
Branch: refs/heads/master
Commit: 18d133857b7930242538b49f33b3ca517b2e287d
Parents: 42a3857 8482c5f
Author: Wei Zheng <we...@apache.org>
Authored: Thu Sep 7 23:34:23 2017 -0700
Committer: Wei Zheng <we...@apache.org>
Committed: Thu Sep 7 23:34:23 2017 -0700
----------------------------------------------------------------------
.../org/apache/hadoop/hive/conf/HiveConf.java | 23 +-
.../apache/hadoop/hive/conf/TestHiveConf.java | 4 +
.../hive/conf/TestHiveConfRestrictList.java | 2 +-
dev-support/checkstyle_YETUS-484.sh | 406 --
dev-support/findbugs_YETUS-471.sh | 488 --
dev-support/maven_YETUS-506.sh | 687 ---
dev-support/yetus-wrapper.sh | 11 +-
errata.txt | 1 +
.../mapjoin/MapJoinMultiKeyBench.java | 94 +-
.../mapjoin/MapJoinOneLongKeyBench.java | 94 +-
.../mapjoin/MapJoinOneStringKeyBench.java | 94 +-
.../hive/ql/parse/TestReplicationScenarios.java | 145 +
.../apache/hive/jdbc/TestJdbcWithMiniLlap.java | 27 +-
.../test/resources/testconfiguration.properties | 2 +
.../apache/hive/beeline/QFileBeeLineClient.java | 6 +-
.../org/apache/hive/jdbc/HiveStatement.java | 2 +-
.../hive/llap/registry/LlapServiceInstance.java | 59 +
.../llap/registry/LlapServiceInstanceSet.java | 34 +
.../hive/llap/registry/ServiceInstance.java | 86 -
.../hive/llap/registry/ServiceInstanceSet.java | 69 -
.../ServiceInstanceStateChangeListener.java | 42 -
.../hive/llap/registry/ServiceRegistry.java | 8 +-
.../registry/impl/InactiveServiceInstance.java | 4 +-
.../registry/impl/LlapFixedRegistryImpl.java | 41 +-
.../llap/registry/impl/LlapRegistryService.java | 18 +-
.../impl/LlapZookeeperRegistryImpl.java | 800 +---
.../hive/llap/security/LlapTokenClient.java | 18 +-
.../hive/llap/tez/LlapProtocolClientProxy.java | 25 +-
.../hadoop/hive/registry/ServiceInstance.java | 47 +
.../hive/registry/ServiceInstanceSet.java | 61 +
.../ServiceInstanceStateChangeListener.java | 42 +
.../hive/registry/impl/ServiceInstanceBase.java | 93 +
.../hive/registry/impl/ZkRegistryBase.java | 549 +++
.../hive/registry/impl/ZookeeperUtils.java | 116 +
llap-common/pom.xml | 5 +
.../plugin/rpc/LlapPluginProtocolProtos.java | 1273 ++++++
.../org/apache/hadoop/hive/llap/LlapUtil.java | 70 +-
.../llap/impl/LlapPluginProtocolClientImpl.java | 46 +
.../hadoop/hive/llap/impl/ProtobufProxy.java | 76 +
.../llap/protocol/LlapPluginProtocolPB.java | 27 +
.../src/protobuf/LlapPluginProtocol.proto | 36 +
.../hadoop/hive/llap/LlapBaseInputFormat.java | 141 +-
.../hive/llap/cli/LlapStatusServiceDriver.java | 6 +-
.../hive/llap/daemon/impl/AMReporter.java | 75 +-
.../daemon/impl/LlapProtocolServerImpl.java | 67 +-
.../daemon/services/impl/LlapWebServices.java | 4 +-
.../daemon/impl/comparator/TestAMReporter.java | 87 +
.../llap/tezplugins/LlapTaskCommunicator.java | 69 +-
.../tezplugins/LlapTaskSchedulerService.java | 734 ++-
.../endpoint/LlapPluginPolicyProvider.java | 34 +
.../endpoint/LlapPluginSecurityInfo.java | 62 +
.../endpoint/LlapPluginServerImpl.java | 80 +
.../org.apache.hadoop.security.SecurityInfo | 14 +
.../TestLlapTaskSchedulerService.java | 567 ++-
.../TestDataSourceProviderFactory.java | 6 +
pom.xml | 8 +-
.../org/apache/hadoop/hive/ql/exec/DDLTask.java | 15 +
.../hadoop/hive/ql/exec/OperatorUtils.java | 31 +
.../hadoop/hive/ql/exec/repl/ReplDumpTask.java | 36 +-
.../hive/ql/exec/spark/SparkUtilities.java | 4 +-
.../apache/hadoop/hive/ql/exec/tez/Utils.java | 6 +-
.../hadoop/hive/ql/log/LogDivertAppender.java | 25 +-
.../hive/ql/log/LogDivertAppenderForTest.java | 18 +-
.../ql/optimizer/calcite/RelOptHiveTable.java | 93 +-
.../physical/LlapClusterStateForCompile.java | 8 +-
.../SparkDynamicPartitionPruningResolver.java | 146 +
.../physical/SparkMapJoinResolver.java | 35 +-
.../spark/SparkPartitionPruningSinkDesc.java | 13 +-
.../spark/SparkSkewJoinProcFactory.java | 6 +-
.../stats/annotation/StatsRulesProcFactory.java | 12 +-
.../hive/ql/parse/BaseSemanticAnalyzer.java | 26 +-
.../hive/ql/parse/DDLSemanticAnalyzer.java | 7 +-
.../apache/hadoop/hive/ql/parse/EximUtil.java | 14 +
.../hive/ql/parse/ImportSemanticAnalyzer.java | 4 +
.../hive/ql/parse/SemiJoinBranchInfo.java | 18 +
.../hadoop/hive/ql/parse/TezCompiler.java | 105 +-
.../dump/BootStrapReplicationSpecFunction.java | 1 -
.../hive/ql/parse/repl/dump/HiveWrapper.java | 5 +
.../hadoop/hive/ql/parse/repl/dump/Utils.java | 67 +
.../hive/ql/parse/spark/GenSparkUtils.java | 2 +-
.../hive/ql/parse/spark/SparkCompiler.java | 18 +-
.../hadoop/hive/ql/plan/ColStatistics.java | 12 +
.../hadoop/hive/ql/session/OperationLog.java | 4 +-
.../apache/hadoop/hive/ql/stats/StatsUtils.java | 208 +-
.../clientpositive/dynamic_semijoin_reduction.q | 10 +
.../clientpositive/join_reordering_no_stats.q | 63 +
...ynamic_partition_pruning_recursive_mapjoin.q | 147 +
...spark_vectorized_dynamic_partition_pruning.q | 43 +-
.../clientpositive/annotate_stats_filter.q.out | 12 +-
.../clientpositive/annotate_stats_groupby.q.out | 4 +-
.../clientpositive/annotate_stats_part.q.out | 42 +-
.../clientpositive/annotate_stats_select.q.out | 4 +-
.../clientpositive/annotate_stats_table.q.out | 12 +-
.../auto_join_reordering_values.q.out | 8 +-
.../clientpositive/auto_join_stats.q.out | 30 +-
.../clientpositive/auto_join_stats2.q.out | 91 +-
.../clientpositive/auto_sortmerge_join_12.q.out | 12 +-
.../cbo_rp_annotate_stats_groupby.q.out | 4 +-
.../columnStatsUpdateForStatsOptimizer_2.q.out | 24 +-
.../clientpositive/explain_rearrange.q.out | 24 +-
ql/src/test/results/clientpositive/join19.q.out | 190 +-
ql/src/test/results/clientpositive/join42.q.out | 154 +-
ql/src/test/results/clientpositive/join43.q.out | 136 +-
.../join_cond_pushdown_unqual1.q.out | 284 +-
.../join_cond_pushdown_unqual2.q.out | 162 +-
.../join_cond_pushdown_unqual3.q.out | 284 +-
.../join_cond_pushdown_unqual4.q.out | 162 +-
.../results/clientpositive/join_hive_626.q.out | 60 +-
.../test/results/clientpositive/join_star.q.out | 124 +-
.../llap/acid_bucket_pruning.q.out | 8 +-
.../llap/auto_smb_mapjoin_14.q.out | 260 +-
.../llap/auto_sortmerge_join_1.q.out | 48 +-
.../llap/auto_sortmerge_join_10.q.out | 42 +-
.../llap/auto_sortmerge_join_11.q.out | 64 +-
.../llap/auto_sortmerge_join_12.q.out | 26 +-
.../llap/auto_sortmerge_join_13.q.out | 134 +-
.../llap/auto_sortmerge_join_14.q.out | 24 +-
.../llap/auto_sortmerge_join_15.q.out | 24 +-
.../llap/auto_sortmerge_join_2.q.out | 32 +-
.../llap/auto_sortmerge_join_3.q.out | 48 +-
.../llap/auto_sortmerge_join_4.q.out | 48 +-
.../llap/auto_sortmerge_join_5.q.out | 44 +-
.../llap/auto_sortmerge_join_6.q.out | 682 +--
.../llap/auto_sortmerge_join_7.q.out | 48 +-
.../llap/auto_sortmerge_join_8.q.out | 48 +-
.../llap/auto_sortmerge_join_9.q.out | 488 +-
.../clientpositive/llap/bucket_groupby.q.out | 198 +-
.../llap/bucket_map_join_tez1.q.out | 1121 ++---
.../llap/bucket_map_join_tez2.q.out | 322 +-
.../clientpositive/llap/bucketmapjoin1.q.out | 88 +-
.../clientpositive/llap/bucketmapjoin2.q.out | 66 +-
.../clientpositive/llap/bucketmapjoin3.q.out | 44 +-
.../clientpositive/llap/bucketmapjoin4.q.out | 44 +-
.../clientpositive/llap/bucketmapjoin7.q.out | 24 +-
.../clientpositive/llap/bucketpruning1.q.out | 208 +-
.../llap/bucketsortoptimize_insert_2.q.out | 144 +-
.../llap/bucketsortoptimize_insert_6.q.out | 168 +-
.../llap/bucketsortoptimize_insert_7.q.out | 72 +-
.../columnStatsUpdateForStatsOptimizer_1.q.out | 24 +-
.../llap/column_access_stats.q.out | 138 +-
.../llap/column_table_stats.q.out | 24 +-
.../llap/column_table_stats_orc.q.out | 20 +-
.../clientpositive/llap/constprog_dpp.q.out | 20 +-
.../llap/constprog_semijoin.q.out | 150 +-
.../llap/correlationoptimizer4.q.out | 324 +-
.../results/clientpositive/llap/count.q.out | 144 +-
.../llap/cross_product_check_1.q.out | 150 +-
.../llap/cross_product_check_2.q.out | 132 +-
.../results/clientpositive/llap/cte_3.q.out | 8 +-
.../results/clientpositive/llap/cte_5.q.out | 10 +-
.../results/clientpositive/llap/cte_mat_3.q.out | 18 +-
.../results/clientpositive/llap/cte_mat_4.q.out | 36 +-
.../results/clientpositive/llap/cte_mat_5.q.out | 16 +-
.../llap/disable_merge_for_bucketing.q.out | 12 +-
.../llap/dynamic_partition_pruning.q.out | 655 +--
.../llap/dynamic_partition_pruning_2.q.out | 201 +-
.../llap/dynamic_semijoin_reduction.q.out | 459 +-
.../llap/dynamic_semijoin_reduction_2.q.out | 269 +-
.../llap/dynamic_semijoin_reduction_3.q.out | 186 +-
.../llap/dynamic_semijoin_reduction_sw.q.out | 34 +-
.../llap/dynpart_sort_opt_vectorization.q.out | 208 +-
.../llap/dynpart_sort_optimization.q.out | 288 +-
.../llap/dynpart_sort_optimization2.q.out | 68 +-
.../llap/dynpart_sort_optimization_acid.q.out | 144 +-
.../clientpositive/llap/empty_join.q.out | 22 +-
.../clientpositive/llap/except_distinct.q.out | 48 +-
.../clientpositive/llap/explainuser_1.q.out | 384 +-
.../clientpositive/llap/explainuser_2.q.out | 116 +-
.../llap/filter_join_breaktask.q.out | 36 +-
.../llap/hybridgrace_hashjoin_1.q.out | 197 +-
.../results/clientpositive/llap/insert1.q.out | 46 +-
.../clientpositive/llap/insert_into1.q.out | 6 +-
.../clientpositive/llap/intersect_all.q.out | 44 +-
.../llap/intersect_distinct.q.out | 40 +-
.../clientpositive/llap/intersect_merge.q.out | 540 +--
.../clientpositive/llap/jdbc_handler.q.out | 14 +-
.../results/clientpositive/llap/join46.q.out | 326 +-
.../llap/join_emit_interval.q.out | 32 +-
.../llap/join_is_not_distinct_from.q.out | 102 +-
.../clientpositive/llap/join_nullsafe.q.out | 102 +-
.../llap/join_reordering_no_stats.q.out | 708 +++
.../clientpositive/llap/lateral_view.q.out | 32 +-
.../clientpositive/llap/llap_nullscan.q.out | 64 +-
.../clientpositive/llap/llap_partitioned.q.out | 8 +-
.../results/clientpositive/llap/llap_smb.q.out | 18 +-
.../clientpositive/llap/llap_stats.q.out | 4 +-
.../results/clientpositive/llap/llap_udf.q.out | 36 +-
.../clientpositive/llap/llapdecider.q.out | 32 +-
.../clientpositive/llap/lvj_mapjoin.q.out | 60 +-
.../results/clientpositive/llap/mapjoin3.q.out | 16 +-
.../results/clientpositive/llap/mapjoin46.q.out | 280 +-
.../clientpositive/llap/mapjoin_decimal.q.out | 22 +-
.../llap/mapjoin_emit_interval.q.out | 28 +-
.../results/clientpositive/llap/merge1.q.out | 12 +-
.../results/clientpositive/llap/merge2.q.out | 12 +-
.../results/clientpositive/llap/mergejoin.q.out | 370 +-
.../llap/metadata_only_queries.q.out | 68 +-
.../clientpositive/llap/multiMapJoin1.q.out | 503 ++-
.../clientpositive/llap/multiMapJoin2.q.out | 8 +-
.../llap/multi_count_distinct_null.q.out | 42 +-
.../llap/multi_insert_lateral_view.q.out | 288 +-
.../clientpositive/llap/optimize_nullscan.q.out | 20 +-
.../llap/orc_llap_nonvector.q.out | 16 +-
.../clientpositive/llap/orc_merge3.q.out | 6 +-
.../clientpositive/llap/orc_merge4.q.out | 6 +-
.../clientpositive/llap/orc_merge5.q.out | 16 +-
.../clientpositive/llap/orc_merge6.q.out | 16 +-
.../clientpositive/llap/orc_merge7.q.out | 12 +-
.../llap/orc_merge_incompat1.q.out | 8 +-
.../llap/orc_merge_incompat2.q.out | 6 +-
.../llap/orc_predicate_pushdown.q.out | 144 +-
.../llap/parquet_predicate_pushdown.q.out | 136 +-
.../llap/parquet_types_vectorization.q.out | 112 +-
.../llap/partition_shared_scan.q.out | 116 +-
.../clientpositive/llap/ppd_union_view.q.out | 66 +-
.../clientpositive/llap/ptf_matchpath.q.out | 42 +-
.../clientpositive/llap/rcfile_createas1.q.out | 6 +-
.../clientpositive/llap/rcfile_merge3.q.out | 6 +-
.../clientpositive/llap/rcfile_merge4.q.out | 6 +-
.../llap/reduce_deduplicate.q.out | 10 +-
.../llap/reduce_deduplicate_distinct.q.out | 84 +-
.../results/clientpositive/llap/sample10.q.out | 6 +-
.../llap/schema_evol_orc_nonvec_part.q.out | 54 +-
...chema_evol_orc_nonvec_part_all_complex.q.out | 18 +-
...ema_evol_orc_nonvec_part_all_primitive.q.out | 30 +-
.../llap/schema_evol_orc_nonvec_table.q.out | 30 +-
.../llap/schema_evol_orc_vec_part.q.out | 54 +-
.../schema_evol_orc_vec_part_all_complex.q.out | 18 +-
...schema_evol_orc_vec_part_all_primitive.q.out | 30 +-
.../llap/schema_evol_orc_vec_table.q.out | 30 +-
.../llap/schema_evol_text_nonvec_part.q.out | 54 +-
...hema_evol_text_nonvec_part_all_complex.q.out | 18 +-
...ma_evol_text_nonvec_part_all_primitive.q.out | 30 +-
.../llap/schema_evol_text_nonvec_table.q.out | 30 +-
.../llap/schema_evol_text_vec_part.q.out | 54 +-
.../schema_evol_text_vec_part_all_complex.q.out | 18 +-
...chema_evol_text_vec_part_all_primitive.q.out | 30 +-
.../llap/schema_evol_text_vec_table.q.out | 30 +-
.../llap/schema_evol_text_vecrow_part.q.out | 54 +-
...hema_evol_text_vecrow_part_all_complex.q.out | 18 +-
...ma_evol_text_vecrow_part_all_primitive.q.out | 30 +-
.../llap/schema_evol_text_vecrow_table.q.out | 30 +-
.../results/clientpositive/llap/semijoin.q.out | 534 +--
.../results/clientpositive/llap/skewjoin.q.out | 76 +-
.../clientpositive/llap/skewjoinopt15.q.out | 36 +-
.../results/clientpositive/llap/smb_cache.q.out | 28 +-
.../clientpositive/llap/smb_mapjoin_14.q.out | 244 +-
.../clientpositive/llap/smb_mapjoin_15.q.out | 104 +-
.../clientpositive/llap/smb_mapjoin_17.q.out | 218 +-
.../clientpositive/llap/smb_mapjoin_18.q.out | 24 +-
.../clientpositive/llap/smb_mapjoin_19.q.out | 6 +-
.../clientpositive/llap/smb_mapjoin_4.q.out | 310 +-
.../clientpositive/llap/smb_mapjoin_5.q.out | 310 +-
.../clientpositive/llap/smb_mapjoin_6.q.out | 108 +-
.../results/clientpositive/llap/sqlmerge.q.out | 76 +-
.../results/clientpositive/llap/stats11.q.out | 44 +-
.../clientpositive/llap/stats_only_null.q.out | 24 +-
.../clientpositive/llap/subquery_exists.q.out | 10 +-
.../clientpositive/llap/subquery_in.q.out | 36 +-
.../clientpositive/llap/subquery_multi.q.out | 416 +-
.../clientpositive/llap/subquery_notin.q.out | 366 +-
.../clientpositive/llap/subquery_scalar.q.out | 530 +--
.../clientpositive/llap/subquery_select.q.out | 48 +-
.../results/clientpositive/llap/sysdb.q.out | 12 +-
.../llap/table_access_keys_stats.q.out | 8 +-
.../clientpositive/llap/temp_table.q.out | 30 +-
.../llap/tez_bmj_schema_evolution.q.out | 22 +-
.../results/clientpositive/llap/tez_dml.q.out | 6 +-
.../results/clientpositive/llap/tez_join.q.out | 24 +-
.../clientpositive/llap/tez_join_hash.q.out | 8 +-
.../llap/tez_join_result_complex.q.out | 40 +-
.../clientpositive/llap/tez_nway_join.q.out | 90 +-
.../clientpositive/llap/tez_self_join.q.out | 36 +-
.../results/clientpositive/llap/tez_smb_1.q.out | 106 +-
.../clientpositive/llap/tez_smb_empty.q.out | 82 +-
.../clientpositive/llap/tez_smb_main.q.out | 470 +-
.../llap/tez_union_group_by.q.out | 66 +-
.../clientpositive/llap/unionDistinct_1.q.out | 994 +++--
.../clientpositive/llap/union_remove_26.q.out | 8 +-
.../llap/vector_adaptor_usage_mode.q.out | 100 +-
.../llap/vector_aggregate_9.q.out | 36 +-
.../llap/vector_aggregate_without_gby.q.out | 10 +-
.../llap/vector_auto_smb_mapjoin_14.q.out | 260 +-
.../llap/vector_between_columns.q.out | 34 +-
.../clientpositive/llap/vector_between_in.q.out | 166 +-
.../llap/vector_binary_join_groupby.q.out | 56 +-
.../clientpositive/llap/vector_bucket.q.out | 10 +-
.../llap/vector_cast_constant.q.out | 18 +-
.../clientpositive/llap/vector_char_2.q.out | 36 +-
.../clientpositive/llap/vector_char_4.q.out | 6 +-
.../llap/vector_char_mapjoin1.q.out | 78 +-
.../clientpositive/llap/vector_coalesce_2.q.out | 40 +-
.../llap/vector_complex_all.q.out | 86 +-
.../llap/vector_complex_join.q.out | 8 +-
.../clientpositive/llap/vector_count.q.out | 48 +-
.../llap/vector_count_distinct.q.out | 18 +-
.../clientpositive/llap/vector_data_types.q.out | 24 +-
.../clientpositive/llap/vector_date_1.q.out | 68 +-
.../clientpositive/llap/vector_decimal_1.q.out | 90 +-
.../llap/vector_decimal_10_0.q.out | 10 +-
.../llap/vector_decimal_aggregate.q.out | 32 +-
.../llap/vector_decimal_expressions.q.out | 14 +-
.../llap/vector_decimal_mapjoin.q.out | 18 +-
.../llap/vector_decimal_math_funcs.q.out | 8 +-
.../llap/vector_decimal_precision.q.out | 12 +-
.../llap/vector_decimal_round.q.out | 40 +-
.../llap/vector_decimal_udf.q.out | 258 +-
.../llap/vector_decimal_udf2.q.out | 16 +-
.../clientpositive/llap/vector_distinct_2.q.out | 14 +-
.../clientpositive/llap/vector_groupby4.q.out | 14 +-
.../clientpositive/llap/vector_groupby6.q.out | 14 +-
.../clientpositive/llap/vector_groupby_3.q.out | 14 +-
.../llap/vector_groupby_cube1.q.out | 126 +-
.../llap/vector_groupby_grouping_id1.q.out | 84 +-
.../llap/vector_groupby_grouping_id2.q.out | 220 +-
.../llap/vector_groupby_grouping_id3.q.out | 32 +-
.../llap/vector_groupby_grouping_sets1.q.out | 96 +-
.../llap/vector_groupby_grouping_sets2.q.out | 72 +-
.../llap/vector_groupby_grouping_sets3.q.out | 46 +-
.../llap/vector_groupby_grouping_sets4.q.out | 98 +-
.../llap/vector_groupby_grouping_sets5.q.out | 64 +-
.../llap/vector_groupby_grouping_sets6.q.out | 24 +-
.../vector_groupby_grouping_sets_grouping.q.out | 182 +-
.../vector_groupby_grouping_sets_limit.q.out | 118 +-
.../llap/vector_groupby_reduce.q.out | 84 +-
.../llap/vector_groupby_rollup1.q.out | 98 +-
.../llap/vector_grouping_sets.q.out | 40 +-
.../llap/vector_include_no_sel.q.out | 12 +-
.../clientpositive/llap/vector_inner_join.q.out | 160 +-
.../clientpositive/llap/vector_interval_1.q.out | 80 +-
.../clientpositive/llap/vector_interval_2.q.out | 112 +-
.../llap/vector_interval_arithmetic.q.out | 60 +-
.../llap/vector_interval_mapjoin.q.out | 20 +-
.../clientpositive/llap/vector_join30.q.out | 318 +-
.../llap/vector_left_outer_join2.q.out | 96 +-
.../llap/vector_leftsemi_mapjoin.q.out | 1904 ++++----
.../llap/vector_mr_diff_schema_alias.q.out | 55 +-
.../llap/vector_multi_insert.q.out | 6 +-
.../llap/vector_nullsafe_join.q.out | 176 +-
.../llap/vector_number_compare_projection.q.out | 24 +-
.../clientpositive/llap/vector_orderby_5.q.out | 16 +-
.../llap/vector_outer_join0.q.out | 28 +-
.../llap/vector_partition_diff_num_cols.q.out | 60 +-
.../llap/vector_partitioned_date_time.q.out | 156 +-
.../llap/vector_ptf_part_simple.q.out | 312 +-
.../clientpositive/llap/vector_reduce1.q.out | 10 +-
.../clientpositive/llap/vector_reduce2.q.out | 10 +-
.../clientpositive/llap/vector_reduce3.q.out | 10 +-
.../llap/vector_reduce_groupby_decimal.q.out | 18 +-
.../llap/vector_string_concat.q.out | 26 +-
.../clientpositive/llap/vector_struct_in.q.out | 48 +-
.../clientpositive/llap/vector_udf1.q.out | 220 +-
.../llap/vector_udf_character_length.q.out | 12 +-
.../llap/vector_udf_octet_length.q.out | 6 +-
.../clientpositive/llap/vector_varchar_4.q.out | 6 +-
.../llap/vector_varchar_mapjoin1.q.out | 154 +-
.../llap/vector_varchar_simple.q.out | 24 +-
.../llap/vector_when_case_null.q.out | 12 +-
.../llap/vector_windowing_navfn.q.out | 132 +-
.../llap/vectorization_decimal_date.q.out | 10 +-
.../llap/vectorization_part_project.q.out | 8 +-
.../llap/vectorization_short_regress.q.out | 72 +-
.../llap/vectorized_bucketmapjoin1.q.out | 54 +-
.../llap/vectorized_context.q.out | 109 +-
.../llap/vectorized_date_funcs.q.out | 42 +-
.../llap/vectorized_distinct_gby.q.out | 14 +-
.../vectorized_dynamic_partition_pruning.q.out | 649 +--
.../vectorized_dynamic_semijoin_reduction.q.out | 238 +-
.../clientpositive/llap/vectorized_join46.q.out | 250 +-
.../llap/vectorized_parquet.q.out | 12 +-
.../llap/vectorized_parquet_types.q.out | 16 +-
.../clientpositive/llap/vectorized_ptf.q.out | 538 +--
.../llap/vectorized_timestamp.q.out | 34 +-
.../llap/vectorized_timestamp_funcs.q.out | 80 +-
.../results/clientpositive/merge_join_1.q.out | 68 +-
.../test/results/clientpositive/mergejoin.q.out | 132 +-
.../clientpositive/mergejoins_mixed.q.out | 237 +-
ql/src/test/results/clientpositive/mm_all.q.out | 35 +-
.../results/clientpositive/perf/query14.q.out | 2 +-
.../test/results/clientpositive/ppd_join5.q.out | 122 +-
.../clientpositive/ppd_outer_join5.q.out | 64 +-
.../results/clientpositive/smb_mapjoin_47.q.out | 120 +-
.../spark/auto_join_reordering_values.q.out | 10 +-
.../clientpositive/spark/auto_join_stats.q.out | 34 +-
.../clientpositive/spark/auto_join_stats2.q.out | 95 +-
.../spark/auto_smb_mapjoin_14.q.out | 2 +-
.../spark/auto_sortmerge_join_12.q.out | 8 +-
.../spark/auto_sortmerge_join_6.q.out | 464 +-
.../spark/auto_sortmerge_join_9.q.out | 4 +-
.../spark/bucket_map_join_tez1.q.out | 214 +-
.../spark/bucket_map_join_tez2.q.out | 28 +-
.../spark/column_access_stats.q.out | 38 +-
.../results/clientpositive/spark/join19.q.out | 136 +-
.../spark/join_cond_pushdown_unqual1.q.out | 274 +-
.../spark/join_cond_pushdown_unqual2.q.out | 152 +-
.../spark/join_cond_pushdown_unqual3.q.out | 274 +-
.../spark/join_cond_pushdown_unqual4.q.out | 152 +-
.../clientpositive/spark/join_hive_626.q.out | 64 +-
.../clientpositive/spark/join_star.q.out | 137 +-
.../clientpositive/spark/mergejoins_mixed.q.out | 171 +-
.../clientpositive/spark/ppd_join5.q.out | 130 +-
.../clientpositive/spark/ppd_outer_join5.q.out | 64 +-
.../spark/skewjoin_union_remove_1.q.out | 16 +-
.../spark/skewjoin_union_remove_2.q.out | 6 +-
.../clientpositive/spark/skewjoinopt1.q.out | 16 +-
.../clientpositive/spark/skewjoinopt10.q.out | 8 +-
.../clientpositive/spark/skewjoinopt11.q.out | 8 +-
.../clientpositive/spark/skewjoinopt12.q.out | 4 +-
.../clientpositive/spark/skewjoinopt14.q.out | 8 +-
.../clientpositive/spark/skewjoinopt15.q.out | 16 +-
.../clientpositive/spark/skewjoinopt16.q.out | 4 +-
.../clientpositive/spark/skewjoinopt17.q.out | 12 +-
.../clientpositive/spark/skewjoinopt19.q.out | 8 +-
.../clientpositive/spark/skewjoinopt2.q.out | 16 +-
.../clientpositive/spark/skewjoinopt20.q.out | 8 +-
.../clientpositive/spark/skewjoinopt3.q.out | 8 +-
.../clientpositive/spark/skewjoinopt4.q.out | 16 +-
.../clientpositive/spark/skewjoinopt5.q.out | 4 +-
.../clientpositive/spark/skewjoinopt6.q.out | 4 +-
.../clientpositive/spark/skewjoinopt7.q.out | 6 +-
.../clientpositive/spark/skewjoinopt8.q.out | 6 +-
.../spark/spark_dynamic_partition_pruning.q.out | 108 +-
.../spark_dynamic_partition_pruning_3.q.out | 118 +-
...dynamic_partition_pruning_mapjoin_only.q.out | 192 +-
...ic_partition_pruning_recursive_mapjoin.q.out | 1097 +++++
.../spark/spark_explainuser_1.q.out | 352 +-
.../spark/spark_use_op_stats.q.out | 92 +-
...k_vectorized_dynamic_partition_pruning.q.out | 4184 ++++++++++--------
.../clientpositive/spark/stats_only_null.q.out | 24 +-
.../spark/table_access_keys_stats.q.out | 8 +-
.../clientpositive/stats_only_null.q.out | 24 +-
.../clientpositive/stats_partial_size.q.out | 10 +-
.../results/clientpositive/stats_ppr_all.q.out | 6 +-
.../clientpositive/tez/explainanalyze_2.q.out | 208 +-
.../clientpositive/tez/explainanalyze_3.q.out | 47 +-
.../clientpositive/tez/explainanalyze_5.q.out | 14 +-
.../clientpositive/tez/explainuser_3.q.out | 43 +-
.../tez/hybridgrace_hashjoin_1.q.out | 195 +-
.../tez/multi_count_distinct.q.out | 30 +-
.../results/clientpositive/tez/tez-tag.q.out | 59 +-
.../tez/vector_join_part_col_char.q.out | 16 +-
.../tez/vector_non_string_partition.q.out | 28 +-
.../vector_mr_diff_schema_alias.q.out | 39 +-
.../clientpositive/vector_outer_join6.q.out | 4 +-
.../clientpositive/vectorized_context.q.out | 66 +-
.../apache/hive/service/auth/HttpAuthUtils.java | 4 +-
.../service/cli/session/HiveSessionImpl.java | 28 +-
.../service/cli/thrift/ThriftHttpServlet.java | 4 +-
448 files changed, 28238 insertions(+), 22347 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/18d13385/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/18d13385/itests/src/test/resources/testconfiguration.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/18d13385/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/18d13385/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/18d13385/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
index 021507f,230ca47..65c7477
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
@@@ -1724,11 -1703,11 +1723,11 @@@ public class DDLSemanticAnalyzer extend
TableDesc tblDesc = Utilities.getTableDesc(tblObj);
Path queryTmpdir = ctx.getExternalTmpPath(newTblPartLoc);
mergeDesc.setOutputDir(queryTmpdir);
+ // No need to handle MM tables - unsupported path.
LoadTableDesc ltd = new LoadTableDesc(queryTmpdir, tblDesc,
- partSpec == null ? new HashMap<String, String>() : partSpec, null);
- partSpec == null ? new HashMap<>() : partSpec);
++ partSpec == null ? new HashMap<>() : partSpec, null);
ltd.setLbCtx(lbCtx);
- Task<MoveWork> moveTsk = TaskFactory.get(new MoveWork(null, null, ltd, null, false),
- conf);
+ Task<MoveWork> moveTsk = TaskFactory.get(new MoveWork(null, null, ltd, null, false), conf);
mergeTask.addDependentTask(moveTsk);
if (conf.getBoolVar(HiveConf.ConfVars.HIVESTATSAUTOGATHER)) {
http://git-wip-us.apache.org/repos/asf/hive/blob/18d13385/ql/src/java/org/apache/hadoop/hive/ql/parse/EximUtil.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/18d13385/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/18d13385/ql/src/java/org/apache/hadoop/hive/ql/parse/spark/GenSparkUtils.java
----------------------------------------------------------------------
[24/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Wei Zheng)
Posted by se...@apache.org.
HIVE-14671 : merge master into hive-14535 (Wei Zheng)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/bb1c0f25
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/bb1c0f25
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/bb1c0f25
Branch: refs/heads/master
Commit: bb1c0f25fc17d8c5ced8855a05b6651358c5fd96
Parents: 00e7510 5df1540
Author: Wei Zheng <we...@apache.org>
Authored: Fri Sep 8 15:35:21 2017 -0700
Committer: Wei Zheng <we...@apache.org>
Committed: Fri Sep 8 15:35:21 2017 -0700
----------------------------------------------------------------------
druid-handler/pom.xml | 48 +-
.../hive/druid/DruidStorageHandlerUtils.java | 7 +
.../hadoop/hive/druid/io/DruidOutputFormat.java | 9 +-
.../druid/io/DruidQueryBasedInputFormat.java | 8 +-
.../hadoop/hive/druid/io/DruidRecordWriter.java | 3 +-
.../serde/DruidGroupByQueryRecordReader.java | 5 +-
.../serde/DruidSelectQueryRecordReader.java | 5 +-
.../hadoop/hive/druid/serde/DruidSerDe.java | 15 +-
.../serde/DruidTimeseriesQueryRecordReader.java | 5 +-
.../druid/serde/DruidTopNQueryRecordReader.java | 5 +-
.../TestHiveDruidQueryBasedInputFormat.java | 6 +-
.../hive/ql/io/TestDruidRecordWriter.java | 19 +-
.../test/resources/testconfiguration.properties | 1 +
.../hadoop/hive/metastore/HiveAlterHandler.java | 24 +-
.../hive/metastore/MetaStoreDirectSql.java | 7 +-
.../hadoop/hive/metastore/ObjectStore.java | 11 +-
.../metastore/PartitionExpressionProxy.java | 10 +-
.../hive/metastore/cache/CachedStore.java | 12 +-
.../hive/metastore/parser/ExpressionTree.java | 6 +-
.../MockPartitionExpressionForMetastore.java | 5 +-
.../hadoop/hive/metastore/TestObjectStore.java | 11 +-
.../hadoop/hive/metastore/TestOldSchema.java | 6 +-
.../hadoop/hive/ql/exec/repl/ReplDumpTask.java | 6 +-
.../hive/ql/optimizer/ConvertJoinMapJoin.java | 4 +-
.../ppr/PartitionExpressionForMetastore.java | 14 +-
.../hadoop/hive/ql/parse/ParseContext.java | 10 +
.../hadoop/hive/ql/parse/SemanticAnalyzer.java | 32 +-
.../apache/hadoop/hive/ql/TestTxnCommands.java | 11 +-
.../hadoop/hive/ql/TestTxnCommandsBase.java | 162 -----
.../apache/hadoop/hive/ql/TestTxnNoBuckets.java | 2 +-
.../hadoop/hive/ql/TxnCommandsBaseForTests.java | 162 +++++
.../test/queries/clientpositive/mapjoin_hint.q | 69 ++
ql/src/test/queries/clientpositive/masking_11.q | 6 +
.../clientpositive/llap/mapjoin_hint.q.out | 643 +++++++++++++++++++
.../results/clientpositive/masking_11.q.out | 20 +
.../hadoop/hive/metastore/ColumnType.java | 242 +++++++
36 files changed, 1313 insertions(+), 298 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/bb1c0f25/itests/src/test/resources/testconfiguration.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/bb1c0f25/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/bb1c0f25/metastore/src/java/org/apache/hadoop/hive/metastore/cache/CachedStore.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/bb1c0f25/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
----------------------------------------------------------------------
diff --cc metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
index 7573fb2,5448d0d..75eba79
--- a/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
+++ b/metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java
@@@ -290,11 -272,11 +287,11 @@@ public class TestObjectStore
public void testPartitionOps() throws MetaException, InvalidObjectException, NoSuchObjectException, InvalidInputException {
Database db1 = new Database(DB1, "description", "locationurl", null);
objectStore.createDatabase(db1);
- StorageDescriptor sd = new StorageDescriptor(null, "location", null, null, false, 0, new SerDeInfo("SerDeName", "serializationLib", null), null, null, null);
+ StorageDescriptor sd = createFakeSd("location");
HashMap<String,String> tableParams = new HashMap<String,String>();
tableParams.put("EXTERNAL", "false");
- FieldSchema partitionKey1 = new FieldSchema("Country", serdeConstants.STRING_TYPE_NAME, "");
- FieldSchema partitionKey2 = new FieldSchema("State", serdeConstants.STRING_TYPE_NAME, "");
+ FieldSchema partitionKey1 = new FieldSchema("Country", ColumnType.STRING_TYPE_NAME, "");
+ FieldSchema partitionKey2 = new FieldSchema("State", ColumnType.STRING_TYPE_NAME, "");
Table tbl1 = new Table(TABLE1, DB1, "owner", 1, 2, 3, sd, Arrays.asList(partitionKey1, partitionKey2), tableParams, null, null, "MANAGED_TABLE");
objectStore.createTable(tbl1);
HashMap<String, String> partitionParams = new HashMap<String, String>();
http://git-wip-us.apache.org/repos/asf/hive/blob/bb1c0f25/ql/src/java/org/apache/hadoop/hive/ql/parse/ParseContext.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/bb1c0f25/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/bb1c0f25/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java
----------------------------------------------------------------------
[14/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Wei Zheng)
Posted by se...@apache.org.
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/test/results/clientpositive/mm_loaddata.q.out
----------------------------------------------------------------------
diff --cc ql/src/test/results/clientpositive/mm_loaddata.q.out
index 0000000,0000000..b849a88
new file mode 100644
--- /dev/null
+++ b/ql/src/test/results/clientpositive/mm_loaddata.q.out
@@@ -1,0 -1,0 +1,296 @@@
++PREHOOK: query: drop table load0_mm
++PREHOOK: type: DROPTABLE
++POSTHOOK: query: drop table load0_mm
++POSTHOOK: type: DROPTABLE
++PREHOOK: query: create table load0_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
++PREHOOK: type: CREATETABLE
++PREHOOK: Output: database:default
++PREHOOK: Output: default@load0_mm
++POSTHOOK: query: create table load0_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
++POSTHOOK: type: CREATETABLE
++POSTHOOK: Output: database:default
++POSTHOOK: Output: default@load0_mm
++PREHOOK: query: load data local inpath '../../data/files/kv1.txt' into table load0_mm
++PREHOOK: type: LOAD
++#### A masked pattern was here ####
++PREHOOK: Output: default@load0_mm
++POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' into table load0_mm
++POSTHOOK: type: LOAD
++#### A masked pattern was here ####
++POSTHOOK: Output: default@load0_mm
++PREHOOK: query: select count(1) from load0_mm
++PREHOOK: type: QUERY
++PREHOOK: Input: default@load0_mm
++#### A masked pattern was here ####
++POSTHOOK: query: select count(1) from load0_mm
++POSTHOOK: type: QUERY
++POSTHOOK: Input: default@load0_mm
++#### A masked pattern was here ####
++500
++PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table load0_mm
++PREHOOK: type: LOAD
++#### A masked pattern was here ####
++PREHOOK: Output: default@load0_mm
++POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table load0_mm
++POSTHOOK: type: LOAD
++#### A masked pattern was here ####
++POSTHOOK: Output: default@load0_mm
++PREHOOK: query: select count(1) from load0_mm
++PREHOOK: type: QUERY
++PREHOOK: Input: default@load0_mm
++#### A masked pattern was here ####
++POSTHOOK: query: select count(1) from load0_mm
++POSTHOOK: type: QUERY
++POSTHOOK: Input: default@load0_mm
++#### A masked pattern was here ####
++1000
++PREHOOK: query: load data local inpath '../../data/files/kv2.txt' overwrite into table load0_mm
++PREHOOK: type: LOAD
++#### A masked pattern was here ####
++PREHOOK: Output: default@load0_mm
++POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' overwrite into table load0_mm
++POSTHOOK: type: LOAD
++#### A masked pattern was here ####
++POSTHOOK: Output: default@load0_mm
++PREHOOK: query: select count(1) from load0_mm
++PREHOOK: type: QUERY
++PREHOOK: Input: default@load0_mm
++#### A masked pattern was here ####
++POSTHOOK: query: select count(1) from load0_mm
++POSTHOOK: type: QUERY
++POSTHOOK: Input: default@load0_mm
++#### A masked pattern was here ####
++500
++PREHOOK: query: drop table load0_mm
++PREHOOK: type: DROPTABLE
++PREHOOK: Input: default@load0_mm
++PREHOOK: Output: default@load0_mm
++POSTHOOK: query: drop table load0_mm
++POSTHOOK: type: DROPTABLE
++POSTHOOK: Input: default@load0_mm
++POSTHOOK: Output: default@load0_mm
++PREHOOK: query: drop table intermediate2
++PREHOOK: type: DROPTABLE
++POSTHOOK: query: drop table intermediate2
++POSTHOOK: type: DROPTABLE
++PREHOOK: query: create table intermediate2 (key string, value string) stored as textfile
++#### A masked pattern was here ####
++PREHOOK: type: CREATETABLE
++#### A masked pattern was here ####
++PREHOOK: Output: database:default
++PREHOOK: Output: default@intermediate2
++POSTHOOK: query: create table intermediate2 (key string, value string) stored as textfile
++#### A masked pattern was here ####
++POSTHOOK: type: CREATETABLE
++#### A masked pattern was here ####
++POSTHOOK: Output: database:default
++POSTHOOK: Output: default@intermediate2
++PREHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
++PREHOOK: type: LOAD
++#### A masked pattern was here ####
++PREHOOK: Output: default@intermediate2
++POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
++POSTHOOK: type: LOAD
++#### A masked pattern was here ####
++POSTHOOK: Output: default@intermediate2
++PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
++PREHOOK: type: LOAD
++#### A masked pattern was here ####
++PREHOOK: Output: default@intermediate2
++POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
++POSTHOOK: type: LOAD
++#### A masked pattern was here ####
++POSTHOOK: Output: default@intermediate2
++PREHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
++PREHOOK: type: LOAD
++#### A masked pattern was here ####
++PREHOOK: Output: default@intermediate2
++POSTHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
++POSTHOOK: type: LOAD
++#### A masked pattern was here ####
++POSTHOOK: Output: default@intermediate2
++PREHOOK: query: drop table load1_mm
++PREHOOK: type: DROPTABLE
++POSTHOOK: query: drop table load1_mm
++POSTHOOK: type: DROPTABLE
++PREHOOK: query: create table load1_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
++PREHOOK: type: CREATETABLE
++PREHOOK: Output: database:default
++PREHOOK: Output: default@load1_mm
++POSTHOOK: query: create table load1_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
++POSTHOOK: type: CREATETABLE
++POSTHOOK: Output: database:default
++POSTHOOK: Output: default@load1_mm
++#### A masked pattern was here ####
++PREHOOK: type: LOAD
++#### A masked pattern was here ####
++PREHOOK: Output: default@load1_mm
++#### A masked pattern was here ####
++POSTHOOK: type: LOAD
++#### A masked pattern was here ####
++POSTHOOK: Output: default@load1_mm
++#### A masked pattern was here ####
++PREHOOK: type: LOAD
++#### A masked pattern was here ####
++PREHOOK: Output: default@load1_mm
++#### A masked pattern was here ####
++POSTHOOK: type: LOAD
++#### A masked pattern was here ####
++POSTHOOK: Output: default@load1_mm
++PREHOOK: query: select count(1) from load1_mm
++PREHOOK: type: QUERY
++PREHOOK: Input: default@load1_mm
++#### A masked pattern was here ####
++POSTHOOK: query: select count(1) from load1_mm
++POSTHOOK: type: QUERY
++POSTHOOK: Input: default@load1_mm
++#### A masked pattern was here ####
++1000
++PREHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
++PREHOOK: type: LOAD
++#### A masked pattern was here ####
++PREHOOK: Output: default@intermediate2
++POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
++POSTHOOK: type: LOAD
++#### A masked pattern was here ####
++POSTHOOK: Output: default@intermediate2
++PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
++PREHOOK: type: LOAD
++#### A masked pattern was here ####
++PREHOOK: Output: default@intermediate2
++POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
++POSTHOOK: type: LOAD
++#### A masked pattern was here ####
++POSTHOOK: Output: default@intermediate2
++PREHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
++PREHOOK: type: LOAD
++#### A masked pattern was here ####
++PREHOOK: Output: default@intermediate2
++POSTHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
++POSTHOOK: type: LOAD
++#### A masked pattern was here ####
++POSTHOOK: Output: default@intermediate2
++#### A masked pattern was here ####
++PREHOOK: type: LOAD
++#### A masked pattern was here ####
++PREHOOK: Output: default@load1_mm
++#### A masked pattern was here ####
++POSTHOOK: type: LOAD
++#### A masked pattern was here ####
++POSTHOOK: Output: default@load1_mm
++PREHOOK: query: select count(1) from load1_mm
++PREHOOK: type: QUERY
++PREHOOK: Input: default@load1_mm
++#### A masked pattern was here ####
++POSTHOOK: query: select count(1) from load1_mm
++POSTHOOK: type: QUERY
++POSTHOOK: Input: default@load1_mm
++#### A masked pattern was here ####
++1050
++PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
++PREHOOK: type: LOAD
++#### A masked pattern was here ####
++PREHOOK: Output: default@intermediate2
++POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
++POSTHOOK: type: LOAD
++#### A masked pattern was here ####
++POSTHOOK: Output: default@intermediate2
++#### A masked pattern was here ####
++PREHOOK: type: LOAD
++#### A masked pattern was here ####
++PREHOOK: Output: default@load1_mm
++#### A masked pattern was here ####
++POSTHOOK: type: LOAD
++#### A masked pattern was here ####
++POSTHOOK: Output: default@load1_mm
++PREHOOK: query: select count(1) from load1_mm
++PREHOOK: type: QUERY
++PREHOOK: Input: default@load1_mm
++#### A masked pattern was here ####
++POSTHOOK: query: select count(1) from load1_mm
++POSTHOOK: type: QUERY
++POSTHOOK: Input: default@load1_mm
++#### A masked pattern was here ####
++500
++PREHOOK: query: drop table load1_mm
++PREHOOK: type: DROPTABLE
++PREHOOK: Input: default@load1_mm
++PREHOOK: Output: default@load1_mm
++POSTHOOK: query: drop table load1_mm
++POSTHOOK: type: DROPTABLE
++POSTHOOK: Input: default@load1_mm
++POSTHOOK: Output: default@load1_mm
++PREHOOK: query: drop table load2_mm
++PREHOOK: type: DROPTABLE
++POSTHOOK: query: drop table load2_mm
++POSTHOOK: type: DROPTABLE
++PREHOOK: query: create table load2_mm (key string, value string)
++ partitioned by (k int, l int) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
++PREHOOK: type: CREATETABLE
++PREHOOK: Output: database:default
++PREHOOK: Output: default@load2_mm
++POSTHOOK: query: create table load2_mm (key string, value string)
++ partitioned by (k int, l int) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
++POSTHOOK: type: CREATETABLE
++POSTHOOK: Output: database:default
++POSTHOOK: Output: default@load2_mm
++PREHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
++PREHOOK: type: LOAD
++#### A masked pattern was here ####
++PREHOOK: Output: default@intermediate2
++POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
++POSTHOOK: type: LOAD
++#### A masked pattern was here ####
++POSTHOOK: Output: default@intermediate2
++PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
++PREHOOK: type: LOAD
++#### A masked pattern was here ####
++PREHOOK: Output: default@intermediate2
++POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
++POSTHOOK: type: LOAD
++#### A masked pattern was here ####
++POSTHOOK: Output: default@intermediate2
++PREHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
++PREHOOK: type: LOAD
++#### A masked pattern was here ####
++PREHOOK: Output: default@intermediate2
++POSTHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
++POSTHOOK: type: LOAD
++#### A masked pattern was here ####
++POSTHOOK: Output: default@intermediate2
++#### A masked pattern was here ####
++PREHOOK: type: LOAD
++#### A masked pattern was here ####
++PREHOOK: Output: default@load2_mm
++#### A masked pattern was here ####
++POSTHOOK: type: LOAD
++#### A masked pattern was here ####
++POSTHOOK: Output: default@load2_mm
++POSTHOOK: Output: default@load2_mm@k=5/l=5
++PREHOOK: query: select count(1) from load2_mm
++PREHOOK: type: QUERY
++PREHOOK: Input: default@load2_mm
++PREHOOK: Input: default@load2_mm@k=5/l=5
++#### A masked pattern was here ####
++POSTHOOK: query: select count(1) from load2_mm
++POSTHOOK: type: QUERY
++POSTHOOK: Input: default@load2_mm
++POSTHOOK: Input: default@load2_mm@k=5/l=5
++#### A masked pattern was here ####
++1025
++PREHOOK: query: drop table load2_mm
++PREHOOK: type: DROPTABLE
++PREHOOK: Input: default@load2_mm
++PREHOOK: Output: default@load2_mm
++POSTHOOK: query: drop table load2_mm
++POSTHOOK: type: DROPTABLE
++POSTHOOK: Input: default@load2_mm
++POSTHOOK: Output: default@load2_mm
++PREHOOK: query: drop table intermediate2
++PREHOOK: type: DROPTABLE
++PREHOOK: Input: default@intermediate2
++PREHOOK: Output: default@intermediate2
++POSTHOOK: query: drop table intermediate2
++POSTHOOK: type: DROPTABLE
++POSTHOOK: Input: default@intermediate2
++POSTHOOK: Output: default@intermediate2
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/test/results/clientpositive/tez/explainuser_3.q.out
----------------------------------------------------------------------
[46/50] [abbrv] hive git commit: HIVE-17693 : remove the logic to
convert from MM to plain hive table (Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-17693 : remove the logic to convert from MM to plain hive table (Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/ae4ac4b1
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/ae4ac4b1
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/ae4ac4b1
Branch: refs/heads/master
Commit: ae4ac4b124655d6a674ff5077a3a63bc6a87a1d8
Parents: 42335b4
Author: sergey <se...@apache.org>
Authored: Mon Oct 9 17:51:08 2017 -0700
Committer: sergey <se...@apache.org>
Committed: Mon Oct 9 17:51:08 2017 -0700
----------------------------------------------------------------------
.../org/apache/hadoop/hive/ql/exec/DDLTask.java | 62 +--
.../queries/clientpositive/mm_conversions.q | 44 --
.../clientpositive/llap/mm_conversions.q.out | 544 -------------------
.../results/clientpositive/mm_conversions.q.out | 544 -------------------
4 files changed, 4 insertions(+), 1190 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/ae4ac4b1/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
index 75a1c87..335ea63 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
@@ -4109,7 +4109,7 @@ public class DDLTask extends Task<DDLWork> implements Serializable {
boolean isFromMmTable = AcidUtils.isInsertOnlyTable(tbl.getParameters()),
isRemoved = AcidUtils.isRemovedInsertOnlyTable(removedSet);
if (isFromMmTable && isRemoved) {
- result = generateRemoveMmTasks(tbl);
+ throw new HiveException("Cannot convert an ACID table to non-ACID");
}
}
Iterator<String> keyItr = alterTbl.getProps().keySet().iterator();
@@ -4123,72 +4123,18 @@ public class DDLTask extends Task<DDLWork> implements Serializable {
return result;
}
- private List<Task<?>> generateRemoveMmTasks(Table tbl) throws HiveException {
- // To avoid confusion from nested MM directories when table is converted back and forth, we
- // want to rename mm_ dirs to remove the prefix; however, given the unpredictable nested
- // directory handling in Hive/MR, we will instead move all the files into the root directory.
- // We will also delete any directories that are not committed.
- // Note that this relies on locks. Note also that we only do the renames AFTER the metastore
- // operation commits. Deleting uncommitted things is safe, but moving stuff before we convert
- // could cause data loss.
- List<Path> allMmDirs = new ArrayList<>();
- checkMmLb(tbl);
- List<String> bucketCols = tbl.getBucketCols();
- if (bucketCols != null && !bucketCols.isEmpty()
- && HiveConf.getBoolVar(conf, ConfVars.HIVE_STRICT_CHECKS_BUCKETING)) {
- throw new HiveException("Converting bucketed tables from MM is not supported by default; "
- + "copying files from multiple MM directories may potentially break the buckets. You "
- + "can set " + ConfVars.HIVE_STRICT_CHECKS_BUCKETING.varname
- + " to false for this query if you want to force the conversion.");
- }
- Hive db = getHive();
- String value = conf.get(ValidTxnList.VALID_TXNS_KEY);
- ValidTxnList validTxnList = value == null ? new ValidReadTxnList() : new ValidReadTxnList(value);
- if (tbl.getPartitionKeys().size() > 0) {
- PartitionIterable parts = new PartitionIterable(db, tbl, null,
- HiveConf.getIntVar(conf, ConfVars.METASTORE_BATCH_RETRIEVE_MAX));
- Iterator<Partition> partIter = parts.iterator();
- while (partIter.hasNext()) {
- Partition part = partIter.next();
- checkMmLb(part);
- handleRemoveMm(part.getDataLocation(), validTxnList, allMmDirs);
- }
- } else {
- checkMmLb(tbl);
- handleRemoveMm(tbl.getDataLocation(), validTxnList, allMmDirs);
- }
- List<Path> targetPaths = new ArrayList<>(allMmDirs.size());
- List<String> targetPrefix = new ArrayList<>(allMmDirs.size());
- int prefixLen = JavaUtils.DELTA_PREFIX.length();
- for (int i = 0; i < allMmDirs.size(); ++i) {
- Path src = allMmDirs.get(i);
- Path tgt = src.getParent();
- String prefix = src.getName().substring(prefixLen + 1) + "_";
- if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
- Utilities.FILE_OP_LOGGER.trace("Will move " + src + " to " + tgt + " (prefix " + prefix + ")");
- }
- targetPaths.add(tgt);
- targetPrefix.add(prefix);
- }
- // Don't set inputs and outputs - the locks have already been taken so it's pointless.
- MoveWork mw = new MoveWork(null, null, null, null, false, SessionState.get().getLineageState());
- mw.setMultiFilesDesc(new LoadMultiFilesDesc(
- allMmDirs, targetPaths, targetPrefix, true, null, null));
- return Lists.<Task<?>>newArrayList(TaskFactory.get(mw, conf));
- }
-
private void checkMmLb(Table tbl) throws HiveException {
if (!tbl.isStoredAsSubDirectories()) return;
// TODO [MM gap?]: by design; no-one seems to use LB tables. They will work, but not convert.
// It's possible to work around this by re-creating and re-inserting the table.
throw new HiveException("Converting list bucketed tables stored as subdirectories "
- + " to and from MM is not supported. Please re-create a table in the desired format.");
+ + " to MM is not supported. Please re-create a table in the desired format.");
}
private void checkMmLb(Partition part) throws HiveException {
if (!part.isStoredAsSubDirectories()) return;
throw new HiveException("Converting list bucketed tables stored as subdirectories "
- + " to and from MM is not supported. Please re-create a table in the desired format.");
+ + " to MM is not supported. Please re-create a table in the desired format.");
}
private void handleRemoveMm(
@@ -4299,7 +4245,7 @@ public class DDLTask extends Task<DDLWork> implements Serializable {
if (!isFromMmTable && isToMmTable) {
result = generateAddMmTasks(tbl);
} else if (isFromMmTable && !isToMmTable) {
- result = generateRemoveMmTasks(tbl);
+ throw new HiveException("Cannot convert an ACID table to non-ACID");
}
}
tbl.getTTable().getParameters().putAll(alterTbl.getProps());
http://git-wip-us.apache.org/repos/asf/hive/blob/ae4ac4b1/ql/src/test/queries/clientpositive/mm_conversions.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/mm_conversions.q b/ql/src/test/queries/clientpositive/mm_conversions.q
index 62faeac..14d16ab 100644
--- a/ql/src/test/queries/clientpositive/mm_conversions.q
+++ b/ql/src/test/queries/clientpositive/mm_conversions.q
@@ -14,27 +14,6 @@ insert into table intermediate partition(p='455') select distinct key from src w
insert into table intermediate partition(p='456') select distinct key from src where key is not null order by key asc limit 1;
insert into table intermediate partition(p='457') select distinct key from src where key >= 100 order by key asc limit 1;
-drop table simple_from_mm1;
-create table simple_from_mm1(key int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only");
-insert into table simple_from_mm1 select key from intermediate;
-insert into table simple_from_mm1 select key from intermediate;
-select * from simple_from_mm1 s1 order by key;
-alter table simple_from_mm1 unset tblproperties('transactional_properties', 'transactional');
-select * from simple_from_mm1 s2 order by key;
-insert into table simple_from_mm1 select key from intermediate;
-select * from simple_from_mm1 s3 order by key;
-drop table simple_from_mm1;
-
-drop table simple_from_mm2;
-create table simple_from_mm2(key int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only");
-insert into table simple_from_mm2 select key from intermediate;
-insert into table simple_from_mm2 select key from intermediate;
-select * from simple_from_mm2 s1 order by key;
-alter table simple_from_mm2 set tblproperties("transactional"="false", 'transactional_properties'='false');
-select * from simple_from_mm2 s2 order by key;
-insert into table simple_from_mm2 select key from intermediate;
-select * from simple_from_mm2 s3 order by key;
-drop table simple_from_mm2;
drop table simple_to_mm;
create table simple_to_mm(key int) stored as orc;
@@ -47,29 +26,6 @@ insert into table simple_to_mm select key from intermediate;
select * from simple_to_mm s3 order by key;
drop table simple_to_mm;
-drop table part_from_mm1;
-create table part_from_mm1(key int) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only");
-insert into table part_from_mm1 partition(key_mm='455') select key from intermediate;
-insert into table part_from_mm1 partition(key_mm='455') select key from intermediate;
-insert into table part_from_mm1 partition(key_mm='456') select key from intermediate;
-select * from part_from_mm1 s1 order by key, key_mm;
-alter table part_from_mm1 unset tblproperties('transactional_properties', 'transactional');
-select * from part_from_mm1 s2 order by key, key_mm;
-insert into table part_from_mm1 partition(key_mm='456') select key from intermediate;
-insert into table part_from_mm1 partition(key_mm='457') select key from intermediate;
-select * from part_from_mm1 s3 order by key, key_mm;
-drop table part_from_mm1;
-
-drop table part_from_mm2;
-create table part_from_mm2(key int) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only");
-insert into table part_from_mm2 partition(key_mm='456') select key from intermediate;--fails here
-insert into table part_from_mm2 partition(key_mm='455') select key from intermediate;
-select * from part_from_mm2 s1 order by key, key_mm;
-alter table part_from_mm2 set tblproperties("transactional"="false", 'transactional_properties'='false');
-select * from part_from_mm2 s2 order by key, key_mm;
-insert into table part_from_mm2 partition(key_mm='457') select key from intermediate;
-select * from part_from_mm2 s3 order by key, key_mm;
-drop table part_from_mm2;
drop table part_to_mm;
create table part_to_mm(key int) partitioned by (key_mm int) stored as orc;
http://git-wip-us.apache.org/repos/asf/hive/blob/ae4ac4b1/ql/src/test/results/clientpositive/llap/mm_conversions.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/mm_conversions.q.out b/ql/src/test/results/clientpositive/llap/mm_conversions.q.out
index d95a70e..4754710 100644
--- a/ql/src/test/results/clientpositive/llap/mm_conversions.q.out
+++ b/ql/src/test/results/clientpositive/llap/mm_conversions.q.out
@@ -37,242 +37,6 @@ POSTHOOK: type: QUERY
POSTHOOK: Input: default@src
POSTHOOK: Output: default@intermediate@p=457
POSTHOOK: Lineage: intermediate PARTITION(p=457).key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ]
-PREHOOK: query: drop table simple_from_mm1
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table simple_from_mm1
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: create table simple_from_mm1(key int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@simple_from_mm1
-POSTHOOK: query: create table simple_from_mm1(key int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@simple_from_mm1
-PREHOOK: query: insert into table simple_from_mm1 select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@simple_from_mm1
-POSTHOOK: query: insert into table simple_from_mm1 select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@simple_from_mm1
-POSTHOOK: Lineage: simple_from_mm1.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: insert into table simple_from_mm1 select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@simple_from_mm1
-POSTHOOK: query: insert into table simple_from_mm1 select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@simple_from_mm1
-POSTHOOK: Lineage: simple_from_mm1.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from simple_from_mm1 s1 order by key
-PREHOOK: type: QUERY
-PREHOOK: Input: default@simple_from_mm1
-#### A masked pattern was here ####
-POSTHOOK: query: select * from simple_from_mm1 s1 order by key
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@simple_from_mm1
-#### A masked pattern was here ####
-0
-0
-98
-98
-100
-100
-PREHOOK: query: alter table simple_from_mm1 unset tblproperties('transactional_properties', 'transactional')
-PREHOOK: type: ALTERTABLE_PROPERTIES
-PREHOOK: Input: default@simple_from_mm1
-PREHOOK: Output: default@simple_from_mm1
-POSTHOOK: query: alter table simple_from_mm1 unset tblproperties('transactional_properties', 'transactional')
-POSTHOOK: type: ALTERTABLE_PROPERTIES
-POSTHOOK: Input: default@simple_from_mm1
-POSTHOOK: Output: default@simple_from_mm1
-PREHOOK: query: select * from simple_from_mm1 s2 order by key
-PREHOOK: type: QUERY
-PREHOOK: Input: default@simple_from_mm1
-#### A masked pattern was here ####
-POSTHOOK: query: select * from simple_from_mm1 s2 order by key
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@simple_from_mm1
-#### A masked pattern was here ####
-0
-0
-98
-98
-100
-100
-PREHOOK: query: insert into table simple_from_mm1 select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@simple_from_mm1
-POSTHOOK: query: insert into table simple_from_mm1 select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@simple_from_mm1
-POSTHOOK: Lineage: simple_from_mm1.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from simple_from_mm1 s3 order by key
-PREHOOK: type: QUERY
-PREHOOK: Input: default@simple_from_mm1
-#### A masked pattern was here ####
-POSTHOOK: query: select * from simple_from_mm1 s3 order by key
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@simple_from_mm1
-#### A masked pattern was here ####
-0
-0
-0
-98
-98
-98
-100
-100
-100
-PREHOOK: query: drop table simple_from_mm1
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@simple_from_mm1
-PREHOOK: Output: default@simple_from_mm1
-POSTHOOK: query: drop table simple_from_mm1
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@simple_from_mm1
-POSTHOOK: Output: default@simple_from_mm1
-PREHOOK: query: drop table simple_from_mm2
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table simple_from_mm2
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: create table simple_from_mm2(key int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@simple_from_mm2
-POSTHOOK: query: create table simple_from_mm2(key int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@simple_from_mm2
-PREHOOK: query: insert into table simple_from_mm2 select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@simple_from_mm2
-POSTHOOK: query: insert into table simple_from_mm2 select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@simple_from_mm2
-POSTHOOK: Lineage: simple_from_mm2.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: insert into table simple_from_mm2 select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@simple_from_mm2
-POSTHOOK: query: insert into table simple_from_mm2 select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@simple_from_mm2
-POSTHOOK: Lineage: simple_from_mm2.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from simple_from_mm2 s1 order by key
-PREHOOK: type: QUERY
-PREHOOK: Input: default@simple_from_mm2
-#### A masked pattern was here ####
-POSTHOOK: query: select * from simple_from_mm2 s1 order by key
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@simple_from_mm2
-#### A masked pattern was here ####
-0
-0
-98
-98
-100
-100
-PREHOOK: query: alter table simple_from_mm2 set tblproperties("transactional"="false", 'transactional_properties'='false')
-PREHOOK: type: ALTERTABLE_PROPERTIES
-PREHOOK: Input: default@simple_from_mm2
-PREHOOK: Output: default@simple_from_mm2
-POSTHOOK: query: alter table simple_from_mm2 set tblproperties("transactional"="false", 'transactional_properties'='false')
-POSTHOOK: type: ALTERTABLE_PROPERTIES
-POSTHOOK: Input: default@simple_from_mm2
-POSTHOOK: Output: default@simple_from_mm2
-PREHOOK: query: select * from simple_from_mm2 s2 order by key
-PREHOOK: type: QUERY
-PREHOOK: Input: default@simple_from_mm2
-#### A masked pattern was here ####
-POSTHOOK: query: select * from simple_from_mm2 s2 order by key
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@simple_from_mm2
-#### A masked pattern was here ####
-0
-0
-98
-98
-100
-100
-PREHOOK: query: insert into table simple_from_mm2 select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@simple_from_mm2
-POSTHOOK: query: insert into table simple_from_mm2 select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@simple_from_mm2
-POSTHOOK: Lineage: simple_from_mm2.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from simple_from_mm2 s3 order by key
-PREHOOK: type: QUERY
-PREHOOK: Input: default@simple_from_mm2
-#### A masked pattern was here ####
-POSTHOOK: query: select * from simple_from_mm2 s3 order by key
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@simple_from_mm2
-#### A masked pattern was here ####
-0
-0
-0
-98
-98
-98
-100
-100
-100
-PREHOOK: query: drop table simple_from_mm2
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@simple_from_mm2
-PREHOOK: Output: default@simple_from_mm2
-POSTHOOK: query: drop table simple_from_mm2
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@simple_from_mm2
-POSTHOOK: Output: default@simple_from_mm2
PREHOOK: query: drop table simple_to_mm
PREHOOK: type: DROPTABLE
POSTHOOK: query: drop table simple_to_mm
@@ -385,314 +149,6 @@ POSTHOOK: query: drop table simple_to_mm
POSTHOOK: type: DROPTABLE
POSTHOOK: Input: default@simple_to_mm
POSTHOOK: Output: default@simple_to_mm
-PREHOOK: query: drop table part_from_mm1
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table part_from_mm1
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: create table part_from_mm1(key int) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@part_from_mm1
-POSTHOOK: query: create table part_from_mm1(key int) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@part_from_mm1
-PREHOOK: query: insert into table part_from_mm1 partition(key_mm='455') select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@part_from_mm1@key_mm=455
-POSTHOOK: query: insert into table part_from_mm1 partition(key_mm='455') select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@part_from_mm1@key_mm=455
-POSTHOOK: Lineage: part_from_mm1 PARTITION(key_mm=455).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: insert into table part_from_mm1 partition(key_mm='455') select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@part_from_mm1@key_mm=455
-POSTHOOK: query: insert into table part_from_mm1 partition(key_mm='455') select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@part_from_mm1@key_mm=455
-POSTHOOK: Lineage: part_from_mm1 PARTITION(key_mm=455).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: insert into table part_from_mm1 partition(key_mm='456') select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@part_from_mm1@key_mm=456
-POSTHOOK: query: insert into table part_from_mm1 partition(key_mm='456') select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@part_from_mm1@key_mm=456
-POSTHOOK: Lineage: part_from_mm1 PARTITION(key_mm=456).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from part_from_mm1 s1 order by key, key_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@part_from_mm1
-PREHOOK: Input: default@part_from_mm1@key_mm=455
-PREHOOK: Input: default@part_from_mm1@key_mm=456
-#### A masked pattern was here ####
-POSTHOOK: query: select * from part_from_mm1 s1 order by key, key_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@part_from_mm1
-POSTHOOK: Input: default@part_from_mm1@key_mm=455
-POSTHOOK: Input: default@part_from_mm1@key_mm=456
-#### A masked pattern was here ####
-0 455
-0 455
-0 456
-98 455
-98 455
-98 456
-100 455
-100 455
-100 456
-PREHOOK: query: alter table part_from_mm1 unset tblproperties('transactional_properties', 'transactional')
-PREHOOK: type: ALTERTABLE_PROPERTIES
-PREHOOK: Input: default@part_from_mm1
-PREHOOK: Output: default@part_from_mm1
-POSTHOOK: query: alter table part_from_mm1 unset tblproperties('transactional_properties', 'transactional')
-POSTHOOK: type: ALTERTABLE_PROPERTIES
-POSTHOOK: Input: default@part_from_mm1
-POSTHOOK: Output: default@part_from_mm1
-PREHOOK: query: select * from part_from_mm1 s2 order by key, key_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@part_from_mm1
-PREHOOK: Input: default@part_from_mm1@key_mm=455
-PREHOOK: Input: default@part_from_mm1@key_mm=456
-#### A masked pattern was here ####
-POSTHOOK: query: select * from part_from_mm1 s2 order by key, key_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@part_from_mm1
-POSTHOOK: Input: default@part_from_mm1@key_mm=455
-POSTHOOK: Input: default@part_from_mm1@key_mm=456
-#### A masked pattern was here ####
-0 455
-0 455
-0 456
-98 455
-98 455
-98 456
-100 455
-100 455
-100 456
-PREHOOK: query: insert into table part_from_mm1 partition(key_mm='456') select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@part_from_mm1@key_mm=456
-POSTHOOK: query: insert into table part_from_mm1 partition(key_mm='456') select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@part_from_mm1@key_mm=456
-POSTHOOK: Lineage: part_from_mm1 PARTITION(key_mm=456).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: insert into table part_from_mm1 partition(key_mm='457') select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@part_from_mm1@key_mm=457
-POSTHOOK: query: insert into table part_from_mm1 partition(key_mm='457') select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@part_from_mm1@key_mm=457
-POSTHOOK: Lineage: part_from_mm1 PARTITION(key_mm=457).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from part_from_mm1 s3 order by key, key_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@part_from_mm1
-PREHOOK: Input: default@part_from_mm1@key_mm=455
-PREHOOK: Input: default@part_from_mm1@key_mm=456
-PREHOOK: Input: default@part_from_mm1@key_mm=457
-#### A masked pattern was here ####
-POSTHOOK: query: select * from part_from_mm1 s3 order by key, key_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@part_from_mm1
-POSTHOOK: Input: default@part_from_mm1@key_mm=455
-POSTHOOK: Input: default@part_from_mm1@key_mm=456
-POSTHOOK: Input: default@part_from_mm1@key_mm=457
-#### A masked pattern was here ####
-0 455
-0 455
-0 456
-0 456
-0 457
-98 455
-98 455
-98 456
-98 456
-98 457
-100 455
-100 455
-100 456
-100 456
-100 457
-PREHOOK: query: drop table part_from_mm1
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@part_from_mm1
-PREHOOK: Output: default@part_from_mm1
-POSTHOOK: query: drop table part_from_mm1
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@part_from_mm1
-POSTHOOK: Output: default@part_from_mm1
-PREHOOK: query: drop table part_from_mm2
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table part_from_mm2
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: create table part_from_mm2(key int) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@part_from_mm2
-POSTHOOK: query: create table part_from_mm2(key int) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@part_from_mm2
-PREHOOK: query: insert into table part_from_mm2 partition(key_mm='456') select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@part_from_mm2@key_mm=456
-POSTHOOK: query: insert into table part_from_mm2 partition(key_mm='456') select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@part_from_mm2@key_mm=456
-POSTHOOK: Lineage: part_from_mm2 PARTITION(key_mm=456).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: --fails here
-insert into table part_from_mm2 partition(key_mm='455') select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@part_from_mm2@key_mm=455
-POSTHOOK: query: --fails here
-insert into table part_from_mm2 partition(key_mm='455') select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@part_from_mm2@key_mm=455
-POSTHOOK: Lineage: part_from_mm2 PARTITION(key_mm=455).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from part_from_mm2 s1 order by key, key_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@part_from_mm2
-PREHOOK: Input: default@part_from_mm2@key_mm=455
-PREHOOK: Input: default@part_from_mm2@key_mm=456
-#### A masked pattern was here ####
-POSTHOOK: query: select * from part_from_mm2 s1 order by key, key_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@part_from_mm2
-POSTHOOK: Input: default@part_from_mm2@key_mm=455
-POSTHOOK: Input: default@part_from_mm2@key_mm=456
-#### A masked pattern was here ####
-0 455
-0 456
-98 455
-98 456
-100 455
-100 456
-PREHOOK: query: alter table part_from_mm2 set tblproperties("transactional"="false", 'transactional_properties'='false')
-PREHOOK: type: ALTERTABLE_PROPERTIES
-PREHOOK: Input: default@part_from_mm2
-PREHOOK: Output: default@part_from_mm2
-POSTHOOK: query: alter table part_from_mm2 set tblproperties("transactional"="false", 'transactional_properties'='false')
-POSTHOOK: type: ALTERTABLE_PROPERTIES
-POSTHOOK: Input: default@part_from_mm2
-POSTHOOK: Output: default@part_from_mm2
-PREHOOK: query: select * from part_from_mm2 s2 order by key, key_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@part_from_mm2
-PREHOOK: Input: default@part_from_mm2@key_mm=455
-PREHOOK: Input: default@part_from_mm2@key_mm=456
-#### A masked pattern was here ####
-POSTHOOK: query: select * from part_from_mm2 s2 order by key, key_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@part_from_mm2
-POSTHOOK: Input: default@part_from_mm2@key_mm=455
-POSTHOOK: Input: default@part_from_mm2@key_mm=456
-#### A masked pattern was here ####
-0 455
-0 456
-98 455
-98 456
-100 455
-100 456
-PREHOOK: query: insert into table part_from_mm2 partition(key_mm='457') select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@part_from_mm2@key_mm=457
-POSTHOOK: query: insert into table part_from_mm2 partition(key_mm='457') select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@part_from_mm2@key_mm=457
-POSTHOOK: Lineage: part_from_mm2 PARTITION(key_mm=457).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from part_from_mm2 s3 order by key, key_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@part_from_mm2
-PREHOOK: Input: default@part_from_mm2@key_mm=455
-PREHOOK: Input: default@part_from_mm2@key_mm=456
-PREHOOK: Input: default@part_from_mm2@key_mm=457
-#### A masked pattern was here ####
-POSTHOOK: query: select * from part_from_mm2 s3 order by key, key_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@part_from_mm2
-POSTHOOK: Input: default@part_from_mm2@key_mm=455
-POSTHOOK: Input: default@part_from_mm2@key_mm=456
-POSTHOOK: Input: default@part_from_mm2@key_mm=457
-#### A masked pattern was here ####
-0 455
-0 456
-0 457
-98 455
-98 456
-98 457
-100 455
-100 456
-100 457
-PREHOOK: query: drop table part_from_mm2
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@part_from_mm2
-PREHOOK: Output: default@part_from_mm2
-POSTHOOK: query: drop table part_from_mm2
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@part_from_mm2
-POSTHOOK: Output: default@part_from_mm2
PREHOOK: query: drop table part_to_mm
PREHOOK: type: DROPTABLE
POSTHOOK: query: drop table part_to_mm
http://git-wip-us.apache.org/repos/asf/hive/blob/ae4ac4b1/ql/src/test/results/clientpositive/mm_conversions.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/mm_conversions.q.out b/ql/src/test/results/clientpositive/mm_conversions.q.out
index d95a70e..4754710 100644
--- a/ql/src/test/results/clientpositive/mm_conversions.q.out
+++ b/ql/src/test/results/clientpositive/mm_conversions.q.out
@@ -37,242 +37,6 @@ POSTHOOK: type: QUERY
POSTHOOK: Input: default@src
POSTHOOK: Output: default@intermediate@p=457
POSTHOOK: Lineage: intermediate PARTITION(p=457).key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ]
-PREHOOK: query: drop table simple_from_mm1
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table simple_from_mm1
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: create table simple_from_mm1(key int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@simple_from_mm1
-POSTHOOK: query: create table simple_from_mm1(key int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@simple_from_mm1
-PREHOOK: query: insert into table simple_from_mm1 select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@simple_from_mm1
-POSTHOOK: query: insert into table simple_from_mm1 select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@simple_from_mm1
-POSTHOOK: Lineage: simple_from_mm1.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: insert into table simple_from_mm1 select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@simple_from_mm1
-POSTHOOK: query: insert into table simple_from_mm1 select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@simple_from_mm1
-POSTHOOK: Lineage: simple_from_mm1.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from simple_from_mm1 s1 order by key
-PREHOOK: type: QUERY
-PREHOOK: Input: default@simple_from_mm1
-#### A masked pattern was here ####
-POSTHOOK: query: select * from simple_from_mm1 s1 order by key
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@simple_from_mm1
-#### A masked pattern was here ####
-0
-0
-98
-98
-100
-100
-PREHOOK: query: alter table simple_from_mm1 unset tblproperties('transactional_properties', 'transactional')
-PREHOOK: type: ALTERTABLE_PROPERTIES
-PREHOOK: Input: default@simple_from_mm1
-PREHOOK: Output: default@simple_from_mm1
-POSTHOOK: query: alter table simple_from_mm1 unset tblproperties('transactional_properties', 'transactional')
-POSTHOOK: type: ALTERTABLE_PROPERTIES
-POSTHOOK: Input: default@simple_from_mm1
-POSTHOOK: Output: default@simple_from_mm1
-PREHOOK: query: select * from simple_from_mm1 s2 order by key
-PREHOOK: type: QUERY
-PREHOOK: Input: default@simple_from_mm1
-#### A masked pattern was here ####
-POSTHOOK: query: select * from simple_from_mm1 s2 order by key
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@simple_from_mm1
-#### A masked pattern was here ####
-0
-0
-98
-98
-100
-100
-PREHOOK: query: insert into table simple_from_mm1 select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@simple_from_mm1
-POSTHOOK: query: insert into table simple_from_mm1 select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@simple_from_mm1
-POSTHOOK: Lineage: simple_from_mm1.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from simple_from_mm1 s3 order by key
-PREHOOK: type: QUERY
-PREHOOK: Input: default@simple_from_mm1
-#### A masked pattern was here ####
-POSTHOOK: query: select * from simple_from_mm1 s3 order by key
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@simple_from_mm1
-#### A masked pattern was here ####
-0
-0
-0
-98
-98
-98
-100
-100
-100
-PREHOOK: query: drop table simple_from_mm1
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@simple_from_mm1
-PREHOOK: Output: default@simple_from_mm1
-POSTHOOK: query: drop table simple_from_mm1
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@simple_from_mm1
-POSTHOOK: Output: default@simple_from_mm1
-PREHOOK: query: drop table simple_from_mm2
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table simple_from_mm2
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: create table simple_from_mm2(key int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@simple_from_mm2
-POSTHOOK: query: create table simple_from_mm2(key int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@simple_from_mm2
-PREHOOK: query: insert into table simple_from_mm2 select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@simple_from_mm2
-POSTHOOK: query: insert into table simple_from_mm2 select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@simple_from_mm2
-POSTHOOK: Lineage: simple_from_mm2.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: insert into table simple_from_mm2 select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@simple_from_mm2
-POSTHOOK: query: insert into table simple_from_mm2 select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@simple_from_mm2
-POSTHOOK: Lineage: simple_from_mm2.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from simple_from_mm2 s1 order by key
-PREHOOK: type: QUERY
-PREHOOK: Input: default@simple_from_mm2
-#### A masked pattern was here ####
-POSTHOOK: query: select * from simple_from_mm2 s1 order by key
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@simple_from_mm2
-#### A masked pattern was here ####
-0
-0
-98
-98
-100
-100
-PREHOOK: query: alter table simple_from_mm2 set tblproperties("transactional"="false", 'transactional_properties'='false')
-PREHOOK: type: ALTERTABLE_PROPERTIES
-PREHOOK: Input: default@simple_from_mm2
-PREHOOK: Output: default@simple_from_mm2
-POSTHOOK: query: alter table simple_from_mm2 set tblproperties("transactional"="false", 'transactional_properties'='false')
-POSTHOOK: type: ALTERTABLE_PROPERTIES
-POSTHOOK: Input: default@simple_from_mm2
-POSTHOOK: Output: default@simple_from_mm2
-PREHOOK: query: select * from simple_from_mm2 s2 order by key
-PREHOOK: type: QUERY
-PREHOOK: Input: default@simple_from_mm2
-#### A masked pattern was here ####
-POSTHOOK: query: select * from simple_from_mm2 s2 order by key
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@simple_from_mm2
-#### A masked pattern was here ####
-0
-0
-98
-98
-100
-100
-PREHOOK: query: insert into table simple_from_mm2 select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@simple_from_mm2
-POSTHOOK: query: insert into table simple_from_mm2 select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@simple_from_mm2
-POSTHOOK: Lineage: simple_from_mm2.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from simple_from_mm2 s3 order by key
-PREHOOK: type: QUERY
-PREHOOK: Input: default@simple_from_mm2
-#### A masked pattern was here ####
-POSTHOOK: query: select * from simple_from_mm2 s3 order by key
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@simple_from_mm2
-#### A masked pattern was here ####
-0
-0
-0
-98
-98
-98
-100
-100
-100
-PREHOOK: query: drop table simple_from_mm2
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@simple_from_mm2
-PREHOOK: Output: default@simple_from_mm2
-POSTHOOK: query: drop table simple_from_mm2
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@simple_from_mm2
-POSTHOOK: Output: default@simple_from_mm2
PREHOOK: query: drop table simple_to_mm
PREHOOK: type: DROPTABLE
POSTHOOK: query: drop table simple_to_mm
@@ -385,314 +149,6 @@ POSTHOOK: query: drop table simple_to_mm
POSTHOOK: type: DROPTABLE
POSTHOOK: Input: default@simple_to_mm
POSTHOOK: Output: default@simple_to_mm
-PREHOOK: query: drop table part_from_mm1
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table part_from_mm1
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: create table part_from_mm1(key int) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@part_from_mm1
-POSTHOOK: query: create table part_from_mm1(key int) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@part_from_mm1
-PREHOOK: query: insert into table part_from_mm1 partition(key_mm='455') select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@part_from_mm1@key_mm=455
-POSTHOOK: query: insert into table part_from_mm1 partition(key_mm='455') select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@part_from_mm1@key_mm=455
-POSTHOOK: Lineage: part_from_mm1 PARTITION(key_mm=455).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: insert into table part_from_mm1 partition(key_mm='455') select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@part_from_mm1@key_mm=455
-POSTHOOK: query: insert into table part_from_mm1 partition(key_mm='455') select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@part_from_mm1@key_mm=455
-POSTHOOK: Lineage: part_from_mm1 PARTITION(key_mm=455).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: insert into table part_from_mm1 partition(key_mm='456') select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@part_from_mm1@key_mm=456
-POSTHOOK: query: insert into table part_from_mm1 partition(key_mm='456') select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@part_from_mm1@key_mm=456
-POSTHOOK: Lineage: part_from_mm1 PARTITION(key_mm=456).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from part_from_mm1 s1 order by key, key_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@part_from_mm1
-PREHOOK: Input: default@part_from_mm1@key_mm=455
-PREHOOK: Input: default@part_from_mm1@key_mm=456
-#### A masked pattern was here ####
-POSTHOOK: query: select * from part_from_mm1 s1 order by key, key_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@part_from_mm1
-POSTHOOK: Input: default@part_from_mm1@key_mm=455
-POSTHOOK: Input: default@part_from_mm1@key_mm=456
-#### A masked pattern was here ####
-0 455
-0 455
-0 456
-98 455
-98 455
-98 456
-100 455
-100 455
-100 456
-PREHOOK: query: alter table part_from_mm1 unset tblproperties('transactional_properties', 'transactional')
-PREHOOK: type: ALTERTABLE_PROPERTIES
-PREHOOK: Input: default@part_from_mm1
-PREHOOK: Output: default@part_from_mm1
-POSTHOOK: query: alter table part_from_mm1 unset tblproperties('transactional_properties', 'transactional')
-POSTHOOK: type: ALTERTABLE_PROPERTIES
-POSTHOOK: Input: default@part_from_mm1
-POSTHOOK: Output: default@part_from_mm1
-PREHOOK: query: select * from part_from_mm1 s2 order by key, key_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@part_from_mm1
-PREHOOK: Input: default@part_from_mm1@key_mm=455
-PREHOOK: Input: default@part_from_mm1@key_mm=456
-#### A masked pattern was here ####
-POSTHOOK: query: select * from part_from_mm1 s2 order by key, key_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@part_from_mm1
-POSTHOOK: Input: default@part_from_mm1@key_mm=455
-POSTHOOK: Input: default@part_from_mm1@key_mm=456
-#### A masked pattern was here ####
-0 455
-0 455
-0 456
-98 455
-98 455
-98 456
-100 455
-100 455
-100 456
-PREHOOK: query: insert into table part_from_mm1 partition(key_mm='456') select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@part_from_mm1@key_mm=456
-POSTHOOK: query: insert into table part_from_mm1 partition(key_mm='456') select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@part_from_mm1@key_mm=456
-POSTHOOK: Lineage: part_from_mm1 PARTITION(key_mm=456).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: insert into table part_from_mm1 partition(key_mm='457') select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@part_from_mm1@key_mm=457
-POSTHOOK: query: insert into table part_from_mm1 partition(key_mm='457') select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@part_from_mm1@key_mm=457
-POSTHOOK: Lineage: part_from_mm1 PARTITION(key_mm=457).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from part_from_mm1 s3 order by key, key_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@part_from_mm1
-PREHOOK: Input: default@part_from_mm1@key_mm=455
-PREHOOK: Input: default@part_from_mm1@key_mm=456
-PREHOOK: Input: default@part_from_mm1@key_mm=457
-#### A masked pattern was here ####
-POSTHOOK: query: select * from part_from_mm1 s3 order by key, key_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@part_from_mm1
-POSTHOOK: Input: default@part_from_mm1@key_mm=455
-POSTHOOK: Input: default@part_from_mm1@key_mm=456
-POSTHOOK: Input: default@part_from_mm1@key_mm=457
-#### A masked pattern was here ####
-0 455
-0 455
-0 456
-0 456
-0 457
-98 455
-98 455
-98 456
-98 456
-98 457
-100 455
-100 455
-100 456
-100 456
-100 457
-PREHOOK: query: drop table part_from_mm1
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@part_from_mm1
-PREHOOK: Output: default@part_from_mm1
-POSTHOOK: query: drop table part_from_mm1
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@part_from_mm1
-POSTHOOK: Output: default@part_from_mm1
-PREHOOK: query: drop table part_from_mm2
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table part_from_mm2
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: create table part_from_mm2(key int) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@part_from_mm2
-POSTHOOK: query: create table part_from_mm2(key int) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@part_from_mm2
-PREHOOK: query: insert into table part_from_mm2 partition(key_mm='456') select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@part_from_mm2@key_mm=456
-POSTHOOK: query: insert into table part_from_mm2 partition(key_mm='456') select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@part_from_mm2@key_mm=456
-POSTHOOK: Lineage: part_from_mm2 PARTITION(key_mm=456).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: --fails here
-insert into table part_from_mm2 partition(key_mm='455') select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@part_from_mm2@key_mm=455
-POSTHOOK: query: --fails here
-insert into table part_from_mm2 partition(key_mm='455') select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@part_from_mm2@key_mm=455
-POSTHOOK: Lineage: part_from_mm2 PARTITION(key_mm=455).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from part_from_mm2 s1 order by key, key_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@part_from_mm2
-PREHOOK: Input: default@part_from_mm2@key_mm=455
-PREHOOK: Input: default@part_from_mm2@key_mm=456
-#### A masked pattern was here ####
-POSTHOOK: query: select * from part_from_mm2 s1 order by key, key_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@part_from_mm2
-POSTHOOK: Input: default@part_from_mm2@key_mm=455
-POSTHOOK: Input: default@part_from_mm2@key_mm=456
-#### A masked pattern was here ####
-0 455
-0 456
-98 455
-98 456
-100 455
-100 456
-PREHOOK: query: alter table part_from_mm2 set tblproperties("transactional"="false", 'transactional_properties'='false')
-PREHOOK: type: ALTERTABLE_PROPERTIES
-PREHOOK: Input: default@part_from_mm2
-PREHOOK: Output: default@part_from_mm2
-POSTHOOK: query: alter table part_from_mm2 set tblproperties("transactional"="false", 'transactional_properties'='false')
-POSTHOOK: type: ALTERTABLE_PROPERTIES
-POSTHOOK: Input: default@part_from_mm2
-POSTHOOK: Output: default@part_from_mm2
-PREHOOK: query: select * from part_from_mm2 s2 order by key, key_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@part_from_mm2
-PREHOOK: Input: default@part_from_mm2@key_mm=455
-PREHOOK: Input: default@part_from_mm2@key_mm=456
-#### A masked pattern was here ####
-POSTHOOK: query: select * from part_from_mm2 s2 order by key, key_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@part_from_mm2
-POSTHOOK: Input: default@part_from_mm2@key_mm=455
-POSTHOOK: Input: default@part_from_mm2@key_mm=456
-#### A masked pattern was here ####
-0 455
-0 456
-98 455
-98 456
-100 455
-100 456
-PREHOOK: query: insert into table part_from_mm2 partition(key_mm='457') select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@part_from_mm2@key_mm=457
-POSTHOOK: query: insert into table part_from_mm2 partition(key_mm='457') select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@part_from_mm2@key_mm=457
-POSTHOOK: Lineage: part_from_mm2 PARTITION(key_mm=457).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from part_from_mm2 s3 order by key, key_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@part_from_mm2
-PREHOOK: Input: default@part_from_mm2@key_mm=455
-PREHOOK: Input: default@part_from_mm2@key_mm=456
-PREHOOK: Input: default@part_from_mm2@key_mm=457
-#### A masked pattern was here ####
-POSTHOOK: query: select * from part_from_mm2 s3 order by key, key_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@part_from_mm2
-POSTHOOK: Input: default@part_from_mm2@key_mm=455
-POSTHOOK: Input: default@part_from_mm2@key_mm=456
-POSTHOOK: Input: default@part_from_mm2@key_mm=457
-#### A masked pattern was here ####
-0 455
-0 456
-0 457
-98 455
-98 456
-98 457
-100 455
-100 456
-100 457
-PREHOOK: query: drop table part_from_mm2
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@part_from_mm2
-PREHOOK: Output: default@part_from_mm2
-POSTHOOK: query: drop table part_from_mm2
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@part_from_mm2
-POSTHOOK: Output: default@part_from_mm2
PREHOOK: query: drop table part_to_mm
PREHOOK: type: DROPTABLE
POSTHOOK: query: drop table part_to_mm
[05/50] [abbrv] hive git commit: HIVE-16963 : rely on
AcidUtils.getAcidState() for read path (Wei Zheng)
Posted by se...@apache.org.
HIVE-16963 : rely on AcidUtils.getAcidState() for read path (Wei Zheng)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/81853c12
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/81853c12
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/81853c12
Branch: refs/heads/master
Commit: 81853c12e3ad2ec3f00c4631bbfeadf1c89ae4e4
Parents: 8f36545
Author: Wei Zheng <we...@apache.org>
Authored: Mon Jun 26 10:25:34 2017 -0700
Committer: Wei Zheng <we...@apache.org>
Committed: Mon Jun 26 10:25:34 2017 -0700
----------------------------------------------------------------------
.../hadoop/hive/ql/exec/FileSinkOperator.java | 3 ++
.../hadoop/hive/ql/io/HiveInputFormat.java | 54 ++++++++++----------
.../hive/ql/parse/ImportSemanticAnalyzer.java | 31 +++++------
.../hadoop/hive/ql/plan/FileSinkDesc.java | 7 ++-
4 files changed, 48 insertions(+), 47 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/81853c12/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java
index 004aaf7..7e1b8fa 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java
@@ -730,6 +730,9 @@ public class FileSinkOperator extends TerminalOperator<FileSinkDesc> implements
Utilities.copyTableJobPropertiesToConf(conf.getTableInfo(), jc);
// only create bucket files only if no dynamic partitions,
// buckets of dynamic partitions will be created for each newly created partition
+ //todo IOW integration. Full Acid uses the else if block to create Acid's RecordUpdater (HiveFileFormatUtils)
+ // and that will set writingBase(conf.getInsertOverwrite())
+ // If MM wants to create a new base for IOW (instead of delta dir), it should specify it here
if (conf.getWriteType() == AcidUtils.Operation.NOT_ACID || conf.isMmTable()) {
Path outPath = fsp.outPaths[filesIdx];
if (conf.isMmTable()
http://git-wip-us.apache.org/repos/asf/hive/blob/81853c12/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java b/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java
index 71d01ed..61e0d9b 100755
--- a/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java
@@ -39,6 +39,7 @@ import org.apache.hadoop.hive.common.ValidReadTxnList;
import org.apache.hadoop.hive.common.ValidTxnList;
import org.apache.hadoop.hive.metastore.MetaStoreUtils;
import org.apache.hadoop.hive.ql.exec.SerializationUtilities;
+import org.apache.hive.common.util.Ref;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.hadoop.conf.Configurable;
@@ -497,40 +498,37 @@ public class HiveInputFormat<K extends WritableComparable, V extends Writable>
finalPaths.add(dir);
return;
}
- FileStatus[] files = fs.listStatus(dir); // TODO: batch?
+
+ // Tez require the use of recursive input dirs for union processing, so we have to look into the
+ // directory to find out
LinkedList<Path> subdirs = new LinkedList<>();
- for (FileStatus file : files) {
- handleNonMmDirChild(file, validTxnList, subdirs, finalPaths);
- }
+ subdirs.add(dir); // add itself as a starting point
while (!subdirs.isEmpty()) {
- Path subdir = subdirs.poll();
- for (FileStatus file : fs.listStatus(subdir)) {
- handleNonMmDirChild(file, validTxnList, subdirs, finalPaths);
+ Path currDir = subdirs.poll();
+ FileStatus[] files = fs.listStatus(currDir);
+ boolean hadAcidState = false; // whether getAcidState has been called for currDir
+ for (FileStatus file : files) {
+ Path path = file.getPath();
+ Utilities.LOG14535.warn("Checking " + path + " for inputs");
+ if (!file.isDirectory()) {
+ Utilities.LOG14535.warn("Ignoring a file not in MM directory " + path);
+ } else if (JavaUtils.extractTxnId(path) == null) {
+ subdirs.add(path);
+ } else {
+ if (!hadAcidState) {
+ AcidUtils.Directory dirInfo = AcidUtils.getAcidState(currDir, conf, validTxnList, Ref.from(false), true, null);
+ hadAcidState = true;
+ // todo for IOW, we also need to count in base dir, if any
+ for (AcidUtils.ParsedDelta delta : dirInfo.getCurrentDirectories()) {
+ Utilities.LOG14535.info("Adding input " + delta.getPath());
+ finalPaths.add(delta.getPath());
+ }
+ }
+ }
}
}
}
- private static void handleNonMmDirChild(FileStatus file, ValidTxnList validTxnList,
- LinkedList<Path> subdirs, List<Path> finalPaths) {
- Path path = file.getPath();
- Utilities.LOG14535.warn("Checking " + path + " for inputs");
- if (!file.isDirectory()) {
- Utilities.LOG14535.warn("Ignoring a file not in MM directory " + path);
- return;
- }
- Long txnId = JavaUtils.extractTxnId(path);
- if (txnId == null) {
- subdirs.add(path);
- return;
- }
- if (!validTxnList.isTxnValid(txnId)) {
- Utilities.LOG14535.warn("Ignoring an uncommitted directory " + path);
- return;
- }
- Utilities.LOG14535.info("Adding input " + path);
- finalPaths.add(path);
- }
-
Path[] getInputPaths(JobConf job) throws IOException {
Path[] dirs;
if (HiveConf.getVar(job, HiveConf.ConfVars.HIVE_EXECUTION_ENGINE).equals("spark")) {
http://git-wip-us.apache.org/repos/asf/hive/blob/81853c12/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
index ae52d15..5ac15af 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
@@ -302,15 +302,8 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
tableExists = true;
}
- Long txnId = null;
+ Long txnId = SessionState.get().getTxnMgr().getCurrentTxnId();
int stmtId = 0;
- if (table != null && MetaStoreUtils.isInsertOnlyTable(table.getParameters())) {
- txnId = SessionState.get().getTxnMgr().getCurrentTxnId();
- } else if (table == null && isSourceMm) {
- // We could import everything as is - directories and IDs, but that won't work with ACID
- // txn ids in future. So, let's import everything into the new MM directory with ID == 0.
- txnId = 0l;
- }
//todo due to the master merge, tblDesc is no longer CreateTableDesc, but ImportTableDesc
/*
if (txnId != null) {
@@ -363,7 +356,7 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
ReplicationSpec replicationSpec, EximUtil.SemanticAnalyzerWrapperContext x,
Long txnId, int stmtId, boolean isSourceMm) {
Path dataPath = new Path(fromURI.toString(), EximUtil.DATA_PATH_NAME);
- Path destPath = txnId == null ? x.getCtx().getExternalTmpPath(tgtPath)
+ Path destPath = !MetaStoreUtils.isInsertOnlyTable(table.getParameters()) ? x.getCtx().getExternalTmpPath(tgtPath)
: new Path(tgtPath, AcidUtils.deltaSubdir(txnId, txnId, stmtId));
Utilities.LOG14535.info("adding import work for table with source location: "
+ dataPath + "; table: " + tgtPath + "; copy destination " + destPath + "; mm "
@@ -453,9 +446,9 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
+ partSpecToString(partSpec.getPartSpec())
+ " with source location: " + srcLocation);
Path tgtLocation = new Path(partSpec.getLocation());
- Path destPath = txnId == null ? x.getCtx().getExternalTmpPath(tgtLocation)
+ Path destPath = !MetaStoreUtils.isInsertOnlyTable(table.getParameters()) ? x.getCtx().getExternalTmpPath(tgtLocation)
: new Path(tgtLocation, AcidUtils.deltaSubdir(txnId, txnId, stmtId));
- Path moveTaskSrc = txnId == null ? destPath : tgtLocation;
+ Path moveTaskSrc = !MetaStoreUtils.isInsertOnlyTable(table.getParameters()) ? destPath : tgtLocation;
Utilities.LOG14535.info("adding import work for partition with source location: "
+ srcLocation + "; target: " + tgtLocation + "; copy dest " + destPath + "; mm "
+ txnId + " (src " + isSourceMm + ") for " + partSpecToString(partSpec.getPartSpec()));
@@ -788,7 +781,8 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
if (table.isPartitioned()) {
x.getLOG().debug("table partitioned");
Task<?> ict = createImportCommitTask(
- table.getDbName(), table.getTableName(), txnId, stmtId, x.getConf());
+ table.getDbName(), table.getTableName(), txnId, stmtId, x.getConf(),
+ MetaStoreUtils.isInsertOnlyTable(table.getParameters()));
for (AddPartitionDesc addPartitionDesc : partitionDescs) {
Map<String, String> partSpec = addPartitionDesc.getPartition(0).getPartSpec();
@@ -824,7 +818,8 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
if (isPartitioned(tblDesc)) {
Task<?> ict = createImportCommitTask(
- tblDesc.getDatabaseName(), tblDesc.getTableName(), txnId, stmtId, x.getConf());
+ tblDesc.getDatabaseName(), tblDesc.getTableName(), txnId, stmtId, x.getConf(),
+ MetaStoreUtils.isInsertOnlyTable(tblDesc.getTblProps()));
for (AddPartitionDesc addPartitionDesc : partitionDescs) {
t.addDependentTask(addSinglePartition(fromURI, fs, tblDesc, table, wh, addPartitionDesc,
replicationSpec, x, txnId, stmtId, isSourceMm, ict));
@@ -858,9 +853,9 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
}
private static Task<?> createImportCommitTask(
- String dbName, String tblName, Long txnId, int stmtId, HiveConf conf) {
+ String dbName, String tblName, Long txnId, int stmtId, HiveConf conf, boolean isMmTable) {
@SuppressWarnings("unchecked")
- Task<ImportCommitWork> ict = (txnId == null) ? null : TaskFactory.get(
+ Task<ImportCommitWork> ict = (!isMmTable) ? null : TaskFactory.get(
new ImportCommitWork(dbName, tblName, txnId, stmtId), conf);
return ict;
}
@@ -942,7 +937,8 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
if (!replicationSpec.isMetadataOnly()) {
if (isPartitioned(tblDesc)) {
Task<?> ict = createImportCommitTask(
- tblDesc.getDatabaseName(), tblDesc.getTableName(), txnId, stmtId, x.getConf());
+ tblDesc.getDatabaseName(), tblDesc.getTableName(), txnId, stmtId, x.getConf(),
+ MetaStoreUtils.isInsertOnlyTable(tblDesc.getTblProps()));
for (AddPartitionDesc addPartitionDesc : partitionDescs) {
addPartitionDesc.setReplicationSpec(replicationSpec);
t.addDependentTask(
@@ -970,7 +966,8 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
Map<String, String> partSpec = addPartitionDesc.getPartition(0).getPartSpec();
org.apache.hadoop.hive.ql.metadata.Partition ptn = null;
Task<?> ict = replicationSpec.isMetadataOnly() ? null : createImportCommitTask(
- tblDesc.getDatabaseName(), tblDesc.getTableName(), txnId, stmtId, x.getConf());
+ tblDesc.getDatabaseName(), tblDesc.getTableName(), txnId, stmtId, x.getConf(),
+ MetaStoreUtils.isInsertOnlyTable(tblDesc.getTblProps()));
if ((ptn = x.getHive().getPartition(table, partSpec, false)) == null) {
if (!replicationSpec.isMetadataOnly()){
x.getTasks().add(addSinglePartition(
http://git-wip-us.apache.org/repos/asf/hive/blob/81853c12/ql/src/java/org/apache/hadoop/hive/ql/plan/FileSinkDesc.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/FileSinkDesc.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/FileSinkDesc.java
index a26047d..955e0e5 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/FileSinkDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/FileSinkDesc.java
@@ -202,8 +202,11 @@ public class FileSinkDesc extends AbstractOperatorDesc {
/** getFinalDirName that takes into account MM, but not DP, LB or buckets. */
public Path getMergeInputDirName() {
Path root = getFinalDirName();
- if (mmWriteId == null) return root;
- return new Path(root, AcidUtils.deltaSubdir(txnId, txnId, 0));
+ if (isMmTable()) {
+ return new Path(root, AcidUtils.deltaSubdir(txnId, txnId, 0));
+ } else {
+ return root;
+ }
}
@Explain(displayName = "table", explainLevels = { Level.USER, Level.DEFAULT, Level.EXTENDED })
[06/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Wei Zheng)
Posted by se...@apache.org.
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/standalone-metastore/src/main/thrift/hive_metastore.thrift
----------------------------------------------------------------------
diff --cc standalone-metastore/src/main/thrift/hive_metastore.thrift
index 0000000,7268d53..322e0ec
mode 000000,100644..100644
--- a/standalone-metastore/src/main/thrift/hive_metastore.thrift
+++ b/standalone-metastore/src/main/thrift/hive_metastore.thrift
@@@ -1,0 -1,1612 +1,1613 @@@
+ #!/usr/local/bin/thrift -java
+
+ /**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ #
+ # Thrift Service that the MetaStore is built on
+ #
+
+ include "share/fb303/if/fb303.thrift"
+
+ namespace java org.apache.hadoop.hive.metastore.api
+ namespace php metastore
+ namespace cpp Apache.Hadoop.Hive
+
+ const string DDL_TIME = "transient_lastDdlTime"
+
+ struct Version {
+ 1: string version,
+ 2: string comments
+ }
+
+ struct FieldSchema {
+ 1: string name, // name of the field
+ 2: string type, // type of the field. primitive types defined above, specify list<TYPE_NAME>, map<TYPE_NAME, TYPE_NAME> for lists & maps
+ 3: string comment
+ }
+
+ struct SQLPrimaryKey {
+ 1: string table_db, // table schema
+ 2: string table_name, // table name
+ 3: string column_name, // column name
+ 4: i32 key_seq, // sequence number within primary key
+ 5: string pk_name, // primary key name
+ 6: bool enable_cstr, // Enable/Disable
+ 7: bool validate_cstr, // Validate/No validate
+ 8: bool rely_cstr // Rely/No Rely
+ }
+
+ struct SQLForeignKey {
+ 1: string pktable_db, // primary key table schema
+ 2: string pktable_name, // primary key table name
+ 3: string pkcolumn_name, // primary key column name
+ 4: string fktable_db, // foreign key table schema
+ 5: string fktable_name, // foreign key table name
+ 6: string fkcolumn_name, // foreign key column name
+ 7: i32 key_seq, // sequence within foreign key
+ 8: i32 update_rule, // what happens to foreign key when parent key is updated
+ 9: i32 delete_rule, // what happens to foreign key when parent key is deleted
+ 10: string fk_name, // foreign key name
+ 11: string pk_name, // primary key name
+ 12: bool enable_cstr, // Enable/Disable
+ 13: bool validate_cstr, // Validate/No validate
+ 14: bool rely_cstr // Rely/No Rely
+ }
+
+ struct SQLUniqueConstraint {
+ 1: string table_db, // table schema
+ 2: string table_name, // table name
+ 3: string column_name, // column name
+ 4: i32 key_seq, // sequence number within unique constraint
+ 5: string uk_name, // unique key name
+ 6: bool enable_cstr, // Enable/Disable
+ 7: bool validate_cstr, // Validate/No validate
+ 8: bool rely_cstr // Rely/No Rely
+ }
+
+ struct SQLNotNullConstraint {
+ 1: string table_db, // table schema
+ 2: string table_name, // table name
+ 3: string column_name, // column name
+ 4: string nn_name, // not null name
+ 5: bool enable_cstr, // Enable/Disable
+ 6: bool validate_cstr, // Validate/No validate
+ 7: bool rely_cstr // Rely/No Rely
+ }
+
+ struct Type {
+ 1: string name, // one of the types in PrimitiveTypes or CollectionTypes or User defined types
+ 2: optional string type1, // object type if the name is 'list' (LIST_TYPE), key type if the name is 'map' (MAP_TYPE)
+ 3: optional string type2, // val type if the name is 'map' (MAP_TYPE)
+ 4: optional list<FieldSchema> fields // if the name is one of the user defined types
+ }
+
+ enum HiveObjectType {
+ GLOBAL = 1,
+ DATABASE = 2,
+ TABLE = 3,
+ PARTITION = 4,
+ COLUMN = 5,
+ }
+
+ enum PrincipalType {
+ USER = 1,
+ ROLE = 2,
+ GROUP = 3,
+ }
+
+ const string HIVE_FILTER_FIELD_OWNER = "hive_filter_field_owner__"
+ const string HIVE_FILTER_FIELD_PARAMS = "hive_filter_field_params__"
+ const string HIVE_FILTER_FIELD_LAST_ACCESS = "hive_filter_field_last_access__"
+
+ enum PartitionEventType {
+ LOAD_DONE = 1,
+ }
+
+ // Enums for transaction and lock management
+ enum TxnState {
+ COMMITTED = 1,
+ ABORTED = 2,
+ OPEN = 3,
+ }
+
+ enum LockLevel {
+ DB = 1,
+ TABLE = 2,
+ PARTITION = 3,
+ }
+
+ enum LockState {
+ ACQUIRED = 1, // requester has the lock
+ WAITING = 2, // requester is waiting for the lock and should call checklock at a later point to see if the lock has been obtained.
+ ABORT = 3, // the lock has been aborted, most likely due to timeout
+ NOT_ACQUIRED = 4, // returned only with lockNoWait, indicates the lock was not available and was not acquired
+ }
+
+ enum LockType {
+ SHARED_READ = 1,
+ SHARED_WRITE = 2,
+ EXCLUSIVE = 3,
+ }
+
+ enum CompactionType {
+ MINOR = 1,
+ MAJOR = 2,
+ }
+
+ enum GrantRevokeType {
+ GRANT = 1,
+ REVOKE = 2,
+ }
+
+ enum DataOperationType {
+ SELECT = 1,
+ INSERT = 2
+ UPDATE = 3,
+ DELETE = 4,
+ UNSET = 5,//this is the default to distinguish from NULL from old clients
+ NO_TXN = 6,//drop table, insert overwrite, etc - something non-transactional
+ }
+
+ // Types of events the client can request that the metastore fire. For now just support DML operations, as the metastore knows
+ // about DDL operations and there's no reason for the client to request such an event.
+ enum EventRequestType {
+ INSERT = 1,
+ UPDATE = 2,
+ DELETE = 3,
+ }
+
+ struct HiveObjectRef{
+ 1: HiveObjectType objectType,
+ 2: string dbName,
+ 3: string objectName,
+ 4: list<string> partValues,
+ 5: string columnName,
+ }
+
+ struct PrivilegeGrantInfo {
+ 1: string privilege,
+ 2: i32 createTime,
+ 3: string grantor,
+ 4: PrincipalType grantorType,
+ 5: bool grantOption,
+ }
+
+ struct HiveObjectPrivilege {
+ 1: HiveObjectRef hiveObject,
+ 2: string principalName,
+ 3: PrincipalType principalType,
+ 4: PrivilegeGrantInfo grantInfo,
+ }
+
+ struct PrivilegeBag {
+ 1: list<HiveObjectPrivilege> privileges,
+ }
+
+ struct PrincipalPrivilegeSet {
+ 1: map<string, list<PrivilegeGrantInfo>> userPrivileges, // user name -> privilege grant info
+ 2: map<string, list<PrivilegeGrantInfo>> groupPrivileges, // group name -> privilege grant info
+ 3: map<string, list<PrivilegeGrantInfo>> rolePrivileges, //role name -> privilege grant info
+ }
+
+ struct GrantRevokePrivilegeRequest {
+ 1: GrantRevokeType requestType;
+ 2: PrivilegeBag privileges;
+ 3: optional bool revokeGrantOption; // Only for revoke request
+ }
+
+ struct GrantRevokePrivilegeResponse {
+ 1: optional bool success;
+ }
+
+ struct Role {
+ 1: string roleName,
+ 2: i32 createTime,
+ 3: string ownerName,
+ }
+
+ // Representation of a grant for a principal to a role
+ struct RolePrincipalGrant {
+ 1: string roleName,
+ 2: string principalName,
+ 3: PrincipalType principalType,
+ 4: bool grantOption,
+ 5: i32 grantTime,
+ 6: string grantorName,
+ 7: PrincipalType grantorPrincipalType
+ }
+
+ struct GetRoleGrantsForPrincipalRequest {
+ 1: required string principal_name,
+ 2: required PrincipalType principal_type
+ }
+
+ struct GetRoleGrantsForPrincipalResponse {
+ 1: required list<RolePrincipalGrant> principalGrants;
+ }
+
+ struct GetPrincipalsInRoleRequest {
+ 1: required string roleName;
+ }
+
+ struct GetPrincipalsInRoleResponse {
+ 1: required list<RolePrincipalGrant> principalGrants;
+ }
+
+ struct GrantRevokeRoleRequest {
+ 1: GrantRevokeType requestType;
+ 2: string roleName;
+ 3: string principalName;
+ 4: PrincipalType principalType;
+ 5: optional string grantor; // Needed for grant
+ 6: optional PrincipalType grantorType; // Needed for grant
+ 7: optional bool grantOption;
+ }
+
+ struct GrantRevokeRoleResponse {
+ 1: optional bool success;
+ }
+
+ // namespace for tables
+ struct Database {
+ 1: string name,
+ 2: string description,
+ 3: string locationUri,
+ 4: map<string, string> parameters, // properties associated with the database
+ 5: optional PrincipalPrivilegeSet privileges,
+ 6: optional string ownerName,
+ 7: optional PrincipalType ownerType
+ }
+
+ // This object holds the information needed by SerDes
+ struct SerDeInfo {
+ 1: string name, // name of the serde, table name by default
+ 2: string serializationLib, // usually the class that implements the extractor & loader
+ 3: map<string, string> parameters // initialization parameters
+ }
+
+ // sort order of a column (column name along with asc(1)/desc(0))
+ struct Order {
+ 1: string col, // sort column name
+ 2: i32 order // asc(1) or desc(0)
+ }
+
+ // this object holds all the information about skewed table
+ struct SkewedInfo {
+ 1: list<string> skewedColNames, // skewed column names
+ 2: list<list<string>> skewedColValues, //skewed values
+ 3: map<list<string>, string> skewedColValueLocationMaps, //skewed value to location mappings
+ }
+
+ // this object holds all the information about physical storage of the data belonging to a table
+ struct StorageDescriptor {
+ 1: list<FieldSchema> cols, // required (refer to types defined above)
+ 2: string location, // defaults to <warehouse loc>/<db loc>/tablename
+ 3: string inputFormat, // SequenceFileInputFormat (binary) or TextInputFormat` or custom format
+ 4: string outputFormat, // SequenceFileOutputFormat (binary) or IgnoreKeyTextOutputFormat or custom format
+ 5: bool compressed, // compressed or not
+ 6: i32 numBuckets, // this must be specified if there are any dimension columns
+ 7: SerDeInfo serdeInfo, // serialization and deserialization information
+ 8: list<string> bucketCols, // reducer grouping columns and clustering columns and bucketing columns`
+ 9: list<Order> sortCols, // sort order of the data in each bucket
+ 10: map<string, string> parameters, // any user supplied key value hash
+ 11: optional SkewedInfo skewedInfo, // skewed information
+ 12: optional bool storedAsSubDirectories // stored as subdirectories or not
+ }
+
+ // table information
+ struct Table {
+ 1: string tableName, // name of the table
+ 2: string dbName, // database name ('default')
+ 3: string owner, // owner of this table
+ 4: i32 createTime, // creation time of the table
+ 5: i32 lastAccessTime, // last access time (usually this will be filled from HDFS and shouldn't be relied on)
+ 6: i32 retention, // retention time
+ 7: StorageDescriptor sd, // storage descriptor of the table
+ 8: list<FieldSchema> partitionKeys, // partition keys of the table. only primitive types are supported
+ 9: map<string, string> parameters, // to store comments or any other user level parameters
+ 10: string viewOriginalText, // original view text, null for non-view
+ 11: string viewExpandedText, // expanded view text, null for non-view
+ 12: string tableType, // table type enum, e.g. EXTERNAL_TABLE
+ 13: optional PrincipalPrivilegeSet privileges,
+ 14: optional bool temporary=false,
- 15: optional bool rewriteEnabled // rewrite enabled or not
++ 15: optional bool rewriteEnabled, // rewrite enabled or not
+ }
+
+ struct Partition {
+ 1: list<string> values // string value is converted to appropriate partition key type
+ 2: string dbName,
+ 3: string tableName,
+ 4: i32 createTime,
+ 5: i32 lastAccessTime,
+ 6: StorageDescriptor sd,
+ 7: map<string, string> parameters,
+ 8: optional PrincipalPrivilegeSet privileges
+ }
+
+ struct PartitionWithoutSD {
+ 1: list<string> values // string value is converted to appropriate partition key type
+ 2: i32 createTime,
+ 3: i32 lastAccessTime,
+ 4: string relativePath,
+ 5: map<string, string> parameters,
+ 6: optional PrincipalPrivilegeSet privileges
+ }
+
+ struct PartitionSpecWithSharedSD {
+ 1: list<PartitionWithoutSD> partitions,
+ 2: StorageDescriptor sd,
+ }
+
+ struct PartitionListComposingSpec {
+ 1: list<Partition> partitions
+ }
+
+ struct PartitionSpec {
+ 1: string dbName,
+ 2: string tableName,
+ 3: string rootPath,
+ 4: optional PartitionSpecWithSharedSD sharedSDPartitionSpec,
+ 5: optional PartitionListComposingSpec partitionList
+ }
+
+ struct Index {
+ 1: string indexName, // unique with in the whole database namespace
+ 2: string indexHandlerClass, // reserved
+ 3: string dbName,
+ 4: string origTableName,
+ 5: i32 createTime,
+ 6: i32 lastAccessTime,
+ 7: string indexTableName,
+ 8: StorageDescriptor sd,
+ 9: map<string, string> parameters,
+ 10: bool deferredRebuild
+ }
+
+ // column statistics
+ struct BooleanColumnStatsData {
+ 1: required i64 numTrues,
+ 2: required i64 numFalses,
+ 3: required i64 numNulls,
+ 4: optional binary bitVectors
+ }
+
+ struct DoubleColumnStatsData {
+ 1: optional double lowValue,
+ 2: optional double highValue,
+ 3: required i64 numNulls,
+ 4: required i64 numDVs,
+ 5: optional binary bitVectors
+ }
+
+ struct LongColumnStatsData {
+ 1: optional i64 lowValue,
+ 2: optional i64 highValue,
+ 3: required i64 numNulls,
+ 4: required i64 numDVs,
+ 5: optional binary bitVectors
+ }
+
+ struct StringColumnStatsData {
+ 1: required i64 maxColLen,
+ 2: required double avgColLen,
+ 3: required i64 numNulls,
+ 4: required i64 numDVs,
+ 5: optional binary bitVectors
+ }
+
+ struct BinaryColumnStatsData {
+ 1: required i64 maxColLen,
+ 2: required double avgColLen,
+ 3: required i64 numNulls,
+ 4: optional binary bitVectors
+ }
+
+
+ struct Decimal {
+ 1: required binary unscaled,
+ 3: required i16 scale
+ }
+
+ struct DecimalColumnStatsData {
+ 1: optional Decimal lowValue,
+ 2: optional Decimal highValue,
+ 3: required i64 numNulls,
+ 4: required i64 numDVs,
+ 5: optional binary bitVectors
+ }
+
+ struct Date {
+ 1: required i64 daysSinceEpoch
+ }
+
+ struct DateColumnStatsData {
+ 1: optional Date lowValue,
+ 2: optional Date highValue,
+ 3: required i64 numNulls,
+ 4: required i64 numDVs,
+ 5: optional binary bitVectors
+ }
+
+ union ColumnStatisticsData {
+ 1: BooleanColumnStatsData booleanStats,
+ 2: LongColumnStatsData longStats,
+ 3: DoubleColumnStatsData doubleStats,
+ 4: StringColumnStatsData stringStats,
+ 5: BinaryColumnStatsData binaryStats,
+ 6: DecimalColumnStatsData decimalStats,
+ 7: DateColumnStatsData dateStats
+ }
+
+ struct ColumnStatisticsObj {
+ 1: required string colName,
+ 2: required string colType,
+ 3: required ColumnStatisticsData statsData
+ }
+
+ struct ColumnStatisticsDesc {
+ 1: required bool isTblLevel,
+ 2: required string dbName,
+ 3: required string tableName,
+ 4: optional string partName,
+ 5: optional i64 lastAnalyzed
+ }
+
+ struct ColumnStatistics {
+ 1: required ColumnStatisticsDesc statsDesc,
+ 2: required list<ColumnStatisticsObj> statsObj;
+ }
+
+ struct AggrStats {
+ 1: required list<ColumnStatisticsObj> colStats,
+ 2: required i64 partsFound // number of partitions for which stats were found
+ }
+
+ struct SetPartitionsStatsRequest {
+ 1: required list<ColumnStatistics> colStats,
+ 2: optional bool needMerge //stats need to be merged with the existing stats
+ }
+
+ // schema of the table/query results etc.
+ struct Schema {
+ // column names, types, comments
+ 1: list<FieldSchema> fieldSchemas, // delimiters etc
+ 2: map<string, string> properties
+ }
+
+ // Key-value store to be used with selected
+ // Metastore APIs (create, alter methods).
+ // The client can pass environment properties / configs that can be
+ // accessed in hooks.
+ struct EnvironmentContext {
+ 1: map<string, string> properties
+ }
+
+ struct PrimaryKeysRequest {
+ 1: required string db_name,
+ 2: required string tbl_name
+ }
+
+ struct PrimaryKeysResponse {
+ 1: required list<SQLPrimaryKey> primaryKeys
+ }
+
+ struct ForeignKeysRequest {
+ 1: string parent_db_name,
+ 2: string parent_tbl_name,
+ 3: string foreign_db_name,
+ 4: string foreign_tbl_name
+ }
+
+ struct ForeignKeysResponse {
+ 1: required list<SQLForeignKey> foreignKeys
+ }
+
+ struct UniqueConstraintsRequest {
+ 1: required string db_name,
+ 2: required string tbl_name
+ }
+
+ struct UniqueConstraintsResponse {
+ 1: required list<SQLUniqueConstraint> uniqueConstraints
+ }
+
+ struct NotNullConstraintsRequest {
+ 1: required string db_name,
+ 2: required string tbl_name
+ }
+
+ struct NotNullConstraintsResponse {
+ 1: required list<SQLNotNullConstraint> notNullConstraints
+ }
+
+ struct DropConstraintRequest {
+ 1: required string dbname,
+ 2: required string tablename,
+ 3: required string constraintname
+ }
+
+ struct AddPrimaryKeyRequest {
+ 1: required list<SQLPrimaryKey> primaryKeyCols
+ }
+
+ struct AddForeignKeyRequest {
+ 1: required list<SQLForeignKey> foreignKeyCols
+ }
+
+ struct AddUniqueConstraintRequest {
+ 1: required list<SQLUniqueConstraint> uniqueConstraintCols
+ }
+
+ struct AddNotNullConstraintRequest {
+ 1: required list<SQLNotNullConstraint> notNullConstraintCols
+ }
+
+ // Return type for get_partitions_by_expr
+ struct PartitionsByExprResult {
+ 1: required list<Partition> partitions,
+ // Whether the results has any (currently, all) partitions which may or may not match
+ 2: required bool hasUnknownPartitions
+ }
+
+ struct PartitionsByExprRequest {
+ 1: required string dbName,
+ 2: required string tblName,
+ 3: required binary expr,
+ 4: optional string defaultPartitionName,
+ 5: optional i16 maxParts=-1
+ }
+
+ struct TableStatsResult {
+ 1: required list<ColumnStatisticsObj> tableStats
+ }
+
+ struct PartitionsStatsResult {
+ 1: required map<string, list<ColumnStatisticsObj>> partStats
+ }
+
+ struct TableStatsRequest {
+ 1: required string dbName,
+ 2: required string tblName,
+ 3: required list<string> colNames
+ }
+
+ struct PartitionsStatsRequest {
+ 1: required string dbName,
+ 2: required string tblName,
+ 3: required list<string> colNames,
+ 4: required list<string> partNames
+ }
+
+ // Return type for add_partitions_req
+ struct AddPartitionsResult {
+ 1: optional list<Partition> partitions,
+ }
+
+ // Request type for add_partitions_req
+ struct AddPartitionsRequest {
+ 1: required string dbName,
+ 2: required string tblName,
+ 3: required list<Partition> parts,
+ 4: required bool ifNotExists,
+ 5: optional bool needResult=true
+ }
+
+ // Return type for drop_partitions_req
+ struct DropPartitionsResult {
+ 1: optional list<Partition> partitions,
+ }
+
+ struct DropPartitionsExpr {
+ 1: required binary expr;
+ 2: optional i32 partArchiveLevel;
+ }
+
+ union RequestPartsSpec {
+ 1: list<string> names;
+ 2: list<DropPartitionsExpr> exprs;
+ }
+
+ // Request type for drop_partitions_req
+ // TODO: we might want to add "bestEffort" flag; where a subset can fail
+ struct DropPartitionsRequest {
+ 1: required string dbName,
+ 2: required string tblName,
+ 3: required RequestPartsSpec parts,
+ 4: optional bool deleteData,
+ 5: optional bool ifExists=true, // currently verified on client
+ 6: optional bool ignoreProtection,
+ 7: optional EnvironmentContext environmentContext,
+ 8: optional bool needResult=true
+ }
+
+ enum FunctionType {
+ JAVA = 1,
+ }
+
+ enum ResourceType {
+ JAR = 1,
+ FILE = 2,
+ ARCHIVE = 3,
+ }
+
+ struct ResourceUri {
+ 1: ResourceType resourceType,
+ 2: string uri,
+ }
+
+ // User-defined function
+ struct Function {
+ 1: string functionName,
+ 2: string dbName,
+ 3: string className,
+ 4: string ownerName,
+ 5: PrincipalType ownerType,
+ 6: i32 createTime,
+ 7: FunctionType functionType,
+ 8: list<ResourceUri> resourceUris,
+ }
+
+ // Structs for transaction and locks
+ struct TxnInfo {
+ 1: required i64 id,
+ 2: required TxnState state,
+ 3: required string user, // used in 'show transactions' to help admins find who has open transactions
+ 4: required string hostname, // used in 'show transactions' to help admins find who has open transactions
+ 5: optional string agentInfo = "Unknown",
+ 6: optional i32 heartbeatCount=0,
+ 7: optional string metaInfo,
+ 8: optional i64 startedTime,
+ 9: optional i64 lastHeartbeatTime,
+ }
+
+ struct GetOpenTxnsInfoResponse {
+ 1: required i64 txn_high_water_mark,
+ 2: required list<TxnInfo> open_txns,
+ }
+
+ struct GetOpenTxnsResponse {
+ 1: required i64 txn_high_water_mark,
+ 2: required list<i64> open_txns, // set<i64> changed to list<i64> since 3.0
+ 3: optional i64 min_open_txn, //since 1.3,2.2
+ 4: required binary abortedBits, // since 3.0
+ }
+
+ struct OpenTxnRequest {
+ 1: required i32 num_txns,
+ 2: required string user,
+ 3: required string hostname,
+ 4: optional string agentInfo = "Unknown",
+ }
+
+ struct OpenTxnsResponse {
+ 1: required list<i64> txn_ids,
+ }
+
+ struct AbortTxnRequest {
+ 1: required i64 txnid,
+ }
+
+ struct AbortTxnsRequest {
+ 1: required list<i64> txn_ids,
+ }
+
+ struct CommitTxnRequest {
+ 1: required i64 txnid,
+ }
+
+ struct LockComponent {
+ 1: required LockType type,
+ 2: required LockLevel level,
+ 3: required string dbname,
+ 4: optional string tablename,
+ 5: optional string partitionname,
+ 6: optional DataOperationType operationType = DataOperationType.UNSET,
+ 7: optional bool isAcid = false,
+ 8: optional bool isDynamicPartitionWrite = false
+ }
+
+ struct LockRequest {
+ 1: required list<LockComponent> component,
+ 2: optional i64 txnid,
+ 3: required string user, // used in 'show locks' to help admins find who has open locks
+ 4: required string hostname, // used in 'show locks' to help admins find who has open locks
+ 5: optional string agentInfo = "Unknown",
+ }
+
+ struct LockResponse {
+ 1: required i64 lockid,
+ 2: required LockState state,
+ }
+
+ struct CheckLockRequest {
+ 1: required i64 lockid,
+ 2: optional i64 txnid,
+ 3: optional i64 elapsed_ms,
+ }
+
+ struct UnlockRequest {
+ 1: required i64 lockid,
+ }
+
+ struct ShowLocksRequest {
+ 1: optional string dbname,
+ 2: optional string tablename,
+ 3: optional string partname,
+ 4: optional bool isExtended=false,
+ }
+
+ struct ShowLocksResponseElement {
+ 1: required i64 lockid,
+ 2: required string dbname,
+ 3: optional string tablename,
+ 4: optional string partname,
+ 5: required LockState state,
+ 6: required LockType type,
+ 7: optional i64 txnid,
+ 8: required i64 lastheartbeat,
+ 9: optional i64 acquiredat,
+ 10: required string user,
+ 11: required string hostname,
+ 12: optional i32 heartbeatCount = 0,
+ 13: optional string agentInfo,
+ 14: optional i64 blockedByExtId,
+ 15: optional i64 blockedByIntId,
+ 16: optional i64 lockIdInternal,
+ }
+
+ struct ShowLocksResponse {
+ 1: list<ShowLocksResponseElement> locks,
+ }
+
+ struct HeartbeatRequest {
+ 1: optional i64 lockid,
+ 2: optional i64 txnid
+ }
+
+ struct HeartbeatTxnRangeRequest {
+ 1: required i64 min,
+ 2: required i64 max
+ }
+
+ struct HeartbeatTxnRangeResponse {
+ 1: required set<i64> aborted,
+ 2: required set<i64> nosuch
+ }
+
+ struct CompactionRequest {
+ 1: required string dbname,
+ 2: required string tablename,
+ 3: optional string partitionname,
+ 4: required CompactionType type,
+ 5: optional string runas,
+ 6: optional map<string, string> properties
+ }
+
+ struct CompactionResponse {
+ 1: required i64 id,
+ 2: required string state,
+ 3: required bool accepted
+ }
+
+ struct ShowCompactRequest {
+ }
+
+ struct ShowCompactResponseElement {
+ 1: required string dbname,
+ 2: required string tablename,
+ 3: optional string partitionname,
+ 4: required CompactionType type,
+ 5: required string state,
+ 6: optional string workerid,
+ 7: optional i64 start,
+ 8: optional string runAs,
+ 9: optional i64 hightestTxnId, // Highest Txn ID handled by this compaction
+ 10: optional string metaInfo,
+ 11: optional i64 endTime,
+ 12: optional string hadoopJobId = "None",
+ 13: optional i64 id,
+ }
+
+ struct ShowCompactResponse {
+ 1: required list<ShowCompactResponseElement> compacts,
+ }
+
+ struct AddDynamicPartitions {
+ 1: required i64 txnid,
+ 2: required string dbname,
+ 3: required string tablename,
+ 4: required list<string> partitionnames,
+ 5: optional DataOperationType operationType = DataOperationType.UNSET
+ }
+
+ struct NotificationEventRequest {
+ 1: required i64 lastEvent,
+ 2: optional i32 maxEvents,
+ }
+
+ struct NotificationEvent {
+ 1: required i64 eventId,
+ 2: required i32 eventTime,
+ 3: required string eventType,
+ 4: optional string dbName,
+ 5: optional string tableName,
+ 6: required string message,
+ 7: optional string messageFormat,
+ }
+
+ struct NotificationEventResponse {
+ 1: required list<NotificationEvent> events,
+ }
+
+ struct CurrentNotificationEventId {
+ 1: required i64 eventId,
+ }
+
+ struct NotificationEventsCountRequest {
+ 1: required i64 fromEventId,
+ 2: required string dbName,
+ }
+
+ struct NotificationEventsCountResponse {
+ 1: required i64 eventsCount,
+ }
+
+ struct InsertEventRequestData {
+ 1: optional bool replace,
+ 2: required list<string> filesAdded,
+ // Checksum of files (hex string of checksum byte payload)
+ 3: optional list<string> filesAddedChecksum,
+ }
+
+ union FireEventRequestData {
+ 1: InsertEventRequestData insertData
+ }
+
+ struct FireEventRequest {
+ 1: required bool successful,
+ 2: required FireEventRequestData data
+ // dbname, tablename, and partition vals are included as optional in the top level event rather than placed in each type of
+ // subevent as I assume they'll be used across most event types.
+ 3: optional string dbName,
+ 4: optional string tableName,
+ 5: optional list<string> partitionVals,
+ }
+
+ struct FireEventResponse {
+ // NOP for now, this is just a place holder for future responses
+ }
+
+ struct MetadataPpdResult {
+ 1: optional binary metadata,
+ 2: optional binary includeBitset
+ }
+
+ // Return type for get_file_metadata_by_expr
+ struct GetFileMetadataByExprResult {
+ 1: required map<i64, MetadataPpdResult> metadata,
+ 2: required bool isSupported
+ }
+
+ enum FileMetadataExprType {
+ ORC_SARG = 1
+ }
+
+
+ // Request type for get_file_metadata_by_expr
+ struct GetFileMetadataByExprRequest {
+ 1: required list<i64> fileIds,
+ 2: required binary expr,
+ 3: optional bool doGetFooters,
+ 4: optional FileMetadataExprType type
+ }
+
+ // Return type for get_file_metadata
+ struct GetFileMetadataResult {
+ 1: required map<i64, binary> metadata,
+ 2: required bool isSupported
+ }
+
+ // Request type for get_file_metadata
+ struct GetFileMetadataRequest {
+ 1: required list<i64> fileIds
+ }
+
+ // Return type for put_file_metadata
+ struct PutFileMetadataResult {
+ }
+
+ // Request type for put_file_metadata
+ struct PutFileMetadataRequest {
+ 1: required list<i64> fileIds,
+ 2: required list<binary> metadata,
+ 3: optional FileMetadataExprType type
+ }
+
+ // Return type for clear_file_metadata
+ struct ClearFileMetadataResult {
+ }
+
+ // Request type for clear_file_metadata
+ struct ClearFileMetadataRequest {
+ 1: required list<i64> fileIds
+ }
+
+ // Return type for cache_file_metadata
+ struct CacheFileMetadataResult {
+ 1: required bool isSupported
+ }
+
+ // Request type for cache_file_metadata
+ struct CacheFileMetadataRequest {
+ 1: required string dbName,
+ 2: required string tblName,
+ 3: optional string partName,
+ 4: optional bool isAllParts
+ }
+
+ struct GetAllFunctionsResponse {
+ 1: optional list<Function> functions
+ }
+
+ enum ClientCapability {
- TEST_CAPABILITY = 1
++ TEST_CAPABILITY = 1,
++ INSERT_ONLY_TABLES = 2
+ }
+
+
+ struct ClientCapabilities {
+ 1: required list<ClientCapability> values
+ }
+
+ struct GetTableRequest {
+ 1: required string dbName,
+ 2: required string tblName,
+ 3: optional ClientCapabilities capabilities
+ }
+
+ struct GetTableResult {
+ 1: required Table table
+ }
+
+ struct GetTablesRequest {
+ 1: required string dbName,
+ 2: optional list<string> tblNames,
+ 3: optional ClientCapabilities capabilities
+ }
+
+ struct GetTablesResult {
+ 1: required list<Table> tables
+ }
+
+ // Request type for cm_recycle
+ struct CmRecycleRequest {
+ 1: required string dataPath,
+ 2: required bool purge
+ }
+
+ // Response type for cm_recycle
+ struct CmRecycleResponse {
+ }
+
+ struct TableMeta {
+ 1: required string dbName;
+ 2: required string tableName;
+ 3: required string tableType;
+ 4: optional string comments;
+ }
+
+ exception MetaException {
+ 1: string message
+ }
+
+ exception UnknownTableException {
+ 1: string message
+ }
+
+ exception UnknownDBException {
+ 1: string message
+ }
+
+ exception AlreadyExistsException {
+ 1: string message
+ }
+
+ exception InvalidPartitionException {
+ 1: string message
+ }
+
+ exception UnknownPartitionException {
+ 1: string message
+ }
+
+ exception InvalidObjectException {
+ 1: string message
+ }
+
+ exception NoSuchObjectException {
+ 1: string message
+ }
+
+ exception IndexAlreadyExistsException {
+ 1: string message
+ }
+
+ exception InvalidOperationException {
+ 1: string message
+ }
+
+ exception ConfigValSecurityException {
+ 1: string message
+ }
+
+ exception InvalidInputException {
+ 1: string message
+ }
+
+ // Transaction and lock exceptions
+ exception NoSuchTxnException {
+ 1: string message
+ }
+
+ exception TxnAbortedException {
+ 1: string message
+ }
+
+ exception TxnOpenException {
+ 1: string message
+ }
+
+ exception NoSuchLockException {
+ 1: string message
+ }
+
+ /**
+ * This interface is live.
+ */
+ service ThriftHiveMetastore extends fb303.FacebookService
+ {
+ string getMetaConf(1:string key) throws(1:MetaException o1)
+ void setMetaConf(1:string key, 2:string value) throws(1:MetaException o1)
+
+ void create_database(1:Database database) throws(1:AlreadyExistsException o1, 2:InvalidObjectException o2, 3:MetaException o3)
+ Database get_database(1:string name) throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ void drop_database(1:string name, 2:bool deleteData, 3:bool cascade) throws(1:NoSuchObjectException o1, 2:InvalidOperationException o2, 3:MetaException o3)
+ list<string> get_databases(1:string pattern) throws(1:MetaException o1)
+ list<string> get_all_databases() throws(1:MetaException o1)
+ void alter_database(1:string dbname, 2:Database db) throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ // returns the type with given name (make seperate calls for the dependent types if needed)
+ Type get_type(1:string name) throws(1:MetaException o1, 2:NoSuchObjectException o2)
+ bool create_type(1:Type type) throws(1:AlreadyExistsException o1, 2:InvalidObjectException o2, 3:MetaException o3)
+ bool drop_type(1:string type) throws(1:MetaException o1, 2:NoSuchObjectException o2)
+ map<string, Type> get_type_all(1:string name)
+ throws(1:MetaException o2)
+
+ // Gets a list of FieldSchemas describing the columns of a particular table
+ list<FieldSchema> get_fields(1: string db_name, 2: string table_name) throws (1: MetaException o1, 2: UnknownTableException o2, 3: UnknownDBException o3),
+ list<FieldSchema> get_fields_with_environment_context(1: string db_name, 2: string table_name, 3:EnvironmentContext environment_context) throws (1: MetaException o1, 2: UnknownTableException o2, 3: UnknownDBException o3)
+
+ // Gets a list of FieldSchemas describing both the columns and the partition keys of a particular table
+ list<FieldSchema> get_schema(1: string db_name, 2: string table_name) throws (1: MetaException o1, 2: UnknownTableException o2, 3: UnknownDBException o3)
+ list<FieldSchema> get_schema_with_environment_context(1: string db_name, 2: string table_name, 3:EnvironmentContext environment_context) throws (1: MetaException o1, 2: UnknownTableException o2, 3: UnknownDBException o3)
+
+ // create a Hive table. Following fields must be set
+ // tableName
+ // database (only 'default' for now until Hive QL supports databases)
+ // owner (not needed, but good to have for tracking purposes)
+ // sd.cols (list of field schemas)
+ // sd.inputFormat (SequenceFileInputFormat (binary like falcon tables or u_full) or TextInputFormat)
+ // sd.outputFormat (SequenceFileInputFormat (binary) or TextInputFormat)
+ // sd.serdeInfo.serializationLib (SerDe class name eg org.apache.hadoop.hive.serde.simple_meta.MetadataTypedColumnsetSerDe
+ // * See notes on DDL_TIME
+ void create_table(1:Table tbl) throws(1:AlreadyExistsException o1, 2:InvalidObjectException o2, 3:MetaException o3, 4:NoSuchObjectException o4)
+ void create_table_with_environment_context(1:Table tbl,
+ 2:EnvironmentContext environment_context)
+ throws (1:AlreadyExistsException o1,
+ 2:InvalidObjectException o2, 3:MetaException o3,
+ 4:NoSuchObjectException o4)
+ void create_table_with_constraints(1:Table tbl, 2: list<SQLPrimaryKey> primaryKeys, 3: list<SQLForeignKey> foreignKeys,
+ 4: list<SQLUniqueConstraint> uniqueConstraints, 5: list<SQLNotNullConstraint> notNullConstraints)
+ throws (1:AlreadyExistsException o1,
+ 2:InvalidObjectException o2, 3:MetaException o3,
+ 4:NoSuchObjectException o4)
+ void drop_constraint(1:DropConstraintRequest req)
+ throws(1:NoSuchObjectException o1, 2:MetaException o3)
+ void add_primary_key(1:AddPrimaryKeyRequest req)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ void add_foreign_key(1:AddForeignKeyRequest req)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ void add_unique_constraint(1:AddUniqueConstraintRequest req)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ void add_not_null_constraint(1:AddNotNullConstraintRequest req)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+
+ // drops the table and all the partitions associated with it if the table has partitions
+ // delete data (including partitions) if deleteData is set to true
+ void drop_table(1:string dbname, 2:string name, 3:bool deleteData)
+ throws(1:NoSuchObjectException o1, 2:MetaException o3)
+ void drop_table_with_environment_context(1:string dbname, 2:string name, 3:bool deleteData,
+ 4:EnvironmentContext environment_context)
+ throws(1:NoSuchObjectException o1, 2:MetaException o3)
+ void truncate_table(1:string dbName, 2:string tableName, 3:list<string> partNames)
+ throws(1:MetaException o1)
+ list<string> get_tables(1: string db_name, 2: string pattern) throws (1: MetaException o1)
+ list<string> get_tables_by_type(1: string db_name, 2: string pattern, 3: string tableType) throws (1: MetaException o1)
+ list<TableMeta> get_table_meta(1: string db_patterns, 2: string tbl_patterns, 3: list<string> tbl_types)
+ throws (1: MetaException o1)
+ list<string> get_all_tables(1: string db_name) throws (1: MetaException o1)
+
+ Table get_table(1:string dbname, 2:string tbl_name)
+ throws (1:MetaException o1, 2:NoSuchObjectException o2)
+ list<Table> get_table_objects_by_name(1:string dbname, 2:list<string> tbl_names)
+ GetTableResult get_table_req(1:GetTableRequest req) throws (1:MetaException o1, 2:NoSuchObjectException o2)
+ GetTablesResult get_table_objects_by_name_req(1:GetTablesRequest req)
+ throws (1:MetaException o1, 2:InvalidOperationException o2, 3:UnknownDBException o3)
+
+ // Get a list of table names that match a filter.
+ // The filter operators are LIKE, <, <=, >, >=, =, <>
+ //
+ // In the filter statement, values interpreted as strings must be enclosed in quotes,
+ // while values interpreted as integers should not be. Strings and integers are the only
+ // supported value types.
+ //
+ // The currently supported key names in the filter are:
+ // Constants.HIVE_FILTER_FIELD_OWNER, which filters on the tables' owner's name
+ // and supports all filter operators
+ // Constants.HIVE_FILTER_FIELD_LAST_ACCESS, which filters on the last access times
+ // and supports all filter operators except LIKE
+ // Constants.HIVE_FILTER_FIELD_PARAMS, which filters on the tables' parameter keys and values
+ // and only supports the filter operators = and <>.
+ // Append the parameter key name to HIVE_FILTER_FIELD_PARAMS in the filter statement.
+ // For example, to filter on parameter keys called "retention", the key name in the filter
+ // statement should be Constants.HIVE_FILTER_FIELD_PARAMS + "retention"
+ // Also, = and <> only work for keys that exist
+ // in the tables. E.g., if you are looking for tables where key1 <> value, it will only
+ // look at tables that have a value for the parameter key1.
+ // Some example filter statements include:
+ // filter = Constants.HIVE_FILTER_FIELD_OWNER + " like \".*test.*\" and " +
+ // Constants.HIVE_FILTER_FIELD_LAST_ACCESS + " = 0";
+ // filter = Constants.HIVE_FILTER_FIELD_PARAMS + "retention = \"30\" or " +
+ // Constants.HIVE_FILTER_FIELD_PARAMS + "retention = \"90\""
+ // @param dbName
+ // The name of the database from which you will retrieve the table names
+ // @param filterType
+ // The type of filter
+ // @param filter
+ // The filter string
+ // @param max_tables
+ // The maximum number of tables returned
+ // @return A list of table names that match the desired filter
+ list<string> get_table_names_by_filter(1:string dbname, 2:string filter, 3:i16 max_tables=-1)
+ throws (1:MetaException o1, 2:InvalidOperationException o2, 3:UnknownDBException o3)
+
+ // alter table applies to only future partitions not for existing partitions
+ // * See notes on DDL_TIME
+ void alter_table(1:string dbname, 2:string tbl_name, 3:Table new_tbl)
+ throws (1:InvalidOperationException o1, 2:MetaException o2)
+ void alter_table_with_environment_context(1:string dbname, 2:string tbl_name,
+ 3:Table new_tbl, 4:EnvironmentContext environment_context)
+ throws (1:InvalidOperationException o1, 2:MetaException o2)
+ // alter table not only applies to future partitions but also cascade to existing partitions
+ void alter_table_with_cascade(1:string dbname, 2:string tbl_name, 3:Table new_tbl, 4:bool cascade)
+ throws (1:InvalidOperationException o1, 2:MetaException o2)
+ // the following applies to only tables that have partitions
+ // * See notes on DDL_TIME
+ Partition add_partition(1:Partition new_part)
+ throws(1:InvalidObjectException o1, 2:AlreadyExistsException o2, 3:MetaException o3)
+ Partition add_partition_with_environment_context(1:Partition new_part,
+ 2:EnvironmentContext environment_context)
+ throws (1:InvalidObjectException o1, 2:AlreadyExistsException o2,
+ 3:MetaException o3)
+ i32 add_partitions(1:list<Partition> new_parts)
+ throws(1:InvalidObjectException o1, 2:AlreadyExistsException o2, 3:MetaException o3)
+ i32 add_partitions_pspec(1:list<PartitionSpec> new_parts)
+ throws(1:InvalidObjectException o1, 2:AlreadyExistsException o2, 3:MetaException o3)
+ Partition append_partition(1:string db_name, 2:string tbl_name, 3:list<string> part_vals)
+ throws (1:InvalidObjectException o1, 2:AlreadyExistsException o2, 3:MetaException o3)
+ AddPartitionsResult add_partitions_req(1:AddPartitionsRequest request)
+ throws(1:InvalidObjectException o1, 2:AlreadyExistsException o2, 3:MetaException o3)
+ Partition append_partition_with_environment_context(1:string db_name, 2:string tbl_name,
+ 3:list<string> part_vals, 4:EnvironmentContext environment_context)
+ throws (1:InvalidObjectException o1, 2:AlreadyExistsException o2, 3:MetaException o3)
+ Partition append_partition_by_name(1:string db_name, 2:string tbl_name, 3:string part_name)
+ throws (1:InvalidObjectException o1, 2:AlreadyExistsException o2, 3:MetaException o3)
+ Partition append_partition_by_name_with_environment_context(1:string db_name, 2:string tbl_name,
+ 3:string part_name, 4:EnvironmentContext environment_context)
+ throws (1:InvalidObjectException o1, 2:AlreadyExistsException o2, 3:MetaException o3)
+ bool drop_partition(1:string db_name, 2:string tbl_name, 3:list<string> part_vals, 4:bool deleteData)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ bool drop_partition_with_environment_context(1:string db_name, 2:string tbl_name,
+ 3:list<string> part_vals, 4:bool deleteData, 5:EnvironmentContext environment_context)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ bool drop_partition_by_name(1:string db_name, 2:string tbl_name, 3:string part_name, 4:bool deleteData)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ bool drop_partition_by_name_with_environment_context(1:string db_name, 2:string tbl_name,
+ 3:string part_name, 4:bool deleteData, 5:EnvironmentContext environment_context)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ DropPartitionsResult drop_partitions_req(1: DropPartitionsRequest req)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+
+ Partition get_partition(1:string db_name, 2:string tbl_name, 3:list<string> part_vals)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+ Partition exchange_partition(1:map<string, string> partitionSpecs, 2:string source_db,
+ 3:string source_table_name, 4:string dest_db, 5:string dest_table_name)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2, 3:InvalidObjectException o3,
+ 4:InvalidInputException o4)
+
+ list<Partition> exchange_partitions(1:map<string, string> partitionSpecs, 2:string source_db,
+ 3:string source_table_name, 4:string dest_db, 5:string dest_table_name)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2, 3:InvalidObjectException o3,
+ 4:InvalidInputException o4)
+
+ Partition get_partition_with_auth(1:string db_name, 2:string tbl_name, 3:list<string> part_vals,
+ 4: string user_name, 5: list<string> group_names) throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ Partition get_partition_by_name(1:string db_name 2:string tbl_name, 3:string part_name)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ // returns all the partitions for this table in reverse chronological order.
+ // If max parts is given then it will return only that many.
+ list<Partition> get_partitions(1:string db_name, 2:string tbl_name, 3:i16 max_parts=-1)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ list<Partition> get_partitions_with_auth(1:string db_name, 2:string tbl_name, 3:i16 max_parts=-1,
+ 4: string user_name, 5: list<string> group_names) throws(1:NoSuchObjectException o1, 2:MetaException o2)
+
+ list<PartitionSpec> get_partitions_pspec(1:string db_name, 2:string tbl_name, 3:i32 max_parts=-1)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+
+ list<string> get_partition_names(1:string db_name, 2:string tbl_name, 3:i16 max_parts=-1)
+ throws(1:MetaException o2)
+
+ // get_partition*_ps methods allow filtering by a partial partition specification,
+ // as needed for dynamic partitions. The values that are not restricted should
+ // be empty strings. Nulls were considered (instead of "") but caused errors in
+ // generated Python code. The size of part_vals may be smaller than the
+ // number of partition columns - the unspecified values are considered the same
+ // as "".
+ list<Partition> get_partitions_ps(1:string db_name 2:string tbl_name
+ 3:list<string> part_vals, 4:i16 max_parts=-1)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+ list<Partition> get_partitions_ps_with_auth(1:string db_name, 2:string tbl_name, 3:list<string> part_vals, 4:i16 max_parts=-1,
+ 5: string user_name, 6: list<string> group_names) throws(1:NoSuchObjectException o1, 2:MetaException o2)
+
+ list<string> get_partition_names_ps(1:string db_name,
+ 2:string tbl_name, 3:list<string> part_vals, 4:i16 max_parts=-1)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ // get the partitions matching the given partition filter
+ list<Partition> get_partitions_by_filter(1:string db_name 2:string tbl_name
+ 3:string filter, 4:i16 max_parts=-1)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ // List partitions as PartitionSpec instances.
+ list<PartitionSpec> get_part_specs_by_filter(1:string db_name 2:string tbl_name
+ 3:string filter, 4:i32 max_parts=-1)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ // get the partitions matching the given partition filter
+ // unlike get_partitions_by_filter, takes serialized hive expression, and with that can work
+ // with any filter (get_partitions_by_filter only works if the filter can be pushed down to JDOQL.
+ PartitionsByExprResult get_partitions_by_expr(1:PartitionsByExprRequest req)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ // get the partitions matching the given partition filter
+ i32 get_num_partitions_by_filter(1:string db_name 2:string tbl_name 3:string filter)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ // get partitions give a list of partition names
+ list<Partition> get_partitions_by_names(1:string db_name 2:string tbl_name 3:list<string> names)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ // changes the partition to the new partition object. partition is identified from the part values
+ // in the new_part
+ // * See notes on DDL_TIME
+ void alter_partition(1:string db_name, 2:string tbl_name, 3:Partition new_part)
+ throws (1:InvalidOperationException o1, 2:MetaException o2)
+
+ // change a list of partitions. All partitions are altered atomically and all
+ // prehooks are fired together followed by all post hooks
+ void alter_partitions(1:string db_name, 2:string tbl_name, 3:list<Partition> new_parts)
+ throws (1:InvalidOperationException o1, 2:MetaException o2)
+ void alter_partitions_with_environment_context(1:string db_name, 2:string tbl_name, 3:list<Partition> new_parts, 4:EnvironmentContext environment_context) throws (1:InvalidOperationException o1, 2:MetaException o2)
+
+ void alter_partition_with_environment_context(1:string db_name,
+ 2:string tbl_name, 3:Partition new_part,
+ 4:EnvironmentContext environment_context)
+ throws (1:InvalidOperationException o1, 2:MetaException o2)
+
+ // rename the old partition to the new partition object by changing old part values to the part values
+ // in the new_part. old partition is identified from part_vals.
+ // partition keys in new_part should be the same as those in old partition.
+ void rename_partition(1:string db_name, 2:string tbl_name, 3:list<string> part_vals, 4:Partition new_part)
+ throws (1:InvalidOperationException o1, 2:MetaException o2)
+
+ // returns whether or not the partition name is valid based on the value of the config
+ // hive.metastore.partition.name.whitelist.pattern
+ bool partition_name_has_valid_characters(1:list<string> part_vals, 2:bool throw_exception)
+ throws(1: MetaException o1)
+
+ // gets the value of the configuration key in the metastore server. returns
+ // defaultValue if the key does not exist. if the configuration key does not
+ // begin with "hive", "mapred", or "hdfs", a ConfigValSecurityException is
+ // thrown.
+ string get_config_value(1:string name, 2:string defaultValue)
+ throws(1:ConfigValSecurityException o1)
+
+ // converts a partition name into a partition values array
+ list<string> partition_name_to_vals(1: string part_name)
+ throws(1: MetaException o1)
+ // converts a partition name into a partition specification (a mapping from
+ // the partition cols to the values)
+ map<string, string> partition_name_to_spec(1: string part_name)
+ throws(1: MetaException o1)
+
+ void markPartitionForEvent(1:string db_name, 2:string tbl_name, 3:map<string,string> part_vals,
+ 4:PartitionEventType eventType) throws (1: MetaException o1, 2: NoSuchObjectException o2,
+ 3: UnknownDBException o3, 4: UnknownTableException o4, 5: UnknownPartitionException o5,
+ 6: InvalidPartitionException o6)
+ bool isPartitionMarkedForEvent(1:string db_name, 2:string tbl_name, 3:map<string,string> part_vals,
+ 4: PartitionEventType eventType) throws (1: MetaException o1, 2:NoSuchObjectException o2,
+ 3: UnknownDBException o3, 4: UnknownTableException o4, 5: UnknownPartitionException o5,
+ 6: InvalidPartitionException o6)
+
+ //index
+ Index add_index(1:Index new_index, 2: Table index_table)
+ throws(1:InvalidObjectException o1, 2:AlreadyExistsException o2, 3:MetaException o3)
+ void alter_index(1:string dbname, 2:string base_tbl_name, 3:string idx_name, 4:Index new_idx)
+ throws (1:InvalidOperationException o1, 2:MetaException o2)
+ bool drop_index_by_name(1:string db_name, 2:string tbl_name, 3:string index_name, 4:bool deleteData)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ Index get_index_by_name(1:string db_name 2:string tbl_name, 3:string index_name)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ list<Index> get_indexes(1:string db_name, 2:string tbl_name, 3:i16 max_indexes=-1)
+ throws(1:NoSuchObjectException o1, 2:MetaException o2)
+ list<string> get_index_names(1:string db_name, 2:string tbl_name, 3:i16 max_indexes=-1)
+ throws(1:MetaException o2)
+
+ //primary keys and foreign keys
+ PrimaryKeysResponse get_primary_keys(1:PrimaryKeysRequest request)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+ ForeignKeysResponse get_foreign_keys(1:ForeignKeysRequest request)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+ // other constraints
+ UniqueConstraintsResponse get_unique_constraints(1:UniqueConstraintsRequest request)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+ NotNullConstraintsResponse get_not_null_constraints(1:NotNullConstraintsRequest request)
+ throws(1:MetaException o1, 2:NoSuchObjectException o2)
+
+ // column statistics interfaces
+
+ // update APIs persist the column statistics object(s) that are passed in. If statistics already
+ // exists for one or more columns, the existing statistics will be overwritten. The update APIs
+ // validate that the dbName, tableName, partName, colName[] passed in as part of the ColumnStatistics
+ // struct are valid, throws InvalidInputException/NoSuchObjectException if found to be invalid
+ bool update_table_column_statistics(1:ColumnStatistics stats_obj) throws (1:NoSuchObjectException o1,
+ 2:InvalidObjectException o2, 3:MetaException o3, 4:InvalidInputException o4)
+ bool update_partition_column_statistics(1:ColumnStatistics stats_obj) throws (1:NoSuchObjectException o1,
+ 2:InvalidObjectException o2, 3:MetaException o3, 4:InvalidInputException o4)
+
+ // get APIs return the column statistics corresponding to db_name, tbl_name, [part_name], col_name if
+ // such statistics exists. If the required statistics doesn't exist, get APIs throw NoSuchObjectException
+ // For instance, if get_table_column_statistics is called on a partitioned table for which only
+ // partition level column stats exist, get_table_column_statistics will throw NoSuchObjectException
+ ColumnStatistics get_table_column_statistics(1:string db_name, 2:string tbl_name, 3:string col_name) throws
+ (1:NoSuchObjectException o1, 2:MetaException o2, 3:InvalidInputException o3, 4:InvalidObjectException o4)
+ ColumnStatistics get_partition_column_statistics(1:string db_name, 2:string tbl_name, 3:string part_name,
+ 4:string col_name) throws (1:NoSuchObjectException o1, 2:MetaException o2,
+ 3:InvalidInputException o3, 4:InvalidObjectException o4)
+ TableStatsResult get_table_statistics_req(1:TableStatsRequest request) throws
+ (1:NoSuchObjectException o1, 2:MetaException o2)
+ PartitionsStatsResult get_partitions_statistics_req(1:PartitionsStatsRequest request) throws
+ (1:NoSuchObjectException o1, 2:MetaException o2)
+ AggrStats get_aggr_stats_for(1:PartitionsStatsRequest request) throws
+ (1:NoSuchObjectException o1, 2:MetaException o2)
+ bool set_aggr_stats_for(1:SetPartitionsStatsRequest request) throws
+ (1:NoSuchObjectException o1, 2:InvalidObjectException o2, 3:MetaException o3, 4:InvalidInputException o4)
+
+
+ // delete APIs attempt to delete column statistics, if found, associated with a given db_name, tbl_name, [part_name]
+ // and col_name. If the delete API doesn't find the statistics record in the metastore, throws NoSuchObjectException
+ // Delete API validates the input and if the input is invalid throws InvalidInputException/InvalidObjectException.
+ bool delete_partition_column_statistics(1:string db_name, 2:string tbl_name, 3:string part_name, 4:string col_name) throws
+ (1:NoSuchObjectException o1, 2:MetaException o2, 3:InvalidObjectException o3,
+ 4:InvalidInputException o4)
+ bool delete_table_column_statistics(1:string db_name, 2:string tbl_name, 3:string col_name) throws
+ (1:NoSuchObjectException o1, 2:MetaException o2, 3:InvalidObjectException o3,
+ 4:InvalidInputException o4)
+
+ //
+ // user-defined functions
+ //
+
+ void create_function(1:Function func)
+ throws (1:AlreadyExistsException o1,
+ 2:InvalidObjectException o2,
+ 3:MetaException o3,
+ 4:NoSuchObjectException o4)
+
+ void drop_function(1:string dbName, 2:string funcName)
+ throws (1:NoSuchObjectException o1, 2:MetaException o3)
+
+ void alter_function(1:string dbName, 2:string funcName, 3:Function newFunc)
+ throws (1:InvalidOperationException o1, 2:MetaException o2)
+
+ list<string> get_functions(1:string dbName, 2:string pattern)
+ throws (1:MetaException o1)
+ Function get_function(1:string dbName, 2:string funcName)
+ throws (1:MetaException o1, 2:NoSuchObjectException o2)
+
+ GetAllFunctionsResponse get_all_functions() throws (1:MetaException o1)
+
+ //authorization privileges
+
+ bool create_role(1:Role role) throws(1:MetaException o1)
+ bool drop_role(1:string role_name) throws(1:MetaException o1)
+ list<string> get_role_names() throws(1:MetaException o1)
+ // Deprecated, use grant_revoke_role()
+ bool grant_role(1:string role_name, 2:string principal_name, 3:PrincipalType principal_type,
+ 4:string grantor, 5:PrincipalType grantorType, 6:bool grant_option) throws(1:MetaException o1)
+ // Deprecated, use grant_revoke_role()
+ bool revoke_role(1:string role_name, 2:string principal_name, 3:PrincipalType principal_type)
+ throws(1:MetaException o1)
+ list<Role> list_roles(1:string principal_name, 2:PrincipalType principal_type) throws(1:MetaException o1)
+ GrantRevokeRoleResponse grant_revoke_role(1:GrantRevokeRoleRequest request) throws(1:MetaException o1)
+
+ // get all role-grants for users/roles that have been granted the given role
+ // Note that in the returned list of RolePrincipalGrants, the roleName is
+ // redundant as it would match the role_name argument of this function
+ GetPrincipalsInRoleResponse get_principals_in_role(1: GetPrincipalsInRoleRequest request) throws(1:MetaException o1)
+
+ // get grant information of all roles granted to the given principal
+ // Note that in the returned list of RolePrincipalGrants, the principal name,type is
+ // redundant as it would match the principal name,type arguments of this function
+ GetRoleGrantsForPrincipalResponse get_role_grants_for_principal(1: GetRoleGrantsForPrincipalRequest request) throws(1:MetaException o1)
+
+ PrincipalPrivilegeSet get_privilege_set(1:HiveObjectRef hiveObject, 2:string user_name,
+ 3: list<string> group_names) throws(1:MetaException o1)
+ list<HiveObjectPrivilege> list_privileges(1:string principal_name, 2:PrincipalType principal_type,
+ 3: HiveObjectRef hiveObject) throws(1:MetaException o1)
+
+ // Deprecated, use grant_revoke_privileges()
+ bool grant_privileges(1:PrivilegeBag privileges) throws(1:MetaException o1)
+ // Deprecated, use grant_revoke_privileges()
+ bool revoke_privileges(1:PrivilegeBag privileges) throws(1:MetaException o1)
+ GrantRevokePrivilegeResponse grant_revoke_privileges(1:GrantRevokePrivilegeRequest request) throws(1:MetaException o1);
+
+ // this is used by metastore client to send UGI information to metastore server immediately
+ // after setting up a connection.
+ list<string> set_ugi(1:string user_name, 2:list<string> group_names) throws (1:MetaException o1)
+
+ //Authentication (delegation token) interfaces
+
+ // get metastore server delegation token for use from the map/reduce tasks to authenticate
+ // to metastore server
+ string get_delegation_token(1:string token_owner, 2:string renewer_kerberos_principal_name)
+ throws (1:MetaException o1)
+
+ // method to renew delegation token obtained from metastore server
+ i64 renew_delegation_token(1:string token_str_form) throws (1:MetaException o1)
+
+ // method to cancel delegation token obtained from metastore server
+ void cancel_delegation_token(1:string token_str_form) throws (1:MetaException o1)
+
+ // add a delegation token
+ bool add_token(1:string token_identifier, 2:string delegation_token)
+
+ // remove a delegation token
+ bool remove_token(1:string token_identifier)
+
+ // get a delegation token by identifier
+ string get_token(1:string token_identifier)
+
+ // get all delegation token identifiers
+ list<string> get_all_token_identifiers()
+
+ // add master key
+ i32 add_master_key(1:string key) throws (1:MetaException o1)
+
+ // update master key
+ void update_master_key(1:i32 seq_number, 2:string key) throws (1:NoSuchObjectException o1, 2:MetaException o2)
+
+ // remove master key
+ bool remove_master_key(1:i32 key_seq)
+
+ // get master keys
+ list<string> get_master_keys()
+
+ // Transaction and lock management calls
+ // Get just list of open transactions
+ GetOpenTxnsResponse get_open_txns()
+ // Get list of open transactions with state (open, aborted)
+ GetOpenTxnsInfoResponse get_open_txns_info()
+ OpenTxnsResponse open_txns(1:OpenTxnRequest rqst)
+ void abort_txn(1:AbortTxnRequest rqst) throws (1:NoSuchTxnException o1)
+ void abort_txns(1:AbortTxnsRequest rqst) throws (1:NoSuchTxnException o1)
+ void commit_txn(1:CommitTxnRequest rqst) throws (1:NoSuchTxnException o1, 2:TxnAbortedException o2)
+ LockResponse lock(1:LockRequest rqst) throws (1:NoSuchTxnException o1, 2:TxnAbortedException o2)
+ LockResponse check_lock(1:CheckLockRequest rqst)
+ throws (1:NoSuchTxnException o1, 2:TxnAbortedException o2, 3:NoSuchLockException o3)
+ void unlock(1:UnlockRequest rqst) throws (1:NoSuchLockException o1, 2:TxnOpenException o2)
+ ShowLocksResponse show_locks(1:ShowLocksRequest rqst)
+ void heartbeat(1:HeartbeatRequest ids) throws (1:NoSuchLockException o1, 2:NoSuchTxnException o2, 3:TxnAbortedException o3)
+ HeartbeatTxnRangeResponse heartbeat_txn_range(1:HeartbeatTxnRangeRequest txns)
+ void compact(1:CompactionRequest rqst)
+ CompactionResponse compact2(1:CompactionRequest rqst)
+ ShowCompactResponse show_compact(1:ShowCompactRequest rqst)
+ void add_dynamic_partitions(1:AddDynamicPartitions rqst) throws (1:NoSuchTxnException o1, 2:TxnAbortedException o2)
+
+ // Notification logging calls
+ NotificationEventResponse get_next_notification(1:NotificationEventRequest rqst)
+ CurrentNotificationEventId get_current_notificationEventId()
+ NotificationEventsCountResponse get_notification_events_count(NotificationEventsCountRequest rqst)
+ FireEventResponse fire_listener_event(1:FireEventRequest rqst)
+ void flushCache()
+
+ // Repl Change Management api
+ CmRecycleResponse cm_recycle(1:CmRecycleRequest request) throws(1:MetaException o1)
+
+ GetFileMetadataByExprResult get_file_metadata_by_expr(1:GetFileMetadataByExprRequest req)
+ GetFileMetadataResult get_file_metadata(1:GetFileMetadataRequest req)
+ PutFileMetadataResult put_file_metadata(1:PutFileMetadataRequest req)
+ ClearFileMetadataResult clear_file_metadata(1:ClearFileMetadataRequest req)
+ CacheFileMetadataResult cache_file_metadata(1:CacheFileMetadataRequest req)
+
+ // Metastore DB properties
+ string get_metastore_db_uuid() throws (1:MetaException o1)
+ }
+
+ // * Note about the DDL_TIME: When creating or altering a table or a partition,
+ // if the DDL_TIME is not set, the current time will be used.
+
+ // For storing info about archived partitions in parameters
+
+ // Whether the partition is archived
+ const string IS_ARCHIVED = "is_archived",
+ // The original location of the partition, before archiving. After archiving,
+ // this directory will contain the archive. When the partition
+ // is dropped, this directory will be deleted
+ const string ORIGINAL_LOCATION = "original_location",
+
+ // Whether or not the table is considered immutable - immutable tables can only be
+ // overwritten or created if unpartitioned, or if partitioned, partitions inside them
+ // can only be overwritten or created. Immutability supports write-once and replace
+ // semantics, but not append.
+ const string IS_IMMUTABLE = "immutable",
+
+ // these should be needed only for backward compatibility with filestore
+ const string META_TABLE_COLUMNS = "columns",
+ const string META_TABLE_COLUMN_TYPES = "columns.types",
+ const string BUCKET_FIELD_NAME = "bucket_field_name",
+ const string BUCKET_COUNT = "bucket_count",
+ const string FIELD_TO_DIMENSION = "field_to_dimension",
+ const string META_TABLE_NAME = "name",
+ const string META_TABLE_DB = "db",
+ const string META_TABLE_LOCATION = "location",
+ const string META_TABLE_SERDE = "serde",
+ const string META_TABLE_PARTITION_COLUMNS = "partition_columns",
+ const string META_TABLE_PARTITION_COLUMN_TYPES = "partition_columns.types",
+ const string FILE_INPUT_FORMAT = "file.inputformat",
+ const string FILE_OUTPUT_FORMAT = "file.outputformat",
+ const string META_TABLE_STORAGE = "storage_handler",
+ const string TABLE_IS_TRANSACTIONAL = "transactional",
+ const string TABLE_NO_AUTO_COMPACT = "no_auto_compaction",
+ const string TABLE_TRANSACTIONAL_PROPERTIES = "transactional_properties",
+
+
[32/50] [abbrv] hive git commit: cherry picked HIVE-15899 from master
Posted by se...@apache.org.
cherry picked HIVE-15899 from master
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/5b3c7979
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/5b3c7979
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/5b3c7979
Branch: refs/heads/master
Commit: 5b3c79798e28fd3c7f5718e361efee0f77eec047
Parents: 6f0be79
Author: Eugene Koifman <ek...@hortonworks.com>
Authored: Tue Sep 26 19:42:06 2017 -0700
Committer: Eugene Koifman <ek...@hortonworks.com>
Committed: Tue Sep 26 19:48:41 2017 -0700
----------------------------------------------------------------------
.../apache/hadoop/hive/ql/TestAcidOnTez.java | 329 +++++++++++++++----
.../java/org/apache/hadoop/hive/ql/Context.java | 3 +
.../java/org/apache/hadoop/hive/ql/Driver.java | 6 +-
.../apache/hadoop/hive/ql/exec/MoveTask.java | 13 +-
.../org/apache/hadoop/hive/ql/io/AcidUtils.java | 12 +
.../apache/hadoop/hive/ql/metadata/Hive.java | 43 ++-
.../ql/optimizer/QueryPlanPostProcessor.java | 166 ++++++++++
.../optimizer/unionproc/UnionProcFactory.java | 3 +-
.../hadoop/hive/ql/parse/SemanticAnalyzer.java | 35 +-
.../apache/hadoop/hive/ql/plan/LoadDesc.java | 22 +-
.../hadoop/hive/ql/plan/LoadFileDesc.java | 22 +-
.../hadoop/hive/ql/plan/LoadTableDesc.java | 29 +-
.../hadoop/hive/ql/plan/TezEdgeProperty.java | 10 +-
.../apache/hadoop/hive/ql/TestTxnNoBuckets.java | 189 +++++++++--
.../clientpositive/autoColumnStats_4.q.out | 1 +
.../clientpositive/llap/acid_no_buckets.q.out | 8 +
.../llap/dynamic_semijoin_reduction_3.q.out | 7 +
.../llap/dynpart_sort_optimization_acid.q.out | 12 +
.../results/clientpositive/llap/mm_all.q.out | 1 +
.../results/clientpositive/llap/sqlmerge.q.out | 4 +
ql/src/test/results/clientpositive/mm_all.q.out | 1 +
21 files changed, 760 insertions(+), 156 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/TestAcidOnTez.java
----------------------------------------------------------------------
diff --git a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/TestAcidOnTez.java b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/TestAcidOnTez.java
index d0b5cf6..8b4b21f 100644
--- a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/TestAcidOnTez.java
+++ b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/TestAcidOnTez.java
@@ -33,6 +33,7 @@ import org.apache.hadoop.hive.metastore.api.ShowCompactResponse;
import org.apache.hadoop.hive.metastore.txn.TxnDbUtil;
import org.apache.hadoop.hive.metastore.txn.TxnStore;
import org.apache.hadoop.hive.metastore.txn.TxnUtils;
+import org.apache.hadoop.hive.ql.exec.AbstractFileMergeOperator;
import org.apache.hadoop.hive.ql.io.BucketCodec;
import org.apache.hadoop.hive.ql.io.HiveInputFormat;
import org.apache.hadoop.hive.ql.processors.CommandProcessorResponse;
@@ -88,7 +89,6 @@ public class TestAcidOnTez {
hiveConf = new HiveConf(this.getClass());
hiveConf.set(HiveConf.ConfVars.PREEXECHOOKS.varname, "");
hiveConf.set(HiveConf.ConfVars.POSTEXECHOOKS.varname, "");
- hiveConf.set(HiveConf.ConfVars.HIVE_SUPPORT_CONCURRENCY.varname, "false");
hiveConf.set(HiveConf.ConfVars.METASTOREWAREHOUSE.varname, TEST_WAREHOUSE_DIR);
hiveConf.setVar(HiveConf.ConfVars.HIVEMAPREDMODE, "nonstrict");
hiveConf.setVar(HiveConf.ConfVars.HIVEINPUTFORMAT, HiveInputFormat.class.getName());
@@ -179,14 +179,14 @@ public class TestAcidOnTez {
runStatementOnDriver("create table " + Table.NONACIDNONBUCKET + " stored as ORC TBLPROPERTIES('transactional'='false') as " +
"select a, b from " + Table.ACIDTBL + " where a <= 5 union all select a, b from " + Table.NONACIDORCTBL + " where a >= 5", confForTez);
- List<String> rs = runStatementOnDriver("select a, b, INPUT__FILE__NAME from " + Table.NONACIDNONBUCKET + " order by a, b, INPUT__FILE__NAME");
+ List<String> rs = runStatementOnDriver("select a, b, INPUT__FILE__NAME from " + Table.NONACIDNONBUCKET + " order by a, b, INPUT__FILE__NAME", confForTez);
String expected0[][] = {
- {"1\t2", "/1/000000_0"},
- {"3\t4", "/1/000000_0"},
- {"5\t6", "/1/000000_0"},
- {"5\t6", "/2/000000_0"},
- {"7\t8", "/2/000000_0"},
- {"9\t10", "/2/000000_0"},
+ {"1\t2", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "1/000000_0"},
+ {"3\t4", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "1/000000_0"},
+ {"5\t6", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "1/000000_0"},
+ {"5\t6", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "2/000000_0"},
+ {"7\t8", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "2/000000_0"},
+ {"9\t10", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "2/000000_0"},
};
Assert.assertEquals("Unexpected row count after ctas", expected0.length, rs.size());
//verify data and layout
@@ -195,9 +195,9 @@ public class TestAcidOnTez {
Assert.assertTrue("Actual line(file) " + i + " bc: " + rs.get(i), rs.get(i).endsWith(expected0[i][1]));
}
//make the table ACID
- runStatementOnDriver("alter table " + Table.NONACIDNONBUCKET + " SET TBLPROPERTIES ('transactional'='true')");
+ runStatementOnDriver("alter table " + Table.NONACIDNONBUCKET + " SET TBLPROPERTIES ('transactional'='true')", confForTez);
- rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from " + Table.NONACIDNONBUCKET + " order by ROW__ID");
+ rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from " + Table.NONACIDNONBUCKET + " order by ROW__ID", confForTez);
LOG.warn("after ctas:");
for (String s : rs) {
LOG.warn(s);
@@ -206,12 +206,12 @@ public class TestAcidOnTez {
/*
* Expected result 0th entry i the RecordIdentifier + data. 1st entry file before compact*/
String expected[][] = {
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":0}\t1\t2", "/1/000000_0"},
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":1}\t3\t4", "/1/000000_0"},
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":2}\t5\t6", "/1/000000_0"},
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":3}\t9\t10", "/2/000000_0"},
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":4}\t7\t8", "/2/000000_0"},
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":5}\t5\t6", "/2/000000_0"},
+ {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":0}\t1\t2", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "1/000000_0"},
+ {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":1}\t3\t4", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "1/000000_0"},
+ {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":2}\t5\t6", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "1/000000_0"},
+ {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":3}\t9\t10", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "2/000000_0"},
+ {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":4}\t7\t8", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "2/000000_0"},
+ {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":5}\t5\t6", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "2/000000_0"},
};
Assert.assertEquals("Unexpected row count after ctas", expected.length, rs.size());
//verify data and layout
@@ -220,17 +220,17 @@ public class TestAcidOnTez {
Assert.assertTrue("Actual line(file) " + i + " bc: " + rs.get(i), rs.get(i).endsWith(expected[i][1]));
}
//perform some Update/Delete
- runStatementOnDriver("update " + Table.NONACIDNONBUCKET + " set a = 70, b = 80 where a = 7");
- runStatementOnDriver("delete from " + Table.NONACIDNONBUCKET + " where a = 5");
- rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from " + Table.NONACIDNONBUCKET + " order by ROW__ID");
+ runStatementOnDriver("update " + Table.NONACIDNONBUCKET + " set a = 70, b = 80 where a = 7", confForTez);
+ runStatementOnDriver("delete from " + Table.NONACIDNONBUCKET + " where a = 5", confForTez);
+ rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from " + Table.NONACIDNONBUCKET + " order by ROW__ID", confForTez);
LOG.warn("after update/delete:");
for (String s : rs) {
LOG.warn(s);
}
String[][] expected2 = {
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":0}\t1\t2", "/1/000000_0"},
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":1}\t3\t4", "/1/000000_0"},
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":3}\t9\t10", "/2/000000_0"},
+ {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":0}\t1\t2", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "1/000000_0"},
+ {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":1}\t3\t4", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "1/000000_0"},
+ {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":3}\t9\t10", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "2/000000_0"},
{"{\"transactionid\":21,\"bucketid\":536870912,\"rowid\":0}\t70\t80", "delta_0000021_0000021_0000/bucket_00000"}
};
Assert.assertEquals("Unexpected row count after update", expected2.length, rs.size());
@@ -255,9 +255,9 @@ public class TestAcidOnTez {
Assert.assertNull("at " + i + " " + expectedDelDelta[i] + " not found on disk", expectedDelDelta[i]);
}
//run Minor compaction
- runStatementOnDriver("alter table " + Table.NONACIDNONBUCKET + " compact 'minor'");
+ runStatementOnDriver("alter table " + Table.NONACIDNONBUCKET + " compact 'minor'", confForTez);
TestTxnCommands2.runWorker(hiveConf);
- rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from " + Table.NONACIDNONBUCKET + " order by ROW__ID");
+ rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from " + Table.NONACIDNONBUCKET + " order by ROW__ID", confForTez);
LOG.warn("after compact minor:");
for (String s : rs) {
LOG.warn(s);
@@ -285,9 +285,9 @@ public class TestAcidOnTez {
Assert.assertNull("at " + i + " " + expectedDelDelta2[i] + " not found on disk", expectedDelDelta2[i]);
}
//run Major compaction
- runStatementOnDriver("alter table " + Table.NONACIDNONBUCKET + " compact 'major'");
+ runStatementOnDriver("alter table " + Table.NONACIDNONBUCKET + " compact 'major'", confForTez);
TestTxnCommands2.runWorker(hiveConf);
- rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from " + Table.NONACIDNONBUCKET + " order by ROW__ID");
+ rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from " + Table.NONACIDNONBUCKET + " order by ROW__ID", confForTez);
LOG.warn("after compact major:");
for (String s : rs) {
LOG.warn(s);
@@ -306,8 +306,12 @@ public class TestAcidOnTez {
* How to do this? CTAS is the only way to create data files which are not immediate children
* of the partition dir. CTAS/Union/Tez doesn't support partition tables. The only way is to copy
* data files in directly.
+ *
+ * Actually Insert Into ... select ... union all ... with
+ * HIVE_OPTIMIZE_UNION_REMOVE (and HIVEFETCHTASKCONVERSION="none"?) will create subdirs
+ * but if writing to non acid table there is a merge task on MR (but not on Tez)
*/
- @Ignore("HIVE-17214")
+ @Ignore("HIVE-17214")//this consistently works locally but never in ptest....
@Test
public void testNonStandardConversion02() throws Exception {
HiveConf confForTez = new HiveConf(hiveConf); // make a clone of existing hive conf
@@ -320,13 +324,13 @@ public class TestAcidOnTez {
"union all select a, b from " + Table.ACIDTBL + " where a = 5", confForTez);
List<String> rs = runStatementOnDriver("select a, b, INPUT__FILE__NAME from " +
- Table.NONACIDNONBUCKET + " order by a, b");
+ Table.NONACIDNONBUCKET + " order by a, b", confForTez);
String expected0[][] = {
- {"1\t2", "/1/000000_0"},
- {"3\t4", "/1/000000_0"},
- {"5\t6", "/3/000000_0"},
- {"7\t8", "/2/000000_0"},
- {"9\t10", "/2/000000_0"},
+ {"1\t2", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "1/000000_0"},
+ {"3\t4", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "1/000000_0"},
+ {"5\t6", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "3/000000_0"},
+ {"7\t8", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "2/000000_0"},
+ {"9\t10", AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "2/000000_0"},
};
Assert.assertEquals("Unexpected row count after ctas", expected0.length, rs.size());
//verify data and layout
@@ -338,7 +342,7 @@ public class TestAcidOnTez {
FileStatus[] status = fs.listStatus(new Path(TEST_WAREHOUSE_DIR + "/" +
(Table.NONACIDNONBUCKET).toString().toLowerCase()), FileUtils.STAGING_DIR_PATH_FILTER);
//ensure there is partition dir
- runStatementOnDriver("insert into " + Table.NONACIDPART + " partition (p=1) values (100,110)");
+ runStatementOnDriver("insert into " + Table.NONACIDPART + " partition (p=1) values (100,110)", confForTez);
//creates more files in that partition
for(FileStatus stat : status) {
int limit = 5;
@@ -357,29 +361,29 @@ public class TestAcidOnTez {
nonacidpart/
└── p=1
├── 000000_0
- ├── 1
+ ├── HIVE_UNION_SUBDIR__1
│  └── 000000_0
- ├── 2
+ ├── HIVE_UNION_SUBDIR_2
│  └── 000000_0
- └── 3
+ └── HIVE_UNION_SUBDIR_3
└── 000000_0
4 directories, 4 files
**/
//make the table ACID
- runStatementOnDriver("alter table " + Table.NONACIDPART + " SET TBLPROPERTIES ('transactional'='true')");
- rs = runStatementOnDriver("select ROW__ID, a, b, p, INPUT__FILE__NAME from " + Table.NONACIDPART + " order by ROW__ID");
+ runStatementOnDriver("alter table " + Table.NONACIDPART + " SET TBLPROPERTIES ('transactional'='true')", confForTez);
+ rs = runStatementOnDriver("select ROW__ID, a, b, p, INPUT__FILE__NAME from " + Table.NONACIDPART + " order by ROW__ID", confForTez);
LOG.warn("after acid conversion:");
for (String s : rs) {
LOG.warn(s);
}
String[][] expected = {
{"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":0}\t100\t110\t1", "nonacidpart/p=1/000000_0"},
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":1}\t1\t2\t1", "nonacidpart/p=1/1/000000_0"},
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":2}\t3\t4\t1", "nonacidpart/p=1/1/000000_0"},
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":3}\t9\t10\t1", "nonacidpart/p=1/2/000000_0"},
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":4}\t7\t8\t1", "nonacidpart/p=1/2/000000_0"},
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":5}\t5\t6\t1", "nonacidpart/p=1/3/000000_0"}
+ {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":1}\t1\t2\t1", "nonacidpart/p=1/" + AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "1/000000_0"},
+ {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":2}\t3\t4\t1", "nonacidpart/p=1/" + AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "1/000000_0"},
+ {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":3}\t9\t10\t1", "nonacidpart/p=1/" + AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "2/000000_0"},
+ {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":4}\t7\t8\t1", "nonacidpart/p=1/" + AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "2/000000_0"},
+ {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":5}\t5\t6\t1", "nonacidpart/p=1/" + AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "3/000000_0"}
};
Assert.assertEquals("Wrong row count", expected.length, rs.size());
//verify data and layout
@@ -389,9 +393,9 @@ public class TestAcidOnTez {
}
//run Major compaction
- runStatementOnDriver("alter table " + Table.NONACIDPART + " partition (p=1) compact 'major'");
+ runStatementOnDriver("alter table " + Table.NONACIDPART + " partition (p=1) compact 'major'", confForTez);
TestTxnCommands2.runWorker(hiveConf);
- rs = runStatementOnDriver("select ROW__ID, a, b, p, INPUT__FILE__NAME from " + Table.NONACIDPART + " order by ROW__ID");
+ rs = runStatementOnDriver("select ROW__ID, a, b, p, INPUT__FILE__NAME from " + Table.NONACIDPART + " order by ROW__ID", confForTez);
LOG.warn("after major compaction:");
for (String s : rs) {
LOG.warn(s);
@@ -406,33 +410,42 @@ public class TestAcidOnTez {
}
/**
* CTAS + Tez + Union creates a non-standard layout in table dir
- * Each leg of the union places data into a subdir of the table/partition. Subdirs are named 1/, 2/, etc
- * The way this currently works is that CTAS creates an Acid table but the insert statement writes
- * the data in non-acid layout. Then on read, it's treated like an non-acid to acid conversion.
- * Longer term CTAS should create acid layout from the get-go.
+ * Each leg of the union places data into a subdir of the table/partition.
+ * Subdirs are named HIVE_UNION_SUBDIR_1/, HIVE_UNION_SUBDIR_2/, etc
+ * For Acid tables the writer for each dir must have a different statementId ensured by
+ * {@link org.apache.hadoop.hive.ql.optimizer.QueryPlanPostProcessor}.
+ * {@link org.apache.hadoop.hive.ql.metadata.Hive#moveAcidFiles(FileSystem, FileStatus[], Path, List)} drops the union subdirs
+ * since each delta file has a unique name.
*/
@Test
public void testCtasTezUnion() throws Exception {
HiveConf confForTez = new HiveConf(hiveConf); // make a clone of existing hive conf
+ confForTez.setBoolVar(HiveConf.ConfVars.HIVE_EXPLAIN_USER, false);
setupTez(confForTez);
//CTAS with ACID target table
+ List<String> rs0 = runStatementOnDriver("explain create table " + Table.ACIDNOBUCKET + " stored as ORC TBLPROPERTIES('transactional'='true') as " +
+ "select a, b from " + Table.ACIDTBL + " where a <= 5 union all select a, b from " + Table.NONACIDORCTBL + " where a >= 5", confForTez);
+ LOG.warn("explain ctas:");//TezEdgeProperty.EdgeType
+ for (String s : rs0) {
+ LOG.warn(s);
+ }
runStatementOnDriver("create table " + Table.ACIDNOBUCKET + " stored as ORC TBLPROPERTIES('transactional'='true') as " +
"select a, b from " + Table.ACIDTBL + " where a <= 5 union all select a, b from " + Table.NONACIDORCTBL + " where a >= 5", confForTez);
- List<String> rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from " + Table.ACIDNOBUCKET + " order by ROW__ID");
+ List<String> rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from " + Table.ACIDNOBUCKET + " order by ROW__ID", confForTez);
LOG.warn("after ctas:");
for (String s : rs) {
LOG.warn(s);
}
Assert.assertEquals(0, BucketCodec.determineVersion(536870912).decodeWriterId(536870912));
/*
- * Expected result 0th entry i the RecordIdentifier + data. 1st entry file before compact*/
+ * Expected result 0th entry is the RecordIdentifier + data. 1st entry file before compact*/
String expected[][] = {
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":0}\t1\t2", "/1/000000_0"},
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":1}\t3\t4", "/1/000000_0"},
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":2}\t5\t6", "/1/000000_0"},
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":3}\t9\t10", "/2/000000_0"},
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":4}\t7\t8", "/2/000000_0"},
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":5}\t5\t6", "/2/000000_0"},
+ {"{\"transactionid\":18,\"bucketid\":536870913,\"rowid\":0}\t1\t2", "/delta_0000018_0000018_0001/bucket_00000"},
+ {"{\"transactionid\":18,\"bucketid\":536870913,\"rowid\":1}\t3\t4", "/delta_0000018_0000018_0001/bucket_00000"},
+ {"{\"transactionid\":18,\"bucketid\":536870913,\"rowid\":2}\t5\t6", "/delta_0000018_0000018_0001/bucket_00000"},
+ {"{\"transactionid\":18,\"bucketid\":536870914,\"rowid\":0}\t9\t10", "/delta_0000018_0000018_0002/bucket_00000"},
+ {"{\"transactionid\":18,\"bucketid\":536870914,\"rowid\":1}\t7\t8", "/delta_0000018_0000018_0002/bucket_00000"},
+ {"{\"transactionid\":18,\"bucketid\":536870914,\"rowid\":2}\t5\t6", "/delta_0000018_0000018_0002/bucket_00000"},
};
Assert.assertEquals("Unexpected row count after ctas", expected.length, rs.size());
//verify data and layout
@@ -441,18 +454,18 @@ public class TestAcidOnTez {
Assert.assertTrue("Actual line(file) " + i + " bc: " + rs.get(i), rs.get(i).endsWith(expected[i][1]));
}
//perform some Update/Delete
- runStatementOnDriver("update " + Table.ACIDNOBUCKET + " set a = 70, b = 80 where a = 7");
- runStatementOnDriver("delete from " + Table.ACIDNOBUCKET + " where a = 5");
- rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from " + Table.ACIDNOBUCKET + " order by ROW__ID");
+ runStatementOnDriver("update " + Table.ACIDNOBUCKET + " set a = 70, b = 80 where a = 7", confForTez);
+ runStatementOnDriver("delete from " + Table.ACIDNOBUCKET + " where a = 5", confForTez);
+ rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from " + Table.ACIDNOBUCKET + " order by ROW__ID", confForTez);
LOG.warn("after update/delete:");
for (String s : rs) {
LOG.warn(s);
}
String[][] expected2 = {
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":0}\t1\t2", "/1/000000_0"},
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":1}\t3\t4", "/1/000000_0"},
- {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":3}\t9\t10", "/2/000000_0"},
- {"{\"transactionid\":19,\"bucketid\":536870912,\"rowid\":0}\t70\t80", "delta_0000019_0000019_0000/bucket_00000"}
+ {"{\"transactionid\":18,\"bucketid\":536870913,\"rowid\":0}\t1\t2", "/delta_0000018_0000018_0001/bucket_00000"},
+ {"{\"transactionid\":18,\"bucketid\":536870913,\"rowid\":1}\t3\t4", "/delta_0000018_0000018_0001/bucket_00000"},
+ {"{\"transactionid\":18,\"bucketid\":536870914,\"rowid\":0}\t9\t10", "/delta_0000018_0000018_0002/bucket_00000"},
+ {"{\"transactionid\":20,\"bucketid\":536870912,\"rowid\":0}\t70\t80", "delta_0000020_0000020_0000/bucket_00000"}
};
Assert.assertEquals("Unexpected row count after update", expected2.length, rs.size());
//verify data and layout
@@ -464,7 +477,7 @@ public class TestAcidOnTez {
FileSystem fs = FileSystem.get(hiveConf);
FileStatus[] status = fs.listStatus(new Path(TEST_WAREHOUSE_DIR + "/" +
(Table.ACIDNOBUCKET).toString().toLowerCase()), FileUtils.STAGING_DIR_PATH_FILTER);
- String[] expectedDelDelta = {"delete_delta_0000019_0000019_0000", "delete_delta_0000020_0000020_0000"};
+ String[] expectedDelDelta = {"delete_delta_0000020_0000020_0000", "delete_delta_0000021_0000021_0000"};
for(FileStatus stat : status) {
for(int i = 0; i < expectedDelDelta.length; i++) {
if(expectedDelDelta[i] != null && stat.getPath().toString().endsWith(expectedDelDelta[i])) {
@@ -476,9 +489,9 @@ public class TestAcidOnTez {
Assert.assertNull("at " + i + " " + expectedDelDelta[i] + " not found on disk", expectedDelDelta[i]);
}
//run Minor compaction
- runStatementOnDriver("alter table " + Table.ACIDNOBUCKET + " compact 'minor'");
+ runStatementOnDriver("alter table " + Table.ACIDNOBUCKET + " compact 'minor'", confForTez);
TestTxnCommands2.runWorker(hiveConf);
- rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from " + Table.ACIDNOBUCKET + " order by ROW__ID");
+ rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from " + Table.ACIDNOBUCKET + " order by ROW__ID", confForTez);
LOG.warn("after compact minor:");
for (String s : rs) {
LOG.warn(s);
@@ -493,7 +506,7 @@ public class TestAcidOnTez {
//check we have right delete delta files after minor compaction
status = fs.listStatus(new Path(TEST_WAREHOUSE_DIR + "/" +
(Table.ACIDNOBUCKET).toString().toLowerCase()), FileUtils.STAGING_DIR_PATH_FILTER);
- String[] expectedDelDelta2 = { "delete_delta_0000019_0000019_0000", "delete_delta_0000020_0000020_0000", "delete_delta_0000019_0000020"};
+ String[] expectedDelDelta2 = { "delete_delta_0000020_0000020_0000", "delete_delta_0000021_0000021_0000", "delete_delta_0000018_0000021"};
for(FileStatus stat : status) {
for(int i = 0; i < expectedDelDelta2.length; i++) {
if(expectedDelDelta2[i] != null && stat.getPath().toString().endsWith(expectedDelDelta2[i])) {
@@ -506,9 +519,9 @@ public class TestAcidOnTez {
Assert.assertNull("at " + i + " " + expectedDelDelta2[i] + " not found on disk", expectedDelDelta2[i]);
}
//run Major compaction
- runStatementOnDriver("alter table " + Table.ACIDNOBUCKET + " compact 'major'");
+ runStatementOnDriver("alter table " + Table.ACIDNOBUCKET + " compact 'major'", confForTez);
TestTxnCommands2.runWorker(hiveConf);
- rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from " + Table.ACIDNOBUCKET + " order by ROW__ID");
+ rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from " + Table.ACIDNOBUCKET + " order by ROW__ID", confForTez);
LOG.warn("after compact major:");
for (String s : rs) {
LOG.warn(s);
@@ -517,7 +530,178 @@ public class TestAcidOnTez {
for(int i = 0; i < expected2.length; i++) {
Assert.assertTrue("Actual line " + i + " bc: " + rs.get(i), rs.get(i).startsWith(expected2[i][0]));
//everything is now in base/
- Assert.assertTrue("Actual line(file) " + i + " bc: " + rs.get(i), rs.get(i).endsWith("base_0000020/bucket_00000"));
+ Assert.assertTrue("Actual line(file) " + i + " bc: " + rs.get(i), rs.get(i).endsWith("base_0000021/bucket_00000"));
+ }
+ }
+ /**
+ * 1. Insert into regular unbucketed table from Union all - union is removed and data is placed in
+ * subdirs of target table.
+ * 2. convert to acid table and check data
+ * 3. compact and check data
+ * Compare with {@link #testAcidInsertWithRemoveUnion()} where T is transactional=true
+ */
+ @Test
+ public void testInsertWithRemoveUnion() throws Exception {
+ int[][] values = {{1,2},{3,4},{5,6},{7,8},{9,10}};
+ HiveConf confForTez = new HiveConf(hiveConf); // make a clone of existing hive conf
+ setupTez(confForTez);
+ runStatementOnDriver("drop table if exists T", confForTez);
+ runStatementOnDriver("create table T (a int, b int) stored as ORC TBLPROPERTIES ('transactional'='false')", confForTez);
+ /*
+ekoifman:apache-hive-3.0.0-SNAPSHOT-bin ekoifman$ tree ~/dev/hiverwgit/itests/hive-unit/target/tmp/org.apache.hadoop.hive.ql.TestAcidOnTez-1505502329802/warehouse/t/.hive-staging_hive_2017-09-15_12-07-33_224_7717909516029836949-1/
+/Users/ekoifman/dev/hiverwgit/itests/hive-unit/target/tmp/org.apache.hadoop.hive.ql.TestAcidOnTez-1505502329802/warehouse/t/.hive-staging_hive_2017-09-15_12-07-33_224_7717909516029836949-1/
+└── -ext-10000
+ ├── HIVE_UNION_SUBDIR_1
+ │  └── 000000_0
+ ├── HIVE_UNION_SUBDIR_2
+ │  └── 000000_0
+ └── HIVE_UNION_SUBDIR_3
+ └── 000000_0
+
+4 directories, 3 files
+ */
+ runStatementOnDriver("insert into T(a,b) select a, b from " + Table.ACIDTBL + " where a between 1 and 3 group by a, b union all select a, b from " + Table.ACIDTBL + " where a between 5 and 7 union all select a, b from " + Table.ACIDTBL + " where a >= 9", confForTez);
+ List<String> rs = runStatementOnDriver("select a, b, INPUT__FILE__NAME from T order by a, b, INPUT__FILE__NAME", confForTez);
+ LOG.warn(testName.getMethodName() + ": before converting to acid");
+ for(String s : rs) {
+ LOG.warn(s);
+ }
+ String[][] expected = {
+ {"1\t2","warehouse/t/" + AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "1/000000_0"},
+ {"3\t4","warehouse/t/" + AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "1/000000_0"},
+ {"5\t6","warehouse/t/" + AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "2/000000_0"},
+ {"7\t8","warehouse/t/" + AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "2/000000_0"},
+ {"9\t10","warehouse/t/" + AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "3/000000_0"}
+ };
+ Assert.assertEquals("Unexpected row count after conversion", expected.length, rs.size());
+ for(int i = 0; i < expected.length; i++) {
+ Assert.assertTrue("Actual line " + i + " bc: " + rs.get(i), rs.get(i).startsWith(expected[i][0]));
+ Assert.assertTrue("Actual line(file) " + i + " bc: " + rs.get(i), rs.get(i).endsWith(expected[i][1]));
+ }
+ //make the table ACID
+ runStatementOnDriver("alter table T SET TBLPROPERTIES ('transactional'='true')", confForTez);
+ rs = runStatementOnDriver("select a,b from T order by a, b", confForTez);
+ Assert.assertEquals("After to Acid conversion", TestTxnCommands2.stringifyValues(values), rs);
+
+ //run Major compaction
+ runStatementOnDriver("alter table T compact 'major'", confForTez);
+ TestTxnCommands2.runWorker(hiveConf);
+ rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from T order by ROW__ID", confForTez);
+ LOG.warn(testName.getMethodName() + ": after compact major of T:");
+ for (String s : rs) {
+ LOG.warn(s);
+ }
+ String[][] expected2 = {
+ {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":0}\t1\t2", "warehouse/t/base_-9223372036854775808/bucket_00000"},
+ {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":1}\t3\t4", "warehouse/t/base_-9223372036854775808/bucket_00000"},
+ {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":2}\t5\t6", "warehouse/t/base_-9223372036854775808/bucket_00000"},
+ {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":3}\t7\t8", "warehouse/t/base_-9223372036854775808/bucket_00000"},
+ {"{\"transactionid\":0,\"bucketid\":536870912,\"rowid\":4}\t9\t10", "warehouse/t/base_-9223372036854775808/bucket_00000"}
+ };
+ Assert.assertEquals("Unexpected row count after major compact", expected2.length, rs.size());
+ for(int i = 0; i < expected2.length; i++) {
+ Assert.assertTrue("Actual line " + i + " ac: " + rs.get(i), rs.get(i).startsWith(expected2[i][0]));
+ Assert.assertTrue("Actual line(file) " + i + " ac: " + rs.get(i), rs.get(i).endsWith(expected2[i][1]));
+ }
+ }
+ /**
+ * 1. Insert into unbucketed acid table from Union all - union is removed and data is placed in
+ * subdirs of target table.
+ * 2. convert to acid table and check data
+ * 3. compact and check data
+ * Compare with {@link #testInsertWithRemoveUnion()} where T is transactional=false
+ */
+ @Test
+ public void testAcidInsertWithRemoveUnion() throws Exception {
+ HiveConf confForTez = new HiveConf(hiveConf); // make a clone of existing hive conf
+ setupTez(confForTez);
+ int[][] values = {{1,2},{3,4},{5,6},{7,8},{9,10}};
+ runStatementOnDriver("drop table if exists T", confForTez);
+ runStatementOnDriver("create table T (a int, b int) stored as ORC TBLPROPERTIES ('transactional'='true')", confForTez);
+ /*On Tez, below (T is transactional), we get the following layout
+ekoifman:apache-hive-3.0.0-SNAPSHOT-bin ekoifman$ tree ~/dev/hiverwgit/itests/hive-unit/target/tmp/org.apache.hadoop.hive.ql.TestAcidOnTez-1505500035574/warehouse/t/.hive-staging_hive_2017-09-15_11-28-33_960_9111484239090506828-1/
+/Users/ekoifman/dev/hiverwgit/itests/hive-unit/target/tmp/org.apache.hadoop.hive.ql.TestAcidOnTez-1505500035574/warehouse/t/.hive-staging_hive_2017-09-15_11-28-33_960_9111484239090506828-1/
+└── -ext-10000
+ ├── HIVE_UNION_SUBDIR_1
+ │  └── 000000_0
+ │  ├── _orc_acid_version
+ │  └── delta_0000019_0000019_0001
+ │  └── bucket_00000
+ ├── HIVE_UNION_SUBDIR_2
+ │  └── 000000_0
+ │  ├── _orc_acid_version
+ │  └── delta_0000019_0000019_0002
+ │  └── bucket_00000
+ └── HIVE_UNION_SUBDIR_3
+ └── 000000_0
+ ├── _orc_acid_version
+ └── delta_0000019_0000019_0003
+ └── bucket_00000
+
+10 directories, 6 files */
+ runStatementOnDriver("insert into T(a,b) select a, b from " + Table.ACIDTBL + " where a between 1 and 3 union all select a, b from " + Table.ACIDTBL + " where a between 5 and 7 union all select a, b from " + Table.ACIDTBL + " where a >= 9", confForTez);
+ List<String> rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from T order by a, b", confForTez);
+ LOG.warn(testName.getMethodName() + ": reading acid table T");
+ for(String s : rs) {
+ LOG.warn(s);
+ }
+
+ String[][] expected2 = {
+ {"{\"transactionid\":19,\"bucketid\":536870913,\"rowid\":0}\t1\t2", "warehouse/t/delta_0000019_0000019_0001/bucket_00000"},
+ {"{\"transactionid\":19,\"bucketid\":536870913,\"rowid\":1}\t3\t4", "warehouse/t/delta_0000019_0000019_0001/bucket_00000"},
+ {"{\"transactionid\":19,\"bucketid\":536870914,\"rowid\":0}\t5\t6", "warehouse/t/delta_0000019_0000019_0002/bucket_00000"},
+ {"{\"transactionid\":19,\"bucketid\":536870914,\"rowid\":1}\t7\t8", "warehouse/t/delta_0000019_0000019_0002/bucket_00000"},
+ {"{\"transactionid\":19,\"bucketid\":536870915,\"rowid\":0}\t9\t10", "warehouse/t/delta_0000019_0000019_0003/bucket_00000"}
+ };
+ Assert.assertEquals("Unexpected row count", expected2.length, rs.size());
+ for(int i = 0; i < expected2.length; i++) {
+ Assert.assertTrue("Actual line " + i + " ac: " + rs.get(i), rs.get(i).startsWith(expected2[i][0]));
+ Assert.assertTrue("Actual line(file) " + i + " ac: " + rs.get(i), rs.get(i).endsWith(expected2[i][1]));
+ }
+ }
+ @Test
+ public void testBucketedAcidInsertWithRemoveUnion() throws Exception {
+ HiveConf confForTez = new HiveConf(hiveConf); // make a clone of existing hive conf
+ setupTez(confForTez);
+ int[][] values = {{1,2},{2,4},{5,6},{6,8},{9,10}};
+ runStatementOnDriver("delete from " + Table.ACIDTBL, confForTez);
+ runStatementOnDriver("insert into " + Table.ACIDTBL + TestTxnCommands2.makeValuesClause(values));//make sure both buckets are not empty
+ runStatementOnDriver("drop table if exists T", confForTez);
+ /*
+ With bucketed target table Union All is not removed
+
+ ekoifman:apache-hive-3.0.0-SNAPSHOT-bin ekoifman$ tree ~/dev/hiverwgit/itests/hive-unit/target/tmp/org.apache.hadoop.hive.ql.TestAcidOnTez-1505510130462/warehouse/t/.hive-staging_hive_2017-09-15_14-16-32_422_4626314315862498838-1/
+/Users/ekoifman/dev/hiverwgit/itests/hive-unit/target/tmp/org.apache.hadoop.hive.ql.TestAcidOnTez-1505510130462/warehouse/t/.hive-staging_hive_2017-09-15_14-16-32_422_4626314315862498838-1/
+└── -ext-10000
+ ├── 000000_0
+ │  ├── _orc_acid_version
+ │  └── delta_0000021_0000021_0000
+ │  └── bucket_00000
+ └── 000001_0
+ ├── _orc_acid_version
+ └── delta_0000021_0000021_0000
+ └── bucket_00001
+
+5 directories, 4 files
+*/
+ runStatementOnDriver("create table T (a int, b int) clustered by (a) into 2 buckets stored as ORC TBLPROPERTIES ('transactional'='true')", confForTez);
+ runStatementOnDriver("insert into T(a,b) select a, b from " + Table.ACIDTBL + " where a between 1 and 3 union all select a, b from " + Table.ACIDTBL + " where a between 5 and 7 union all select a, b from " + Table.ACIDTBL + " where a >= 9", confForTez);
+ List<String> rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from T order by a, b", confForTez);
+ LOG.warn(testName.getMethodName() + ": reading bucketed acid table T");
+ for(String s : rs) {
+ LOG.warn(s);
+ }
+ String[][] expected2 = {
+ {"{\"transactionid\":21,\"bucketid\":536936448,\"rowid\":0}\t1\t2", "warehouse/t/delta_0000021_0000021_0000/bucket_00001"},
+ {"{\"transactionid\":21,\"bucketid\":536870912,\"rowid\":0}\t2\t4", "warehouse/t/delta_0000021_0000021_0000/bucket_00000"},
+ {"{\"transactionid\":21,\"bucketid\":536936448,\"rowid\":1}\t5\t6", "warehouse/t/delta_0000021_0000021_0000/bucket_00001"},
+ {"{\"transactionid\":21,\"bucketid\":536870912,\"rowid\":1}\t6\t8", "warehouse/t/delta_0000021_0000021_0000/bucket_00000"},
+ {"{\"transactionid\":21,\"bucketid\":536936448,\"rowid\":2}\t9\t10", "warehouse/t/delta_0000021_0000021_0000/bucket_00001"}
+ };
+ Assert.assertEquals("Unexpected row count", expected2.length, rs.size());
+ for(int i = 0; i < expected2.length; i++) {
+ Assert.assertTrue("Actual line " + i + " ac: " + rs.get(i), rs.get(i).startsWith(expected2[i][0]));
+ Assert.assertTrue("Actual line(file) " + i + " ac: " + rs.get(i), rs.get(i).endsWith(expected2[i][1]));
}
}
// Ideally test like this should be a qfile test. However, the explain output from qfile is always
@@ -613,6 +797,7 @@ public class TestAcidOnTez {
private List<String> runStatementOnDriver(String stmt, HiveConf conf)
throws Exception {
Driver driver = new Driver(conf);
+ driver.setMaxRows(10000);
CommandProcessorResponse cpr = driver.run(stmt);
if(cpr.getResponseCode() != 0) {
throw new RuntimeException(stmt + " failed: " + cpr);
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/java/org/apache/hadoop/hive/ql/Context.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/Context.java b/ql/src/java/org/apache/hadoop/hive/ql/Context.java
index c66934a..d074701 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/Context.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/Context.java
@@ -1002,4 +1002,7 @@ public class Context {
public void setIsUpdateDeleteMerge(boolean isUpdate) {
this.isUpdateDeleteMerge = isUpdate;
}
+ public String getExecutionId() {
+ return executionId;
+ }
}
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/Driver.java b/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
index 1157e00..b35edfb 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
@@ -1198,7 +1198,11 @@ public class Driver implements CommandProcessor {
}
// Set the transaction id in all of the acid file sinks
if (haveAcidWrite()) {
- for (FileSinkDesc desc : plan.getAcidSinks()) {
+ List<FileSinkDesc> acidSinks = new ArrayList<>(plan.getAcidSinks());
+ //sorting makes tests easier to write since file names and ROW__IDs depend on statementId
+ //so this makes (file name -> data) mapping stable
+ acidSinks.sort((FileSinkDesc fsd1, FileSinkDesc fsd2) -> fsd1.getDirName().compareTo(fsd2.getDirName()));
+ for (FileSinkDesc desc : acidSinks) {
desc.setTransactionId(txnMgr.getCurrentTxnId());
//it's possible to have > 1 FileSink writing to the same table/partition
//e.g. Merge stmt, multi-insert stmt when mixing DP and SP writes
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
index 739ce18..b000745 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
@@ -289,10 +289,19 @@ public class MoveTask extends Task<MoveWork> implements Serializable {
Utilities.LOG14535.info("MoveTask not moving LFD " + sourcePath);
} else {
Utilities.LOG14535.info("MoveTask moving LFD " + sourcePath + " to " + targetPath);
- moveFile(sourcePath, targetPath, lfd.getIsDfsDir());
+ if(lfd.getWriteType() == AcidUtils.Operation.INSERT) {
+ //'targetPath' is table root of un-partitioned table/partition
+ //'sourcePath' result of 'select ...' part of CTAS statement
+ assert lfd.getIsDfsDir();
+ FileSystem srcFs = sourcePath.getFileSystem(conf);
+ List<Path> newFiles = new ArrayList<>();
+ Hive.moveAcidFiles(srcFs, srcFs.globStatus(sourcePath), targetPath, newFiles);
+ }
+ else {
+ moveFile(sourcePath, targetPath, lfd.getIsDfsDir());
+ }
}
}
-
// Multi-file load is for dynamic partitions when some partitions do not
// need to merge and they can simply be moved to the target directory.
// This is also used for MM table conversion.
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java b/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java
index 3de83c6..c2d4612 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java
@@ -42,6 +42,8 @@ import org.apache.hadoop.hive.metastore.TransactionalValidationListener;
import org.apache.hadoop.hive.ql.ErrorMsg;
import org.apache.hadoop.hive.ql.io.orc.OrcRecordUpdater;
import org.apache.hadoop.hive.ql.metadata.Table;
+import org.apache.hadoop.hive.ql.plan.CreateTableDesc;
+import org.apache.hadoop.hive.ql.plan.TableDesc;
import org.apache.hadoop.hive.shims.HadoopShims;
import org.apache.hadoop.hive.shims.HadoopShims.HdfsFileStatusWithId;
import org.apache.hadoop.hive.shims.ShimLoader;
@@ -1195,6 +1197,16 @@ public class AcidUtils {
return tableIsTransactional != null && tableIsTransactional.equalsIgnoreCase("true");
}
+ public static boolean isAcidTable(CreateTableDesc table) {
+ if (table == null || table.getTblProps() == null) {
+ return false;
+ }
+ String tableIsTransactional = table.getTblProps().get(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL);
+ if (tableIsTransactional == null) {
+ tableIsTransactional = table.getTblProps().get(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL.toUpperCase());
+ }
+ return tableIsTransactional != null && tableIsTransactional.equalsIgnoreCase("true");
+ }
public static boolean isFullAcidTable(Table table) {
return isAcidTable(table) && !MetaStoreUtils.isInsertOnlyTable(table.getParameters());
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
index e51e648..d44d081 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
@@ -134,6 +134,7 @@ import org.apache.hadoop.hive.metastore.api.StorageDescriptor;
import org.apache.hadoop.hive.metastore.api.UniqueConstraintsRequest;
import org.apache.hadoop.hive.metastore.api.hive_metastoreConstants;
import org.apache.hadoop.hive.ql.ErrorMsg;
+import org.apache.hadoop.hive.ql.exec.AbstractFileMergeOperator;
import org.apache.hadoop.hive.ql.exec.FunctionRegistry;
import org.apache.hadoop.hive.ql.exec.FunctionTask;
import org.apache.hadoop.hive.ql.exec.FunctionUtils;
@@ -3612,12 +3613,14 @@ private void constructOneLBLocationMap(FileStatus fSta,
}
}
- private static void moveAcidFiles(FileSystem fs, FileStatus[] stats, Path dst,
+ public static void moveAcidFiles(FileSystem fs, FileStatus[] stats, Path dst,
List<Path> newFiles) throws HiveException {
// The layout for ACID files is table|partname/base|delta|delete_delta/bucket
- // We will always only be writing delta files. In the buckets created by FileSinkOperator
- // it will look like bucket/delta|delete_delta/bucket. So we need to move that into
- // the above structure. For the first mover there will be no delta directory,
+ // We will always only be writing delta files ( except IOW which writes base_X/ ).
+ // In the buckets created by FileSinkOperator
+ // it will look like original_bucket/delta|delete_delta/bucket
+ // (e.g. .../-ext-10004/000000_0/delta_0000014_0000014_0000/bucket_00000). So we need to
+ // move that into the above structure. For the first mover there will be no delta directory,
// so we can move the whole directory.
// For everyone else we will need to just move the buckets under the existing delta
// directory.
@@ -3632,6 +3635,36 @@ private void constructOneLBLocationMap(FileStatus fSta,
FileStatus[] origBucketStats = null;
try {
origBucketStats = fs.listStatus(srcPath, AcidUtils.originalBucketFilter);
+ if(origBucketStats == null || origBucketStats.length == 0) {
+ /**
+ check if we are dealing with data with non-standard layout. For example a write
+ produced by a (optimized) Union All query
+ which looks like
+ └── -ext-10000
+ ├── HIVE_UNION_SUBDIR_1
+ │  └── 000000_0
+ │  ├── _orc_acid_version
+ │  └── delta_0000019_0000019_0001
+ │  └── bucket_00000
+ ├── HIVE_UNION_SUBDIR_2
+ │  └── 000000_0
+ │  ├── _orc_acid_version
+ │  └── delta_0000019_0000019_0002
+ │  └── bucket_00000
+ The assumption is that we either have all data in subdirs or root of srcPath
+ but not both.
+ For Union case, we expect delta dirs to have unique names which is assured by
+ {@link org.apache.hadoop.hive.ql.optimizer.QueryPlanPostProcessor}
+ */
+ FileStatus[] unionSubdirs = fs.globStatus(new Path(srcPath,
+ AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + "[0-9]*"));
+ List<FileStatus> buckets = new ArrayList<>();
+ for(FileStatus unionSubdir : unionSubdirs) {
+ Collections.addAll(buckets,
+ fs.listStatus(unionSubdir.getPath(), AcidUtils.originalBucketFilter));
+ }
+ origBucketStats = buckets.toArray(new FileStatus[buckets.size()]);
+ }
} catch (IOException e) {
String msg = "Unable to look for bucket files in src path " + srcPath.toUri().toString();
LOG.error(msg);
@@ -3645,7 +3678,7 @@ private void constructOneLBLocationMap(FileStatus fSta,
fs, dst, origBucketPath, createdDeltaDirs, newFiles);
moveAcidFiles(AcidUtils.DELETE_DELTA_PREFIX, AcidUtils.deleteEventDeltaDirFilter,
fs, dst,origBucketPath, createdDeltaDirs, newFiles);
- moveAcidFiles(AcidUtils.BASE_PREFIX, AcidUtils.baseFileFilter,
+ moveAcidFiles(AcidUtils.BASE_PREFIX, AcidUtils.baseFileFilter,//for Insert Overwrite
fs, dst, origBucketPath, createdDeltaDirs, newFiles);
}
}
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/java/org/apache/hadoop/hive/ql/optimizer/QueryPlanPostProcessor.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/QueryPlanPostProcessor.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/QueryPlanPostProcessor.java
new file mode 100644
index 0000000..b5bc386
--- /dev/null
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/QueryPlanPostProcessor.java
@@ -0,0 +1,166 @@
+package org.apache.hadoop.hive.ql.optimizer;
+
+import org.apache.hadoop.hive.ql.exec.FileSinkOperator;
+import org.apache.hadoop.hive.ql.exec.Operator;
+import org.apache.hadoop.hive.ql.exec.OperatorUtils;
+import org.apache.hadoop.hive.ql.exec.Task;
+import org.apache.hadoop.hive.ql.exec.repl.ReplStateLogWork;
+import org.apache.hadoop.hive.ql.exec.repl.bootstrap.ReplLoadWork;
+import org.apache.hadoop.hive.ql.index.IndexMetadataChangeWork;
+import org.apache.hadoop.hive.ql.io.AcidUtils;
+import org.apache.hadoop.hive.ql.parse.GenTezProcContext;
+import org.apache.hadoop.hive.ql.parse.GenTezWork;
+import org.apache.hadoop.hive.ql.parse.spark.GenSparkWork;
+import org.apache.hadoop.hive.ql.plan.ArchiveWork;
+import org.apache.hadoop.hive.ql.plan.BaseWork;
+import org.apache.hadoop.hive.ql.plan.ColumnStatsUpdateWork;
+import org.apache.hadoop.hive.ql.plan.ColumnStatsWork;
+import org.apache.hadoop.hive.ql.plan.ConditionalWork;
+import org.apache.hadoop.hive.ql.plan.CopyWork;
+import org.apache.hadoop.hive.ql.plan.DDLWork;
+import org.apache.hadoop.hive.ql.plan.DependencyCollectionWork;
+import org.apache.hadoop.hive.ql.plan.ExplainSQRewriteWork;
+import org.apache.hadoop.hive.ql.plan.ExplainWork;
+import org.apache.hadoop.hive.ql.plan.FetchWork;
+import org.apache.hadoop.hive.ql.plan.FileSinkDesc;
+import org.apache.hadoop.hive.ql.plan.FunctionWork;
+import org.apache.hadoop.hive.ql.plan.MapredLocalWork;
+import org.apache.hadoop.hive.ql.plan.MapredWork;
+import org.apache.hadoop.hive.ql.plan.MoveWork;
+import org.apache.hadoop.hive.ql.plan.SparkWork;
+import org.apache.hadoop.hive.ql.plan.StatsNoJobWork;
+import org.apache.hadoop.hive.ql.plan.StatsWork;
+import org.apache.hadoop.hive.ql.plan.TezWork;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Finds Acid FileSinkDesc objects which can be created in the physical (disconnected) plan, e.g.
+ * {@link org.apache.hadoop.hive.ql.parse.GenTezUtils#removeUnionOperators(GenTezProcContext, BaseWork, int)}
+ * so that statementId can be properly assigned to ensure unique ROW__IDs
+ * {@link org.apache.hadoop.hive.ql.optimizer.unionproc.UnionProcFactory} is another example where
+ * Union All optimizations create new FileSinkDescS
+ */
+public class QueryPlanPostProcessor {
+ private static final Logger LOG = LoggerFactory.getLogger(QueryPlanPostProcessor.class);
+
+ public QueryPlanPostProcessor(List<Task<?>> rootTasks, Set<FileSinkDesc> acidSinks, String executionId) {
+ for(Task<?> t : rootTasks) {
+ //Work
+ Object work = t.getWork();
+ if(work instanceof TezWork) {
+ for(BaseWork bw : ((TezWork)work).getAllWorkUnsorted()) {
+ collectFileSinkDescs(bw.getAllLeafOperators(), acidSinks);
+ }
+ }
+ else if(work instanceof BaseWork) {
+ collectFileSinkDescs(((BaseWork)work).getAllLeafOperators(), acidSinks);
+ }
+ else if(work instanceof MapredWork) {
+ MapredWork w = (MapredWork)work;
+ if(w.getMapWork() != null) {
+ collectFileSinkDescs(w.getMapWork().getAllLeafOperators(), acidSinks);
+ }
+ if(w.getReduceWork() != null) {
+ collectFileSinkDescs(w.getReduceWork().getAllLeafOperators(), acidSinks);
+ }
+ }
+ else if(work instanceof SparkWork) {
+ for(BaseWork bw : ((SparkWork)work).getRoots()) {
+ collectFileSinkDescs(bw.getAllLeafOperators(), acidSinks);
+ }
+ }
+ else if(work instanceof MapredLocalWork) {
+ //I don't think this can have any FileSinkOperatorS - more future proofing
+ Set<FileSinkOperator> fileSinkOperatorSet = OperatorUtils.findOperators(((MapredLocalWork)work).getAliasToWork().values(), FileSinkOperator.class);
+ for(FileSinkOperator fsop : fileSinkOperatorSet) {
+ collectFileSinkDescs(fsop, acidSinks);
+ }
+ }
+ else if(work instanceof ExplainWork) {
+ new QueryPlanPostProcessor(((ExplainWork)work).getRootTasks(), acidSinks, executionId);
+ }
+ /*
+ ekoifman:~ ekoifman$ cd dev/hiverwgit/ql/src/java/org/apache/
+ekoifman:apache ekoifman$ find . -name *Work.java
+./hadoop/hive/ql/exec/repl/bootstrap/ReplLoadWork.java
+./hadoop/hive/ql/exec/repl/ReplDumpWork.java
+./hadoop/hive/ql/exec/repl/ReplStateLogWork.java
+./hadoop/hive/ql/index/IndexMetadataChangeWork.java
+./hadoop/hive/ql/io/merge/MergeFileWork.java - extends MapWork
+./hadoop/hive/ql/io/rcfile/stats/PartialScanWork.java - extends MapWork
+./hadoop/hive/ql/io/rcfile/truncate/ColumnTruncateWork.java - extends MapWork
+./hadoop/hive/ql/parse/GenTezWork.java
+./hadoop/hive/ql/parse/spark/GenSparkWork.java
+./hadoop/hive/ql/plan/ArchiveWork.java
+./hadoop/hive/ql/plan/BaseWork.java
+./hadoop/hive/ql/plan/ColumnStatsUpdateWork.java
+./hadoop/hive/ql/plan/ColumnStatsWork.java
+./hadoop/hive/ql/plan/ConditionalWork.java
+./hadoop/hive/ql/plan/CopyWork.java
+./hadoop/hive/ql/plan/DDLWork.java
+./hadoop/hive/ql/plan/DependencyCollectionWork.java
+./hadoop/hive/ql/plan/ExplainSQRewriteWork.java
+./hadoop/hive/ql/plan/ExplainWork.java
+./hadoop/hive/ql/plan/FetchWork.java
+./hadoop/hive/ql/plan/FunctionWork.java
+./hadoop/hive/ql/plan/MapredLocalWork.java
+./hadoop/hive/ql/plan/MapredWork.java
+./hadoop/hive/ql/plan/MapWork.java - extends BaseWork
+./hadoop/hive/ql/plan/MergeJoinWork.java - extends BaseWork
+./hadoop/hive/ql/plan/MoveWork.java
+./hadoop/hive/ql/plan/ReduceWork.java
+./hadoop/hive/ql/plan/ReplCopyWork.java - extends CopyWork
+./hadoop/hive/ql/plan/SparkWork.java
+./hadoop/hive/ql/plan/StatsNoJobWork.java
+./hadoop/hive/ql/plan/StatsWork.java
+./hadoop/hive/ql/plan/TezWork.java
+./hadoop/hive/ql/plan/UnionWork.java - extends BaseWork
+ */
+ else if(work instanceof ReplLoadWork ||
+ work instanceof ReplStateLogWork ||
+ work instanceof IndexMetadataChangeWork ||
+ work instanceof GenTezWork ||
+ work instanceof GenSparkWork ||
+ work instanceof ArchiveWork ||
+ work instanceof ColumnStatsUpdateWork ||
+ work instanceof ColumnStatsWork ||
+ work instanceof ConditionalWork ||
+ work instanceof CopyWork ||
+ work instanceof DDLWork ||
+ work instanceof DependencyCollectionWork ||
+ work instanceof ExplainSQRewriteWork ||
+ work instanceof FetchWork ||
+ work instanceof FunctionWork ||
+ work instanceof MoveWork ||
+ work instanceof StatsNoJobWork ||
+ work instanceof StatsWork) {
+ LOG.debug("Found " + work.getClass().getName() + " - no FileSinkOperation can be present. executionId=" + executionId);
+ }
+ else {
+ //if here, someone must have added new Work object - should it be walked to find FileSinks?
+ throw new IllegalArgumentException("Unexpected Work object: " + work.getClass() + " executionId=" + executionId);
+ }
+ }
+ }
+ private void collectFileSinkDescs(Operator<?> leaf, Set<FileSinkDesc> acidSinks) {
+ if(leaf instanceof FileSinkOperator) {
+ FileSinkDesc fsd = ((FileSinkOperator) leaf).getConf();
+ if(fsd.getWriteType() != AcidUtils.Operation.NOT_ACID) {
+ if(acidSinks.add(fsd)) {
+ if(LOG.isDebugEnabled()) {
+ LOG.debug("Found Acid Sink: " + fsd.getDirName());
+ }
+ }
+ }
+ }
+ }
+ private void collectFileSinkDescs(Set<Operator<?>> leaves, Set<FileSinkDesc> acidSinks) {
+ for(Operator<?> leaf : leaves) {
+ collectFileSinkDescs(leaf, acidSinks);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcFactory.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcFactory.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcFactory.java
index 3a38a6d..bc26c5e 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcFactory.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcFactory.java
@@ -24,6 +24,7 @@ import java.util.Map;
import java.util.Stack;
import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hive.ql.exec.AbstractFileMergeOperator;
import org.apache.hadoop.hive.ql.exec.FileSinkOperator;
import org.apache.hadoop.hive.ql.exec.Operator;
import org.apache.hadoop.hive.ql.exec.OperatorFactory;
@@ -220,7 +221,7 @@ public final class UnionProcFactory {
for (Operator<? extends OperatorDesc> parent : parents) {
FileSinkDesc fileSinkDesc = (FileSinkDesc) fileSinkOp.getConf().clone();
- fileSinkDesc.setDirName(new Path(parentDirName, parent.getIdentifier()));
+ fileSinkDesc.setDirName(new Path(parentDirName, AbstractFileMergeOperator.UNION_SUDBIR_PREFIX + parent.getIdentifier()));
fileSinkDesc.setLinkedFileSink(true);
Utilities.LOG14535.info("Created LinkedFileSink for union " + fileSinkDesc.getDirName() + "; parent " + parentDirName);
parent.setChildOperators(null);
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
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 f50b57e..3475c7c 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
@@ -131,6 +131,7 @@ import org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;
import org.apache.hadoop.hive.ql.metadata.Table;
import org.apache.hadoop.hive.ql.metadata.VirtualColumn;
import org.apache.hadoop.hive.ql.optimizer.Optimizer;
+import org.apache.hadoop.hive.ql.optimizer.QueryPlanPostProcessor;
import org.apache.hadoop.hive.ql.optimizer.Transform;
import org.apache.hadoop.hive.ql.optimizer.calcite.CalciteSemanticException;
import org.apache.hadoop.hive.ql.optimizer.calcite.CalciteSemanticException.UnsupportedFeature;
@@ -7003,6 +7004,8 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
viewDesc.setSchema(new ArrayList<FieldSchema>(field_schemas));
}
+ destTableIsAcid = tblDesc != null && AcidUtils.isAcidTable(tblDesc);
+
boolean isDestTempFile = true;
if (!ctx.isMRTmpFileURI(dest_path.toUri().toString())) {
idToTableNameMap.put(String.valueOf(destTableId), dest_path.toUri().toString());
@@ -7013,9 +7016,8 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
boolean isDfsDir = (dest_type.intValue() == QBMetaData.DEST_DFS_FILE);
// Create LFD even for MM CTAS - it's a no-op move, but it still seems to be used for stats.
- loadFileWork.add(new LoadFileDesc(tblDesc, viewDesc,
- queryTmpdir, dest_path, isDfsDir, cols, colTypes, isMmCtas));
-
+ loadFileWork.add(new LoadFileDesc(tblDesc, viewDesc, queryTmpdir, dest_path, isDfsDir, cols,
+ colTypes, destTableIsAcid ? Operation.INSERT : Operation.NOT_ACID, isMmCtas));
if (tblDesc == null) {
if (viewDesc != null) {
table_desc = PlanUtils.getTableDesc(viewDesc, cols, colTypes);
@@ -7104,7 +7106,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
FileSinkDesc fileSinkDesc = createFileSinkDesc(dest, table_desc, dest_part,
dest_path, currentTableId, destTableIsAcid, destTableIsTemporary,
destTableIsMaterialization, queryTmpdir, rsCtx, dpCtx, lbCtx, fsRS,
- canBeMerged, dest_tab, txnId, isMmCtas);
+ canBeMerged, dest_tab, txnId, isMmCtas, dest_type);
if (isMmCtas) {
// Add FSD so that the LoadTask compilation could fix up its path to avoid the move.
tableDesc.setWriter(fileSinkDesc);
@@ -7212,7 +7214,8 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
boolean destTableIsAcid, boolean destTableIsTemporary,
boolean destTableIsMaterialization, Path queryTmpdir,
SortBucketRSCtx rsCtx, DynamicPartitionCtx dpCtx, ListBucketingCtx lbCtx,
- RowSchema fsRS, boolean canBeMerged, Table dest_tab, Long mmWriteId, boolean isMmCtas) throws SemanticException {
+ RowSchema fsRS, boolean canBeMerged, Table dest_tab, Long mmWriteId, boolean isMmCtas,
+ Integer dest_type) throws SemanticException {
FileSinkDesc fileSinkDesc = new FileSinkDesc(queryTmpdir, table_desc,
conf.getBoolVar(HiveConf.ConfVars.COMPRESSRESULT), currentTableId, rsCtx.isMultiFileSpray(),
canBeMerged, rsCtx.getNumFiles(), rsCtx.getTotalFiles(), rsCtx.getPartnCols(), dpCtx,
@@ -7236,10 +7239,22 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
(deleting(dest) ? AcidUtils.Operation.DELETE : AcidUtils.Operation.INSERT);
fileSinkDesc.setWriteType(wt);
- String destTableFullName = dest_tab.getCompleteName().replace('@', '.');
- Map<String, ASTNode> iowMap = qb.getParseInfo().getInsertOverwriteTables();
- if (iowMap.containsKey(destTableFullName)) {
- fileSinkDesc.setInsertOverwrite(true);
+ switch (dest_type) {
+ case QBMetaData.DEST_PARTITION:
+ //fall through
+ case QBMetaData.DEST_TABLE:
+ //INSERT [OVERWRITE] path
+ String destTableFullName = dest_tab.getCompleteName().replace('@', '.');
+ Map<String, ASTNode> iowMap = qb.getParseInfo().getInsertOverwriteTables();
+ if (iowMap.containsKey(destTableFullName)) {
+ fileSinkDesc.setInsertOverwrite(true);
+ }
+ break;
+ case QBMetaData.DEST_DFS_FILE:
+ //CTAS path
+ break;
+ default:
+ throw new IllegalStateException("Unexpected dest_type=" + dest_tab);
}
acidFileSinks.add(fileSinkDesc);
}
@@ -11555,6 +11570,8 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
compiler.compile(pCtx, rootTasks, inputs, outputs);
fetchTask = pCtx.getFetchTask();
}
+ //find all Acid FileSinkOperatorS
+ QueryPlanPostProcessor qp = new QueryPlanPostProcessor(rootTasks, acidFileSinks, ctx.getExecutionId());
LOG.info("Completed plan generation");
// 10. put accessed columns to readEntity
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadDesc.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadDesc.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadDesc.java
index d708df3..45d4fb0 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadDesc.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.hive.ql.plan;
import java.io.Serializable;
import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hive.ql.io.AcidUtils;
import org.apache.hadoop.hive.ql.plan.Explain.Level;
/**
@@ -30,12 +31,15 @@ import org.apache.hadoop.hive.ql.plan.Explain.Level;
public class LoadDesc implements Serializable {
private static final long serialVersionUID = 1L;
private Path sourcePath;
+ /**
+ * Need to remember whether this is an acid compliant operation, and if so whether it is an
+ * insert, update, or delete.
+ */
+ private final AcidUtils.Operation writeType;
- public LoadDesc() {
- }
-
- public LoadDesc(final Path sourcePath) {
+ public LoadDesc(final Path sourcePath, AcidUtils.Operation writeType) {
this.sourcePath = sourcePath;
+ this.writeType = writeType;
}
@Explain(displayName = "source", explainLevels = { Level.EXTENDED })
@@ -46,4 +50,14 @@ public class LoadDesc implements Serializable {
public void setSourcePath(Path sourcePath) {
this.sourcePath = sourcePath;
}
+
+ public AcidUtils.Operation getWriteType() {
+ return writeType;
+ }
+
+ @Explain(displayName = "Write Type")
+ public String getWriteTypeString() {
+ //if acid write, add to plan output, else don't bother
+ return getWriteType() == AcidUtils.Operation.NOT_ACID ? null : getWriteType().toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadFileDesc.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadFileDesc.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadFileDesc.java
index 6fad710..0032648 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadFileDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadFileDesc.java
@@ -21,8 +21,8 @@ package org.apache.hadoop.hive.ql.plan;
import java.io.Serializable;
import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.hive.ql.exec.PTFUtils;
import org.apache.hadoop.hive.ql.exec.Utilities;
+import org.apache.hadoop.hive.ql.io.AcidUtils;
/**
* LoadFileDesc.
@@ -38,11 +38,8 @@ public class LoadFileDesc extends LoadDesc implements Serializable {
private String destinationCreateTable;
private boolean isMmCtas;
- public LoadFileDesc() {
- }
-
public LoadFileDesc(final LoadFileDesc o) {
- super(o.getSourcePath());
+ super(o.getSourcePath(), o.getWriteType());
this.targetDir = o.targetDir;
this.isDfsDir = o.isDfsDir;
@@ -54,8 +51,8 @@ public class LoadFileDesc extends LoadDesc implements Serializable {
public LoadFileDesc(final CreateTableDesc createTableDesc, final CreateViewDesc createViewDesc,
final Path sourcePath, final Path targetDir, final boolean isDfsDir,
- final String columns, final String columnTypes, boolean isMmCtas) {
- this(sourcePath, targetDir, isDfsDir, columns, columnTypes, isMmCtas);
+ final String columns, final String columnTypes, AcidUtils.Operation writeType, boolean isMmCtas) {
+ this(sourcePath, targetDir, isDfsDir, columns, columnTypes, writeType, isMmCtas);
if (createTableDesc != null && createTableDesc.getDatabaseName() != null
&& createTableDesc.getTableName() != null) {
destinationCreateTable = (createTableDesc.getTableName().contains(".") ? "" : createTableDesc
@@ -68,9 +65,14 @@ public class LoadFileDesc extends LoadDesc implements Serializable {
}
}
- public LoadFileDesc(final Path sourcePath, final Path targetDir, final boolean isDfsDir,
- final String columns, final String columnTypes, boolean isMmCtas) {
- super(sourcePath);
+ public LoadFileDesc(final Path sourcePath, final Path targetDir,
+ final boolean isDfsDir, final String columns, final String columnTypes, boolean isMmCtas) {
+ this(sourcePath, targetDir, isDfsDir, columns, columnTypes, AcidUtils.Operation.NOT_ACID, isMmCtas);
+ }
+ private LoadFileDesc(final Path sourcePath, final Path targetDir,
+ final boolean isDfsDir, final String columns,
+ final String columnTypes, AcidUtils.Operation writeType, boolean isMmCtas) {
+ super(sourcePath, writeType);
Utilities.LOG14535.info("creating LFD from " + sourcePath + " to " + targetDir);
this.targetDir = targetDir;
this.isDfsDir = isDfsDir;
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
index 3201dc9..e893ab5 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
@@ -32,17 +32,13 @@ import org.apache.hadoop.hive.ql.plan.Explain.Level;
* LoadTableDesc.
*
*/
-public class LoadTableDesc extends org.apache.hadoop.hive.ql.plan.LoadDesc
- implements Serializable {
+public class LoadTableDesc extends LoadDesc implements Serializable {
private static final long serialVersionUID = 1L;
private boolean replace;
private DynamicPartitionCtx dpCtx;
private ListBucketingCtx lbCtx;
private boolean inheritTableSpecs = true; //For partitions, flag controlling whether the current
//table specs are to be used
- // Need to remember whether this is an acid compliant operation, and if so whether it is an
- // insert, update, or delete.
- private AcidUtils.Operation writeType;
private Long txnId;
private int stmtId;
@@ -52,13 +48,12 @@ public class LoadTableDesc extends org.apache.hadoop.hive.ql.plan.LoadDesc
private boolean commitMmWriteId = true;
public LoadTableDesc(final LoadTableDesc o) {
- super(o.getSourcePath());
+ super(o.getSourcePath(), o.getWriteType());
this.replace = o.replace;
this.dpCtx = o.dpCtx;
this.lbCtx = o.lbCtx;
this.inheritTableSpecs = o.inheritTableSpecs;
- this.writeType = o.writeType;
this.table = o.table;
this.partitionSpec = o.partitionSpec;
}
@@ -67,11 +62,12 @@ public class LoadTableDesc extends org.apache.hadoop.hive.ql.plan.LoadDesc
final org.apache.hadoop.hive.ql.plan.TableDesc table,
final Map<String, String> partitionSpec,
final boolean replace,
- final AcidUtils.Operation writeType, Long txnId) {
- super(sourcePath);
+ final AcidUtils.Operation writeType,
+ Long txnId) {
+ super(sourcePath, writeType);
Utilities.LOG14535.info("creating part LTD from " + sourcePath + " to "
+ ((table.getProperties() == null) ? "null" : table.getTableName()));
- init(table, partitionSpec, replace, writeType, txnId);
+ init(table, partitionSpec, replace, txnId);
}
/**
@@ -113,13 +109,13 @@ public class LoadTableDesc extends org.apache.hadoop.hive.ql.plan.LoadDesc
final DynamicPartitionCtx dpCtx,
final AcidUtils.Operation writeType,
boolean isReplace, Long txnId) {
- super(sourcePath);
+ super(sourcePath, writeType);
Utilities.LOG14535.info("creating LTD from " + sourcePath + " to " + table.getTableName()/*, new Exception()*/);
this.dpCtx = dpCtx;
if (dpCtx != null && dpCtx.getPartSpec() != null && partitionSpec == null) {
- init(table, dpCtx.getPartSpec(), isReplace, writeType, txnId);
+ init(table, dpCtx.getPartSpec(), isReplace, txnId);
} else {
- init(table, new LinkedHashMap<String, String>(), isReplace, writeType, txnId);
+ init(table, new LinkedHashMap<String, String>(), isReplace, txnId);
}
}
@@ -127,11 +123,10 @@ public class LoadTableDesc extends org.apache.hadoop.hive.ql.plan.LoadDesc
final org.apache.hadoop.hive.ql.plan.TableDesc table,
final Map<String, String> partitionSpec,
final boolean replace,
- AcidUtils.Operation writeType, Long txnId) {
+ Long txnId) {
this.table = table;
this.partitionSpec = partitionSpec;
this.replace = replace;
- this.writeType = writeType;
this.txnId = txnId;
}
@@ -201,10 +196,6 @@ public class LoadTableDesc extends org.apache.hadoop.hive.ql.plan.LoadDesc
this.lbCtx = lbCtx;
}
- public AcidUtils.Operation getWriteType() {
- return writeType;
- }
-
public Long getTxnId() {
return txnId;
}
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/java/org/apache/hadoop/hive/ql/plan/TezEdgeProperty.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/TezEdgeProperty.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/TezEdgeProperty.java
index b695f0f..bbed9be 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/TezEdgeProperty.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/TezEdgeProperty.java
@@ -22,12 +22,12 @@ import org.apache.hadoop.hive.conf.HiveConf;
public class TezEdgeProperty {
- public enum EdgeType {
- SIMPLE_EDGE,
+ public enum EdgeType {//todo: HIVE-15549
+ SIMPLE_EDGE,//SORT_PARTITION_EDGE
BROADCAST_EDGE,
- CONTAINS,
- CUSTOM_EDGE,
- CUSTOM_SIMPLE_EDGE,
+ CONTAINS,//used for union (all?)
+ CUSTOM_EDGE,//CO_PARTITION_EDGE
+ CUSTOM_SIMPLE_EDGE,//PARTITION_EDGE
ONE_TO_ONE_EDGE
}
http://git-wip-us.apache.org/repos/asf/hive/blob/5b3c7979/ql/src/test/org/apache/hadoop/hive/ql/TestTxnNoBuckets.java
----------------------------------------------------------------------
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/TestTxnNoBuckets.java b/ql/src/test/org/apache/hadoop/hive/ql/TestTxnNoBuckets.java
index 1f0c269..880329d 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/TestTxnNoBuckets.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/TestTxnNoBuckets.java
@@ -5,7 +5,10 @@ import org.apache.hadoop.hive.ql.io.BucketCodec;
import org.apache.hadoop.hive.ql.processors.CommandProcessorResponse;
import org.junit.Assert;
import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.TestName;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -20,6 +23,8 @@ public class TestTxnNoBuckets extends TxnCommandsBaseForTests {
File.separator + TestTxnNoBuckets.class.getCanonicalName()
+ "-" + System.currentTimeMillis()
).getPath().replaceAll("\\\\", "/");
+ @Rule
+ public TestName testName = new TestName();
@Override
String getTestDataDir() {
return TEST_DATA_DIR;
@@ -65,17 +70,7 @@ public class TestTxnNoBuckets extends TxnCommandsBaseForTests {
Assert.assertTrue(rs.get(2), rs.get(2).endsWith("nobuckets/delta_0000019_0000019_0000/bucket_00001"));
Assert.assertTrue(rs.get(3), rs.get(3).startsWith("{\"transactionid\":19,\"bucketid\":536936448,\"rowid\":1}\t2\t2\t2\t"));
Assert.assertTrue(rs.get(3), rs.get(3).endsWith("nobuckets/delta_0000019_0000019_0000/bucket_00001"));
- /*todo: WTF?
- RS for update seems to spray randomly... is that OK? maybe as long as all resultant files have different names... will they?
- Assuming we name them based on taskId, we should create bucketX and bucketY.
- we delete events can be written to bucketX file it could be useful for filter delete for a split by file name since the insert
- events seem to be written to a proper bucketX file. In fact this may reduce the number of changes elsewhere like compactor... maybe
- But this limits the parallelism - what is worse, you don't know what the parallelism should be until you have a list of all the
- input files since bucket count is no longer a metadata property. Also, with late Update split, the file name has already been determined
- from taskId so the Insert part won't end up matching the bucketX property necessarily.
- With early Update split, the Insert can still be an insert - i.e. go to appropriate bucketX. But deletes will still go wherever (random shuffle)
- unless you know all the bucketX files to be read - may not be worth the trouble.
- * 2nd: something in FS fails. ArrayIndexOutOfBoundsException: 1 at FileSinkOperator.process(FileSinkOperator.java:779)*/
+
runStatementOnDriver("update nobuckets set c3 = 17 where c3 in(0,1)");
rs = runStatementOnDriver("select ROW__ID, c1, c2, c3, INPUT__FILE__NAME from nobuckets order by INPUT__FILE__NAME, ROW__ID");
LOG.warn("after update");
@@ -152,15 +147,6 @@ public class TestTxnNoBuckets extends TxnCommandsBaseForTests {
}
/**
- * all of these pass but don't do exactly the right thing
- * files land as if it's not an acid table "warehouse/myctas4/000000_0"
- * even though in {@link org.apache.hadoop.hive.metastore.TransactionalValidationListener} fires
- * and sees it as transactional table
- * look for QB.isCTAS() and CreateTableDesc() in SemanticAnalyzer
- *
- * On read, these files are treated like non acid to acid conversion
- *
- * see HIVE-15899
* See CTAS tests in TestAcidOnTez
*/
@Test
@@ -169,30 +155,177 @@ public class TestTxnNoBuckets extends TxnCommandsBaseForTests {
runStatementOnDriver("insert into " + Table.NONACIDORCTBL + makeValuesClause(values));
runStatementOnDriver("create table myctas stored as ORC TBLPROPERTIES ('transactional" +
"'='true', 'transactional_properties'='default') as select a, b from " + Table.NONACIDORCTBL);
- List<String> rs = runStatementOnDriver("select * from myctas order by a, b");
- Assert.assertEquals(stringifyValues(values), rs);
+ List<String> rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from myctas order by ROW__ID");
+ String expected[][] = {
+ {"{\"transactionid\":14,\"bucketid\":536870912,\"rowid\":0}\t3\t4", "warehouse/myctas/delta_0000014_0000014_0000/bucket_00000"},
+ {"{\"transactionid\":14,\"bucketid\":536870912,\"rowid\":1}\t1\t2", "warehouse/myctas/delta_0000014_0000014_0000/bucket_00000"},
+ };
+ checkExpected(rs, expected, "Unexpected row count after ctas from non acid table");
runStatementOnDriver("insert into " + Table.ACIDTBL + makeValuesClause(values));
runStatementOnDriver("create table myctas2 stored as ORC TBLPROPERTIES ('transactional" +
"'='true', 'transactional_properties'='default') as select a, b from " + Table.ACIDTBL);
- rs = runStatementOnDriver("select * from myctas2 order by a, b");
- Assert.assertEquals(stringifyValues(values), rs);
+ rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from myctas2 order by ROW__ID");
+ String expected2[][] = {
+ {"{\"transactionid\":17,\"bucketid\":536870912,\"rowid\":0}\t3\t4", "warehouse/myctas2/delta_0000017_0000017_0000/bucket_00000"},
+ {"{\"transactionid\":17,\"bucketid\":536870912,\"rowid\":1}\t1\t2", "warehouse/myctas2/delta_0000017_0000017_0000/bucket_00000"},
+ };
+ checkExpected(rs, expected2, "Unexpected row count after ctas from acid table");
runStatementOnDriver("create table myctas3 stored as ORC TBLPROPERTIES ('transactional" +
"'='true', 'transactional_properties'='default') as select a, b from " + Table.NONACIDORCTBL +
" union all select a, b from " + Table.ACIDTBL);
- rs = runStatementOnDriver("select * from myctas3 order by a, b");
- Assert.assertEquals(stringifyValues(new int[][] {{1,2},{1,2},{3,4},{3,4}}), rs);
+ rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from myctas3 order by ROW__ID");
+ String expected3[][] = {
+ {"{\"transactionid\":19,\"bucketid\":536870912,\"rowid\":0}\t3\t4", "warehouse/myctas3/delta_0000019_0000019_0000/bucket_00000"},
+ {"{\"transactionid\":19,\"bucketid\":536870912,\"rowid\":1}\t1\t2", "warehouse/myctas3/delta_0000019_0000019_0000/bucket_00000"},
+ {"{\"transactionid\":19,\"bucketid\":536936448,\"rowid\":0}\t3\t4", "warehouse/myctas3/delta_0000019_0000019_0000/bucket_00001"},
+ {"{\"transactionid\":19,\"bucketid\":536936448,\"rowid\":1}\t1\t2", "warehouse/myctas3/delta_0000019_0000019_0000/bucket_00001"},
+ };
+ checkExpected(rs, expected3, "Unexpected row count after ctas from union all query");
runStatementOnDriver("create table myctas4 stored as ORC TBLPROPERTIES ('transactional" +
"'='true', 'transactional_properties'='default') as select a, b from " + Table.NONACIDORCTBL +
" union distinct select a, b from " + Table.ACIDTBL);
- rs = runStatementOnDriver("select * from myctas4 order by a, b");
+ rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from myctas4 order by ROW__ID");
+ String expected4[][] = {
+ {"{\"transactionid\":21,\"bucketid\":536870912,\"rowid\":0}\t1\t2", "/delta_0000021_0000021_0000/bucket_00000"},
+ {"{\"transactionid\":21,\"bucketid\":536870912,\"rowid\":1}\t3\t4", "/delta_0000021_0000021_0000/bucket_00000"},
+ };
+ checkExpected(rs, expected4, "Unexpected row count after ctas from union distinct query");
+ }
+ /**
+ * Insert into unbucketed acid table from union all query
+ * Union All is flattend so nested subdirs are created and acid move drops them since
+ * delta dirs have unique names
+ */
+ @Test
+ public void testInsertToAcidWithUnionRemove() throws Exception {
+ hiveConf.setBoolVar(HiveConf.ConfVars.HIVE_OPTIMIZE_UNION_REMOVE, true);
+ hiveConf.setVar(HiveConf.ConfVars.HIVEFETCHTASKCONVERSION, "none");
+ d.close();
+ d = new Driver(hiveConf);
+ int[][] values = {{1,2},{3,4},{5,6},{7,8},{9,10}};
+ runStatementOnDriver("insert into " + TxnCommandsBaseForTests.Table.ACIDTBL + makeValuesClause(values));//HIVE-17138: this creates 1 delta_0000013_0000013_0000/bucket_00001
+ runStatementOnDriver("drop table if exists T");
+ runStatementOnDriver("create table T (a int, b int) stored as ORC TBLPROPERTIES ('transactional'='true')");
+ /*
+ So Union All removal kicks in and we get 3 subdirs in staging.
+ekoifman:apache-hive-3.0.0-SNAPSHOT-bin ekoifman$ tree /Users/ekoifman/dev/hiverwgit/ql/target/tmp/org.apache.hadoop.hive.ql.TestTxnNoBuckets-1505516390532/warehouse/t/.hive-staging_hive_2017-09-15_16-05-06_895_1123322677843388168-1/
+└── -ext-10000
+ ├── HIVE_UNION_SUBDIR_19
+ │  └── 000000_0
+ │  ├── _orc_acid_version
+ │  └── delta_0000016_0000016_0001
+ ├── HIVE_UNION_SUBDIR_20
+ │  └── 000000_0
+ │  ├── _orc_acid_version
+ │  └── delta_0000016_0000016_0002
+ └── HIVE_UNION_SUBDIR_21
+ └── 000000_0
+ ├── _orc_acid_version
+ └── delta_0000016_0000016_0003*/
+ runStatementOnDriver("insert into T(a,b) select a, b from " + TxnCommandsBaseForTests.Table.ACIDTBL + " where a between 1 and 3 group by a, b union all select a, b from " + TxnCommandsBaseForTests.Table.ACIDTBL + " where a between 5 and 7 union all select a, b from " + TxnCommandsBaseForTests.Table.ACIDTBL + " where a >= 9");
+
+ List<String> rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from T order by ROW__ID");
+
+ String expected[][] = {
+ {"{\"transactionid\":16,\"bucketid\":536870913,\"rowid\":0}\t1\t2", "/delta_0000016_0000016_0001/bucket_00000"},
+ {"{\"transactionid\":16,\"bucketid\":536870913,\"rowid\":1}\t3\t4", "/delta_0000016_0000016_0001/bucket_00000"},
+ {"{\"transactionid\":16,\"bucketid\":536870914,\"rowid\":0}\t7\t8", "/delta_0000016_0000016_0002/bucket_00000"},
+ {"{\"transactionid\":16,\"bucketid\":536870914,\"rowid\":1}\t5\t6", "/delta_0000016_0000016_0002/bucket_00000"},
+ {"{\"transactionid\":16,\"bucketid\":536870915,\"rowid\":0}\t9\t10", "/delta_0000016_0000016_0003/bucket_00000"},
+ };
+ checkExpected(rs, expected, "Unexpected row count after ctas");
+ }
+ private void checkExpected(List<String> rs, String[][] expected, String msg) {
+ LOG.warn(testName.getMethodName() + ": read data(" + msg + "): ");
+ for(String s : rs) {
+ LOG.warn(s);
+ }
+ Assert.assertEquals( testName.getMethodName() + ": " + msg, expected.length, rs.size());
+ //verify data and layout
+ for(int i = 0; i < expected.length; i++) {
+ Assert.assertTrue("Actual line " + i + " bc: " + rs.get(i), rs.get(i).startsWith(expected[i][0]));
+ Assert.assertTrue("Actual line(file) " + i + " bc: " + rs.get(i), rs.get(i).endsWith(expected[i][1]));
+ }
+ }
+ /**
+ * The idea here is to create a non acid table that was written by multiple writers, i.e.
+ * unbucketed table that has 000000_0 & 000001_0, for example. Unfortunately this doesn't work
+ * due to 'merge' logic - see comments in the method
+ */
+ @Ignore
+ @Test
+ public void testToAcidConversionMultiBucket() throws Exception {
+ int[][] values = {{1,2},{2,4},{5,6},{6,8},{9,10}};
+ runStatementOnDriver("insert into " + Table.ACIDTBL + makeValuesClause(values));
+ runStatementOnDriver("drop table if exists T");
+ runStatementOnDriver("create table T (a int, b int) stored as ORC TBLPROPERTIES ('transactional'='false')");
+ /*T non-acid + non bucketd - 3 writers are created and then followed by merge to create a single output file
+ though how the data from union is split between writers is a mystery
+ (bucketed tables don't do merge)
+ Processing data file file:/Users/ekoifman/dev/hiverwgit/ql/target/tmp/org.apache.hadoop.hive.ql.TestTxnNoBuckets-1505317179157/warehouse/t/.hive-staging_hive_2017-09-13_08-40-30_275_8623609103176711840-1/-ext-10000/000000_0 [length: 515]
+{"a":6,"b":8}
+{"a":9,"b":10}
+{"a":5,"b":6}
+{"a":1,"b":2}
+{"a":2,"b":4}
+________________________________________________________________________________________________________________________
+
+Processing data file file:/Users/ekoifman/dev/hiverwgit/ql/target/tmp/org.apache.hadoop.hive.ql.TestTxnNoBuckets-1505317179157/warehouse/t/.hive-staging_hive_2017-09-13_08-40-30_275_8623609103176711840-1/-ext-10003/000000_0 [length: 242]
+{"a":6,"b":8}
+________________________________________________________________________________________________________________________
+
+Processing data file file:/Users/ekoifman/dev/hiverwgit/ql/target/tmp/org.apache.hadoop.hive.ql.TestTxnNoBuckets-1505317179157/warehouse/t/.hive-staging_hive_2017-09-13_08-40-30_275_8623609103176711840-1/-ext-10003/000001_0 [length: 244]
+{"a":9,"b":10}
+{"a":5,"b":6}
+________________________________________________________________________________________________________________________
+
+Processing data file file:/Users/ekoifman/dev/hiverwgit/ql/target/tmp/org.apache.hadoop.hive.ql.TestTxnNoBuckets-1505317179157/warehouse/t/.hive-staging_hive_2017-09-13_08-40-30_275_8623609103176711840-1/-ext-10003/000002_0 [length: 242]
+{"a":1,"b":2}
+{"a":2,"b":4}
+ */
+ runStatementOnDriver("insert into T(a,b) select a, b from " + Table.ACIDTBL + " where a between 1 and 3 group by a, b union all select a, b from " + Table.ACIDTBL + " where a between 5 and 7 union all select a, b from " + Table.ACIDTBL + " where a >= 9");
+ List<String> rs = runStatementOnDriver("select a, b, INPUT__FILE__NAME from T order by a, b, INPUT__FILE__NAME");
+ LOG.warn("before converting to acid");
+ for(String s : rs) {
+ LOG.warn(s);
+ }
+ }
+ @Test
+ public void testInsertFromUnion() throws Exception {
+ int[][] values = {{1,2},{2,4},{5,6},{6,8},{9,10}};
+ runStatementOnDriver("insert into " + Table.NONACIDNONBUCKET + makeValuesClause(values));
+ runStatementOnDriver("drop table if exists T");
+ runStatementOnDriver("create table T (a int, b int) stored as ORC TBLPROPERTIES ('transactional'='true')");
+ runStatementOnDriver("insert into T(a,b) select a, b from " + Table.NONACIDNONBUCKET + " where a between 1 and 3 group by a, b union all select a, b from " + Table.NONACIDNONBUCKET + " where a between 5 and 7 union all select a, b from " + Table.NONACIDNONBUCKET + " where a >= 9");
+ List<String> rs = runStatementOnDriver("select ROW__ID, a, b, INPUT__FILE__NAME from T order by a, b, INPUT__FILE__NAME");
+ LOG.warn("before converting to acid");
+ for(String s : rs) {
+ LOG.warn(s);
+ }
+ /*
+ The number of writers seems to be based on number of MR jobs for the src query. todo check number of FileSinks
+ warehouse/t/.hive-staging_hive_2017-09-13_08-59-28_141_6304543600372946004-1/-ext-10000/000000_0/delta_0000016_0000016_0000/bucket_00000 [length: 648]
+ {"operation":0,"originalTransaction":16,"bucket":536870912,"rowId":0,"currentTransaction":16,"row":{"_col0":1,"_col1":2}}
+ {"operation":0,"originalTransaction":16,"bucket":536870912,"rowId":1,"currentTransaction":16,"row":{"_col0":2,"_col1":4}}
+ ________________________________________________________________________________________________________________________
+ warehouse/t/.hive-staging_hive_2017-09-13_08-59-28_141_6304543600372946004-1/-ext-10000/000001_0/delta_0000016_0000016_0000/bucket_00001 [length: 658]
+ {"operation":0,"originalTransaction":16,"bucket":536936448,"rowId":0,"currentTransaction":16,"row":{"_col0":5,"_col1":6}}
+ {"operation":0,"originalTransaction":16,"bucket":536936448,"rowId":1,"currentTransaction":16,"row":{"_col0":6,"_col1":8}}
+ {"operation":0,"originalTransaction":16,"bucket":536936448,"rowId":2,"currentTransaction":16,"row":{"_col0":9,"_col1":10}}
+ */
+ rs = runStatementOnDriver("select a, b from T order by a, b");
Assert.assertEquals(stringifyValues(values), rs);
+ rs = runStatementOnDriver("select ROW__ID from T group by ROW__ID having count(*) > 1");
+ if(rs.size() > 0) {
+ Assert.assertEquals("Duplicate ROW__IDs: " + rs.get(0), 0, rs.size());
+ }
}
/**
* see HIVE-16177
- * See also {@link TestTxnCommands2#testNonAcidToAcidConversion02()} todo need test with > 1 bucket file
+ * See also {@link TestTxnCommands2#testNonAcidToAcidConversion02()}
*/
@Test
public void testToAcidConversion02() throws Exception {
[04/50] [abbrv] hive git commit: HIVE-14671 : Merge branch 'master'
into hive-14535 (Wei Zheng)
Posted by se...@apache.org.
HIVE-14671 : Merge branch 'master' into hive-14535 (Wei Zheng)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/8f36545c
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/8f36545c
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/8f36545c
Branch: refs/heads/master
Commit: 8f36545cc645f54f300b8c54a84f7d5c658bd97d
Parents: fae2556 4408b8d
Author: Wei Zheng <we...@apache.org>
Authored: Wed Jun 7 15:29:19 2017 -0700
Committer: Wei Zheng <we...@apache.org>
Committed: Wed Jun 7 15:29:19 2017 -0700
----------------------------------------------------------------------
.../org/apache/hadoop/hive/common/log/InPlaceUpdate.java | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
[16/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Wei Zheng)
Posted by se...@apache.org.
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/test/queries/clientpositive/mm_loaddata.q
----------------------------------------------------------------------
diff --cc ql/src/test/queries/clientpositive/mm_loaddata.q
index 0000000,0000000..7e5787f
new file mode 100644
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/mm_loaddata.q
@@@ -1,0 -1,0 +1,53 @@@
++set hive.mapred.mode=nonstrict;
++set hive.explain.user=false;
++set hive.fetch.task.conversion=none;
++set tez.grouping.min-size=1;
++set tez.grouping.max-size=2;
++set hive.exec.dynamic.partition.mode=nonstrict;
++set hive.support.concurrency=true;
++set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
++
++
++drop table load0_mm;
++create table load0_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only");
++load data local inpath '../../data/files/kv1.txt' into table load0_mm;
++select count(1) from load0_mm;
++load data local inpath '../../data/files/kv2.txt' into table load0_mm;
++select count(1) from load0_mm;
++load data local inpath '../../data/files/kv2.txt' overwrite into table load0_mm;
++select count(1) from load0_mm;
++drop table load0_mm;
++
++
++drop table intermediate2;
++create table intermediate2 (key string, value string) stored as textfile
++location 'file:${system:test.tmp.dir}/intermediate2';
++load data local inpath '../../data/files/kv1.txt' into table intermediate2;
++load data local inpath '../../data/files/kv2.txt' into table intermediate2;
++load data local inpath '../../data/files/kv3.txt' into table intermediate2;
++
++drop table load1_mm;
++create table load1_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only");
++load data inpath 'file:${system:test.tmp.dir}/intermediate2/kv2.txt' into table load1_mm;
++load data inpath 'file:${system:test.tmp.dir}/intermediate2/kv1.txt' into table load1_mm;
++select count(1) from load1_mm;
++load data local inpath '../../data/files/kv1.txt' into table intermediate2;
++load data local inpath '../../data/files/kv2.txt' into table intermediate2;
++load data local inpath '../../data/files/kv3.txt' into table intermediate2;
++load data inpath 'file:${system:test.tmp.dir}/intermediate2/kv*.txt' overwrite into table load1_mm;
++select count(1) from load1_mm;
++load data local inpath '../../data/files/kv2.txt' into table intermediate2;
++load data inpath 'file:${system:test.tmp.dir}/intermediate2/kv2.txt' overwrite into table load1_mm;
++select count(1) from load1_mm;
++drop table load1_mm;
++
++drop table load2_mm;
++create table load2_mm (key string, value string)
++ partitioned by (k int, l int) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only");
++load data local inpath '../../data/files/kv1.txt' into table intermediate2;
++load data local inpath '../../data/files/kv2.txt' into table intermediate2;
++load data local inpath '../../data/files/kv3.txt' into table intermediate2;
++load data inpath 'file:${system:test.tmp.dir}/intermediate2/kv*.txt' into table load2_mm partition(k=5, l=5);
++select count(1) from load2_mm;
++drop table load2_mm;
++drop table intermediate2;
[27/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-14671 : merge master into hive-14535 (Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/e3fb1167
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/e3fb1167
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/e3fb1167
Branch: refs/heads/master
Commit: e3fb11671ff15215bc0d1ca6b054586e48fb8d32
Parents: 543e0b0 d2d9170
Author: sergey <se...@apache.org>
Authored: Fri Sep 15 20:38:51 2017 -0700
Committer: sergey <se...@apache.org>
Committed: Fri Sep 15 20:39:13 2017 -0700
----------------------------------------------------------------------
.../java/org/apache/hadoop/hive/ql/Context.java | 18 +++++++++++++++++-
.../ql/parse/UpdateDeleteSemanticAnalyzer.java | 20 ++++++++++----------
.../hive/ql/udf/generic/GenericUDFMaskHash.java | 2 +-
.../org/apache/hive/service/CookieSigner.java | 2 +-
4 files changed, 29 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/e3fb1167/ql/src/java/org/apache/hadoop/hive/ql/Context.java
----------------------------------------------------------------------
[23/50] [abbrv] hive git commit: HIVE-14990 : run all tests for MM
tables and fix the issues that are found (Wei Zheng)
Posted by se...@apache.org.
HIVE-14990 : run all tests for MM tables and fix the issues that are found (Wei Zheng)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/00e75100
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/00e75100
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/00e75100
Branch: refs/heads/master
Commit: 00e75100725cb3972555481c51e11e10bbcefbdf
Parents: 18d1338
Author: Wei Zheng <we...@apache.org>
Authored: Fri Sep 8 15:35:05 2017 -0700
Committer: Wei Zheng <we...@apache.org>
Committed: Fri Sep 8 15:35:05 2017 -0700
----------------------------------------------------------------------
ql/src/test/results/clientpositive/mm_all.q.out | 35 ++++++++++++++++++--
1 file changed, 33 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/00e75100/ql/src/test/results/clientpositive/mm_all.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/mm_all.q.out b/ql/src/test/results/clientpositive/mm_all.q.out
index b69ac00..ea60414 100644
--- a/ql/src/test/results/clientpositive/mm_all.q.out
+++ b/ql/src/test/results/clientpositive/mm_all.q.out
@@ -1637,21 +1637,34 @@ POSTHOOK: Input: default@intermediate@p=455
POSTHOOK: Input: default@intermediate@p=456
POSTHOOK: Input: default@intermediate@p=457
POSTHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: Output: default@multi1_mm@p=455
+POSTHOOK: Output: default@multi1_mm@p=456
+POSTHOOK: Output: default@multi1_mm@p=457
POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
-POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
-POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=455).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=455).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=456).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=456).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=457).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=457).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
PREHOOK: query: select key, key2, p from multi1_mm order by key, key2, p
PREHOOK: type: QUERY
PREHOOK: Input: default@multi1_mm
PREHOOK: Input: default@multi1_mm@p=1
PREHOOK: Input: default@multi1_mm@p=2
+PREHOOK: Input: default@multi1_mm@p=455
+PREHOOK: Input: default@multi1_mm@p=456
+PREHOOK: Input: default@multi1_mm@p=457
#### A masked pattern was here ####
POSTHOOK: query: select key, key2, p from multi1_mm order by key, key2, p
POSTHOOK: type: QUERY
POSTHOOK: Input: default@multi1_mm
POSTHOOK: Input: default@multi1_mm@p=1
POSTHOOK: Input: default@multi1_mm@p=2
+POSTHOOK: Input: default@multi1_mm@p=455
+POSTHOOK: Input: default@multi1_mm@p=456
+POSTHOOK: Input: default@multi1_mm@p=457
#### A masked pattern was here ####
0 456 1
0 456 1
@@ -1673,16 +1686,22 @@ POSTHOOK: Input: default@multi1_mm@p=2
103 457 2
455 97 1
455 97 2
+455 97 455
455 98 1
455 98 2
+455 98 455
456 0 1
456 0 2
+456 0 456
456 10 1
456 10 2
+456 10 456
457 100 1
457 100 2
+457 100 457
457 103 1
457 103 2
+457 103 457
PREHOOK: query: from intermediate
insert into table multi1_mm partition(p) select p, key, 1
insert into table multi1_mm partition(p=1) select key, p
@@ -1711,12 +1730,18 @@ PREHOOK: type: QUERY
PREHOOK: Input: default@multi1_mm
PREHOOK: Input: default@multi1_mm@p=1
PREHOOK: Input: default@multi1_mm@p=2
+PREHOOK: Input: default@multi1_mm@p=455
+PREHOOK: Input: default@multi1_mm@p=456
+PREHOOK: Input: default@multi1_mm@p=457
#### A masked pattern was here ####
POSTHOOK: query: select key, key2, p from multi1_mm order by key, key2, p
POSTHOOK: type: QUERY
POSTHOOK: Input: default@multi1_mm
POSTHOOK: Input: default@multi1_mm@p=1
POSTHOOK: Input: default@multi1_mm@p=2
+POSTHOOK: Input: default@multi1_mm@p=455
+POSTHOOK: Input: default@multi1_mm@p=456
+POSTHOOK: Input: default@multi1_mm@p=457
#### A masked pattern was here ####
0 456 1
0 456 1
@@ -1745,21 +1770,27 @@ POSTHOOK: Input: default@multi1_mm@p=2
455 97 1
455 97 1
455 97 2
+455 97 455
455 98 1
455 98 1
455 98 2
+455 98 455
456 0 1
456 0 1
456 0 2
+456 0 456
456 10 1
456 10 1
456 10 2
+456 10 456
457 100 1
457 100 1
457 100 2
+457 100 457
457 103 1
457 103 1
457 103 2
+457 103 457
PREHOOK: query: drop table multi1_mm
PREHOOK: type: DROPTABLE
PREHOOK: Input: default@multi1_mm
[37/50] [abbrv] hive git commit: HIVE-15212 : merge branch into
master - fix some tests (Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-15212 : merge branch into master - fix some tests (Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/a0c546f7
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/a0c546f7
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/a0c546f7
Branch: refs/heads/master
Commit: a0c546f7848c91a8a17e896ed127a6548d173aa3
Parents: 55d9cee
Author: sergey <se...@apache.org>
Authored: Thu Sep 28 16:29:53 2017 -0700
Committer: sergey <se...@apache.org>
Committed: Thu Sep 28 16:29:53 2017 -0700
----------------------------------------------------------------------
.../results/clientpositive/llap/mm_all.q.out | 1436 ------------------
.../clientpositive/tez/explainuser_3.q.out | 4 +-
2 files changed, 2 insertions(+), 1438 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/a0c546f7/ql/src/test/results/clientpositive/llap/mm_all.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/mm_all.q.out b/ql/src/test/results/clientpositive/llap/mm_all.q.out
deleted file mode 100644
index 0adbddb..0000000
--- a/ql/src/test/results/clientpositive/llap/mm_all.q.out
+++ /dev/null
@@ -1,1436 +0,0 @@
-PREHOOK: query: drop table intermediate
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table intermediate
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: create table intermediate(key int) partitioned by (p int) stored as orc
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@intermediate
-POSTHOOK: query: create table intermediate(key int) partitioned by (p int) stored as orc
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@intermediate
-PREHOOK: query: insert into table intermediate partition(p='455') select distinct key from src where key >= 0 order by key desc limit 2
-PREHOOK: type: QUERY
-PREHOOK: Input: default@src
-PREHOOK: Output: default@intermediate@p=455
-POSTHOOK: query: insert into table intermediate partition(p='455') select distinct key from src where key >= 0 order by key desc limit 2
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@src
-POSTHOOK: Output: default@intermediate@p=455
-POSTHOOK: Lineage: intermediate PARTITION(p=455).key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ]
-PREHOOK: query: insert into table intermediate partition(p='456') select distinct key from src where key is not null order by key asc limit 2
-PREHOOK: type: QUERY
-PREHOOK: Input: default@src
-PREHOOK: Output: default@intermediate@p=456
-POSTHOOK: query: insert into table intermediate partition(p='456') select distinct key from src where key is not null order by key asc limit 2
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@src
-POSTHOOK: Output: default@intermediate@p=456
-POSTHOOK: Lineage: intermediate PARTITION(p=456).key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ]
-PREHOOK: query: insert into table intermediate partition(p='457') select distinct key from src where key >= 100 order by key asc limit 2
-PREHOOK: type: QUERY
-PREHOOK: Input: default@src
-PREHOOK: Output: default@intermediate@p=457
-POSTHOOK: query: insert into table intermediate partition(p='457') select distinct key from src where key >= 100 order by key asc limit 2
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@src
-POSTHOOK: Output: default@intermediate@p=457
-POSTHOOK: Lineage: intermediate PARTITION(p=457).key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ]
-PREHOOK: query: drop table part_mm
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table part_mm
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: create table part_mm(key int) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@part_mm
-POSTHOOK: query: create table part_mm(key int) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@part_mm
-PREHOOK: query: explain insert into table part_mm partition(key_mm=455) select key from intermediate
-PREHOOK: type: QUERY
-POSTHOOK: query: explain insert into table part_mm partition(key_mm=455) select key from intermediate
-POSTHOOK: type: QUERY
-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 ####
- Vertices:
- Map 1
- Map Operator Tree:
- TableScan
- alias: intermediate
- Statistics: Num rows: 6 Data size: 72 Basic stats: COMPLETE Column stats: NONE
- Select Operator
- expressions: key (type: int)
- outputColumnNames: _col0
- Statistics: Num rows: 6 Data size: 72 Basic stats: COMPLETE Column stats: NONE
- File Output Operator
- compressed: false
- Statistics: Num rows: 6 Data size: 72 Basic stats: COMPLETE Column stats: NONE
- 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: default.part_mm
- Write Type: INSERT
- Execution mode: llap
- LLAP IO: all inputs
-
- Stage: Stage-2
- Dependency Collection
-
- Stage: Stage-0
- Move Operator
- tables:
- partition:
- key_mm 455
- 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: default.part_mm
- Write Type: INSERT
- micromanaged table: true
-
- Stage: Stage-3
- Stats-Aggr Operator
-
-PREHOOK: query: insert into table part_mm partition(key_mm=455) select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@part_mm@key_mm=455
-POSTHOOK: query: insert into table part_mm partition(key_mm=455) select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@part_mm@key_mm=455
-POSTHOOK: Lineage: part_mm PARTITION(key_mm=455).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: insert into table part_mm partition(key_mm=456) select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@part_mm@key_mm=456
-POSTHOOK: query: insert into table part_mm partition(key_mm=456) select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@part_mm@key_mm=456
-POSTHOOK: Lineage: part_mm PARTITION(key_mm=456).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: insert into table part_mm partition(key_mm=455) select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@part_mm@key_mm=455
-POSTHOOK: query: insert into table part_mm partition(key_mm=455) select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@part_mm@key_mm=455
-POSTHOOK: Lineage: part_mm PARTITION(key_mm=455).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from part_mm order by key, key_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@part_mm
-PREHOOK: Input: default@part_mm@key_mm=455
-PREHOOK: Input: default@part_mm@key_mm=456
-#### A masked pattern was here ####
-POSTHOOK: query: select * from part_mm order by key, key_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@part_mm
-POSTHOOK: Input: default@part_mm@key_mm=455
-POSTHOOK: Input: default@part_mm@key_mm=456
-#### A masked pattern was here ####
-0 455
-0 455
-0 456
-10 455
-10 455
-10 456
-97 455
-97 455
-97 456
-98 455
-98 455
-98 456
-100 455
-100 455
-100 456
-103 455
-103 455
-103 456
-PREHOOK: query: select * from part_mm order by key, key_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@part_mm
-PREHOOK: Input: default@part_mm@key_mm=455
-PREHOOK: Input: default@part_mm@key_mm=456
-#### A masked pattern was here ####
-POSTHOOK: query: select * from part_mm order by key, key_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@part_mm
-POSTHOOK: Input: default@part_mm@key_mm=455
-POSTHOOK: Input: default@part_mm@key_mm=456
-#### A masked pattern was here ####
-0 455
-0 455
-0 456
-10 455
-10 455
-10 456
-97 455
-97 455
-97 456
-98 455
-98 455
-98 456
-100 455
-100 455
-100 456
-103 455
-103 455
-103 456
-PREHOOK: query: truncate table part_mm
-PREHOOK: type: TRUNCATETABLE
-PREHOOK: Output: default@part_mm@key_mm=455
-PREHOOK: Output: default@part_mm@key_mm=456
-POSTHOOK: query: truncate table part_mm
-POSTHOOK: type: TRUNCATETABLE
-POSTHOOK: Output: default@part_mm@key_mm=455
-POSTHOOK: Output: default@part_mm@key_mm=456
-PREHOOK: query: select * from part_mm order by key, key_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@part_mm
-PREHOOK: Input: default@part_mm@key_mm=455
-PREHOOK: Input: default@part_mm@key_mm=456
-#### A masked pattern was here ####
-POSTHOOK: query: select * from part_mm order by key, key_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@part_mm
-POSTHOOK: Input: default@part_mm@key_mm=455
-POSTHOOK: Input: default@part_mm@key_mm=456
-#### A masked pattern was here ####
-PREHOOK: query: drop table part_mm
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@part_mm
-PREHOOK: Output: default@part_mm
-POSTHOOK: query: drop table part_mm
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@part_mm
-POSTHOOK: Output: default@part_mm
-PREHOOK: query: drop table simple_mm
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table simple_mm
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: create table simple_mm(key int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@simple_mm
-POSTHOOK: query: create table simple_mm(key int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@simple_mm
-PREHOOK: query: insert into table simple_mm select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@simple_mm
-POSTHOOK: query: insert into table simple_mm select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@simple_mm
-POSTHOOK: Lineage: simple_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from simple_mm order by key
-PREHOOK: type: QUERY
-PREHOOK: Input: default@simple_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select * from simple_mm order by key
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@simple_mm
-#### A masked pattern was here ####
-0
-10
-97
-98
-100
-103
-PREHOOK: query: insert into table simple_mm select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@simple_mm
-POSTHOOK: query: insert into table simple_mm select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@simple_mm
-POSTHOOK: Lineage: simple_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from simple_mm order by key
-PREHOOK: type: QUERY
-PREHOOK: Input: default@simple_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select * from simple_mm order by key
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@simple_mm
-#### A masked pattern was here ####
-0
-0
-10
-10
-97
-97
-98
-98
-100
-100
-103
-103
-PREHOOK: query: truncate table simple_mm
-PREHOOK: type: TRUNCATETABLE
-PREHOOK: Output: default@simple_mm
-POSTHOOK: query: truncate table simple_mm
-POSTHOOK: type: TRUNCATETABLE
-POSTHOOK: Output: default@simple_mm
-PREHOOK: query: select * from simple_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@simple_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select * from simple_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@simple_mm
-#### A masked pattern was here ####
-PREHOOK: query: drop table simple_mm
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@simple_mm
-PREHOOK: Output: default@simple_mm
-POSTHOOK: query: drop table simple_mm
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@simple_mm
-POSTHOOK: Output: default@simple_mm
-PREHOOK: query: drop table dp_mm
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table dp_mm
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: create table dp_mm (key int) partitioned by (key1 string, key2 int) stored as orc
- tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@dp_mm
-POSTHOOK: query: create table dp_mm (key int) partitioned by (key1 string, key2 int) stored as orc
- tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@dp_mm
-PREHOOK: query: insert into table dp_mm partition (key1='123', key2) select key, key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@dp_mm@key1=123
-POSTHOOK: query: insert into table dp_mm partition (key1='123', key2) select key, key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@dp_mm@key1=123/key2=0
-POSTHOOK: Output: default@dp_mm@key1=123/key2=10
-POSTHOOK: Output: default@dp_mm@key1=123/key2=100
-POSTHOOK: Output: default@dp_mm@key1=123/key2=103
-POSTHOOK: Output: default@dp_mm@key1=123/key2=97
-POSTHOOK: Output: default@dp_mm@key1=123/key2=98
-POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=0).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=100).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=103).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=10).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=97).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=98).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from dp_mm order by key
-PREHOOK: type: QUERY
-PREHOOK: Input: default@dp_mm
-PREHOOK: Input: default@dp_mm@key1=123/key2=0
-PREHOOK: Input: default@dp_mm@key1=123/key2=10
-PREHOOK: Input: default@dp_mm@key1=123/key2=100
-PREHOOK: Input: default@dp_mm@key1=123/key2=103
-PREHOOK: Input: default@dp_mm@key1=123/key2=97
-PREHOOK: Input: default@dp_mm@key1=123/key2=98
-#### A masked pattern was here ####
-POSTHOOK: query: select * from dp_mm order by key
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@dp_mm
-POSTHOOK: Input: default@dp_mm@key1=123/key2=0
-POSTHOOK: Input: default@dp_mm@key1=123/key2=10
-POSTHOOK: Input: default@dp_mm@key1=123/key2=100
-POSTHOOK: Input: default@dp_mm@key1=123/key2=103
-POSTHOOK: Input: default@dp_mm@key1=123/key2=97
-POSTHOOK: Input: default@dp_mm@key1=123/key2=98
-#### A masked pattern was here ####
-0 123 0
-10 123 10
-97 123 97
-98 123 98
-100 123 100
-103 123 103
-PREHOOK: query: drop table dp_mm
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@dp_mm
-PREHOOK: Output: default@dp_mm
-POSTHOOK: query: drop table dp_mm
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@dp_mm
-POSTHOOK: Output: default@dp_mm
-PREHOOK: query: create table union_mm(id int) tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@union_mm
-POSTHOOK: query: create table union_mm(id int) tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@union_mm
-PREHOOK: query: insert into table union_mm
-select temps.p from (
-select key as p from intermediate
-union all
-select key + 1 as p from intermediate ) temps
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@union_mm
-POSTHOOK: query: insert into table union_mm
-select temps.p from (
-select key as p from intermediate
-union all
-select key + 1 as p from intermediate ) temps
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@union_mm
-POSTHOOK: Lineage: union_mm.id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from union_mm order by id
-PREHOOK: type: QUERY
-PREHOOK: Input: default@union_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select * from union_mm order by id
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@union_mm
-#### A masked pattern was here ####
-0
-1
-10
-11
-97
-98
-98
-99
-100
-101
-103
-104
-PREHOOK: query: insert into table union_mm
-select p from
-(
-select key + 1 as p from intermediate
-union all
-select key from intermediate
-) tab group by p
-union all
-select key + 2 as p from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@union_mm
-POSTHOOK: query: insert into table union_mm
-select p from
-(
-select key + 1 as p from intermediate
-union all
-select key from intermediate
-) tab group by p
-union all
-select key + 2 as p from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@union_mm
-POSTHOOK: Lineage: union_mm.id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from union_mm order by id
-PREHOOK: type: QUERY
-PREHOOK: Input: default@union_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select * from union_mm order by id
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@union_mm
-#### A masked pattern was here ####
-0
-1
-2
-10
-11
-12
-97
-98
-99
-99
-100
-100
-101
-102
-103
-104
-105
-PREHOOK: query: insert into table union_mm
-SELECT p FROM
-(
- SELECT key + 1 as p FROM intermediate
- UNION ALL
- SELECT key as p FROM (
- SELECT distinct key FROM (
- SELECT key FROM (
- SELECT key + 2 as key FROM intermediate
- UNION ALL
- SELECT key FROM intermediate
- )t1
- group by key)t2
- )t3
-)t4
-group by p
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@union_mm
-POSTHOOK: query: insert into table union_mm
-SELECT p FROM
-(
- SELECT key + 1 as p FROM intermediate
- UNION ALL
- SELECT key as p FROM (
- SELECT distinct key FROM (
- SELECT key FROM (
- SELECT key + 2 as key FROM intermediate
- UNION ALL
- SELECT key FROM intermediate
- )t1
- group by key)t2
- )t3
-)t4
-group by p
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@union_mm
-POSTHOOK: Lineage: union_mm.id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from union_mm order by id
-PREHOOK: type: QUERY
-PREHOOK: Input: default@union_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select * from union_mm order by id
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@union_mm
-#### A masked pattern was here ####
-0
-0
-1
-1
-2
-2
-10
-10
-11
-11
-12
-12
-97
-97
-98
-98
-99
-99
-99
-100
-100
-100
-101
-101
-102
-102
-103
-103
-104
-104
-105
-105
-PREHOOK: query: drop table union_mm
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@union_mm
-PREHOOK: Output: default@union_mm
-POSTHOOK: query: drop table union_mm
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@union_mm
-POSTHOOK: Output: default@union_mm
-PREHOOK: query: create table partunion_mm(id int) partitioned by (key int) tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@partunion_mm
-POSTHOOK: query: create table partunion_mm(id int) partitioned by (key int) tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@partunion_mm
-PREHOOK: query: insert into table partunion_mm partition(key)
-select temps.* from (
-select key as p, key from intermediate
-union all
-select key + 1 as p, key + 1 from intermediate ) temps
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@partunion_mm
-POSTHOOK: query: insert into table partunion_mm partition(key)
-select temps.* from (
-select key as p, key from intermediate
-union all
-select key + 1 as p, key + 1 from intermediate ) temps
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-PREHOOK: query: select * from partunion_mm order by id
-PREHOOK: type: QUERY
-PREHOOK: Input: default@partunion_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select * from partunion_mm order by id
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@partunion_mm
-#### A masked pattern was here ####
-PREHOOK: query: drop table partunion_mm
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@partunion_mm
-PREHOOK: Output: default@partunion_mm
-POSTHOOK: query: drop table partunion_mm
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@partunion_mm
-POSTHOOK: Output: default@partunion_mm
-PREHOOK: query: create table skew_mm(k1 int, k2 int, k4 int) skewed by (k1, k4) on ((0,0),(1,1),(2,2),(3,3))
- stored as directories tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@skew_mm
-POSTHOOK: query: create table skew_mm(k1 int, k2 int, k4 int) skewed by (k1, k4) on ((0,0),(1,1),(2,2),(3,3))
- stored as directories tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@skew_mm
-PREHOOK: query: insert into table skew_mm
-select key, key, key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@skew_mm
-POSTHOOK: query: insert into table skew_mm
-select key, key, key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@skew_mm
-POSTHOOK: Lineage: skew_mm.k1 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-POSTHOOK: Lineage: skew_mm.k2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-POSTHOOK: Lineage: skew_mm.k4 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from skew_mm order by k2, k1, k4
-PREHOOK: type: QUERY
-PREHOOK: Input: default@skew_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select * from skew_mm order by k2, k1, k4
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@skew_mm
-#### A masked pattern was here ####
-0 0 0
-10 10 10
-97 97 97
-98 98 98
-100 100 100
-103 103 103
-PREHOOK: query: drop table skew_mm
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@skew_mm
-PREHOOK: Output: default@skew_mm
-POSTHOOK: query: drop table skew_mm
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@skew_mm
-POSTHOOK: Output: default@skew_mm
-PREHOOK: query: create table skew_dp_union_mm(k1 int, k2 int, k4 int) partitioned by (k3 int)
-skewed by (k1, k4) on ((0,0),(1,1),(2,2),(3,3)) stored as directories tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@skew_dp_union_mm
-POSTHOOK: query: create table skew_dp_union_mm(k1 int, k2 int, k4 int) partitioned by (k3 int)
-skewed by (k1, k4) on ((0,0),(1,1),(2,2),(3,3)) stored as directories tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@skew_dp_union_mm
-PREHOOK: query: insert into table skew_dp_union_mm partition (k3)
-select key as i, key as j, key as k, key as l from intermediate
-union all
-select key +1 as i, key +2 as j, key +3 as k, key +4 as l from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@skew_dp_union_mm
-POSTHOOK: query: insert into table skew_dp_union_mm partition (k3)
-select key as i, key as j, key as k, key as l from intermediate
-union all
-select key +1 as i, key +2 as j, key +3 as k, key +4 as l from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-PREHOOK: query: select * from skew_dp_union_mm order by k2, k1, k4
-PREHOOK: type: QUERY
-PREHOOK: Input: default@skew_dp_union_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select * from skew_dp_union_mm order by k2, k1, k4
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@skew_dp_union_mm
-#### A masked pattern was here ####
-PREHOOK: query: drop table skew_dp_union_mm
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@skew_dp_union_mm
-PREHOOK: Output: default@skew_dp_union_mm
-POSTHOOK: query: drop table skew_dp_union_mm
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@skew_dp_union_mm
-POSTHOOK: Output: default@skew_dp_union_mm
-PREHOOK: query: create table merge0_mm (id int) stored as orc tblproperties("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@merge0_mm
-POSTHOOK: query: create table merge0_mm (id int) stored as orc tblproperties("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@merge0_mm
-PREHOOK: query: insert into table merge0_mm select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@merge0_mm
-POSTHOOK: query: insert into table merge0_mm select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@merge0_mm
-POSTHOOK: Lineage: merge0_mm.id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from merge0_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@merge0_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select * from merge0_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@merge0_mm
-#### A masked pattern was here ####
-98
-97
-100
-103
-0
-10
-PREHOOK: query: insert into table merge0_mm select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@merge0_mm
-POSTHOOK: query: insert into table merge0_mm select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@merge0_mm
-POSTHOOK: Lineage: merge0_mm.id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from merge0_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@merge0_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select * from merge0_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@merge0_mm
-#### A masked pattern was here ####
-98
-97
-100
-103
-0
-10
-98
-97
-100
-103
-0
-10
-PREHOOK: query: drop table merge0_mm
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@merge0_mm
-PREHOOK: Output: default@merge0_mm
-POSTHOOK: query: drop table merge0_mm
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@merge0_mm
-POSTHOOK: Output: default@merge0_mm
-PREHOOK: query: create table merge2_mm (id int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@merge2_mm
-POSTHOOK: query: create table merge2_mm (id int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@merge2_mm
-PREHOOK: query: insert into table merge2_mm select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@merge2_mm
-POSTHOOK: query: insert into table merge2_mm select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@merge2_mm
-POSTHOOK: Lineage: merge2_mm.id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from merge2_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@merge2_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select * from merge2_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@merge2_mm
-#### A masked pattern was here ####
-98
-97
-100
-103
-0
-10
-PREHOOK: query: insert into table merge2_mm select key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@merge2_mm
-POSTHOOK: query: insert into table merge2_mm select key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@merge2_mm
-POSTHOOK: Lineage: merge2_mm.id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from merge2_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@merge2_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select * from merge2_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@merge2_mm
-#### A masked pattern was here ####
-98
-97
-100
-103
-0
-10
-98
-97
-100
-103
-0
-10
-PREHOOK: query: drop table merge2_mm
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@merge2_mm
-PREHOOK: Output: default@merge2_mm
-POSTHOOK: query: drop table merge2_mm
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@merge2_mm
-POSTHOOK: Output: default@merge2_mm
-PREHOOK: query: create table merge1_mm (id int) partitioned by (key int) stored as orc tblproperties("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@merge1_mm
-POSTHOOK: query: create table merge1_mm (id int) partitioned by (key int) stored as orc tblproperties("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@merge1_mm
-PREHOOK: query: insert into table merge1_mm partition (key) select key, key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@merge1_mm
-POSTHOOK: query: insert into table merge1_mm partition (key) select key, key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@merge1_mm@key=0
-POSTHOOK: Output: default@merge1_mm@key=10
-POSTHOOK: Output: default@merge1_mm@key=100
-POSTHOOK: Output: default@merge1_mm@key=103
-POSTHOOK: Output: default@merge1_mm@key=97
-POSTHOOK: Output: default@merge1_mm@key=98
-POSTHOOK: Lineage: merge1_mm PARTITION(key=0).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-POSTHOOK: Lineage: merge1_mm PARTITION(key=100).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-POSTHOOK: Lineage: merge1_mm PARTITION(key=103).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-POSTHOOK: Lineage: merge1_mm PARTITION(key=10).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-POSTHOOK: Lineage: merge1_mm PARTITION(key=97).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-POSTHOOK: Lineage: merge1_mm PARTITION(key=98).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from merge1_mm order by id, key
-PREHOOK: type: QUERY
-PREHOOK: Input: default@merge1_mm
-PREHOOK: Input: default@merge1_mm@key=0
-PREHOOK: Input: default@merge1_mm@key=10
-PREHOOK: Input: default@merge1_mm@key=100
-PREHOOK: Input: default@merge1_mm@key=103
-PREHOOK: Input: default@merge1_mm@key=97
-PREHOOK: Input: default@merge1_mm@key=98
-#### A masked pattern was here ####
-POSTHOOK: query: select * from merge1_mm order by id, key
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@merge1_mm
-POSTHOOK: Input: default@merge1_mm@key=0
-POSTHOOK: Input: default@merge1_mm@key=10
-POSTHOOK: Input: default@merge1_mm@key=100
-POSTHOOK: Input: default@merge1_mm@key=103
-POSTHOOK: Input: default@merge1_mm@key=97
-POSTHOOK: Input: default@merge1_mm@key=98
-#### A masked pattern was here ####
-0 0
-10 10
-97 97
-98 98
-100 100
-103 103
-PREHOOK: query: insert into table merge1_mm partition (key) select key, key from intermediate
-PREHOOK: type: QUERY
-PREHOOK: Input: default@intermediate
-PREHOOK: Input: default@intermediate@p=455
-PREHOOK: Input: default@intermediate@p=456
-PREHOOK: Input: default@intermediate@p=457
-PREHOOK: Output: default@merge1_mm
-POSTHOOK: query: insert into table merge1_mm partition (key) select key, key from intermediate
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Input: default@intermediate@p=455
-POSTHOOK: Input: default@intermediate@p=456
-POSTHOOK: Input: default@intermediate@p=457
-POSTHOOK: Output: default@merge1_mm@key=0
-POSTHOOK: Output: default@merge1_mm@key=10
-POSTHOOK: Output: default@merge1_mm@key=100
-POSTHOOK: Output: default@merge1_mm@key=103
-POSTHOOK: Output: default@merge1_mm@key=97
-POSTHOOK: Output: default@merge1_mm@key=98
-POSTHOOK: Lineage: merge1_mm PARTITION(key=0).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-POSTHOOK: Lineage: merge1_mm PARTITION(key=100).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-POSTHOOK: Lineage: merge1_mm PARTITION(key=103).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-POSTHOOK: Lineage: merge1_mm PARTITION(key=10).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-POSTHOOK: Lineage: merge1_mm PARTITION(key=97).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-POSTHOOK: Lineage: merge1_mm PARTITION(key=98).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
-PREHOOK: query: select * from merge1_mm order by id, key
-PREHOOK: type: QUERY
-PREHOOK: Input: default@merge1_mm
-PREHOOK: Input: default@merge1_mm@key=0
-PREHOOK: Input: default@merge1_mm@key=10
-PREHOOK: Input: default@merge1_mm@key=100
-PREHOOK: Input: default@merge1_mm@key=103
-PREHOOK: Input: default@merge1_mm@key=97
-PREHOOK: Input: default@merge1_mm@key=98
-#### A masked pattern was here ####
-POSTHOOK: query: select * from merge1_mm order by id, key
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@merge1_mm
-POSTHOOK: Input: default@merge1_mm@key=0
-POSTHOOK: Input: default@merge1_mm@key=10
-POSTHOOK: Input: default@merge1_mm@key=100
-POSTHOOK: Input: default@merge1_mm@key=103
-POSTHOOK: Input: default@merge1_mm@key=97
-POSTHOOK: Input: default@merge1_mm@key=98
-#### A masked pattern was here ####
-0 0
-0 0
-10 10
-10 10
-97 97
-97 97
-98 98
-98 98
-100 100
-100 100
-103 103
-103 103
-PREHOOK: query: drop table merge1_mm
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@merge1_mm
-PREHOOK: Output: default@merge1_mm
-POSTHOOK: query: drop table merge1_mm
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@merge1_mm
-POSTHOOK: Output: default@merge1_mm
-PREHOOK: query: drop table load0_mm
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table load0_mm
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: create table load0_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@load0_mm
-POSTHOOK: query: create table load0_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@load0_mm
-PREHOOK: query: load data local inpath '../../data/files/kv1.txt' into table load0_mm
-PREHOOK: type: LOAD
-#### A masked pattern was here ####
-PREHOOK: Output: default@load0_mm
-POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' into table load0_mm
-POSTHOOK: type: LOAD
-#### A masked pattern was here ####
-POSTHOOK: Output: default@load0_mm
-PREHOOK: query: select count(1) from load0_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@load0_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select count(1) from load0_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@load0_mm
-#### A masked pattern was here ####
-500
-PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table load0_mm
-PREHOOK: type: LOAD
-#### A masked pattern was here ####
-PREHOOK: Output: default@load0_mm
-POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table load0_mm
-POSTHOOK: type: LOAD
-#### A masked pattern was here ####
-POSTHOOK: Output: default@load0_mm
-PREHOOK: query: select count(1) from load0_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@load0_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select count(1) from load0_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@load0_mm
-#### A masked pattern was here ####
-1000
-PREHOOK: query: load data local inpath '../../data/files/kv2.txt' overwrite into table load0_mm
-PREHOOK: type: LOAD
-#### A masked pattern was here ####
-PREHOOK: Output: default@load0_mm
-POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' overwrite into table load0_mm
-POSTHOOK: type: LOAD
-#### A masked pattern was here ####
-POSTHOOK: Output: default@load0_mm
-PREHOOK: query: select count(1) from load0_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@load0_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select count(1) from load0_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@load0_mm
-#### A masked pattern was here ####
-500
-PREHOOK: query: drop table load0_mm
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@load0_mm
-PREHOOK: Output: default@load0_mm
-POSTHOOK: query: drop table load0_mm
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@load0_mm
-POSTHOOK: Output: default@load0_mm
-PREHOOK: query: drop table intermediate2
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table intermediate2
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: create table intermediate2 (key string, value string) stored as textfile
-#### A masked pattern was here ####
-PREHOOK: type: CREATETABLE
-#### A masked pattern was here ####
-PREHOOK: Output: database:default
-PREHOOK: Output: default@intermediate2
-POSTHOOK: query: create table intermediate2 (key string, value string) stored as textfile
-#### A masked pattern was here ####
-POSTHOOK: type: CREATETABLE
-#### A masked pattern was here ####
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@intermediate2
-PREHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
-PREHOOK: type: LOAD
-#### A masked pattern was here ####
-PREHOOK: Output: default@intermediate2
-POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
-POSTHOOK: type: LOAD
-#### A masked pattern was here ####
-POSTHOOK: Output: default@intermediate2
-PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
-PREHOOK: type: LOAD
-#### A masked pattern was here ####
-PREHOOK: Output: default@intermediate2
-POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
-POSTHOOK: type: LOAD
-#### A masked pattern was here ####
-POSTHOOK: Output: default@intermediate2
-PREHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
-PREHOOK: type: LOAD
-#### A masked pattern was here ####
-PREHOOK: Output: default@intermediate2
-POSTHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
-POSTHOOK: type: LOAD
-#### A masked pattern was here ####
-POSTHOOK: Output: default@intermediate2
-PREHOOK: query: drop table load1_mm
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table load1_mm
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: create table load1_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@load1_mm
-POSTHOOK: query: create table load1_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@load1_mm
-#### A masked pattern was here ####
-PREHOOK: type: LOAD
-#### A masked pattern was here ####
-PREHOOK: Output: default@load1_mm
-#### A masked pattern was here ####
-POSTHOOK: type: LOAD
-#### A masked pattern was here ####
-POSTHOOK: Output: default@load1_mm
-#### A masked pattern was here ####
-PREHOOK: type: LOAD
-#### A masked pattern was here ####
-PREHOOK: Output: default@load1_mm
-#### A masked pattern was here ####
-POSTHOOK: type: LOAD
-#### A masked pattern was here ####
-POSTHOOK: Output: default@load1_mm
-PREHOOK: query: select count(1) from load1_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@load1_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select count(1) from load1_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@load1_mm
-#### A masked pattern was here ####
-1000
-PREHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
-PREHOOK: type: LOAD
-#### A masked pattern was here ####
-PREHOOK: Output: default@intermediate2
-POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
-POSTHOOK: type: LOAD
-#### A masked pattern was here ####
-POSTHOOK: Output: default@intermediate2
-PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
-PREHOOK: type: LOAD
-#### A masked pattern was here ####
-PREHOOK: Output: default@intermediate2
-POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
-POSTHOOK: type: LOAD
-#### A masked pattern was here ####
-POSTHOOK: Output: default@intermediate2
-PREHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
-PREHOOK: type: LOAD
-#### A masked pattern was here ####
-PREHOOK: Output: default@intermediate2
-POSTHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
-POSTHOOK: type: LOAD
-#### A masked pattern was here ####
-POSTHOOK: Output: default@intermediate2
-#### A masked pattern was here ####
-PREHOOK: type: LOAD
-#### A masked pattern was here ####
-PREHOOK: Output: default@load1_mm
-#### A masked pattern was here ####
-POSTHOOK: type: LOAD
-#### A masked pattern was here ####
-POSTHOOK: Output: default@load1_mm
-PREHOOK: query: select count(1) from load1_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@load1_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select count(1) from load1_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@load1_mm
-#### A masked pattern was here ####
-1050
-PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
-PREHOOK: type: LOAD
-#### A masked pattern was here ####
-PREHOOK: Output: default@intermediate2
-POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
-POSTHOOK: type: LOAD
-#### A masked pattern was here ####
-POSTHOOK: Output: default@intermediate2
-#### A masked pattern was here ####
-PREHOOK: type: LOAD
-#### A masked pattern was here ####
-PREHOOK: Output: default@load1_mm
-#### A masked pattern was here ####
-POSTHOOK: type: LOAD
-#### A masked pattern was here ####
-POSTHOOK: Output: default@load1_mm
-PREHOOK: query: select count(1) from load1_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@load1_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select count(1) from load1_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@load1_mm
-#### A masked pattern was here ####
-500
-PREHOOK: query: drop table load1_mm
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@load1_mm
-PREHOOK: Output: default@load1_mm
-POSTHOOK: query: drop table load1_mm
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@load1_mm
-POSTHOOK: Output: default@load1_mm
-PREHOOK: query: drop table load2_mm
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table load2_mm
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: create table load2_mm (key string, value string)
- partitioned by (k int, l int) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@load2_mm
-POSTHOOK: query: create table load2_mm (key string, value string)
- partitioned by (k int, l int) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@load2_mm
-PREHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
-PREHOOK: type: LOAD
-#### A masked pattern was here ####
-PREHOOK: Output: default@intermediate2
-POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
-POSTHOOK: type: LOAD
-#### A masked pattern was here ####
-POSTHOOK: Output: default@intermediate2
-PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
-PREHOOK: type: LOAD
-#### A masked pattern was here ####
-PREHOOK: Output: default@intermediate2
-POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
-POSTHOOK: type: LOAD
-#### A masked pattern was here ####
-POSTHOOK: Output: default@intermediate2
-PREHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
-PREHOOK: type: LOAD
-#### A masked pattern was here ####
-PREHOOK: Output: default@intermediate2
-POSTHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
-POSTHOOK: type: LOAD
-#### A masked pattern was here ####
-POSTHOOK: Output: default@intermediate2
-#### A masked pattern was here ####
-PREHOOK: type: LOAD
-#### A masked pattern was here ####
-PREHOOK: Output: default@load2_mm
-#### A masked pattern was here ####
-POSTHOOK: type: LOAD
-#### A masked pattern was here ####
-POSTHOOK: Output: default@load2_mm
-POSTHOOK: Output: default@load2_mm@k=5/l=5
-PREHOOK: query: select count(1) from load2_mm
-PREHOOK: type: QUERY
-PREHOOK: Input: default@load2_mm
-PREHOOK: Input: default@load2_mm@k=5/l=5
-#### A masked pattern was here ####
-POSTHOOK: query: select count(1) from load2_mm
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@load2_mm
-POSTHOOK: Input: default@load2_mm@k=5/l=5
-#### A masked pattern was here ####
-1025
-PREHOOK: query: drop table load2_mm
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@load2_mm
-PREHOOK: Output: default@load2_mm
-POSTHOOK: query: drop table load2_mm
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@load2_mm
-POSTHOOK: Output: default@load2_mm
-PREHOOK: query: drop table intermediate2
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@intermediate2
-PREHOOK: Output: default@intermediate2
-POSTHOOK: query: drop table intermediate2
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@intermediate2
-POSTHOOK: Output: default@intermediate2
-PREHOOK: query: drop table multi0_1_mm
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table multi0_1_mm
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: drop table multi0_2_mm
-PREHOOK: type: DROPTABLE
-POSTHOOK: query: drop table multi0_2_mm
-POSTHOOK: type: DROPTABLE
-PREHOOK: query: create table multi0_1_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@multi0_1_mm
-POSTHOOK: query: create table multi0_1_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@multi0_1_mm
-PREHOOK: query: create table multi0_2_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@multi0_2_mm
-POSTHOOK: query: create table multi0_2_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@multi0_2_mm
-PREHOOK: query: CREATE TABLE parquet1_mm(id INT) STORED AS PARQUET tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@parquet1_mm
-POSTHOOK: query: CREATE TABLE parquet1_mm(id INT) STORED AS PARQUET tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@parquet1_mm
-PREHOOK: query: INSERT INTO parquet1_mm VALUES(1), (2)
-PREHOOK: type: QUERY
-PREHOOK: Output: default@parquet1_mm
-POSTHOOK: query: INSERT INTO parquet1_mm VALUES(1), (2)
-POSTHOOK: type: QUERY
-POSTHOOK: Output: default@parquet1_mm
-POSTHOOK: Lineage: parquet1_mm.id EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col1, type:string, comment:), ]
-PREHOOK: query: CREATE TABLE parquet2_mm(id INT, value STRING) STORED AS PARQUET tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@parquet2_mm
-POSTHOOK: query: CREATE TABLE parquet2_mm(id INT, value STRING) STORED AS PARQUET tblproperties ("transactional"="true", "transactional_properties"="insert_only")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@parquet2_mm
-PREHOOK: query: INSERT INTO parquet2_mm VALUES(1, 'value1')
-PREHOOK: type: QUERY
-PREHOOK: Output: default@parquet2_mm
-POSTHOOK: query: INSERT INTO parquet2_mm VALUES(1, 'value1')
-POSTHOOK: type: QUERY
-POSTHOOK: Output: default@parquet2_mm
-POSTHOOK: Lineage: parquet2_mm.id EXPRESSION [(values__tmp__table__2)values__tmp__table__2.FieldSchema(name:tmp_values_col1, type:string, comment:), ]
-POSTHOOK: Lineage: parquet2_mm.value SIMPLE [(values__tmp__table__2)values__tmp__table__2.FieldSchema(name:tmp_values_col2, type:string, comment:), ]
-PREHOOK: query: INSERT INTO parquet2_mm VALUES(1, 'value2')
-PREHOOK: type: QUERY
-PREHOOK: Output: default@parquet2_mm
-POSTHOOK: query: INSERT INTO parquet2_mm VALUES(1, 'value2')
-POSTHOOK: type: QUERY
-POSTHOOK: Output: default@parquet2_mm
-POSTHOOK: Lineage: parquet2_mm.id EXPRESSION [(values__tmp__table__3)values__tmp__table__3.FieldSchema(name:tmp_values_col1, type:string, comment:), ]
-POSTHOOK: Lineage: parquet2_mm.value SIMPLE [(values__tmp__table__3)values__tmp__table__3.FieldSchema(name:tmp_values_col2, type:string, comment:), ]
-PREHOOK: query: select parquet1_mm.id, t1.value, t2.value FROM parquet1_mm
- JOIN parquet2_mm t1 ON parquet1_mm.id=t1.id
- JOIN parquet2_mm t2 ON parquet1_mm.id=t2.id
-where t1.value = 'value1' and t2.value = 'value2'
-PREHOOK: type: QUERY
-PREHOOK: Input: default@parquet1_mm
-PREHOOK: Input: default@parquet2_mm
-#### A masked pattern was here ####
-POSTHOOK: query: select parquet1_mm.id, t1.value, t2.value FROM parquet1_mm
- JOIN parquet2_mm t1 ON parquet1_mm.id=t1.id
- JOIN parquet2_mm t2 ON parquet1_mm.id=t2.id
-where t1.value = 'value1' and t2.value = 'value2'
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@parquet1_mm
-POSTHOOK: Input: default@parquet2_mm
-#### A masked pattern was here ####
-1 value1 value2
-PREHOOK: query: drop table parquet1_mm
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@parquet1_mm
-PREHOOK: Output: default@parquet1_mm
-POSTHOOK: query: drop table parquet1_mm
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@parquet1_mm
-POSTHOOK: Output: default@parquet1_mm
-PREHOOK: query: drop table parquet2_mm
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@parquet2_mm
-PREHOOK: Output: default@parquet2_mm
-POSTHOOK: query: drop table parquet2_mm
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@parquet2_mm
-POSTHOOK: Output: default@parquet2_mm
-PREHOOK: query: drop table intermediate
-PREHOOK: type: DROPTABLE
-PREHOOK: Input: default@intermediate
-PREHOOK: Output: default@intermediate
-POSTHOOK: query: drop table intermediate
-POSTHOOK: type: DROPTABLE
-POSTHOOK: Input: default@intermediate
-POSTHOOK: Output: default@intermediate
http://git-wip-us.apache.org/repos/asf/hive/blob/a0c546f7/ql/src/test/results/clientpositive/tez/explainuser_3.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/tez/explainuser_3.q.out b/ql/src/test/results/clientpositive/tez/explainuser_3.q.out
index 7e89478..cd17cfa 100644
--- a/ql/src/test/results/clientpositive/tez/explainuser_3.q.out
+++ b/ql/src/test/results/clientpositive/tez/explainuser_3.q.out
@@ -511,9 +511,9 @@ Stage-3
Map 1 vectorized
File Output Operator [FS_8]
table:{"name:":"default.orc_merge5"}
- Select Operator [SEL_9] (rows=1 width=352)
+ Select Operator [SEL_7] (rows=1 width=352)
Output:["_col0","_col1","_col2","_col3","_col4"]
- Filter Operator [FIL_8] (rows=1 width=352)
+ Filter Operator [FIL_6] (rows=1 width=352)
predicate:(userid <= 13)
TableScan [TS_0] (rows=1 width=352)
default@orc_merge5,orc_merge5,Tbl:COMPLETE,Col:NONE,Output:["userid","string1","subtype","decimal1","ts"]
[45/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-14671 : merge master into hive-14535 (Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/42335b46
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/42335b46
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/42335b46
Branch: refs/heads/master
Commit: 42335b46cacb2ebcc4569e1081a1cc6369558146
Parents: 14c9482 c254557
Author: sergey <se...@apache.org>
Authored: Mon Oct 9 17:37:32 2017 -0700
Committer: sergey <se...@apache.org>
Committed: Mon Oct 9 17:37:32 2017 -0700
----------------------------------------------------------------------
.../mr/AccumuloIndexedOutputFormat.java | 50 +-
.../positive/accumulo_predicate_pushdown.q.out | 2 +-
.../accumulo_single_sourced_multi_insert.q.out | 4 +-
.../java/org/apache/hive/beeline/BeeLine.java | 110 +-
.../apache/hive/beeline/ClassNameCompleter.java | 254 --
.../org/apache/hive/beeline/HiveSchemaTool.java | 36 +-
.../hive/beeline/TestBeelineArgParsing.java | 13 +-
.../hive/beeline/TestClassNameCompleter.java | 76 -
bin/ext/tokentool.sh | 67 +
.../hive/common/ValidCompactorTxnList.java | 89 -
.../hadoop/hive/common/ValidReadTxnList.java | 237 --
.../apache/hadoop/hive/common/ValidTxnList.java | 112 -
.../hadoop/hive/common/log/LogRedirector.java | 99 +
.../org/apache/hadoop/hive/conf/HiveConf.java | 62 +-
.../apache/hive/common/util/HiveTestUtils.java | 37 +-
.../java/org/apache/hive/http/HttpServer.java | 34 +-
.../hive/common/TestValidReadTxnList.java | 109 -
data/conf/spark/local/hive-site.xml | 258 ++
data/files/birthdays | 9 +
data/scripts/q_test_init.sql | 10 +-
.../results/positive/external_table_ppd.q.out | 1 -
.../positive/hbase_binary_storage_queries.q.out | 2 -
.../src/test/results/positive/hbase_ddl.q.out | 2 -
.../src/test/results/positive/hbasestats.q.out | 5 -
.../apache/hive/hcatalog/data/JsonSerDe.java | 15 +-
.../mapreduce/FileOutputCommitterContainer.java | 11 +-
.../hive/hcatalog/mapreduce/Security.java | 3 +
.../hive/hcatalog/streaming/TestStreaming.java | 4 +-
.../streaming/mutate/StreamingTestUtils.java | 4 +-
.../hive/hcatalog/api/TestHCatClient.java | 2 +-
.../svr/src/main/config/webhcat-default.xml | 8 +
.../hive/hcatalog/templeton/AppConfig.java | 1 +
.../apache/hive/hcatalog/templeton/Main.java | 43 +
.../test/queries/clientpositive/multiple_agg.q | 9 +
...rt_addpartition_blobstore_to_blobstore.q.out | 4 -
...import_addpartition_blobstore_to_local.q.out | 4 -
...rt_addpartition_blobstore_to_warehouse.q.out | 4 -
...import_addpartition_local_to_blobstore.q.out | 4 -
.../import_blobstore_to_blobstore.q.out | 2 -
.../import_blobstore_to_local.q.out | 2 -
.../import_blobstore_to_warehouse.q.out | 2 -
.../import_local_to_blobstore.q.out | 2 -
.../results/clientpositive/multiple_agg.q.out | 35 +
.../hive/metastore/TestHiveMetaStoreTxns.java | 4 +-
.../apache/hadoop/hive/ql/TestAcidOnTez.java | 5 +-
.../hadoop/hive/ql/history/TestHiveHistory.java | 4 +-
.../hive/ql/parse/TestReplicationScenarios.java | 63 +-
.../hive/ql/txn/compactor/TestCompactor.java | 4 +-
.../hive/cli/TestLocalSparkCliDriver.java | 62 +
.../test/resources/testconfiguration.properties | 2 +
.../hadoop/hive/cli/control/CliConfigs.java | 22 +
.../hive/cli/control/CoreBeeLineDriver.java | 41 +-
.../java/org/apache/hive/beeline/QFile.java | 124 +-
.../apache/hive/beeline/QFileBeeLineClient.java | 138 +-
.../llap/io/decode/OrcEncodedDataConsumer.java | 7 +-
.../llap/io/encoded/SerDeEncodedDataReader.java | 15 +-
.../hive/llap/cache/TestLowLevelCacheImpl.java | 4 +-
.../upgrade/derby/046-HIVE-17566.derby.sql | 25 +
.../upgrade/derby/hive-schema-3.0.0.derby.sql | 41 +-
.../derby/upgrade-2.3.0-to-3.0.0.derby.sql | 1 +
.../upgrade/hive/hive-schema-3.0.0.hive.sql | 17 +
.../upgrade/mssql/031-HIVE-17566.mssql.sql | 76 +
.../upgrade/mssql/hive-schema-3.0.0.mssql.sql | 78 +-
.../mssql/upgrade-2.3.0-to-3.0.0.mssql.sql | 1 +
.../upgrade/mysql/045-HIVE-16886.mysql.sql | 2 +-
.../upgrade/mysql/046-HIVE-17566.mysql.sql | 57 +
.../upgrade/mysql/hive-schema-3.0.0.mysql.sql | 64 +-
.../mysql/upgrade-2.3.0-to-3.0.0.mysql.sql | 1 +
.../upgrade/oracle/046-HIVE-17566.oracle.sql | 76 +
.../upgrade/oracle/hive-schema-3.0.0.oracle.sql | 78 +-
.../oracle/upgrade-2.3.0-to-3.0.0.oracle.sql | 1 +
.../postgres/045-HIVE-17566.postgres.sql | 88 +
.../postgres/hive-schema-3.0.0.postgres.sql | 91 +
.../upgrade-2.3.0-to-3.0.0.postgres.sql | 1 +
.../hadoop/hive/metastore/HiveMetaStore.java | 14 +
.../hive/metastore/HiveMetaStoreClient.java | 2 +
.../hive/metastore/MetaStoreDirectSql.java | 2 +
.../hadoop/hive/metastore/ObjectStore.java | 2 +-
.../hadoop/hive/metastore/cache/CacheUtils.java | 8 +-
.../hive/metastore/cache/CachedStore.java | 545 ++-
.../hive/metastore/cache/SharedCache.java | 124 +-
.../datasource/BoneCPDataSourceProvider.java | 95 -
.../datasource/DataSourceProvider.java | 79 -
.../datasource/DataSourceProviderFactory.java | 47 -
.../datasource/HikariCPDataSourceProvider.java | 97 -
.../hive/metastore/datasource/package-info.java | 23 -
.../hive/metastore/tools/SQLGenerator.java | 172 -
.../hive/metastore/txn/CompactionInfo.java | 151 -
.../metastore/txn/CompactionTxnHandler.java | 960 -----
.../hadoop/hive/metastore/txn/TxnDbUtil.java | 369 --
.../hadoop/hive/metastore/txn/TxnHandler.java | 3667 ------------------
.../hadoop/hive/metastore/txn/TxnStore.java | 433 ---
.../hadoop/hive/metastore/txn/TxnUtils.java | 242 --
.../hive/metastore/cache/TestCachedStore.java | 113 +-
.../TestDataSourceProviderFactory.java | 173 -
.../metastore/txn/TestTxnHandlerNegative.java | 54 -
.../hadoop/hive/metastore/txn/TestTxnUtils.java | 215 -
.../txn/TestValidCompactorTxnList.java | 136 -
pom.xml | 2 +
.../hadoop/hive/llap/LlapCacheAwareFs.java | 4 +-
.../java/org/apache/hadoop/hive/ql/Driver.java | 4 +-
.../org/apache/hadoop/hive/ql/ErrorMsg.java | 35 +-
.../apache/hadoop/hive/ql/QueryProperties.java | 13 +-
.../org/apache/hadoop/hive/ql/exec/DDLTask.java | 20 +-
.../apache/hadoop/hive/ql/exec/MoveTask.java | 9 +-
.../hadoop/hive/ql/exec/ReplCopyTask.java | 18 +-
.../hadoop/hive/ql/exec/StatsNoJobTask.java | 2 +-
.../apache/hadoop/hive/ql/exec/StatsTask.java | 9 +-
.../apache/hadoop/hive/ql/exec/TaskFactory.java | 4 -
.../apache/hadoop/hive/ql/exec/Utilities.java | 34 +-
.../hadoop/hive/ql/exec/mr/MapredLocalTask.java | 24 +-
.../bootstrap/load/table/LoadPartitions.java | 4 +-
.../repl/bootstrap/load/table/LoadTable.java | 4 +-
.../hadoop/hive/ql/exec/tez/DagUtils.java | 40 +-
.../hadoop/hive/ql/exec/tez/TezProcessor.java | 67 +-
.../org/apache/hadoop/hive/ql/hooks/Entity.java | 17 +-
.../hadoop/hive/ql/hooks/WriteEntity.java | 5 +-
.../hive/ql/io/orc/encoded/CacheChunk.java | 12 +-
.../ql/io/orc/encoded/EncodedReaderImpl.java | 69 +-
.../ql/io/rcfile/stats/PartialScanMapper.java | 180 -
.../ql/io/rcfile/stats/PartialScanTask.java | 381 --
.../ql/io/rcfile/stats/PartialScanWork.java | 119 -
.../apache/hadoop/hive/ql/metadata/Hive.java | 81 +-
.../apache/hadoop/hive/ql/metadata/Table.java | 1 +
.../formatting/JsonMetaDataFormatter.java | 5 +-
.../formatting/MetaDataFormatUtils.java | 304 +-
.../metadata/formatting/MetaDataFormatter.java | 2 +-
.../formatting/MetaDataPrettyFormatUtils.java | 244 --
.../formatting/TextMetaDataFormatter.java | 42 +-
.../metadata/formatting/TextMetaDataTable.java | 61 +
.../hive/ql/optimizer/GenMRTableScan1.java | 57 -
.../hive/ql/optimizer/GenMapRedUtils.java | 31 -
.../ql/optimizer/QueryPlanPostProcessor.java | 1 -
.../hive/ql/optimizer/StatsOptimizer.java | 5 +
.../calcite/translator/RexNodeConverter.java | 23 +-
.../ql/parse/ColumnStatsSemanticAnalyzer.java | 2 -
.../hive/ql/parse/DDLSemanticAnalyzer.java | 25 +-
.../hive/ql/parse/FunctionSemanticAnalyzer.java | 9 +-
.../org/apache/hadoop/hive/ql/parse/HiveLexer.g | 2 -
.../apache/hadoop/hive/ql/parse/HiveParser.g | 6 +-
.../hadoop/hive/ql/parse/IdentifiersParser.g | 2 +-
.../hive/ql/parse/ImportSemanticAnalyzer.java | 8 +-
.../hive/ql/parse/LoadSemanticAnalyzer.java | 4 +-
.../hive/ql/parse/ProcessAnalyzeTable.java | 49 -
.../hadoop/hive/ql/parse/QBParseInfo.java | 16 -
.../hadoop/hive/ql/parse/SemanticAnalyzer.java | 173 +-
.../hadoop/hive/ql/parse/repl/CopyUtils.java | 6 +-
.../hadoop/hive/ql/parse/repl/dump/Utils.java | 6 +
.../parse/spark/SparkProcessAnalyzeTable.java | 51 +-
.../hadoop/hive/ql/plan/DescTableDesc.java | 16 +-
.../hadoop/hive/ql/plan/LoadTableDesc.java | 44 +-
.../apache/hadoop/hive/ql/plan/StatsWork.java | 16 -
.../plugin/HiveAuthorizerImpl.java | 1 -
.../plugin/HivePrivilegeObject.java | 25 +-
.../hadoop/hive/ql/session/SessionState.java | 79 +-
.../hive/ql/txn/AcidOpenTxnsCounterService.java | 75 -
.../hadoop/hive/ql/util/ResourceDownloader.java | 11 +-
.../metastore/txn/TestCompactionTxnHandler.java | 4 +-
.../hive/metastore/txn/TestTxnHandler.java | 4 +-
.../txn/TestTxnHandlerNoConnectionPool.java | 6 +-
.../apache/hadoop/hive/ql/TestTxnCommands.java | 23 +-
.../apache/hadoop/hive/ql/TestTxnCommands2.java | 16 +-
.../hadoop/hive/ql/TxnCommandsBaseForTests.java | 5 +-
.../hadoop/hive/ql/exec/TestExecDriver.java | 4 +-
.../hive/ql/lockmgr/TestDbTxnManager.java | 28 +-
.../hive/ql/lockmgr/TestDbTxnManager2.java | 356 +-
.../hive/ql/metadata/TestHiveCopyFiles.java | 12 +-
.../TestSQLStdHiveAccessControllerHS2.java | 3 +-
.../hadoop/hive/ql/session/TestAddResource.java | 18 +-
.../hive/ql/txn/compactor/CompactorTest.java | 2 +-
.../stats_partialscan_autogether.q | 32 -
.../stats_partialscan_non_external.q | 5 -
.../stats_partialscan_non_native.q | 6 -
.../clientnegative/stats_partscan_norcfile.q | 12 -
.../queries/clientpositive/describe_pretty.q | 80 -
.../queries/clientpositive/escape_comments.q | 1 -
.../test/queries/clientpositive/orc_analyze.q | 14 -
.../clientpositive/spark_local_queries.q | 16 +
.../queries/clientpositive/stats_noscan_2.q | 3 +
.../queries/clientpositive/stats_partscan_1.q | 37 -
.../clientpositive/stats_partscan_1_23.q | 38 -
.../clientnegative/alter_file_format.q.out | 1 -
.../alter_partition_coltype_2columns.q.out | 1 -
...alter_partition_coltype_invalidcolname.q.out | 1 -
.../alter_partition_coltype_invalidtype.q.out | 1 -
...ter_partition_partial_spec_dyndisabled.q.out | 1 -
.../alter_view_as_select_with_partition.q.out | 2 -
.../results/clientnegative/desc_failure2.q.out | 1 -
.../stats_partialscan_autogether.q.out | 77 -
.../stats_partialscan_non_external.q.out | 9 -
.../stats_partialscan_non_native.q.out | 11 -
.../stats_partscan_norcfile.q.out | 36 -
.../clientnegative/wrong_column_type.q.out | 2 +-
.../clientpositive/acid_table_stats.q.out | 16 -
ql/src/test/results/clientpositive/alter2.q.out | 12 -
ql/src/test/results/clientpositive/alter3.q.out | 6 -
ql/src/test/results/clientpositive/alter5.q.out | 4 -
.../clientpositive/alterColumnStats.q.out | 33 +-
.../clientpositive/alterColumnStatsPart.q.out | 11 -
.../clientpositive/alter_file_format.q.out | 19 -
.../results/clientpositive/alter_merge_2.q.out | 1 -
.../clientpositive/alter_merge_2_orc.q.out | 1 -
.../clientpositive/alter_merge_stats.q.out | 3 -
...lter_numbuckets_partitioned_table2_h23.q.out | 36 -
...alter_numbuckets_partitioned_table_h23.q.out | 24 -
.../alter_partition_change_col.q.out | 13 -
.../alter_partition_clusterby_sortby.q.out | 8 -
.../alter_partition_coltype.q.out | 4 -
.../alter_partition_format_loc.q.out | 6 -
.../alter_partition_onto_nocurrent_db.q.out | 2 -
.../alter_partition_update_status.q.out | 75 +-
.../clientpositive/alter_skewed_table.q.out | 6 -
.../alter_table_add_partition.q.out | 10 -
.../clientpositive/alter_table_cascade.q.out | 46 -
.../alter_table_column_stats.q.out | 1324 +++++--
.../clientpositive/alter_table_not_sorted.q.out | 2 -
.../clientpositive/alter_table_serde.q.out | 5 -
.../clientpositive/alter_table_serde2.q.out | 8 -
.../alter_table_stats_status.q.out | 13 -
.../alter_table_update_status.q.out | 720 +++-
..._table_update_status_disable_bitvector.q.out | 720 +++-
.../clientpositive/alter_view_as_select.q.out | 3 -
.../analyze_table_null_partition.q.out | 1 -
.../clientpositive/analyze_tbl_date.q.out | 1 -
.../clientpositive/analyze_tbl_part.q.out | 45 +-
.../clientpositive/annotate_stats_select.q.out | 16 +-
.../clientpositive/authorization_index.q.out | 1 -
.../clientpositive/autoColumnStats_3.q.out | 14 -
.../clientpositive/autoColumnStats_4.q.out | 3 -
.../clientpositive/autoColumnStats_5.q.out | 76 +-
.../clientpositive/autoColumnStats_8.q.out | 1 -
.../clientpositive/autoColumnStats_9.q.out | 31 +-
.../results/clientpositive/auto_join25.q.out | 4 +
.../auto_join_without_localtask.q.out | 2 +
.../clientpositive/avro_add_column3.q.out | 1 -
.../results/clientpositive/avro_decimal.q.out | 15 +-
.../clientpositive/avro_decimal_native.q.out | 15 +-
.../avro_schema_evolution_native.q.out | 4 -
.../beeline/colstats_all_nulls.q.out | 91 +
.../beeline/escape_comments.q.out | 32 +-
.../test/results/clientpositive/bitvector.q.out | 15 +-
.../bucketsortoptimize_insert_8.q.out | 2 +
.../clientpositive/colstats_all_nulls.q.out | 30 +-
.../columnStatsUpdateForStatsOptimizer_2.q.out | 4 -
...names_with_leading_and_trailing_spaces.q.out | 31 +-
.../column_pruner_multiple_children.q.out | 31 +-
.../clientpositive/columnstats_infinity.q.out | 3 -
.../clientpositive/columnstats_partlvl.q.out | 90 +-
.../clientpositive/columnstats_partlvl_dp.q.out | 150 +-
.../clientpositive/columnstats_tbllvl.q.out | 105 +-
.../test/results/clientpositive/combine3.q.out | 2 -
.../results/clientpositive/compustat_avro.q.out | 30 +-
.../clientpositive/compute_stats_date.q.out | 30 +-
.../confirm_initial_tbl_stats.q.out | 166 +-
.../clientpositive/convert_enum_to_string.q.out | 1 -
.../create_alter_list_bucketing_table1.q.out | 7 -
.../results/clientpositive/create_like.q.out | 10 -
.../results/clientpositive/create_like2.q.out | 1 -
.../clientpositive/create_like_tbl_props.q.out | 5 -
.../clientpositive/create_like_view.q.out | 5 -
.../clientpositive/create_or_replace_view.q.out | 9 -
.../clientpositive/create_skewed_table1.q.out | 3 -
.../create_table_like_stats.q.out | 6 -
.../results/clientpositive/create_view.q.out | 14 -
.../create_view_defaultformats.q.out | 2 -
.../create_view_partitioned.q.out | 7 -
.../clientpositive/create_view_translate.q.out | 2 -
.../create_with_constraints.q.out | 36 -
ql/src/test/results/clientpositive/ctas.q.out | 5 -
.../results/clientpositive/ctas_colname.q.out | 7 -
.../ctas_uses_database_location.q.out | 1 -
.../clientpositive/database_location.q.out | 2 -
.../clientpositive/dbtxnmgr_query5.q.out | 1 -
.../clientpositive/decimal_precision2.q.out | 8 +-
.../results/clientpositive/decimal_serde.q.out | 2 -
.../results/clientpositive/decimal_stats.q.out | 15 +-
.../clientpositive/default_file_format.q.out | 12 -
.../results/clientpositive/deleteAnalyze.q.out | 16 +-
.../clientpositive/desc_tbl_part_cols.q.out | 1 -
.../describe_comment_indent.q.out | 1 -
.../describe_comment_nonascii.q.out | 1 -
.../describe_formatted_view_partitioned.q.out | 2 -
.../clientpositive/describe_pretty.q.out | 323 --
.../clientpositive/describe_syntax.q.out | 61 +-
.../results/clientpositive/describe_table.q.out | 84 +-
.../display_colstats_tbllvl.q.out | 180 +-
.../clientpositive/drop_partitions_filter.q.out | 1 -
.../drop_partitions_filter2.q.out | 1 -
.../drop_partitions_filter3.q.out | 1 -
.../results/clientpositive/druid_basic1.q.out | 2 -
.../results/clientpositive/druid_basic2.q.out | 1 -
.../clientpositive/druid_intervals.q.out | 1 -
.../clientpositive/druid_timeseries.q.out | 1 -
.../results/clientpositive/druid_topn.q.out | 1 -
.../encrypted/encryption_insert_values.q.out | 1 -
.../encrypted/encryption_move_tbl.q.out | 60 +-
.../clientpositive/escape_comments.q.out | 24 -
.../clientpositive/exim_02_00_part_empty.q.out | 1 -
.../results/clientpositive/exim_02_part.q.out | 1 -
.../clientpositive/exim_04_all_part.q.out | 1 -
.../clientpositive/exim_04_evolved_parts.q.out | 3 -
.../clientpositive/exim_05_some_part.q.out | 1 -
.../clientpositive/exim_06_one_part.q.out | 1 -
.../exim_07_all_part_over_nonoverlap.q.out | 1 -
.../exim_09_part_spec_nonoverlap.q.out | 1 -
.../clientpositive/exim_15_external_part.q.out | 1 -
.../clientpositive/exim_18_part_external.q.out | 1 -
.../exim_19_00_part_external_location.q.out | 1 -
.../exim_19_part_external_location.q.out | 1 -
.../exim_20_part_managed_location.q.out | 1 -
.../clientpositive/exim_hidden_files.q.out | 2 -
.../extrapolate_part_stats_full.q.out | 15 +-
.../extrapolate_part_stats_partial.q.out | 30 +-
.../test/results/clientpositive/fm-sketch.q.out | 75 +-
ql/src/test/results/clientpositive/hll.q.out | 75 +-
.../clientpositive/index_skewtable.q.out | 1 -
.../clientpositive/infer_bucket_sort.q.out | 50 -
.../infer_bucket_sort_convert_join.q.out | 5 +-
.../infer_bucket_sort_dyn_part.q.out | 16 -
.../infer_bucket_sort_grouping_operators.q.out | 12 -
.../infer_bucket_sort_list_bucket.q.out | 4 -
.../infer_bucket_sort_map_operators.q.out | 8 -
.../infer_bucket_sort_merge.q.out | 4 -
.../infer_bucket_sort_multi_insert.q.out | 16 -
.../infer_bucket_sort_num_buckets.q.out | 4 -
.../infer_bucket_sort_reducers_power_two.q.out | 12 -
.../test/results/clientpositive/input10.q.out | 1 -
.../results/clientpositive/input_part10.q.out | 1 -
.../test/results/clientpositive/inputddl2.q.out | 1 -
.../test/results/clientpositive/inputddl4.q.out | 2 -
.../test/results/clientpositive/inputddl6.q.out | 2 -
.../test/results/clientpositive/inputddl7.q.out | 2 -
.../test/results/clientpositive/inputddl8.q.out | 1 -
.../insert_values_orig_table_use_metadata.q.out | 13 -
.../results/clientpositive/lb_fs_stats.q.out | 2 -
.../clientpositive/list_bucket_dml_1.q.out | 4 -
.../clientpositive/list_bucket_dml_11.q.out | 2 -
.../clientpositive/list_bucket_dml_12.q.out | 2 -
.../clientpositive/list_bucket_dml_13.q.out | 2 -
.../clientpositive/list_bucket_dml_14.q.out | 1 -
.../clientpositive/list_bucket_dml_2.q.out | 2 -
.../clientpositive/list_bucket_dml_3.q.out | 2 -
.../clientpositive/list_bucket_dml_4.q.out | 4 -
.../clientpositive/list_bucket_dml_5.q.out | 4 -
.../clientpositive/list_bucket_dml_6.q.out | 8 -
.../clientpositive/list_bucket_dml_7.q.out | 8 -
.../clientpositive/list_bucket_dml_8.q.out | 6 -
.../clientpositive/list_bucket_dml_9.q.out | 4 -
.../list_bucket_query_multiskew_1.q.out | 2 -
.../list_bucket_query_multiskew_2.q.out | 2 -
.../list_bucket_query_multiskew_3.q.out | 6 -
.../list_bucket_query_oneskew_1.q.out | 2 -
.../list_bucket_query_oneskew_2.q.out | 2 -
.../list_bucket_query_oneskew_3.q.out | 2 -
.../clientpositive/literal_decimal.q.out | 6 +-
.../clientpositive/llap/alter_merge_2_orc.q.out | 1 -
.../llap/alter_merge_stats_orc.q.out | 8 -
.../clientpositive/llap/autoColumnStats_1.q.out | 26 -
.../clientpositive/llap/autoColumnStats_2.q.out | 148 +-
.../results/clientpositive/llap/bucket5.q.out | 1 -
.../clientpositive/llap/bucket_groupby.q.out | 4 -
.../columnStatsUpdateForStatsOptimizer_1.q.out | 14 -
...names_with_leading_and_trailing_spaces.q.out | 31 +-
.../llap/column_table_stats.q.out | 26 -
.../llap/column_table_stats_orc.q.out | 18 -
.../llap/columnstats_part_coltype.q.out | 203 +-
.../test/results/clientpositive/llap/ctas.q.out | 5 -
.../clientpositive/llap/deleteAnalyze.q.out | 16 +-
.../llap/dynpart_sort_opt_vectorization.q.out | 32 -
.../llap/dynpart_sort_optimization.q.out | 32 -
.../llap/dynpart_sort_optimization2.q.out | 24 -
.../clientpositive/llap/explainuser_1.q.out | 1 -
.../extrapolate_part_stats_partial_ndv.q.out | 330 +-
.../llap/infer_bucket_sort_bucketed_table.q.out | 2 -
.../llap/list_bucket_dml_10.q.out | 2 -
.../clientpositive/llap/load_dyn_part1.q.out | 1 -
.../clientpositive/llap/load_dyn_part2.q.out | 1 -
.../clientpositive/llap/load_dyn_part3.q.out | 1 -
.../clientpositive/llap/load_dyn_part5.q.out | 1 -
.../clientpositive/llap/orc_analyze.q.out | 330 --
.../clientpositive/llap/orc_create.q.out | 10 -
.../clientpositive/llap/orc_llap_counters.q.out | 1 -
.../llap/orc_llap_counters1.q.out | 1 -
.../clientpositive/llap/schema_evol_stats.q.out | 12 -
.../llap/selectDistinctStar.q.out | 2 -
.../results/clientpositive/llap/stats11.q.out | 8 -
.../clientpositive/llap/stats_noscan_1.q.out | 18 -
.../clientpositive/llap/stats_only_null.q.out | 19 +-
.../results/clientpositive/llap/sysdb.q.out | 45 +-
.../llap/tez_bmj_schema_evolution.q.out | 1 -
.../clientpositive/llap/tez_fsstat.q.out | 2 -
.../llap/tez_schema_evolution.q.out | 1 -
.../clientpositive/llap/union_fast_stats.q.out | 12 +-
.../clientpositive/llap/union_stats.q.out | 5 -
.../llap/vector_decimal_math_funcs.q.out | 6 +-
.../llap/vectorized_math_funcs.q.out | 2 +-
.../results/clientpositive/load_dyn_part1.q.out | 1 -
.../clientpositive/load_dyn_part10.q.out | 1 -
.../clientpositive/load_dyn_part11.q.out | 1 -
.../clientpositive/load_dyn_part12.q.out | 1 -
.../clientpositive/load_dyn_part13.q.out | 1 -
.../clientpositive/load_dyn_part14.q.out | 1 -
.../results/clientpositive/load_dyn_part2.q.out | 1 -
.../results/clientpositive/load_dyn_part3.q.out | 1 -
.../results/clientpositive/load_dyn_part4.q.out | 1 -
.../results/clientpositive/load_dyn_part6.q.out | 1 -
.../results/clientpositive/load_dyn_part7.q.out | 1 -
.../results/clientpositive/load_dyn_part8.q.out | 1 -
.../results/clientpositive/load_dyn_part9.q.out | 1 -
.../results/clientpositive/mapjoin_hook.q.out | 3 +
.../materialized_view_describe.q.out | 4 -
ql/src/test/results/clientpositive/merge3.q.out | 1 -
.../clientpositive/named_column_join.q.out | 3 -
.../clientpositive/parallel_orderby.q.out | 2 -
.../clientpositive/parquet_analyze.q.out | 2 -
.../parquet_array_null_element.q.out | 1 -
.../results/clientpositive/parquet_create.q.out | 1 -
.../parquet_mixed_partition_formats.q.out | 6 -
.../clientpositive/parquet_partitioned.q.out | 2 -
.../results/clientpositive/parquet_serde.q.out | 6 -
.../clientpositive/part_inherit_tbl_props.q.out | 2 -
.../part_inherit_tbl_props_empty.q.out | 2 -
.../part_inherit_tbl_props_with_star.q.out | 2 -
.../clientpositive/partial_column_stats.q.out | 15 +-
.../partition_coltype_literals.q.out | 107 +-
.../clientpositive/partition_date2.q.out | 2 -
.../clientpositive/partition_schema1.q.out | 3 -
.../clientpositive/partition_timestamp2.q.out | 2 -
.../clientpositive/perf/spark/query14.q.out | 3237 ----------------
.../clientpositive/perf/spark/query21.q.out | 2 +-
.../clientpositive/perf/spark/query75.q.out | 72 +-
.../clientpositive/perf/tez/query14.q.out | 2 +-
.../clientpositive/perf/tez/query21.q.out | 2 +-
.../results/clientpositive/quotedid_stats.q.out | 2 -
.../clientpositive/rcfile_default_format.q.out | 8 -
.../rename_external_partition_location.q.out | 68 +-
.../rename_table_update_column_stats.q.out | 180 +-
.../clientpositive/repl_2_exim_basic.q.out | 4 -
.../clientpositive/repl_3_exim_metadata.q.out | 2 -
.../sample_islocalmode_hook_use_metadata.q.out | 1 -
.../clientpositive/serde_reported_schema.q.out | 2 -
.../clientpositive/show_indexes_syntax.q.out | 2 -
.../spark/alter_merge_stats_orc.q.out | 8 -
.../spark/avro_decimal_native.q.out | 15 +-
.../results/clientpositive/spark/bucket5.q.out | 1 -
.../results/clientpositive/spark/ctas.q.out | 5 -
.../infer_bucket_sort_bucketed_table.q.out | 2 -
.../spark/infer_bucket_sort_map_operators.q.out | 8 -
.../spark/infer_bucket_sort_merge.q.out | 4 -
.../spark/infer_bucket_sort_num_buckets.q.out | 4 -
.../infer_bucket_sort_reducers_power_two.q.out | 12 -
.../spark/list_bucket_dml_10.q.out | 2 -
.../spark/list_bucket_dml_2.q.out | 2 -
.../clientpositive/spark/load_dyn_part1.q.out | 1 -
.../clientpositive/spark/load_dyn_part10.q.out | 1 -
.../clientpositive/spark/load_dyn_part11.q.out | 1 -
.../clientpositive/spark/load_dyn_part12.q.out | 1 -
.../clientpositive/spark/load_dyn_part13.q.out | 1 -
.../clientpositive/spark/load_dyn_part14.q.out | 1 -
.../clientpositive/spark/load_dyn_part2.q.out | 1 -
.../clientpositive/spark/load_dyn_part3.q.out | 1 -
.../clientpositive/spark/load_dyn_part4.q.out | 1 -
.../clientpositive/spark/load_dyn_part5.q.out | 1 -
.../clientpositive/spark/load_dyn_part6.q.out | 1 -
.../clientpositive/spark/load_dyn_part7.q.out | 1 -
.../clientpositive/spark/load_dyn_part8.q.out | 1 -
.../clientpositive/spark/load_dyn_part9.q.out | 1 -
.../clientpositive/spark/parallel_orderby.q.out | 2 -
.../spark/spark_explainuser_1.q.out | 1 -
.../spark/spark_local_queries.q.out | 131 +
.../results/clientpositive/spark/stats0.q.out | 4 -
.../results/clientpositive/spark/stats1.q.out | 2 -
.../results/clientpositive/spark/stats10.q.out | 6 -
.../results/clientpositive/spark/stats12.q.out | 10 -
.../results/clientpositive/spark/stats13.q.out | 12 -
.../results/clientpositive/spark/stats14.q.out | 9 -
.../results/clientpositive/spark/stats15.q.out | 9 -
.../results/clientpositive/spark/stats16.q.out | 2 -
.../results/clientpositive/spark/stats18.q.out | 4 -
.../results/clientpositive/spark/stats2.q.out | 4 -
.../results/clientpositive/spark/stats3.q.out | 3 -
.../results/clientpositive/spark/stats5.q.out | 1 -
.../results/clientpositive/spark/stats6.q.out | 10 -
.../results/clientpositive/spark/stats7.q.out | 6 -
.../results/clientpositive/spark/stats8.q.out | 20 -
.../results/clientpositive/spark/stats9.q.out | 1 -
.../clientpositive/spark/stats_noscan_1.q.out | 18 -
.../clientpositive/spark/stats_noscan_2.q.out | 83 +-
.../clientpositive/spark/stats_only_null.q.out | 19 +-
.../spark/stats_partscan_1_23.q.out | 187 -
.../results/clientpositive/spark/statsfs.q.out | 14 -
.../clientpositive/spark/union_remove_1.q.out | 1 -
.../clientpositive/spark/union_remove_10.q.out | 1 -
.../clientpositive/spark/union_remove_11.q.out | 1 -
.../clientpositive/spark/union_remove_12.q.out | 1 -
.../clientpositive/spark/union_remove_13.q.out | 1 -
.../clientpositive/spark/union_remove_14.q.out | 1 -
.../clientpositive/spark/union_remove_15.q.out | 2 -
.../clientpositive/spark/union_remove_16.q.out | 2 -
.../clientpositive/spark/union_remove_17.q.out | 2 -
.../clientpositive/spark/union_remove_18.q.out | 2 -
.../clientpositive/spark/union_remove_19.q.out | 1 -
.../clientpositive/spark/union_remove_2.q.out | 1 -
.../clientpositive/spark/union_remove_20.q.out | 1 -
.../clientpositive/spark/union_remove_21.q.out | 1 -
.../clientpositive/spark/union_remove_22.q.out | 1 -
.../clientpositive/spark/union_remove_23.q.out | 1 -
.../clientpositive/spark/union_remove_24.q.out | 1 -
.../clientpositive/spark/union_remove_25.q.out | 6 -
.../clientpositive/spark/union_remove_3.q.out | 1 -
.../clientpositive/spark/union_remove_4.q.out | 1 -
.../clientpositive/spark/union_remove_5.q.out | 1 -
.../clientpositive/spark/union_remove_7.q.out | 1 -
.../clientpositive/spark/union_remove_8.q.out | 1 -
.../clientpositive/spark/union_remove_9.q.out | 1 -
.../spark/vectorized_math_funcs.q.out | 2 +-
ql/src/test/results/clientpositive/stats0.q.out | 4 -
ql/src/test/results/clientpositive/stats1.q.out | 2 -
.../test/results/clientpositive/stats10.q.out | 6 -
.../test/results/clientpositive/stats12.q.out | 10 -
.../test/results/clientpositive/stats13.q.out | 12 -
.../test/results/clientpositive/stats14.q.out | 9 -
.../test/results/clientpositive/stats15.q.out | 9 -
.../test/results/clientpositive/stats16.q.out | 2 -
.../test/results/clientpositive/stats18.q.out | 4 -
ql/src/test/results/clientpositive/stats2.q.out | 4 -
ql/src/test/results/clientpositive/stats3.q.out | 3 -
ql/src/test/results/clientpositive/stats4.q.out | 12 -
ql/src/test/results/clientpositive/stats5.q.out | 1 -
ql/src/test/results/clientpositive/stats6.q.out | 10 -
ql/src/test/results/clientpositive/stats7.q.out | 6 -
ql/src/test/results/clientpositive/stats8.q.out | 20 -
ql/src/test/results/clientpositive/stats9.q.out | 1 -
.../clientpositive/stats_empty_partition.q.out | 2 -
.../clientpositive/stats_invalidation.q.out | 2 -
.../clientpositive/stats_list_bucket.q.out | 3 -
.../results/clientpositive/stats_noscan_1.q.out | 18 -
.../results/clientpositive/stats_noscan_2.q.out | 77 +-
.../clientpositive/stats_only_null.q.out | 19 +-
.../clientpositive/stats_partscan_1.q.out | 215 -
.../clientpositive/stats_partscan_1_23.q.out | 190 -
.../test/results/clientpositive/statsfs.q.out | 14 -
.../temp_table_display_colstats_tbllvl.q.out | 180 +-
.../clientpositive/tez/explainanalyze_5.q.out | 1 -
.../clientpositive/truncate_column.q.out | 11 -
.../results/clientpositive/tunable_ndv.q.out | 120 +-
.../clientpositive/unicode_comments.q.out | 5 -
.../clientpositive/unicode_notation.q.out | 3 -
.../clientpositive/union_pos_alias.q.out | 1 -
.../results/clientpositive/union_remove_1.q.out | 1 -
.../clientpositive/union_remove_10.q.out | 1 -
.../clientpositive/union_remove_11.q.out | 1 -
.../clientpositive/union_remove_12.q.out | 1 -
.../clientpositive/union_remove_13.q.out | 1 -
.../clientpositive/union_remove_14.q.out | 1 -
.../clientpositive/union_remove_15.q.out | 2 -
.../clientpositive/union_remove_16.q.out | 2 -
.../clientpositive/union_remove_17.q.out | 2 -
.../clientpositive/union_remove_18.q.out | 2 -
.../clientpositive/union_remove_19.q.out | 1 -
.../results/clientpositive/union_remove_2.q.out | 1 -
.../clientpositive/union_remove_20.q.out | 1 -
.../clientpositive/union_remove_21.q.out | 1 -
.../clientpositive/union_remove_22.q.out | 1 -
.../clientpositive/union_remove_23.q.out | 1 -
.../clientpositive/union_remove_24.q.out | 1 -
.../clientpositive/union_remove_25.q.out | 6 -
.../results/clientpositive/union_remove_3.q.out | 1 -
.../results/clientpositive/union_remove_4.q.out | 1 -
.../results/clientpositive/union_remove_5.q.out | 1 -
.../results/clientpositive/union_remove_7.q.out | 1 -
.../results/clientpositive/union_remove_8.q.out | 1 -
.../results/clientpositive/union_remove_9.q.out | 1 -
.../results/clientpositive/union_stats.q.out | 5 -
.../clientpositive/updateAccessTime.q.out | 6 -
.../vector_decimal_math_funcs.q.out | 6 +-
.../clientpositive/vectorized_math_funcs.q.out | 2 +-
.../results/clientpositive/view_alias.q.out | 6 -
.../test/results/clientpositive/view_cbo.q.out | 10 -
.../apache/hive/service/server/HiveServer2.java | 8 +
.../hive-webapps/hiveserver2/hiveserver2.jsp | 16 +-
.../hive/spark/client/SparkClientImpl.java | 63 +-
standalone-metastore/pom.xml | 20 +
.../gen/thrift/gen-cpp/ThriftHiveMetastore.cpp | 2132 +++++-----
.../gen/thrift/gen-cpp/hive_metastore_types.cpp | 860 +++-
.../gen/thrift/gen-cpp/hive_metastore_types.h | 288 ++
.../hadoop/hive/metastore/api/WMMapping.java | 804 ++++
.../hadoop/hive/metastore/api/WMPool.java | 908 +++++
.../hive/metastore/api/WMResourcePlan.java | 602 +++
.../hadoop/hive/metastore/api/WMTrigger.java | 706 ++++
.../src/gen/thrift/gen-php/metastore/Types.php | 622 +++
.../gen/thrift/gen-py/hive_metastore/ttypes.py | 458 +++
.../gen/thrift/gen-rb/hive_metastore_types.rb | 100 +
.../hive/metastore/RunnableConfigurable.java | 26 +
.../hive/metastore/conf/MetastoreConf.java | 63 +-
.../datasource/BoneCPDataSourceProvider.java | 94 +
.../datasource/DataSourceProvider.java | 79 +
.../datasource/DataSourceProviderFactory.java | 47 +
.../datasource/HikariCPDataSourceProvider.java | 96 +
.../hive/metastore/datasource/package-info.java | 23 +
.../hadoop/hive/metastore/model/MWMMapping.java | 82 +
.../hadoop/hive/metastore/model/MWMPool.java | 89 +
.../hive/metastore/model/MWMResourcePlan.java | 95 +
.../hadoop/hive/metastore/model/MWMTrigger.java | 78 +
.../metastore/security/DelegationTokenTool.java | 251 ++
.../hive/metastore/tools/SQLGenerator.java | 172 +
.../txn/AcidOpenTxnsCounterService.java | 63 +
.../hive/metastore/txn/CompactionInfo.java | 151 +
.../metastore/txn/CompactionTxnHandler.java | 961 +++++
.../hadoop/hive/metastore/txn/TxnDbUtil.java | 381 ++
.../hadoop/hive/metastore/txn/TxnHandler.java | 3643 +++++++++++++++++
.../hadoop/hive/metastore/txn/TxnStore.java | 420 ++
.../hadoop/hive/metastore/txn/TxnUtils.java | 243 ++
.../hadoop/hive/metastore/utils/JavaUtils.java | 46 +
.../hive/metastore/utils/StringableMap.java | 80 +
.../src/main/resources/package.jdo | 112 +
.../src/main/thrift/hive_metastore.thrift | 30 +
.../hive/metastore/conf/TestMetastoreConf.java | 17 +
.../TestDataSourceProviderFactory.java | 170 +
.../metastore/txn/TestTxnHandlerNegative.java | 55 +
.../hadoop/hive/metastore/txn/TestTxnUtils.java | 216 ++
storage-api/pom.xml | 7 +
.../hive/common/ValidCompactorTxnList.java | 89 +
.../hadoop/hive/common/ValidReadTxnList.java | 235 ++
.../apache/hadoop/hive/common/ValidTxnList.java | 112 +
.../hive/common/TestValidCompactorTxnList.java | 134 +
.../hive/common/TestValidReadTxnList.java | 109 +
627 files changed, 23127 insertions(+), 19526 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/hcatalog/core/src/main/java/org/apache/hive/hcatalog/mapreduce/FileOutputCommitterContainer.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/history/TestHiveHistory.java
----------------------------------------------------------------------
diff --cc itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/history/TestHiveHistory.java
index e519785,8a6fe3d..2f0efce
--- a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/history/TestHiveHistory.java
+++ b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/history/TestHiveHistory.java
@@@ -104,7 -105,7 +105,8 @@@ public class TestHiveHistory extends Te
db.dropTable(Warehouse.DEFAULT_DATABASE_NAME, src, true, true);
db.createTable(src, cols, null, TextInputFormat.class,
IgnoreKeyTextOutputFormat.class);
- db.loadTable(hadoopDataFile[i], src, false, false, false, false, false, null, 0, false);
- db.loadTable(hadoopDataFile[i], src, LoadFileType.KEEP_EXISTING, false, false, false, false);
++ db.loadTable(hadoopDataFile[i], src,
++ LoadFileType.KEEP_EXISTING, false, false, false, false, null, 0, false);
i++;
}
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/itests/src/test/resources/testconfiguration.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
----------------------------------------------------------------------
diff --cc metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
index 497b5af,f8b79a0..ff2d988
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
@@@ -7944,8 -8008,16 +7950,16 @@@ public class HiveMetaStore extends Thri
startHouseKeeperService(conf, Class.forName("org.apache.hadoop.hive.ql.txn.AcidHouseKeeperService"));
startHouseKeeperService(conf, Class.forName("org.apache.hadoop.hive.ql.txn.AcidCompactionHistoryService"));
startHouseKeeperService(conf, Class.forName("org.apache.hadoop.hive.ql.txn.AcidWriteSetService"));
+
+ ThreadPool.initialize(conf);
+ RunnableConfigurable rc = new AcidOpenTxnsCounterService();
+ rc.setConf(conf);
+ ThreadPool.getPool().scheduleAtFixedRate(rc, 100, MetastoreConf.getTimeVar(conf,
+ MetastoreConf.ConfVars.COUNT_OPEN_TXNS_INTERVAL, TimeUnit.MILLISECONDS),
+ TimeUnit.MILLISECONDS);
+
}
- private static void startHouseKeeperService(HiveConf conf, Class c) throws Exception {
+ private static void startHouseKeeperService(HiveConf conf, Class<?> c) throws Exception {
//todo: when metastore adds orderly-shutdown logic, houseKeeper.stop()
//should be called form it
HouseKeeperService houseKeeper = (HouseKeeperService)c.newInstance();
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/metastore/src/java/org/apache/hadoop/hive/metastore/cache/CachedStore.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
index 7cc5c30,0dadd51..bef7433
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
@@@ -372,13 -377,10 +373,13 @@@ public class MoveTask extends Task<Move
DataContainer dc = null;
if (tbd.getPartitionSpec().size() == 0) {
dc = new DataContainer(table.getTTable());
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("loadTable called from " + tbd.getSourcePath()
+ + " into " + tbd.getTable().getTableName());
+ }
- db.loadTable(tbd.getSourcePath(), tbd.getTable().getTableName(), tbd.getReplace(),
+ db.loadTable(tbd.getSourcePath(), tbd.getTable().getTableName(), tbd.getLoadFileType(),
- work.isSrcLocal(), isSkewedStoredAsDirs(tbd),
- work.getLoadTableWork().getWriteType() != AcidUtils.Operation.NOT_ACID,
- hasFollowingStatsTask());
+ work.isSrcLocal(), isSkewedStoredAsDirs(tbd), isFullAcidOp, hasFollowingStatsTask(),
+ tbd.getTxnId(), tbd.getStmtId(), tbd.isMmTable());
if (work.getOutputs() != null) {
DDLTask.addIfAbsentByName(new WriteEntity(table,
getWriteType(tbd, work.getLoadTableWork().getWriteType())), work.getOutputs());
@@@ -445,230 -587,6 +446,230 @@@
return (1);
}
}
+
+ private DataContainer handleStaticParts(Hive db, Table table, LoadTableDesc tbd,
+ TaskInformation ti) throws HiveException, IOException, InvalidOperationException {
+ List<String> partVals = MetaStoreUtils.getPvals(table.getPartCols(), tbd.getPartitionSpec());
+ db.validatePartitionNameCharacters(partVals);
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("loadPartition called from " + tbd.getSourcePath()
+ + " into " + tbd.getTable().getTableName());
+ }
+ db.loadPartition(tbd.getSourcePath(), tbd.getTable().getTableName(),
- tbd.getPartitionSpec(), tbd.getReplace(),
++ tbd.getPartitionSpec(), tbd.getLoadFileType(),
+ tbd.getInheritTableSpecs(), isSkewedStoredAsDirs(tbd), work.isSrcLocal(),
+ work.getLoadTableWork().getWriteType() != AcidUtils.Operation.NOT_ACID &&
+ !tbd.isMmTable(),
+ hasFollowingStatsTask(), tbd.getTxnId(), tbd.getStmtId());
+ Partition partn = db.getPartition(table, tbd.getPartitionSpec(), false);
+
+ // See the comment inside updatePartitionBucketSortColumns.
+ if (!tbd.isMmTable() && (ti.bucketCols != null || ti.sortCols != null)) {
+ updatePartitionBucketSortColumns(db, table, partn, ti.bucketCols,
+ ti.numBuckets, ti.sortCols);
+ }
+
+ DataContainer dc = new DataContainer(table.getTTable(), partn.getTPartition());
+ // add this partition to post-execution hook
+ if (work.getOutputs() != null) {
+ DDLTask.addIfAbsentByName(new WriteEntity(partn,
+ getWriteType(tbd, work.getLoadTableWork().getWriteType())), work.getOutputs());
+ }
+ return dc;
+ }
+
+ private DataContainer handleDynParts(Hive db, Table table, LoadTableDesc tbd,
+ TaskInformation ti, DynamicPartitionCtx dpCtx) throws HiveException,
+ IOException, InvalidOperationException {
+ DataContainer dc;
+ List<LinkedHashMap<String, String>> dps = Utilities.getFullDPSpecs(conf, dpCtx);
+
+ console.printInfo(System.getProperty("line.separator"));
+ long startTime = System.currentTimeMillis();
+ // load the list of DP partitions and return the list of partition specs
+ // TODO: In a follow-up to HIVE-1361, we should refactor loadDynamicPartitions
+ // to use Utilities.getFullDPSpecs() to get the list of full partSpecs.
+ // After that check the number of DPs created to not exceed the limit and
+ // iterate over it and call loadPartition() here.
+ // The reason we don't do inside HIVE-1361 is the latter is large and we
+ // want to isolate any potential issue it may introduce.
+ Map<Map<String, String>, Partition> dp =
+ db.loadDynamicPartitions(
+ tbd.getSourcePath(),
+ tbd.getTable().getTableName(),
+ tbd.getPartitionSpec(),
- tbd.getReplace(),
++ tbd.getLoadFileType(),
+ dpCtx.getNumDPCols(),
+ (tbd.getLbCtx() == null) ? 0 : tbd.getLbCtx().calculateListBucketingLevel(),
+ work.getLoadTableWork().getWriteType() != AcidUtils.Operation.NOT_ACID &&
+ !tbd.isMmTable(),
+ work.getLoadTableWork().getTxnId(), tbd.getStmtId(), hasFollowingStatsTask(),
+ work.getLoadTableWork().getWriteType());
+
+ // publish DP columns to its subscribers
+ if (dps != null && dps.size() > 0) {
+ pushFeed(FeedType.DYNAMIC_PARTITIONS, dp.values());
+ }
+
+ String loadTime = "\t Time taken to load dynamic partitions: " +
+ (System.currentTimeMillis() - startTime)/1000.0 + " seconds";
+ console.printInfo(loadTime);
+ LOG.info(loadTime);
+
+ if (dp.size() == 0 && conf.getBoolVar(HiveConf.ConfVars.HIVE_ERROR_ON_EMPTY_PARTITION)) {
+ throw new HiveException("This query creates no partitions." +
+ " To turn off this error, set hive.error.on.empty.partition=false.");
+ }
+
+ startTime = System.currentTimeMillis();
+ // for each partition spec, get the partition
+ // and put it to WriteEntity for post-exec hook
+ for(Map.Entry<Map<String, String>, Partition> entry : dp.entrySet()) {
+ Partition partn = entry.getValue();
+
+ // See the comment inside updatePartitionBucketSortColumns.
+ if (!tbd.isMmTable() && (ti.bucketCols != null || ti.sortCols != null)) {
+ updatePartitionBucketSortColumns(
+ db, table, partn, ti.bucketCols, ti.numBuckets, ti.sortCols);
+ }
+
+ WriteEntity enty = new WriteEntity(partn,
+ getWriteType(tbd, work.getLoadTableWork().getWriteType()));
+ if (work.getOutputs() != null) {
+ DDLTask.addIfAbsentByName(enty, work.getOutputs());
+ }
+ // Need to update the queryPlan's output as well so that post-exec hook get executed.
+ // This is only needed for dynamic partitioning since for SP the the WriteEntity is
+ // constructed at compile time and the queryPlan already contains that.
+ // For DP, WriteEntity creation is deferred at this stage so we need to update
+ // queryPlan here.
+ if (queryPlan.getOutputs() == null) {
+ queryPlan.setOutputs(new LinkedHashSet<WriteEntity>());
+ }
+ queryPlan.getOutputs().add(enty);
+
+ // update columnar lineage for each partition
+ dc = new DataContainer(table.getTTable(), partn.getTPartition());
+
+ // Don't set lineage on delete as we don't have all the columns
+ if (work.getLineagState() != null &&
+ work.getLoadTableWork().getWriteType() != AcidUtils.Operation.DELETE &&
+ work.getLoadTableWork().getWriteType() != AcidUtils.Operation.UPDATE) {
+ work.getLineagState().setLineage(tbd.getSourcePath(), dc,
+ table.getCols());
+ }
+ LOG.info("\tLoading partition " + entry.getKey());
+ }
+ console.printInfo("\t Time taken for adding to write entity : " +
+ (System.currentTimeMillis() - startTime)/1000.0 + " seconds");
+ dc = null; // reset data container to prevent it being added again.
+ return dc;
+ }
+
+ private void inferTaskInformation(TaskInformation ti) {
+ // Find the first ancestor of this MoveTask which is some form of map reduce task
+ // (Either standard, local, or a merge)
+ while (ti.task.getParentTasks() != null && ti.task.getParentTasks().size() == 1) {
+ ti.task = (Task)ti.task.getParentTasks().get(0);
+ // If it was a merge task or a local map reduce task, nothing can be inferred
+ if (ti.task instanceof MergeFileTask || ti.task instanceof MapredLocalTask) {
+ break;
+ }
+
+ // If it's a standard map reduce task, check what, if anything, it inferred about
+ // the directory this move task is moving
+ if (ti.task instanceof MapRedTask) {
+ MapredWork work = (MapredWork)ti.task.getWork();
+ MapWork mapWork = work.getMapWork();
+ ti.bucketCols = mapWork.getBucketedColsByDirectory().get(ti.path);
+ ti.sortCols = mapWork.getSortedColsByDirectory().get(ti.path);
+ if (work.getReduceWork() != null) {
+ ti.numBuckets = work.getReduceWork().getNumReduceTasks();
+ }
+
+ if (ti.bucketCols != null || ti.sortCols != null) {
+ // This must be a final map reduce task (the task containing the file sink
+ // operator that writes the final output)
+ assert work.isFinalMapRed();
+ }
+ break;
+ }
+
+ // If it's a move task, get the path the files were moved from, this is what any
+ // preceding map reduce task inferred information about, and moving does not invalidate
+ // those assumptions
+ // This can happen when a conditional merge is added before the final MoveTask, but the
+ // condition for merging is not met, see GenMRFileSink1.
+ if (ti.task instanceof MoveTask) {
+ MoveTask mt = (MoveTask)ti.task;
+ if (mt.getWork().getLoadFileWork() != null) {
+ ti.path = mt.getWork().getLoadFileWork().getSourcePath().toUri().toString();
+ }
+ }
+ }
+ }
+
+ private void checkFileFormats(Hive db, LoadTableDesc tbd, Table table)
+ throws HiveException {
+ if (work.getCheckFileFormat()) {
+ // Get all files from the src directory
+ FileStatus[] dirs;
+ ArrayList<FileStatus> files;
+ FileSystem srcFs; // source filesystem
+ try {
+ srcFs = tbd.getSourcePath().getFileSystem(conf);
+ dirs = srcFs.globStatus(tbd.getSourcePath());
+ files = new ArrayList<FileStatus>();
+ for (int i = 0; (dirs != null && i < dirs.length); i++) {
+ files.addAll(Arrays.asList(srcFs.listStatus(dirs[i].getPath(), FileUtils.HIDDEN_FILES_PATH_FILTER)));
+ // We only check one file, so exit the loop when we have at least
+ // one.
+ if (files.size() > 0) {
+ break;
+ }
+ }
+ } catch (IOException e) {
+ throw new HiveException(
+ "addFiles: filesystem error in check phase", e);
+ }
+
+ // handle file format check for table level
+ if (HiveConf.getBoolVar(conf, HiveConf.ConfVars.HIVECHECKFILEFORMAT)) {
+ boolean flag = true;
+ // work.checkFileFormat is set to true only for Load Task, so assumption here is
+ // dynamic partition context is null
+ if (tbd.getDPCtx() == null) {
+ if (tbd.getPartitionSpec() == null || tbd.getPartitionSpec().isEmpty()) {
+ // Check if the file format of the file matches that of the table.
+ flag = HiveFileFormatUtils.checkInputFormat(
+ srcFs, conf, tbd.getTable().getInputFileFormatClass(), files);
+ } else {
+ // Check if the file format of the file matches that of the partition
+ Partition oldPart = db.getPartition(table, tbd.getPartitionSpec(), false);
+ if (oldPart == null) {
+ // this means we have just created a table and are specifying partition in the
+ // load statement (without pre-creating the partition), in which case lets use
+ // table input format class. inheritTableSpecs defaults to true so when a new
+ // partition is created later it will automatically inherit input format
+ // from table object
+ flag = HiveFileFormatUtils.checkInputFormat(
+ srcFs, conf, tbd.getTable().getInputFileFormatClass(), files);
+ } else {
+ flag = HiveFileFormatUtils.checkInputFormat(
+ srcFs, conf, oldPart.getInputFormatClass(), files);
+ }
+ }
+ if (!flag) {
+ throw new HiveException(ErrorMsg.WRONG_FILE_FORMAT);
+ }
+ } else {
+ LOG.warn("Skipping file format check as dpCtx is not null");
+ }
+ }
+ }
+ }
+
+
/**
* so to make sure we crate WriteEntity with the right WriteType. This is (at this point) only
* for consistency since LockManager (which is the only thing that pays attention to WriteType)
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsNoJobTask.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsTask.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/StatsTask.java
index 1725629,bdf3710..f11f163
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsTask.java
@@@ -179,10 -180,11 +180,11 @@@ public class StatsTask extends Task<Sta
// work.getLoadTableDesc().getReplace() is true means insert overwrite command
// work.getLoadFileDesc().getDestinationCreateTable().isEmpty() means CTAS etc.
// acidTable will not have accurate stats unless it is set through analyze command.
- if (work.getTableSpecs() == null && AcidUtils.isAcidTable(table)) {
+ if (work.getTableSpecs() == null && AcidUtils.isFullAcidTable(table)) {
StatsSetupConst.setBasicStatsState(parameters, StatsSetupConst.FALSE);
} else if (work.getTableSpecs() != null
- || (work.getLoadTableDesc() != null && work.getLoadTableDesc().getReplace())
+ || (work.getLoadTableDesc() != null
+ && (work.getLoadTableDesc().getLoadFileType() == LoadFileType.REPLACE_ALL))
|| (work.getLoadFileDesc() != null && !work.getLoadFileDesc()
.getDestinationCreateTable().isEmpty())) {
StatsSetupConst.setBasicStatsState(parameters, StatsSetupConst.TRUE);
@@@ -283,10 -282,11 +285,11 @@@
//
org.apache.hadoop.hive.metastore.api.Partition tPart = partn.getTPartition();
Map<String, String> parameters = tPart.getParameters();
- if (work.getTableSpecs() == null && AcidUtils.isAcidTable(table)) {
+ if (work.getTableSpecs() == null && AcidUtils.isFullAcidTable(table)) {
StatsSetupConst.setBasicStatsState(parameters, StatsSetupConst.FALSE);
} else if (work.getTableSpecs() != null
- || (work.getLoadTableDesc() != null && work.getLoadTableDesc().getReplace())
+ || (work.getLoadTableDesc() != null
+ && (work.getLoadTableDesc().getLoadFileType() == LoadFileType.REPLACE_ALL))
|| (work.getLoadFileDesc() != null && !work.getLoadFileDesc()
.getDestinationCreateTable().isEmpty())) {
StatsSetupConst.setBasicStatsState(parameters, StatsSetupConst.TRUE);
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskFactory.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/TaskFactory.java
index f9c1997,e1969bb..aa3f186
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskFactory.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskFactory.java
@@@ -109,10 -107,6 +107,8 @@@ public final class TaskFactory
MergeFileTask.class));
taskvec.add(new TaskTuple<DependencyCollectionWork>(DependencyCollectionWork.class,
DependencyCollectionTask.class));
+ taskvec.add(new TaskTuple<ImportCommitWork>(ImportCommitWork.class,
+ ImportCommitTask.class));
- taskvec.add(new TaskTuple<PartialScanWork>(PartialScanWork.class,
- PartialScanTask.class));
taskvec.add(new TaskTuple<IndexMetadataChangeWork>(IndexMetadataChangeWork.class,
IndexMetadataChangeTask.class));
taskvec.add(new TaskTuple<TezWork>(TezWork.class, TezTask.class));
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
index c702a24,c199780..b6b6d6c
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
@@@ -3208,21 -3108,15 +3224,22 @@@ public final class Utilities
LOG.info("Processing alias " + alias);
// The alias may not have any path
+ Collection<Map.Entry<Path, ArrayList<String>>> pathToAliases =
+ work.getPathToAliases().entrySet();
+ if (!skipDummy) {
+ // ConcurrentModification otherwise if adding dummy.
+ pathToAliases = new ArrayList<>(pathToAliases);
+ }
boolean isEmptyTable = true;
boolean hasLogged = false;
- // Note: this copies the list because createDummyFileForEmptyPartition may modify the map.
- for (Path file : new LinkedList<Path>(work.getPathToAliases().keySet())) {
+ Path path = null;
+ for (Map.Entry<Path, ArrayList<String>> e : pathToAliases) {
- if (lDrvStat != null && lDrvStat.driverState == DriverState.INTERRUPT)
+ if (lDrvStat != null && lDrvStat.driverState == DriverState.INTERRUPT) {
throw new IOException("Operation is Canceled.");
+ }
- List<String> aliases = work.getPathToAliases().get(file);
+ Path file = e.getKey();
+ List<String> aliases = e.getValue();
if (aliases.contains(alias)) {
if (file != null) {
isEmptyTable = false;
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadPartitions.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadPartitions.java
index 51c4090,821d7df..0360816
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadPartitions.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadPartitions.java
@@@ -44,9 -44,8 +44,10 @@@ import org.apache.hadoop.hive.ql.plan.A
import org.apache.hadoop.hive.ql.plan.DDLWork;
import org.apache.hadoop.hive.ql.plan.ImportTableDesc;
import org.apache.hadoop.hive.ql.plan.LoadTableDesc;
+ import org.apache.hadoop.hive.ql.plan.LoadTableDesc.LoadFileType;
import org.apache.hadoop.hive.ql.plan.MoveWork;
+import org.apache.hadoop.hive.ql.session.SessionState;
+import org.mortbay.jetty.servlet.AbstractSessionManager;
import org.datanucleus.util.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@@ -240,8 -239,7 +241,9 @@@ public class LoadPartitions
Path tmpPath) {
LoadTableDesc loadTableWork = new LoadTableDesc(
tmpPath, Utilities.getTableDesc(table), partSpec.getPartSpec(),
- event.replicationSpec().isReplace(), SessionState.get().getTxnMgr().getCurrentTxnId()
- event.replicationSpec().isReplace() ? LoadFileType.REPLACE_ALL : LoadFileType.OVERWRITE_EXISTING);
++ event.replicationSpec().isReplace() ? LoadFileType.REPLACE_ALL : LoadFileType.OVERWRITE_EXISTING,
++ SessionState.get().getTxnMgr().getCurrentTxnId()
+ );
loadTableWork.setInheritTableSpecs(false);
MoveWork work = new MoveWork(new HashSet<>(), new HashSet<>(), loadTableWork, null, false,
context.sessionStateLineageState);
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadTable.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadTable.java
index 65a3a59,25a2532..766a9a9
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadTable.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/repl/bootstrap/load/table/LoadTable.java
@@@ -41,8 -41,8 +41,9 @@@ import org.apache.hadoop.hive.ql.parse.
import org.apache.hadoop.hive.ql.parse.repl.ReplLogger;
import org.apache.hadoop.hive.ql.plan.ImportTableDesc;
import org.apache.hadoop.hive.ql.plan.LoadTableDesc;
+ import org.apache.hadoop.hive.ql.plan.LoadTableDesc.LoadFileType;
import org.apache.hadoop.hive.ql.plan.MoveWork;
+import org.apache.hadoop.hive.ql.session.SessionState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@@ -225,9 -225,8 +226,10 @@@ public class LoadTable
ReplCopyTask.getLoadCopyTask(replicationSpec, dataPath, tmpPath, context.hiveConf);
LoadTableDesc loadTableWork = new LoadTableDesc(
- tmpPath, Utilities.getTableDesc(table), new TreeMap<>(), replicationSpec.isReplace(),
+ tmpPath, Utilities.getTableDesc(table), new TreeMap<>(),
- replicationSpec.isReplace() ? LoadFileType.REPLACE_ALL : LoadFileType.OVERWRITE_EXISTING);
++ replicationSpec.isReplace() ? LoadFileType.REPLACE_ALL : LoadFileType.OVERWRITE_EXISTING,
+ SessionState.get().getTxnMgr().getCurrentTxnId()
+ );
MoveWork moveWork =
new MoveWork(new HashSet<>(), new HashSet<>(), loadTableWork, null, false,
context.sessionStateLineageState);
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/hooks/WriteEntity.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
index 37ee6b6,26003f4..68c9482
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
@@@ -1638,13 -1634,12 +1639,13 @@@ public class Hive
* @throws HiveException
*/
public void loadPartition(Path loadPath, String tableName,
- Map<String, String> partSpec, boolean replace, boolean inheritTableSpecs,
- Map<String, String> partSpec, LoadFileType loadFileType,
- boolean inheritTableSpecs, boolean isSkewedStoreAsSubdir,
- boolean isSrcLocal, boolean isAcid, boolean hasFollowingStatsTask) throws HiveException {
++ Map<String, String> partSpec, LoadFileType loadFileType, boolean inheritTableSpecs,
+ boolean isSkewedStoreAsSubdir, boolean isSrcLocal, boolean isAcid,
+ boolean hasFollowingStatsTask, Long txnId, int stmtId)
+ throws HiveException {
Table tbl = getTable(tableName);
- loadPartition(loadPath, tbl, partSpec, replace, inheritTableSpecs,
+ loadPartition(loadPath, tbl, partSpec, loadFileType, inheritTableSpecs,
- isSkewedStoreAsSubdir, isSrcLocal, isAcid, hasFollowingStatsTask);
+ isSkewedStoreAsSubdir, isSrcLocal, isAcid, hasFollowingStatsTask, txnId, stmtId);
}
/**
@@@ -1672,12 -1667,12 +1673,12 @@@
* true if there is a following task which updates the stats, so, this method need not update.
* @return Partition object being loaded with data
*/
- public Partition loadPartition(Path loadPath, Table tbl,
- Map<String, String> partSpec, LoadFileType loadFileType,
- boolean inheritTableSpecs, boolean isSkewedStoreAsSubdir,
- boolean isSrcLocal, boolean isAcid, boolean hasFollowingStatsTask) throws HiveException {
-
+ public Partition loadPartition(Path loadPath, Table tbl, Map<String, String> partSpec,
- boolean replace, boolean inheritTableSpecs, boolean isSkewedStoreAsSubdir,
++ LoadFileType loadFileType, boolean inheritTableSpecs, boolean isSkewedStoreAsSubdir,
+ boolean isSrcLocal, boolean isAcid, boolean hasFollowingStatsTask, Long txnId, int stmtId)
+ throws HiveException {
Path tblDataLocationPath = tbl.getDataLocation();
+ boolean isMmTableWrite = AcidUtils.isInsertOnlyTable(tbl.getParameters());
try {
// Get the partition object if it already exists
Partition oldPart = getPartition(tbl, partSpec, false);
@@@ -1723,46 -1719,15 +1724,48 @@@
if (conf.getBoolVar(ConfVars.FIRE_EVENTS_FOR_DML) && !tbl.isTemporary() && (null != oldPart)) {
newFiles = Collections.synchronizedList(new ArrayList<Path>());
}
-
- if ((loadFileType == LoadFileType.REPLACE_ALL) || (oldPart == null && !isAcid)) {
- boolean isAutoPurge = "true".equalsIgnoreCase(tbl.getProperty("auto.purge"));
- replaceFiles(tbl.getPath(), loadPath, newPartPath, oldPartPath, getConf(),
- isSrcLocal, isAutoPurge, newFiles);
+ // Note: this assumes both paths are qualified; which they are, currently.
+ if (isMmTableWrite && loadPath.equals(newPartPath)) {
+ // MM insert query, move itself is a no-op.
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("not moving " + loadPath + " to " + newPartPath + " (MM)");
+ }
+ assert !isAcid;
+ if (areEventsForDmlNeeded(tbl, oldPart)) {
+ newFiles = listFilesCreatedByQuery(loadPath, txnId, stmtId);
+ }
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("maybe deleting stuff from " + oldPartPath
+ + " (new " + newPartPath + ") for replace");
+ }
- if (replace && oldPartPath != null) {
++ if ((loadFileType == LoadFileType.REPLACE_ALL) && oldPartPath != null) {
+ boolean isAutoPurge = "true".equalsIgnoreCase(tbl.getProperty("auto.purge"));
+ deleteOldPathForReplace(newPartPath, oldPartPath, getConf(), isAutoPurge,
+ new JavaUtils.IdPathFilter(txnId, stmtId, false, true), true,
+ tbl.isStoredAsSubDirectories() ? tbl.getSkewedColNames().size() : 0);
+ }
} else {
- FileSystem fs = tbl.getDataLocation().getFileSystem(conf);
- Hive.copyFiles(conf, loadPath, newPartPath, fs, isSrcLocal, isAcid,
- (loadFileType == LoadFileType.OVERWRITE_EXISTING), newFiles);
+ // Either a non-MM query, or a load into MM table from an external source.
+ PathFilter filter = FileUtils.HIDDEN_FILES_PATH_FILTER;
+ Path destPath = newPartPath;
+ if (isMmTableWrite) {
+ // We will load into MM directory, and delete from the parent if needed.
+ destPath = new Path(destPath, AcidUtils.deltaSubdir(txnId, txnId, stmtId));
- filter = replace ? new JavaUtils.IdPathFilter(txnId, stmtId, false, true) : filter;
++ filter = (loadFileType == LoadFileType.REPLACE_ALL)
++ ? new JavaUtils.IdPathFilter(txnId, stmtId, false, true) : filter;
+ }
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("moving " + loadPath + " to " + destPath);
+ }
- if (replace || (oldPart == null && !isAcid)) {
++ if ((loadFileType == LoadFileType.REPLACE_ALL) || (oldPart == null && !isAcid)) {
+ boolean isAutoPurge = "true".equalsIgnoreCase(tbl.getProperty("auto.purge"));
+ replaceFiles(tbl.getPath(), loadPath, destPath, oldPartPath, getConf(),
+ isSrcLocal, isAutoPurge, newFiles, filter, isMmTableWrite);
+ } else {
+ FileSystem fs = tbl.getDataLocation().getFileSystem(conf);
- Hive.copyFiles(conf, loadPath, destPath, fs, isSrcLocal, isAcid, newFiles);
++ copyFiles(conf, loadPath, destPath, fs, isSrcLocal, isAcid,
++ (loadFileType == LoadFileType.OVERWRITE_EXISTING), newFiles);
+ }
}
perfLogger.PerfLogEnd("MoveTask", "FileMoves");
Partition newTPart = oldPart != null ? oldPart : new Partition(tbl, partSpec, newPartPath);
@@@ -2086,8 -1961,8 +2089,8 @@@ private void constructOneLBLocationMap(
* @throws HiveException
*/
public Map<Map<String, String>, Partition> loadDynamicPartitions(final Path loadPath,
- final String tableName, final Map<String, String> partSpec, final boolean replace,
+ final String tableName, final Map<String, String> partSpec, final LoadFileType loadFileType,
- final int numDP, final boolean listBucketingEnabled, final boolean isAcid, final long txnId,
+ final int numDP, final int numLB, final boolean isAcid, final long txnId, final int stmtId,
final boolean hasFollowingStatsTask, final AcidUtils.Operation operation)
throws HiveException {
@@@ -2137,8 -2007,8 +2140,8 @@@
// load the partition
Partition newPartition = loadPartition(partPath, tbl, fullPartSpec,
- replace, true, numLB > 0,
- loadFileType, true, listBucketingEnabled,
- false, isAcid, hasFollowingStatsTask);
++ loadFileType, true, numLB > 0,
+ false, isAcid, hasFollowingStatsTask, txnId, stmtId);
partitionsMap.put(fullPartSpec, newPartition);
if (inPlaceEligible) {
@@@ -2161,8 -2031,8 +2164,8 @@@
+ " partPath=" + partPath + ", "
+ " table=" + tbl.getTableName() + ", "
+ " partSpec=" + fullPartSpec + ", "
- + " replace=" + replace + ", "
+ + " loadFileType=" + loadFileType.toString() + ", "
- + " listBucketingEnabled=" + listBucketingEnabled + ", "
+ + " listBucketingLevel=" + numLB + ", "
+ " isAcid=" + isAcid + ", "
+ " hasFollowingStatsTask=" + hasFollowingStatsTask, t);
throw t;
@@@ -2228,47 -2099,28 +2232,51 @@@
* if there is any following stats task
* @param isAcid true if this is an ACID based write
*/
- public void loadTable(Path loadPath, String tableName, boolean replace, boolean isSrcLocal,
+ public void loadTable(Path loadPath, String tableName, LoadFileType loadFileType, boolean isSrcLocal,
- boolean isSkewedStoreAsSubdir, boolean isAcid, boolean hasFollowingStatsTask)
- throws HiveException {
+ boolean isSkewedStoreAsSubdir, boolean isAcid, boolean hasFollowingStatsTask,
+ Long txnId, int stmtId, boolean isMmTable) throws HiveException {
+
List<Path> newFiles = null;
Table tbl = getTable(tableName);
HiveConf sessionConf = SessionState.getSessionConf();
if (conf.getBoolVar(ConfVars.FIRE_EVENTS_FOR_DML) && !tbl.isTemporary()) {
newFiles = Collections.synchronizedList(new ArrayList<Path>());
}
- if (loadFileType == LoadFileType.REPLACE_ALL) {
- Path tableDest = tbl.getPath();
- boolean isAutopurge = "true".equalsIgnoreCase(tbl.getProperty("auto.purge"));
- replaceFiles(tableDest, loadPath, tableDest, tableDest, sessionConf, isSrcLocal, isAutopurge, newFiles);
+ // Note: this assumes both paths are qualified; which they are, currently.
+ if (isMmTable && loadPath.equals(tbl.getPath())) {
+ Utilities.FILE_OP_LOGGER.debug("not moving " + loadPath + " to " + tbl.getPath());
- if (replace) {
++ if (loadFileType == LoadFileType.REPLACE_ALL) {
+ Path tableDest = tbl.getPath();
+ boolean isAutopurge = "true".equalsIgnoreCase(tbl.getProperty("auto.purge"));
+ deleteOldPathForReplace(tableDest, tableDest, sessionConf, isAutopurge,
+ new JavaUtils.IdPathFilter(txnId, stmtId, false, true), true,
+ tbl.isStoredAsSubDirectories() ? tbl.getSkewedColNames().size() : 0);
+ }
+ newFiles = listFilesCreatedByQuery(loadPath, txnId, stmtId);
} else {
- FileSystem fs;
- try {
- fs = tbl.getDataLocation().getFileSystem(sessionConf);
- copyFiles(sessionConf, loadPath, tbl.getPath(), fs, isSrcLocal, isAcid,
- (loadFileType == LoadFileType.OVERWRITE_EXISTING), newFiles);
- } catch (IOException e) {
- throw new HiveException("addFiles: filesystem error in check phase", e);
+ // Either a non-MM query, or a load into MM table from an external source.
+ Path tblPath = tbl.getPath(), destPath = tblPath;
+ PathFilter filter = FileUtils.HIDDEN_FILES_PATH_FILTER;
+ if (isMmTable) {
+ // We will load into MM directory, and delete from the parent if needed.
+ destPath = new Path(destPath, AcidUtils.deltaSubdir(txnId, txnId, stmtId));
- filter = replace ? new JavaUtils.IdPathFilter(txnId, stmtId, false, true) : filter;
++ filter = loadFileType == LoadFileType.REPLACE_ALL
++ ? new JavaUtils.IdPathFilter(txnId, stmtId, false, true) : filter;
+ }
- Utilities.FILE_OP_LOGGER.debug("moving " + loadPath + " to " + tblPath + " (replace = " + replace + ")");
- if (replace) {
++ Utilities.FILE_OP_LOGGER.debug("moving " + loadPath + " to " + tblPath
++ + " (replace = " + loadFileType + ")");
++ if (loadFileType == LoadFileType.REPLACE_ALL) {
+ boolean isAutopurge = "true".equalsIgnoreCase(tbl.getProperty("auto.purge"));
+ replaceFiles(tblPath, loadPath, destPath, tblPath,
+ sessionConf, isSrcLocal, isAutopurge, newFiles, filter, isMmTable);
+ } else {
+ try {
+ FileSystem fs = tbl.getDataLocation().getFileSystem(sessionConf);
- copyFiles(sessionConf, loadPath, destPath, fs, isSrcLocal, isAcid, newFiles);
++ copyFiles(sessionConf, loadPath, destPath, fs, isSrcLocal, isAcid,
++ loadFileType == LoadFileType.OVERWRITE_EXISTING, newFiles);
+ } catch (IOException e) {
+ throw new HiveException("addFiles: filesystem error in check phase", e);
+ }
}
}
if (!this.getConf().getBoolVar(HiveConf.ConfVars.HIVESTATSAUTOGATHER)) {
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/metadata/Table.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/TextMetaDataFormatter.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRTableScan1.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
index 9afeadb,51b4f36..1318c18
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
@@@ -361,38 -344,17 +362,39 @@@ public class ImportSemanticAnalyzer ext
return tblDesc;
}
+
private static Task<?> loadTable(URI fromURI, Table table, boolean replace, Path tgtPath,
- ReplicationSpec replicationSpec, EximUtil.SemanticAnalyzerWrapperContext x) {
+ ReplicationSpec replicationSpec, EximUtil.SemanticAnalyzerWrapperContext x,
+ Long txnId, int stmtId, boolean isSourceMm) {
Path dataPath = new Path(fromURI.toString(), EximUtil.DATA_PATH_NAME);
- Path tmpPath = x.getCtx().getExternalTmpPath(tgtPath);
- Task<?> copyTask = ReplCopyTask.getLoadCopyTask(replicationSpec, dataPath, tmpPath, x.getConf());
- LoadTableDesc loadTableWork = new LoadTableDesc(tmpPath,
+ Path destPath = !AcidUtils.isInsertOnlyTable(table.getParameters()) ? x.getCtx().getExternalTmpPath(tgtPath)
+ : new Path(tgtPath, AcidUtils.deltaSubdir(txnId, txnId, stmtId));
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("adding import work for table with source location: " +
+ dataPath + "; table: " + tgtPath + "; copy destination " + destPath + "; mm " + txnId +
+ " (src " + isSourceMm + ") for " + (table == null ? "a new table" : table.getTableName()));
+ }
+
+ Task<?> copyTask = null;
+ if (replicationSpec.isInReplicationScope()) {
+ if (isSourceMm || isAcid(txnId)) {
+ // Note: this is replication gap, not MM gap... Repl V2 is not ready yet.
+ throw new RuntimeException("Replicating MM and ACID tables is not supported");
+ }
+ copyTask = ReplCopyTask.getLoadCopyTask(replicationSpec, dataPath, destPath, x.getConf());
+ } else {
+ CopyWork cw = new CopyWork(dataPath, destPath, false);
+ cw.setSkipSourceMmDirs(isSourceMm);
+ copyTask = TaskFactory.get(cw, x.getConf());
+ }
+
+ LoadTableDesc loadTableWork = new LoadTableDesc(destPath,
- Utilities.getTableDesc(table), new TreeMap<>(), replace, txnId);
+ Utilities.getTableDesc(table), new TreeMap<>(),
- replace ? LoadFileType.REPLACE_ALL : LoadFileType.OVERWRITE_EXISTING);
- Task<?> loadTableTask = TaskFactory.get(new MoveWork(x.getInputs(),
- x.getOutputs(), loadTableWork, null, false, SessionState.get().getLineageState()),
- x.getConf());
++ replace ? LoadFileType.REPLACE_ALL : LoadFileType.OVERWRITE_EXISTING, txnId);
+ loadTableWork.setTxnId(txnId);
+ loadTableWork.setStmtId(stmtId);
+ MoveWork mv = new MoveWork(x.getInputs(), x.getOutputs(), loadTableWork, null, false, SessionState.get().getLineageState());
+ Task<?> loadTableTask = TaskFactory.get(mv, x.getConf());
copyTask.addDependentTask(loadTableTask);
x.getTasks().add(copyTask);
return loadTableTask;
@@@ -458,39 -414,20 +460,41 @@@
+ partSpecToString(partSpec.getPartSpec())
+ " with source location: " + srcLocation);
Path tgtLocation = new Path(partSpec.getLocation());
- Path tmpPath = x.getCtx().getExternalTmpPath(tgtLocation);
- Task<?> copyTask = ReplCopyTask.getLoadCopyTask(
- replicationSpec, new Path(srcLocation), tmpPath, x.getConf());
+ Path destPath = !AcidUtils.isInsertOnlyTable(table.getParameters()) ? x.getCtx().getExternalTmpPath(tgtLocation)
+ : new Path(tgtLocation, AcidUtils.deltaSubdir(txnId, txnId, stmtId));
+ Path moveTaskSrc = !AcidUtils.isInsertOnlyTable(table.getParameters()) ? destPath : tgtLocation;
+ if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
+ Utilities.FILE_OP_LOGGER.trace("adding import work for partition with source location: "
+ + srcLocation + "; target: " + tgtLocation + "; copy dest " + destPath + "; mm "
+ + txnId + " (src " + isSourceMm + ") for " + partSpecToString(partSpec.getPartSpec()));
+ }
+
+
+ Task<?> copyTask = null;
+ if (replicationSpec.isInReplicationScope()) {
+ if (isSourceMm || isAcid(txnId)) {
+ // Note: this is replication gap, not MM gap... Repl V2 is not ready yet.
+ throw new RuntimeException("Replicating MM and ACID tables is not supported");
+ }
+ copyTask = ReplCopyTask.getLoadCopyTask(
+ replicationSpec, new Path(srcLocation), destPath, x.getConf());
+ } else {
+ CopyWork cw = new CopyWork(new Path(srcLocation), destPath, false);
+ cw.setSkipSourceMmDirs(isSourceMm);
+ copyTask = TaskFactory.get(cw, x.getConf());
+ }
+
Task<?> addPartTask = TaskFactory.get(new DDLWork(x.getInputs(),
x.getOutputs(), addPartitionDesc), x.getConf());
- LoadTableDesc loadTableWork = new LoadTableDesc(tmpPath,
- Utilities.getTableDesc(table),
+ LoadTableDesc loadTableWork = new LoadTableDesc(moveTaskSrc, Utilities.getTableDesc(table),
- partSpec.getPartSpec(), replicationSpec.isReplace(), txnId);
+ partSpec.getPartSpec(),
- replicationSpec.isReplace() ? LoadFileType.REPLACE_ALL : LoadFileType.OVERWRITE_EXISTING);
++ replicationSpec.isReplace() ? LoadFileType.REPLACE_ALL : LoadFileType.OVERWRITE_EXISTING,
++ txnId);
+ loadTableWork.setTxnId(txnId);
+ loadTableWork.setStmtId(stmtId);
loadTableWork.setInheritTableSpecs(false);
Task<?> loadPartTask = TaskFactory.get(new MoveWork(
- x.getInputs(), x.getOutputs(), loadTableWork, null, false,
- SessionState.get().getLineageState()),
- x.getConf());
+ x.getInputs(), x.getOutputs(), loadTableWork, null, false, SessionState.get().getLineageState()), x.getConf());
copyTask.addDependentTask(loadPartTask);
addPartTask.addDependentTask(loadPartTask);
x.getTasks().add(copyTask);
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java
index 51efde1,033235b..5f2a34e
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java
@@@ -50,8 -49,8 +50,9 @@@ import org.apache.hadoop.hive.ql.io.Hiv
import org.apache.hadoop.hive.ql.metadata.Hive;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.metadata.Partition;
+import org.apache.hadoop.hive.ql.metadata.Table;
import org.apache.hadoop.hive.ql.plan.LoadTableDesc;
+ import org.apache.hadoop.hive.ql.plan.LoadTableDesc.LoadFileType;
import org.apache.hadoop.hive.ql.plan.MoveWork;
import org.apache.hadoop.hive.ql.plan.StatsWork;
import org.apache.hadoop.hive.ql.session.SessionState;
@@@ -283,9 -276,8 +284,10 @@@ public class LoadSemanticAnalyzer exten
LoadTableDesc loadTableWork;
loadTableWork = new LoadTableDesc(new Path(fromURI),
- Utilities.getTableDesc(ts.tableHandle), partSpec, isOverWrite, txnId);
+ Utilities.getTableDesc(ts.tableHandle), partSpec,
- isOverWrite ? LoadFileType.REPLACE_ALL : LoadFileType.KEEP_EXISTING);
++ isOverWrite ? LoadFileType.REPLACE_ALL : LoadFileType.KEEP_EXISTING, txnId);
+ loadTableWork.setTxnId(txnId);
+ loadTableWork.setStmtId(stmtId);
if (preservePartitionSpecs){
// Note : preservePartitionSpecs=true implies inheritTableSpecs=false but
// but preservePartitionSpecs=false(default) here is not sufficient enough
http://git-wip-us.apache.org/repos/asf/hive/blob/42335b46/ql/src/java/org/apache/hadoop/hive/ql/parse/ProcessAnalyzeTable.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/ProcessAnalyzeTable.java
index 9ac60b0,c497419..9309fbd
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ProcessAnalyzeTable.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ProcessAnalyzeTable.java
@@@ -32,11 -30,8 +30,9 @@@ import org.apache.hadoop.hive.conf.Hive
import org.apache.hadoop.hive.ql.exec.TableScanOperator;
import org.apache.hadoop.hive.ql.exec.Task;
import org.apache.hadoop.hive.ql.exec.TaskFactory;
+import org.apache.hadoop.hive.ql.exec.Utilities;
import org.apache.hadoop.hive.ql.hooks.WriteEntity;
import org.apache.hadoop.hive.ql.io.orc.OrcInputFormat;
- import org.apache.hadoop.hive.ql.io.rcfile.stats.PartialScanWork;
import org.apache.hadoop.hive.ql.lib.Node;
import org.apache.hadoop.hive.ql.lib.NodeProcessor;
import org.apache.hadoop.hive.ql.lib.NodeProcessorCtx;
[15/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Wei Zheng)
Posted by se...@apache.org.
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/ql/src/test/results/clientpositive/mm_all.q.out
----------------------------------------------------------------------
diff --cc ql/src/test/results/clientpositive/mm_all.q.out
index e08f1a8,0000000..ea60414
mode 100644,000000..100644
--- a/ql/src/test/results/clientpositive/mm_all.q.out
+++ b/ql/src/test/results/clientpositive/mm_all.q.out
@@@ -1,2443 -1,0 +1,2147 @@@
+PREHOOK: query: drop table intermediate
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table intermediate
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table intermediate(key int) partitioned by (p int) stored as orc
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@intermediate
+POSTHOOK: query: create table intermediate(key int) partitioned by (p int) stored as orc
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@intermediate
+PREHOOK: query: insert into table intermediate partition(p='455') select distinct key from src where key >= 0 order by key desc limit 2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: default@intermediate@p=455
+POSTHOOK: query: insert into table intermediate partition(p='455') select distinct key from src where key >= 0 order by key desc limit 2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: default@intermediate@p=455
+POSTHOOK: Lineage: intermediate PARTITION(p=455).key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ]
+PREHOOK: query: insert into table intermediate partition(p='456') select distinct key from src where key is not null order by key asc limit 2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: default@intermediate@p=456
+POSTHOOK: query: insert into table intermediate partition(p='456') select distinct key from src where key is not null order by key asc limit 2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: default@intermediate@p=456
+POSTHOOK: Lineage: intermediate PARTITION(p=456).key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ]
+PREHOOK: query: insert into table intermediate partition(p='457') select distinct key from src where key >= 100 order by key asc limit 2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: default@intermediate@p=457
+POSTHOOK: query: insert into table intermediate partition(p='457') select distinct key from src where key >= 100 order by key asc limit 2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: default@intermediate@p=457
+POSTHOOK: Lineage: intermediate PARTITION(p=457).key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ]
+PREHOOK: query: drop table part_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table part_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table part_mm(key int) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@part_mm
+POSTHOOK: query: create table part_mm(key int) partitioned by (key_mm int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@part_mm
+PREHOOK: query: explain insert into table part_mm partition(key_mm=455) select key from intermediate
+PREHOOK: type: QUERY
+POSTHOOK: query: explain insert into table part_mm partition(key_mm=455) select key from intermediate
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+ Stage-1 is a root stage
+ Stage-7 depends on stages: Stage-1 , consists of Stage-4, Stage-3, Stage-5
+ Stage-4
+ Stage-0 depends on stages: Stage-4, Stage-3, Stage-6
+ Stage-2 depends on stages: Stage-0
+ Stage-3
+ Stage-5
+ Stage-6 depends on stages: Stage-5
+
+STAGE PLANS:
+ Stage: Stage-1
+ Map Reduce
+ Map Operator Tree:
+ TableScan
+ alias: intermediate
+ Statistics: Num rows: 6 Data size: 24 Basic stats: COMPLETE Column stats: NONE
+ Select Operator
+ expressions: key (type: int)
+ outputColumnNames: _col0
+ Statistics: Num rows: 6 Data size: 24 Basic stats: COMPLETE Column stats: NONE
+ File Output Operator
+ compressed: false
+ Statistics: Num rows: 6 Data size: 24 Basic stats: COMPLETE Column stats: NONE
+ 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: default.part_mm
+ Write Type: INSERT
+
+ Stage: Stage-7
+ Conditional Operator
+
+ Stage: Stage-4
+ Move Operator
+ files:
+ hdfs directory: true
+#### A masked pattern was here ####
+
+ Stage: Stage-0
+ Move Operator
+ tables:
+ partition:
+ key_mm 455
+ 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: default.part_mm
+ micromanaged table: true
+
+ Stage: Stage-2
+ Stats-Aggr Operator
+
+ Stage: Stage-3
+ Merge File Operator
+ Map Operator Tree:
+ ORC File Merge Operator
+ merge level: stripe
+ input format: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
+
+ Stage: Stage-5
+ Merge File Operator
+ Map Operator Tree:
+ ORC File Merge Operator
+ merge level: stripe
+ input format: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
+
+ Stage: Stage-6
+ Move Operator
+ files:
+ hdfs directory: true
+#### A masked pattern was here ####
+
+PREHOOK: query: insert into table part_mm partition(key_mm=455) select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@part_mm@key_mm=455
+POSTHOOK: query: insert into table part_mm partition(key_mm=455) select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@part_mm@key_mm=455
+POSTHOOK: Lineage: part_mm PARTITION(key_mm=455).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: insert into table part_mm partition(key_mm=456) select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@part_mm@key_mm=456
+POSTHOOK: query: insert into table part_mm partition(key_mm=456) select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@part_mm@key_mm=456
+POSTHOOK: Lineage: part_mm PARTITION(key_mm=456).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: insert into table part_mm partition(key_mm=455) select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@part_mm@key_mm=455
+POSTHOOK: query: insert into table part_mm partition(key_mm=455) select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@part_mm@key_mm=455
+POSTHOOK: Lineage: part_mm PARTITION(key_mm=455).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from part_mm order by key, key_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part_mm
+PREHOOK: Input: default@part_mm@key_mm=455
+PREHOOK: Input: default@part_mm@key_mm=456
+#### A masked pattern was here ####
+POSTHOOK: query: select * from part_mm order by key, key_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part_mm
+POSTHOOK: Input: default@part_mm@key_mm=455
+POSTHOOK: Input: default@part_mm@key_mm=456
+#### A masked pattern was here ####
+0 455
+0 455
+0 456
+10 455
+10 455
+10 456
+97 455
+97 455
+97 456
+98 455
+98 455
+98 456
+100 455
+100 455
+100 456
+103 455
+103 455
+103 456
+PREHOOK: query: select * from part_mm order by key, key_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part_mm
+PREHOOK: Input: default@part_mm@key_mm=455
+PREHOOK: Input: default@part_mm@key_mm=456
+#### A masked pattern was here ####
+POSTHOOK: query: select * from part_mm order by key, key_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part_mm
+POSTHOOK: Input: default@part_mm@key_mm=455
+POSTHOOK: Input: default@part_mm@key_mm=456
+#### A masked pattern was here ####
+0 455
+0 455
+0 456
+10 455
+10 455
+10 456
+97 455
+97 455
+97 456
+98 455
+98 455
+98 456
+100 455
+100 455
+100 456
+103 455
+103 455
+103 456
+PREHOOK: query: truncate table part_mm
+PREHOOK: type: TRUNCATETABLE
+PREHOOK: Output: default@part_mm@key_mm=455
+PREHOOK: Output: default@part_mm@key_mm=456
+POSTHOOK: query: truncate table part_mm
+POSTHOOK: type: TRUNCATETABLE
+POSTHOOK: Output: default@part_mm@key_mm=455
+POSTHOOK: Output: default@part_mm@key_mm=456
+PREHOOK: query: select * from part_mm order by key, key_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part_mm
+PREHOOK: Input: default@part_mm@key_mm=455
+PREHOOK: Input: default@part_mm@key_mm=456
+#### A masked pattern was here ####
+POSTHOOK: query: select * from part_mm order by key, key_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part_mm
+POSTHOOK: Input: default@part_mm@key_mm=455
+POSTHOOK: Input: default@part_mm@key_mm=456
+#### A masked pattern was here ####
+PREHOOK: query: drop table part_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@part_mm
+PREHOOK: Output: default@part_mm
+POSTHOOK: query: drop table part_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@part_mm
+POSTHOOK: Output: default@part_mm
+PREHOOK: query: drop table simple_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table simple_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table simple_mm(key int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@simple_mm
+POSTHOOK: query: create table simple_mm(key int) stored as orc tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@simple_mm
+PREHOOK: query: insert into table simple_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@simple_mm
+POSTHOOK: query: insert into table simple_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@simple_mm
+POSTHOOK: Lineage: simple_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from simple_mm order by key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@simple_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from simple_mm order by key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@simple_mm
+#### A masked pattern was here ####
+0
+10
+97
+98
+100
+103
+PREHOOK: query: insert into table simple_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@simple_mm
+POSTHOOK: query: insert into table simple_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@simple_mm
+POSTHOOK: Lineage: simple_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from simple_mm order by key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@simple_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from simple_mm order by key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@simple_mm
+#### A masked pattern was here ####
+0
+0
+10
+10
+97
+97
+98
+98
+100
+100
+103
+103
+PREHOOK: query: truncate table simple_mm
+PREHOOK: type: TRUNCATETABLE
+PREHOOK: Output: default@simple_mm
+POSTHOOK: query: truncate table simple_mm
+POSTHOOK: type: TRUNCATETABLE
+POSTHOOK: Output: default@simple_mm
+PREHOOK: query: select * from simple_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@simple_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from simple_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@simple_mm
+#### A masked pattern was here ####
+PREHOOK: query: drop table simple_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@simple_mm
+PREHOOK: Output: default@simple_mm
+POSTHOOK: query: drop table simple_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@simple_mm
+POSTHOOK: Output: default@simple_mm
+PREHOOK: query: drop table dp_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table dp_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table dp_mm (key int) partitioned by (key1 string, key2 int) stored as orc
+ tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@dp_mm
+POSTHOOK: query: create table dp_mm (key int) partitioned by (key1 string, key2 int) stored as orc
+ tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@dp_mm
+PREHOOK: query: insert into table dp_mm partition (key1='123', key2) select key, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@dp_mm@key1=123
+POSTHOOK: query: insert into table dp_mm partition (key1='123', key2) select key, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@dp_mm@key1=123/key2=0
+POSTHOOK: Output: default@dp_mm@key1=123/key2=10
+POSTHOOK: Output: default@dp_mm@key1=123/key2=100
+POSTHOOK: Output: default@dp_mm@key1=123/key2=103
+POSTHOOK: Output: default@dp_mm@key1=123/key2=97
+POSTHOOK: Output: default@dp_mm@key1=123/key2=98
+POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=0).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=100).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=103).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=10).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=97).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: dp_mm PARTITION(key1=123,key2=98).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from dp_mm order by key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@dp_mm
+PREHOOK: Input: default@dp_mm@key1=123/key2=0
+PREHOOK: Input: default@dp_mm@key1=123/key2=10
+PREHOOK: Input: default@dp_mm@key1=123/key2=100
+PREHOOK: Input: default@dp_mm@key1=123/key2=103
+PREHOOK: Input: default@dp_mm@key1=123/key2=97
+PREHOOK: Input: default@dp_mm@key1=123/key2=98
+#### A masked pattern was here ####
+POSTHOOK: query: select * from dp_mm order by key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@dp_mm
+POSTHOOK: Input: default@dp_mm@key1=123/key2=0
+POSTHOOK: Input: default@dp_mm@key1=123/key2=10
+POSTHOOK: Input: default@dp_mm@key1=123/key2=100
+POSTHOOK: Input: default@dp_mm@key1=123/key2=103
+POSTHOOK: Input: default@dp_mm@key1=123/key2=97
+POSTHOOK: Input: default@dp_mm@key1=123/key2=98
+#### A masked pattern was here ####
+0 123 0
+10 123 10
+97 123 97
+98 123 98
+100 123 100
+103 123 103
+PREHOOK: query: drop table dp_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@dp_mm
+PREHOOK: Output: default@dp_mm
+POSTHOOK: query: drop table dp_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@dp_mm
+POSTHOOK: Output: default@dp_mm
+PREHOOK: query: create table union_mm(id int) tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@union_mm
+POSTHOOK: query: create table union_mm(id int) tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@union_mm
+PREHOOK: query: insert into table union_mm
+select temps.p from (
+select key as p from intermediate
+union all
+select key + 1 as p from intermediate ) temps
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@union_mm
+POSTHOOK: query: insert into table union_mm
+select temps.p from (
+select key as p from intermediate
+union all
+select key + 1 as p from intermediate ) temps
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@union_mm
+POSTHOOK: Lineage: union_mm.id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from union_mm order by id
+PREHOOK: type: QUERY
+PREHOOK: Input: default@union_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from union_mm order by id
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@union_mm
+#### A masked pattern was here ####
+0
+1
+10
+11
+97
+98
+98
+99
+100
+101
+103
+104
+PREHOOK: query: insert into table union_mm
+select p from
+(
+select key + 1 as p from intermediate
+union all
+select key from intermediate
+) tab group by p
+union all
+select key + 2 as p from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@union_mm
+POSTHOOK: query: insert into table union_mm
+select p from
+(
+select key + 1 as p from intermediate
+union all
+select key from intermediate
+) tab group by p
+union all
+select key + 2 as p from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@union_mm
+POSTHOOK: Lineage: union_mm.id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from union_mm order by id
+PREHOOK: type: QUERY
+PREHOOK: Input: default@union_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from union_mm order by id
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@union_mm
+#### A masked pattern was here ####
+0
+0
+1
+1
+2
+10
+10
+11
+11
+12
+97
+97
+98
+98
+98
+99
+99
+99
+100
+100
+100
+101
+101
+102
+103
+103
+104
+104
+105
+PREHOOK: query: insert into table union_mm
+SELECT p FROM
+(
+ SELECT key + 1 as p FROM intermediate
+ UNION ALL
+ SELECT key as p FROM (
+ SELECT distinct key FROM (
+ SELECT key FROM (
+ SELECT key + 2 as key FROM intermediate
+ UNION ALL
+ SELECT key FROM intermediate
+ )t1
+ group by key)t2
+ )t3
+)t4
+group by p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@union_mm
+POSTHOOK: query: insert into table union_mm
+SELECT p FROM
+(
+ SELECT key + 1 as p FROM intermediate
+ UNION ALL
+ SELECT key as p FROM (
+ SELECT distinct key FROM (
+ SELECT key FROM (
+ SELECT key + 2 as key FROM intermediate
+ UNION ALL
+ SELECT key FROM intermediate
+ )t1
+ group by key)t2
+ )t3
+)t4
+group by p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@union_mm
+POSTHOOK: Lineage: union_mm.id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from union_mm order by id
+PREHOOK: type: QUERY
+PREHOOK: Input: default@union_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from union_mm order by id
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@union_mm
+#### A masked pattern was here ####
+0
+0
+0
+1
+1
+1
+2
+2
+10
+10
+10
+11
+11
+11
+12
+12
+97
+97
+97
+98
+98
+98
+98
+99
+99
+99
+99
+100
+100
+100
+100
+101
+101
+101
+102
+102
+103
+103
+103
+104
+104
+104
+105
+105
+PREHOOK: query: drop table union_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@union_mm
+PREHOOK: Output: default@union_mm
+POSTHOOK: query: drop table union_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@union_mm
+POSTHOOK: Output: default@union_mm
+PREHOOK: query: create table partunion_mm(id int) partitioned by (key int) tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@partunion_mm
+POSTHOOK: query: create table partunion_mm(id int) partitioned by (key int) tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@partunion_mm
+PREHOOK: query: insert into table partunion_mm partition(key)
+select temps.* from (
+select key as p, key from intermediate
+union all
+select key + 1 as p, key + 1 from intermediate ) temps
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@partunion_mm
+POSTHOOK: query: insert into table partunion_mm partition(key)
+select temps.* from (
+select key as p, key from intermediate
+union all
+select key + 1 as p, key + 1 from intermediate ) temps
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@partunion_mm@key=0
+POSTHOOK: Output: default@partunion_mm@key=1
+POSTHOOK: Output: default@partunion_mm@key=10
+POSTHOOK: Output: default@partunion_mm@key=100
+POSTHOOK: Output: default@partunion_mm@key=101
+POSTHOOK: Output: default@partunion_mm@key=103
+POSTHOOK: Output: default@partunion_mm@key=104
+POSTHOOK: Output: default@partunion_mm@key=11
+POSTHOOK: Output: default@partunion_mm@key=97
+POSTHOOK: Output: default@partunion_mm@key=98
+POSTHOOK: Output: default@partunion_mm@key=99
+POSTHOOK: Lineage: partunion_mm PARTITION(key=0).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=100).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=101).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=103).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=104).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=10).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=11).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=1).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=97).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=98).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: partunion_mm PARTITION(key=99).id EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from partunion_mm order by id
+PREHOOK: type: QUERY
+PREHOOK: Input: default@partunion_mm
+PREHOOK: Input: default@partunion_mm@key=0
+PREHOOK: Input: default@partunion_mm@key=1
+PREHOOK: Input: default@partunion_mm@key=10
+PREHOOK: Input: default@partunion_mm@key=100
+PREHOOK: Input: default@partunion_mm@key=101
+PREHOOK: Input: default@partunion_mm@key=103
+PREHOOK: Input: default@partunion_mm@key=104
+PREHOOK: Input: default@partunion_mm@key=11
+PREHOOK: Input: default@partunion_mm@key=97
+PREHOOK: Input: default@partunion_mm@key=98
+PREHOOK: Input: default@partunion_mm@key=99
+#### A masked pattern was here ####
+POSTHOOK: query: select * from partunion_mm order by id
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@partunion_mm
+POSTHOOK: Input: default@partunion_mm@key=0
+POSTHOOK: Input: default@partunion_mm@key=1
+POSTHOOK: Input: default@partunion_mm@key=10
+POSTHOOK: Input: default@partunion_mm@key=100
+POSTHOOK: Input: default@partunion_mm@key=101
+POSTHOOK: Input: default@partunion_mm@key=103
+POSTHOOK: Input: default@partunion_mm@key=104
+POSTHOOK: Input: default@partunion_mm@key=11
+POSTHOOK: Input: default@partunion_mm@key=97
+POSTHOOK: Input: default@partunion_mm@key=98
+POSTHOOK: Input: default@partunion_mm@key=99
+#### A masked pattern was here ####
+0 0
+1 1
+10 10
+11 11
+97 97
+98 98
+98 98
+99 99
+100 100
+101 101
+103 103
+104 104
+PREHOOK: query: drop table partunion_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@partunion_mm
+PREHOOK: Output: default@partunion_mm
+POSTHOOK: query: drop table partunion_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@partunion_mm
+POSTHOOK: Output: default@partunion_mm
+PREHOOK: query: create table skew_mm(k1 int, k2 int, k4 int) skewed by (k1, k4) on ((0,0),(1,1),(2,2),(3,3))
+ stored as directories tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@skew_mm
+POSTHOOK: query: create table skew_mm(k1 int, k2 int, k4 int) skewed by (k1, k4) on ((0,0),(1,1),(2,2),(3,3))
+ stored as directories tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@skew_mm
+PREHOOK: query: insert into table skew_mm
+select key, key, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@skew_mm
+POSTHOOK: query: insert into table skew_mm
+select key, key, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@skew_mm
+POSTHOOK: Lineage: skew_mm.k1 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_mm.k2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_mm.k4 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from skew_mm order by k2, k1, k4
+PREHOOK: type: QUERY
+PREHOOK: Input: default@skew_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from skew_mm order by k2, k1, k4
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@skew_mm
+#### A masked pattern was here ####
+0 0 0
+10 10 10
+97 97 97
+98 98 98
+100 100 100
+103 103 103
+PREHOOK: query: drop table skew_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@skew_mm
+PREHOOK: Output: default@skew_mm
+POSTHOOK: query: drop table skew_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@skew_mm
+POSTHOOK: Output: default@skew_mm
+PREHOOK: query: create table skew_dp_union_mm(k1 int, k2 int, k4 int) partitioned by (k3 int)
+skewed by (k1, k4) on ((0,0),(1,1),(2,2),(3,3)) stored as directories tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@skew_dp_union_mm
+POSTHOOK: query: create table skew_dp_union_mm(k1 int, k2 int, k4 int) partitioned by (k3 int)
+skewed by (k1, k4) on ((0,0),(1,1),(2,2),(3,3)) stored as directories tblproperties ("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@skew_dp_union_mm
+PREHOOK: query: insert into table skew_dp_union_mm partition (k3)
+select key as i, key as j, key as k, key as l from intermediate
+union all
+select key +1 as i, key +2 as j, key +3 as k, key +4 as l from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@skew_dp_union_mm
+POSTHOOK: query: insert into table skew_dp_union_mm partition (k3)
+select key as i, key as j, key as k, key as l from intermediate
+union all
+select key +1 as i, key +2 as j, key +3 as k, key +4 as l from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@skew_dp_union_mm@k3=0
+POSTHOOK: Output: default@skew_dp_union_mm@k3=10
+POSTHOOK: Output: default@skew_dp_union_mm@k3=100
+POSTHOOK: Output: default@skew_dp_union_mm@k3=101
+POSTHOOK: Output: default@skew_dp_union_mm@k3=102
+POSTHOOK: Output: default@skew_dp_union_mm@k3=103
+POSTHOOK: Output: default@skew_dp_union_mm@k3=104
+POSTHOOK: Output: default@skew_dp_union_mm@k3=107
+POSTHOOK: Output: default@skew_dp_union_mm@k3=14
+POSTHOOK: Output: default@skew_dp_union_mm@k3=4
+POSTHOOK: Output: default@skew_dp_union_mm@k3=97
+POSTHOOK: Output: default@skew_dp_union_mm@k3=98
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=0).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=0).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=0).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=100).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=100).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=100).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=101).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=101).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=101).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=102).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=102).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=102).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=103).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=103).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=103).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=104).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=104).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=104).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=107).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=107).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=107).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=10).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=10).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=10).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=14).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=14).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=14).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=4).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=4).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=4).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=97).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=97).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=97).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=98).k1 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=98).k2 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: skew_dp_union_mm PARTITION(k3=98).k4 EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from skew_dp_union_mm order by k2, k1, k4
+PREHOOK: type: QUERY
+PREHOOK: Input: default@skew_dp_union_mm
+PREHOOK: Input: default@skew_dp_union_mm@k3=0
+PREHOOK: Input: default@skew_dp_union_mm@k3=10
+PREHOOK: Input: default@skew_dp_union_mm@k3=100
+PREHOOK: Input: default@skew_dp_union_mm@k3=101
+PREHOOK: Input: default@skew_dp_union_mm@k3=102
+PREHOOK: Input: default@skew_dp_union_mm@k3=103
+PREHOOK: Input: default@skew_dp_union_mm@k3=104
+PREHOOK: Input: default@skew_dp_union_mm@k3=107
+PREHOOK: Input: default@skew_dp_union_mm@k3=14
+PREHOOK: Input: default@skew_dp_union_mm@k3=4
+PREHOOK: Input: default@skew_dp_union_mm@k3=97
+PREHOOK: Input: default@skew_dp_union_mm@k3=98
+#### A masked pattern was here ####
+POSTHOOK: query: select * from skew_dp_union_mm order by k2, k1, k4
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@skew_dp_union_mm
+POSTHOOK: Input: default@skew_dp_union_mm@k3=0
+POSTHOOK: Input: default@skew_dp_union_mm@k3=10
+POSTHOOK: Input: default@skew_dp_union_mm@k3=100
+POSTHOOK: Input: default@skew_dp_union_mm@k3=101
+POSTHOOK: Input: default@skew_dp_union_mm@k3=102
+POSTHOOK: Input: default@skew_dp_union_mm@k3=103
+POSTHOOK: Input: default@skew_dp_union_mm@k3=104
+POSTHOOK: Input: default@skew_dp_union_mm@k3=107
+POSTHOOK: Input: default@skew_dp_union_mm@k3=14
+POSTHOOK: Input: default@skew_dp_union_mm@k3=4
+POSTHOOK: Input: default@skew_dp_union_mm@k3=97
+POSTHOOK: Input: default@skew_dp_union_mm@k3=98
+#### A masked pattern was here ####
+0 0 0 0
+1 2 3 4
+10 10 10 10
+11 12 13 14
+97 97 97 97
+98 98 98 98
+98 99 100 101
+99 100 101 102
+100 100 100 100
+101 102 103 104
+103 103 103 103
+104 105 106 107
+PREHOOK: query: drop table skew_dp_union_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@skew_dp_union_mm
+PREHOOK: Output: default@skew_dp_union_mm
+POSTHOOK: query: drop table skew_dp_union_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@skew_dp_union_mm
+POSTHOOK: Output: default@skew_dp_union_mm
+PREHOOK: query: create table merge0_mm (id int) stored as orc tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@merge0_mm
+POSTHOOK: query: create table merge0_mm (id int) stored as orc tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@merge0_mm
+PREHOOK: query: insert into table merge0_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@merge0_mm
+POSTHOOK: query: insert into table merge0_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@merge0_mm
+POSTHOOK: Lineage: merge0_mm.id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from merge0_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@merge0_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from merge0_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@merge0_mm
+#### A masked pattern was here ####
+98
+97
+0
+10
+100
+103
+PREHOOK: query: insert into table merge0_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@merge0_mm
+POSTHOOK: query: insert into table merge0_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@merge0_mm
+POSTHOOK: Lineage: merge0_mm.id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from merge0_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@merge0_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from merge0_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@merge0_mm
+#### A masked pattern was here ####
+98
+97
+0
+10
+100
+103
+98
+97
+0
+10
+100
+103
+PREHOOK: query: drop table merge0_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@merge0_mm
+PREHOOK: Output: default@merge0_mm
+POSTHOOK: query: drop table merge0_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@merge0_mm
+POSTHOOK: Output: default@merge0_mm
+PREHOOK: query: create table merge2_mm (id int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@merge2_mm
+POSTHOOK: query: create table merge2_mm (id int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@merge2_mm
+PREHOOK: query: insert into table merge2_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@merge2_mm
+POSTHOOK: query: insert into table merge2_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@merge2_mm
+POSTHOOK: Lineage: merge2_mm.id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from merge2_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@merge2_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from merge2_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@merge2_mm
+#### A masked pattern was here ####
+98
+97
+0
+10
+100
+103
+PREHOOK: query: insert into table merge2_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@merge2_mm
+POSTHOOK: query: insert into table merge2_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@merge2_mm
+POSTHOOK: Lineage: merge2_mm.id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from merge2_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@merge2_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from merge2_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@merge2_mm
+#### A masked pattern was here ####
+98
+97
+0
+10
+100
+103
+98
+97
+0
+10
+100
+103
+PREHOOK: query: drop table merge2_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@merge2_mm
+PREHOOK: Output: default@merge2_mm
+POSTHOOK: query: drop table merge2_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@merge2_mm
+POSTHOOK: Output: default@merge2_mm
+PREHOOK: query: create table merge1_mm (id int) partitioned by (key int) stored as orc tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@merge1_mm
+POSTHOOK: query: create table merge1_mm (id int) partitioned by (key int) stored as orc tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@merge1_mm
+PREHOOK: query: insert into table merge1_mm partition (key) select key, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@merge1_mm
+POSTHOOK: query: insert into table merge1_mm partition (key) select key, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@merge1_mm@key=0
+POSTHOOK: Output: default@merge1_mm@key=10
+POSTHOOK: Output: default@merge1_mm@key=100
+POSTHOOK: Output: default@merge1_mm@key=103
+POSTHOOK: Output: default@merge1_mm@key=97
+POSTHOOK: Output: default@merge1_mm@key=98
+POSTHOOK: Lineage: merge1_mm PARTITION(key=0).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=100).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=103).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=10).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=97).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=98).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from merge1_mm order by id, key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@merge1_mm
+PREHOOK: Input: default@merge1_mm@key=0
+PREHOOK: Input: default@merge1_mm@key=10
+PREHOOK: Input: default@merge1_mm@key=100
+PREHOOK: Input: default@merge1_mm@key=103
+PREHOOK: Input: default@merge1_mm@key=97
+PREHOOK: Input: default@merge1_mm@key=98
+#### A masked pattern was here ####
+POSTHOOK: query: select * from merge1_mm order by id, key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@merge1_mm
+POSTHOOK: Input: default@merge1_mm@key=0
+POSTHOOK: Input: default@merge1_mm@key=10
+POSTHOOK: Input: default@merge1_mm@key=100
+POSTHOOK: Input: default@merge1_mm@key=103
+POSTHOOK: Input: default@merge1_mm@key=97
+POSTHOOK: Input: default@merge1_mm@key=98
+#### A masked pattern was here ####
+0 0
+10 10
+97 97
+98 98
+100 100
+103 103
+PREHOOK: query: insert into table merge1_mm partition (key) select key, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@merge1_mm
+POSTHOOK: query: insert into table merge1_mm partition (key) select key, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@merge1_mm@key=0
+POSTHOOK: Output: default@merge1_mm@key=10
+POSTHOOK: Output: default@merge1_mm@key=100
+POSTHOOK: Output: default@merge1_mm@key=103
+POSTHOOK: Output: default@merge1_mm@key=97
+POSTHOOK: Output: default@merge1_mm@key=98
+POSTHOOK: Lineage: merge1_mm PARTITION(key=0).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=100).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=103).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=10).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=97).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: merge1_mm PARTITION(key=98).id SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from merge1_mm order by id, key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@merge1_mm
+PREHOOK: Input: default@merge1_mm@key=0
+PREHOOK: Input: default@merge1_mm@key=10
+PREHOOK: Input: default@merge1_mm@key=100
+PREHOOK: Input: default@merge1_mm@key=103
+PREHOOK: Input: default@merge1_mm@key=97
+PREHOOK: Input: default@merge1_mm@key=98
+#### A masked pattern was here ####
+POSTHOOK: query: select * from merge1_mm order by id, key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@merge1_mm
+POSTHOOK: Input: default@merge1_mm@key=0
+POSTHOOK: Input: default@merge1_mm@key=10
+POSTHOOK: Input: default@merge1_mm@key=100
+POSTHOOK: Input: default@merge1_mm@key=103
+POSTHOOK: Input: default@merge1_mm@key=97
+POSTHOOK: Input: default@merge1_mm@key=98
+#### A masked pattern was here ####
+0 0
+0 0
+10 10
+10 10
+97 97
+97 97
+98 98
+98 98
+100 100
+100 100
+103 103
+103 103
+PREHOOK: query: drop table merge1_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@merge1_mm
+PREHOOK: Output: default@merge1_mm
+POSTHOOK: query: drop table merge1_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@merge1_mm
+POSTHOOK: Output: default@merge1_mm
+PREHOOK: query: drop table ctas0_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table ctas0_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table ctas0_mm tblproperties ("transactional"="true", "transactional_properties"="insert_only") as select * from intermediate
+PREHOOK: type: CREATETABLE_AS_SELECT
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: database:default
+PREHOOK: Output: default@ctas0_mm
+POSTHOOK: query: create table ctas0_mm tblproperties ("transactional"="true", "transactional_properties"="insert_only") as select * from intermediate
+POSTHOOK: type: CREATETABLE_AS_SELECT
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@ctas0_mm
+POSTHOOK: Lineage: ctas0_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: ctas0_mm.p SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+PREHOOK: query: select * from ctas0_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ctas0_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from ctas0_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ctas0_mm
+#### A masked pattern was here ####
+98 455
+97 455
+0 456
+10 456
+100 457
+103 457
+PREHOOK: query: drop table ctas0_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@ctas0_mm
+PREHOOK: Output: default@ctas0_mm
+POSTHOOK: query: drop table ctas0_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@ctas0_mm
+POSTHOOK: Output: default@ctas0_mm
+PREHOOK: query: drop table ctas1_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table ctas1_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table ctas1_mm tblproperties ("transactional"="true", "transactional_properties"="insert_only") as
+ select * from intermediate union all select * from intermediate
+PREHOOK: type: CREATETABLE_AS_SELECT
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: database:default
+PREHOOK: Output: default@ctas1_mm
+POSTHOOK: query: create table ctas1_mm tblproperties ("transactional"="true", "transactional_properties"="insert_only") as
+ select * from intermediate union all select * from intermediate
+POSTHOOK: type: CREATETABLE_AS_SELECT
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@ctas1_mm
+POSTHOOK: Lineage: ctas1_mm.key EXPRESSION [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: ctas1_mm.p EXPRESSION [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+PREHOOK: query: select * from ctas1_mm
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ctas1_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from ctas1_mm
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ctas1_mm
+#### A masked pattern was here ####
+98 455
+98 455
+97 455
+97 455
+0 456
+0 456
+10 456
+10 456
+100 457
+100 457
+103 457
+103 457
+PREHOOK: query: drop table ctas1_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@ctas1_mm
+PREHOOK: Output: default@ctas1_mm
+POSTHOOK: query: drop table ctas1_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@ctas1_mm
+POSTHOOK: Output: default@ctas1_mm
- PREHOOK: query: drop table load0_mm
- PREHOOK: type: DROPTABLE
- POSTHOOK: query: drop table load0_mm
- POSTHOOK: type: DROPTABLE
- PREHOOK: query: create table load0_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
- PREHOOK: type: CREATETABLE
- PREHOOK: Output: database:default
- PREHOOK: Output: default@load0_mm
- POSTHOOK: query: create table load0_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
- POSTHOOK: type: CREATETABLE
- POSTHOOK: Output: database:default
- POSTHOOK: Output: default@load0_mm
- PREHOOK: query: load data local inpath '../../data/files/kv1.txt' into table load0_mm
- PREHOOK: type: LOAD
- #### A masked pattern was here ####
- PREHOOK: Output: default@load0_mm
- POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' into table load0_mm
- POSTHOOK: type: LOAD
- #### A masked pattern was here ####
- POSTHOOK: Output: default@load0_mm
- PREHOOK: query: select count(1) from load0_mm
- PREHOOK: type: QUERY
- PREHOOK: Input: default@load0_mm
- #### A masked pattern was here ####
- POSTHOOK: query: select count(1) from load0_mm
- POSTHOOK: type: QUERY
- POSTHOOK: Input: default@load0_mm
- #### A masked pattern was here ####
- 500
- PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table load0_mm
- PREHOOK: type: LOAD
- #### A masked pattern was here ####
- PREHOOK: Output: default@load0_mm
- POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table load0_mm
- POSTHOOK: type: LOAD
- #### A masked pattern was here ####
- POSTHOOK: Output: default@load0_mm
- PREHOOK: query: select count(1) from load0_mm
- PREHOOK: type: QUERY
- PREHOOK: Input: default@load0_mm
- #### A masked pattern was here ####
- POSTHOOK: query: select count(1) from load0_mm
- POSTHOOK: type: QUERY
- POSTHOOK: Input: default@load0_mm
- #### A masked pattern was here ####
- 1000
- PREHOOK: query: load data local inpath '../../data/files/kv2.txt' overwrite into table load0_mm
- PREHOOK: type: LOAD
- #### A masked pattern was here ####
- PREHOOK: Output: default@load0_mm
- POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' overwrite into table load0_mm
- POSTHOOK: type: LOAD
- #### A masked pattern was here ####
- POSTHOOK: Output: default@load0_mm
- PREHOOK: query: select count(1) from load0_mm
- PREHOOK: type: QUERY
- PREHOOK: Input: default@load0_mm
- #### A masked pattern was here ####
- POSTHOOK: query: select count(1) from load0_mm
- POSTHOOK: type: QUERY
- POSTHOOK: Input: default@load0_mm
- #### A masked pattern was here ####
- 500
- PREHOOK: query: drop table load0_mm
- PREHOOK: type: DROPTABLE
- PREHOOK: Input: default@load0_mm
- PREHOOK: Output: default@load0_mm
- POSTHOOK: query: drop table load0_mm
- POSTHOOK: type: DROPTABLE
- POSTHOOK: Input: default@load0_mm
- POSTHOOK: Output: default@load0_mm
- PREHOOK: query: drop table intermediate2
- PREHOOK: type: DROPTABLE
- POSTHOOK: query: drop table intermediate2
- POSTHOOK: type: DROPTABLE
- PREHOOK: query: create table intermediate2 (key string, value string) stored as textfile
- #### A masked pattern was here ####
- PREHOOK: type: CREATETABLE
- #### A masked pattern was here ####
- PREHOOK: Output: database:default
- PREHOOK: Output: default@intermediate2
- POSTHOOK: query: create table intermediate2 (key string, value string) stored as textfile
- #### A masked pattern was here ####
- POSTHOOK: type: CREATETABLE
- #### A masked pattern was here ####
- POSTHOOK: Output: database:default
- POSTHOOK: Output: default@intermediate2
- PREHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
- PREHOOK: type: LOAD
- #### A masked pattern was here ####
- PREHOOK: Output: default@intermediate2
- POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
- POSTHOOK: type: LOAD
- #### A masked pattern was here ####
- POSTHOOK: Output: default@intermediate2
- PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
- PREHOOK: type: LOAD
- #### A masked pattern was here ####
- PREHOOK: Output: default@intermediate2
- POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
- POSTHOOK: type: LOAD
- #### A masked pattern was here ####
- POSTHOOK: Output: default@intermediate2
- PREHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
- PREHOOK: type: LOAD
- #### A masked pattern was here ####
- PREHOOK: Output: default@intermediate2
- POSTHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
- POSTHOOK: type: LOAD
- #### A masked pattern was here ####
- POSTHOOK: Output: default@intermediate2
- PREHOOK: query: drop table load1_mm
- PREHOOK: type: DROPTABLE
- POSTHOOK: query: drop table load1_mm
- POSTHOOK: type: DROPTABLE
- PREHOOK: query: create table load1_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
- PREHOOK: type: CREATETABLE
- PREHOOK: Output: database:default
- PREHOOK: Output: default@load1_mm
- POSTHOOK: query: create table load1_mm (key string, value string) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
- POSTHOOK: type: CREATETABLE
- POSTHOOK: Output: database:default
- POSTHOOK: Output: default@load1_mm
- #### A masked pattern was here ####
- PREHOOK: type: LOAD
- #### A masked pattern was here ####
- PREHOOK: Output: default@load1_mm
- #### A masked pattern was here ####
- POSTHOOK: type: LOAD
- #### A masked pattern was here ####
- POSTHOOK: Output: default@load1_mm
- #### A masked pattern was here ####
- PREHOOK: type: LOAD
- #### A masked pattern was here ####
- PREHOOK: Output: default@load1_mm
- #### A masked pattern was here ####
- POSTHOOK: type: LOAD
- #### A masked pattern was here ####
- POSTHOOK: Output: default@load1_mm
- PREHOOK: query: select count(1) from load1_mm
- PREHOOK: type: QUERY
- PREHOOK: Input: default@load1_mm
- #### A masked pattern was here ####
- POSTHOOK: query: select count(1) from load1_mm
- POSTHOOK: type: QUERY
- POSTHOOK: Input: default@load1_mm
- #### A masked pattern was here ####
- 1000
- PREHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
- PREHOOK: type: LOAD
- #### A masked pattern was here ####
- PREHOOK: Output: default@intermediate2
- POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
- POSTHOOK: type: LOAD
- #### A masked pattern was here ####
- POSTHOOK: Output: default@intermediate2
- PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
- PREHOOK: type: LOAD
- #### A masked pattern was here ####
- PREHOOK: Output: default@intermediate2
- POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
- POSTHOOK: type: LOAD
- #### A masked pattern was here ####
- POSTHOOK: Output: default@intermediate2
- PREHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
- PREHOOK: type: LOAD
- #### A masked pattern was here ####
- PREHOOK: Output: default@intermediate2
- POSTHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
- POSTHOOK: type: LOAD
- #### A masked pattern was here ####
- POSTHOOK: Output: default@intermediate2
- #### A masked pattern was here ####
- PREHOOK: type: LOAD
- #### A masked pattern was here ####
- PREHOOK: Output: default@load1_mm
- #### A masked pattern was here ####
- POSTHOOK: type: LOAD
- #### A masked pattern was here ####
- POSTHOOK: Output: default@load1_mm
- PREHOOK: query: select count(1) from load1_mm
- PREHOOK: type: QUERY
- PREHOOK: Input: default@load1_mm
- #### A masked pattern was here ####
- POSTHOOK: query: select count(1) from load1_mm
- POSTHOOK: type: QUERY
- POSTHOOK: Input: default@load1_mm
- #### A masked pattern was here ####
- 1050
- PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
- PREHOOK: type: LOAD
- #### A masked pattern was here ####
- PREHOOK: Output: default@intermediate2
- POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
- POSTHOOK: type: LOAD
- #### A masked pattern was here ####
- POSTHOOK: Output: default@intermediate2
- #### A masked pattern was here ####
- PREHOOK: type: LOAD
- #### A masked pattern was here ####
- PREHOOK: Output: default@load1_mm
- #### A masked pattern was here ####
- POSTHOOK: type: LOAD
- #### A masked pattern was here ####
- POSTHOOK: Output: default@load1_mm
- PREHOOK: query: select count(1) from load1_mm
- PREHOOK: type: QUERY
- PREHOOK: Input: default@load1_mm
- #### A masked pattern was here ####
- POSTHOOK: query: select count(1) from load1_mm
- POSTHOOK: type: QUERY
- POSTHOOK: Input: default@load1_mm
- #### A masked pattern was here ####
- 500
- PREHOOK: query: drop table load1_mm
- PREHOOK: type: DROPTABLE
- PREHOOK: Input: default@load1_mm
- PREHOOK: Output: default@load1_mm
- POSTHOOK: query: drop table load1_mm
- POSTHOOK: type: DROPTABLE
- POSTHOOK: Input: default@load1_mm
- POSTHOOK: Output: default@load1_mm
- PREHOOK: query: drop table load2_mm
- PREHOOK: type: DROPTABLE
- POSTHOOK: query: drop table load2_mm
- POSTHOOK: type: DROPTABLE
- PREHOOK: query: create table load2_mm (key string, value string)
- partitioned by (k int, l int) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
- PREHOOK: type: CREATETABLE
- PREHOOK: Output: database:default
- PREHOOK: Output: default@load2_mm
- POSTHOOK: query: create table load2_mm (key string, value string)
- partitioned by (k int, l int) stored as textfile tblproperties("transactional"="true", "transactional_properties"="insert_only")
- POSTHOOK: type: CREATETABLE
- POSTHOOK: Output: database:default
- POSTHOOK: Output: default@load2_mm
- PREHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
- PREHOOK: type: LOAD
- #### A masked pattern was here ####
- PREHOOK: Output: default@intermediate2
- POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' into table intermediate2
- POSTHOOK: type: LOAD
- #### A masked pattern was here ####
- POSTHOOK: Output: default@intermediate2
- PREHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
- PREHOOK: type: LOAD
- #### A masked pattern was here ####
- PREHOOK: Output: default@intermediate2
- POSTHOOK: query: load data local inpath '../../data/files/kv2.txt' into table intermediate2
- POSTHOOK: type: LOAD
- #### A masked pattern was here ####
- POSTHOOK: Output: default@intermediate2
- PREHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
- PREHOOK: type: LOAD
- #### A masked pattern was here ####
- PREHOOK: Output: default@intermediate2
- POSTHOOK: query: load data local inpath '../../data/files/kv3.txt' into table intermediate2
- POSTHOOK: type: LOAD
- #### A masked pattern was here ####
- POSTHOOK: Output: default@intermediate2
- #### A masked pattern was here ####
- PREHOOK: type: LOAD
- #### A masked pattern was here ####
- PREHOOK: Output: default@load2_mm
- #### A masked pattern was here ####
- POSTHOOK: type: LOAD
- #### A masked pattern was here ####
- POSTHOOK: Output: default@load2_mm
- POSTHOOK: Output: default@load2_mm@k=5/l=5
- PREHOOK: query: select count(1) from load2_mm
- PREHOOK: type: QUERY
- PREHOOK: Input: default@load2_mm
- PREHOOK: Input: default@load2_mm@k=5/l=5
- #### A masked pattern was here ####
- POSTHOOK: query: select count(1) from load2_mm
- POSTHOOK: type: QUERY
- POSTHOOK: Input: default@load2_mm
- POSTHOOK: Input: default@load2_mm@k=5/l=5
- #### A masked pattern was here ####
- 1025
- PREHOOK: query: drop table load2_mm
- PREHOOK: type: DROPTABLE
- PREHOOK: Input: default@load2_mm
- PREHOOK: Output: default@load2_mm
- POSTHOOK: query: drop table load2_mm
- POSTHOOK: type: DROPTABLE
- POSTHOOK: Input: default@load2_mm
- POSTHOOK: Output: default@load2_mm
- PREHOOK: query: drop table intermediate2
- PREHOOK: type: DROPTABLE
- PREHOOK: Input: default@intermediate2
- PREHOOK: Output: default@intermediate2
- POSTHOOK: query: drop table intermediate2
- POSTHOOK: type: DROPTABLE
- POSTHOOK: Input: default@intermediate2
- POSTHOOK: Output: default@intermediate2
+PREHOOK: query: drop table multi0_1_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table multi0_1_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: drop table multi0_2_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table multi0_2_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table multi0_1_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@multi0_1_mm
+POSTHOOK: query: create table multi0_1_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@multi0_1_mm
+PREHOOK: query: create table multi0_2_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@multi0_2_mm
+POSTHOOK: query: create table multi0_2_mm (key int, key2 int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@multi0_2_mm
+PREHOOK: query: insert into table multi0_1_mm select key, p from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi0_1_mm
+POSTHOOK: query: insert into table multi0_1_mm select key, p from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi0_1_mm
+POSTHOOK: Lineage: multi0_1_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi0_1_mm.key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+PREHOOK: query: insert into table multi0_2_mm select p, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi0_2_mm
+POSTHOOK: query: insert into table multi0_2_mm select p, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi0_2_mm
+POSTHOOK: Lineage: multi0_2_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi0_2_mm.key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select * from multi0_1_mm order by key, key2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi0_1_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from multi0_1_mm order by key, key2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi0_1_mm
+#### A masked pattern was here ####
+0 456
+10 456
+97 455
+98 455
+100 457
+103 457
+PREHOOK: query: select * from multi0_2_mm order by key, key2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi0_2_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from multi0_2_mm order by key, key2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi0_2_mm
+#### A masked pattern was here ####
+455 97
+455 98
+456 0
+456 10
+457 100
+457 103
+PREHOOK: query: insert into table multi0_1_mm select p, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi0_1_mm
+POSTHOOK: query: insert into table multi0_1_mm select p, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi0_1_mm
+POSTHOOK: Lineage: multi0_1_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi0_1_mm.key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: insert into table multi0_2_mm select key, p from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi0_2_mm
+POSTHOOK: query: insert into table multi0_2_mm select key, p from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi0_2_mm
+POSTHOOK: Lineage: multi0_2_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi0_2_mm.key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+PREHOOK: query: select * from multi0_1_mm order by key, key2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi0_1_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from multi0_1_mm order by key, key2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi0_1_mm
+#### A masked pattern was here ####
+0 456
+10 456
+97 455
+98 455
+100 457
+103 457
+455 97
+455 98
+456 0
+456 10
+457 100
+457 103
+PREHOOK: query: select * from multi0_2_mm order by key, key2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi0_2_mm
+#### A masked pattern was here ####
+POSTHOOK: query: select * from multi0_2_mm order by key, key2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi0_2_mm
+#### A masked pattern was here ####
+0 456
+10 456
+97 455
+98 455
+100 457
+103 457
+455 97
+455 98
+456 0
+456 10
+457 100
+457 103
+PREHOOK: query: drop table multi0_1_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@multi0_1_mm
+PREHOOK: Output: default@multi0_1_mm
+POSTHOOK: query: drop table multi0_1_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@multi0_1_mm
+POSTHOOK: Output: default@multi0_1_mm
+PREHOOK: query: drop table multi0_2_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@multi0_2_mm
+PREHOOK: Output: default@multi0_2_mm
+POSTHOOK: query: drop table multi0_2_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@multi0_2_mm
+POSTHOOK: Output: default@multi0_2_mm
+PREHOOK: query: drop table multi1_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table multi1_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table multi1_mm (key int, key2 int) partitioned by (p int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@multi1_mm
+POSTHOOK: query: create table multi1_mm (key int, key2 int) partitioned by (p int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@multi1_mm
+PREHOOK: query: from intermediate
+insert into table multi1_mm partition(p=1) select p, key
+insert into table multi1_mm partition(p=2) select key, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi1_mm@p=1
+PREHOOK: Output: default@multi1_mm@p=2
+POSTHOOK: query: from intermediate
+insert into table multi1_mm partition(p=1) select p, key
+insert into table multi1_mm partition(p=2) select key, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: Output: default@multi1_mm@p=2
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=2).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=2).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+PREHOOK: query: select * from multi1_mm order by key, key2, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi1_mm
+PREHOOK: Input: default@multi1_mm@p=1
+PREHOOK: Input: default@multi1_mm@p=2
+#### A masked pattern was here ####
+POSTHOOK: query: select * from multi1_mm order by key, key2, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi1_mm
+POSTHOOK: Input: default@multi1_mm@p=1
+POSTHOOK: Input: default@multi1_mm@p=2
+#### A masked pattern was here ####
+0 456 2
+10 456 2
+97 455 2
+98 455 2
+100 457 2
+103 457 2
+455 97 1
+455 98 1
+456 0 1
+456 10 1
+457 100 1
+457 103 1
+PREHOOK: query: insert into table multi1_mm partition(p=2) select p, key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi1_mm@p=2
+POSTHOOK: query: insert into table multi1_mm partition(p=2) select p, key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi1_mm@p=2
+POSTHOOK: Lineage: multi1_mm PARTITION(p=2).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=2).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: insert into table multi1_mm partition(p=1) select key, p from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: query: insert into table multi1_mm partition(p=1) select key, p from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+PREHOOK: query: select * from multi1_mm order by key, key2, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi1_mm
+PREHOOK: Input: default@multi1_mm@p=1
+PREHOOK: Input: default@multi1_mm@p=2
+#### A masked pattern was here ####
+POSTHOOK: query: select * from multi1_mm order by key, key2, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi1_mm
+POSTHOOK: Input: default@multi1_mm@p=1
+POSTHOOK: Input: default@multi1_mm@p=2
+#### A masked pattern was here ####
+0 456 1
+0 456 2
+10 456 1
+10 456 2
+97 455 1
+97 455 2
+98 455 1
+98 455 2
+100 457 1
+100 457 2
+103 457 1
+103 457 2
+455 97 1
+455 97 2
+455 98 1
+455 98 2
+456 0 1
+456 0 2
+456 10 1
+456 10 2
+457 100 1
+457 100 2
+457 103 1
+457 103 2
+PREHOOK: query: from intermediate
+insert into table multi1_mm partition(p) select p, key, p
+insert into table multi1_mm partition(p=1) select key, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi1_mm
+PREHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: query: from intermediate
+insert into table multi1_mm partition(p) select p, key, p
+insert into table multi1_mm partition(p=1) select key, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: Output: default@multi1_mm@p=455
+POSTHOOK: Output: default@multi1_mm@p=456
+POSTHOOK: Output: default@multi1_mm@p=457
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=455).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=455).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=456).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=456).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=457).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=457).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select key, key2, p from multi1_mm order by key, key2, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi1_mm
+PREHOOK: Input: default@multi1_mm@p=1
+PREHOOK: Input: default@multi1_mm@p=2
+PREHOOK: Input: default@multi1_mm@p=455
+PREHOOK: Input: default@multi1_mm@p=456
+PREHOOK: Input: default@multi1_mm@p=457
+#### A masked pattern was here ####
+POSTHOOK: query: select key, key2, p from multi1_mm order by key, key2, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi1_mm
+POSTHOOK: Input: default@multi1_mm@p=1
+POSTHOOK: Input: default@multi1_mm@p=2
+POSTHOOK: Input: default@multi1_mm@p=455
+POSTHOOK: Input: default@multi1_mm@p=456
+POSTHOOK: Input: default@multi1_mm@p=457
+#### A masked pattern was here ####
+0 456 1
+0 456 1
+0 456 2
+10 456 1
+10 456 1
+10 456 2
+97 455 1
+97 455 1
+97 455 2
+98 455 1
+98 455 1
+98 455 2
+100 457 1
+100 457 1
+100 457 2
+103 457 1
+103 457 1
+103 457 2
+455 97 1
+455 97 2
+455 97 455
+455 98 1
+455 98 2
+455 98 455
+456 0 1
+456 0 2
+456 0 456
+456 10 1
+456 10 2
+456 10 456
+457 100 1
+457 100 2
+457 100 457
+457 103 1
+457 103 2
+457 103 457
+PREHOOK: query: from intermediate
+insert into table multi1_mm partition(p) select p, key, 1
+insert into table multi1_mm partition(p=1) select key, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@multi1_mm
+PREHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: query: from intermediate
+insert into table multi1_mm partition(p) select p, key, 1
+insert into table multi1_mm partition(p=1) select key, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@multi1_mm@p=1
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key SIMPLE [(intermediate)intermediate.FieldSchema(name:p, type:int, comment:null), ]
+POSTHOOK: Lineage: multi1_mm PARTITION(p=1).key2 SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: select key, key2, p from multi1_mm order by key, key2, p
+PREHOOK: type: QUERY
+PREHOOK: Input: default@multi1_mm
+PREHOOK: Input: default@multi1_mm@p=1
+PREHOOK: Input: default@multi1_mm@p=2
+PREHOOK: Input: default@multi1_mm@p=455
+PREHOOK: Input: default@multi1_mm@p=456
+PREHOOK: Input: default@multi1_mm@p=457
+#### A masked pattern was here ####
+POSTHOOK: query: select key, key2, p from multi1_mm order by key, key2, p
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@multi1_mm
+POSTHOOK: Input: default@multi1_mm@p=1
+POSTHOOK: Input: default@multi1_mm@p=2
+POSTHOOK: Input: default@multi1_mm@p=455
+POSTHOOK: Input: default@multi1_mm@p=456
+POSTHOOK: Input: default@multi1_mm@p=457
+#### A masked pattern was here ####
+0 456 1
+0 456 1
+0 456 1
+0 456 2
+10 456 1
+10 456 1
+10 456 1
+10 456 2
+97 455 1
+97 455 1
+97 455 1
+97 455 2
+98 455 1
+98 455 1
+98 455 1
+98 455 2
+100 457 1
+100 457 1
+100 457 1
+100 457 2
+103 457 1
+103 457 1
+103 457 1
+103 457 2
+455 97 1
+455 97 1
+455 97 2
+455 97 455
+455 98 1
+455 98 1
+455 98 2
+455 98 455
+456 0 1
+456 0 1
+456 0 2
+456 0 456
+456 10 1
+456 10 1
+456 10 2
+456 10 456
+457 100 1
+457 100 1
+457 100 2
+457 100 457
+457 103 1
+457 103 1
+457 103 2
+457 103 457
+PREHOOK: query: drop table multi1_mm
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@multi1_mm
+PREHOOK: Output: default@multi1_mm
+POSTHOOK: query: drop table multi1_mm
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@multi1_mm
+POSTHOOK: Output: default@multi1_mm
+PREHOOK: query: drop table stats_mm
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table stats_mm
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table stats_mm(key int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@stats_mm
+POSTHOOK: query: create table stats_mm(key int) tblproperties("transactional"="true", "transactional_properties"="insert_only")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@stats_mm
+PREHOOK: query: insert into table stats_mm select key from intermediate
+PREHOOK: type: QUERY
+PREHOOK: Input: default@intermediate
+PREHOOK: Input: default@intermediate@p=455
+PREHOOK: Input: default@intermediate@p=456
+PREHOOK: Input: default@intermediate@p=457
+PREHOOK: Output: default@stats_mm
+POSTHOOK: query: insert into table stats_mm select key from intermediate
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@intermediate
+POSTHOOK: Input: default@intermediate@p=455
+POSTHOOK: Input: default@intermediate@p=456
+POSTHOOK: Input: default@intermediate@p=457
+POSTHOOK: Output: default@stats_mm
+POSTHOOK: Lineage: stats_mm.key SIMPLE [(intermediate)intermediate.FieldSchema(name:key, type:int, comment:null), ]
+PREHOOK: query: desc formatted stats_mm
+PREHOOK: type: DESCTABLE
+PREHOOK: Input: default@stats_mm
+POSTHOOK: query: desc formatted stats_mm
+POSTHOOK: type: DESCTABLE
+POSTHOOK: Input: default@stats_mm
+# col_name data_type comment
+
+key int
+
+# Detailed Table Information
+Database: default
+#### A masked p
<TRUNCATED>
[12/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Wei Zheng)
Posted by se...@apache.org.
http://git-wip-us.apache.org/repos/asf/hive/blob/42a38577/standalone-metastore/src/gen/thrift/gen-cpp/hive_metastore_types.h
----------------------------------------------------------------------
diff --cc standalone-metastore/src/gen/thrift/gen-cpp/hive_metastore_types.h
index 0000000,d5963f3..cfbc488
mode 000000,100644..100644
--- a/standalone-metastore/src/gen/thrift/gen-cpp/hive_metastore_types.h
+++ b/standalone-metastore/src/gen/thrift/gen-cpp/hive_metastore_types.h
@@@ -1,0 -1,9033 +1,9034 @@@
+ /**
+ * Autogenerated by Thrift Compiler (0.9.3)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ * @generated
+ */
+ #ifndef hive_metastore_TYPES_H
+ #define hive_metastore_TYPES_H
+
+ #include <iosfwd>
+
+ #include <thrift/Thrift.h>
+ #include <thrift/TApplicationException.h>
+ #include <thrift/protocol/TProtocol.h>
+ #include <thrift/transport/TTransport.h>
+
+ #include <thrift/cxxfunctional.h>
+ #include "fb303_types.h"
+
+
+ namespace Apache { namespace Hadoop { namespace Hive {
+
+ struct HiveObjectType {
+ enum type {
+ GLOBAL = 1,
+ DATABASE = 2,
+ TABLE = 3,
+ PARTITION = 4,
+ COLUMN = 5
+ };
+ };
+
+ extern const std::map<int, const char*> _HiveObjectType_VALUES_TO_NAMES;
+
+ struct PrincipalType {
+ enum type {
+ USER = 1,
+ ROLE = 2,
+ GROUP = 3
+ };
+ };
+
+ extern const std::map<int, const char*> _PrincipalType_VALUES_TO_NAMES;
+
+ struct PartitionEventType {
+ enum type {
+ LOAD_DONE = 1
+ };
+ };
+
+ extern const std::map<int, const char*> _PartitionEventType_VALUES_TO_NAMES;
+
+ struct TxnState {
+ enum type {
+ COMMITTED = 1,
+ ABORTED = 2,
+ OPEN = 3
+ };
+ };
+
+ extern const std::map<int, const char*> _TxnState_VALUES_TO_NAMES;
+
+ struct LockLevel {
+ enum type {
+ DB = 1,
+ TABLE = 2,
+ PARTITION = 3
+ };
+ };
+
+ extern const std::map<int, const char*> _LockLevel_VALUES_TO_NAMES;
+
+ struct LockState {
+ enum type {
+ ACQUIRED = 1,
+ WAITING = 2,
+ ABORT = 3,
+ NOT_ACQUIRED = 4
+ };
+ };
+
+ extern const std::map<int, const char*> _LockState_VALUES_TO_NAMES;
+
+ struct LockType {
+ enum type {
+ SHARED_READ = 1,
+ SHARED_WRITE = 2,
+ EXCLUSIVE = 3
+ };
+ };
+
+ extern const std::map<int, const char*> _LockType_VALUES_TO_NAMES;
+
+ struct CompactionType {
+ enum type {
+ MINOR = 1,
+ MAJOR = 2
+ };
+ };
+
+ extern const std::map<int, const char*> _CompactionType_VALUES_TO_NAMES;
+
+ struct GrantRevokeType {
+ enum type {
+ GRANT = 1,
+ REVOKE = 2
+ };
+ };
+
+ extern const std::map<int, const char*> _GrantRevokeType_VALUES_TO_NAMES;
+
+ struct DataOperationType {
+ enum type {
+ SELECT = 1,
+ INSERT = 2,
+ UPDATE = 3,
+ DELETE = 4,
+ UNSET = 5,
+ NO_TXN = 6
+ };
+ };
+
+ extern const std::map<int, const char*> _DataOperationType_VALUES_TO_NAMES;
+
+ struct EventRequestType {
+ enum type {
+ INSERT = 1,
+ UPDATE = 2,
+ DELETE = 3
+ };
+ };
+
+ extern const std::map<int, const char*> _EventRequestType_VALUES_TO_NAMES;
+
+ struct FunctionType {
+ enum type {
+ JAVA = 1
+ };
+ };
+
+ extern const std::map<int, const char*> _FunctionType_VALUES_TO_NAMES;
+
+ struct ResourceType {
+ enum type {
+ JAR = 1,
+ FILE = 2,
+ ARCHIVE = 3
+ };
+ };
+
+ extern const std::map<int, const char*> _ResourceType_VALUES_TO_NAMES;
+
+ struct FileMetadataExprType {
+ enum type {
+ ORC_SARG = 1
+ };
+ };
+
+ extern const std::map<int, const char*> _FileMetadataExprType_VALUES_TO_NAMES;
+
+ struct ClientCapability {
+ enum type {
- TEST_CAPABILITY = 1
++ TEST_CAPABILITY = 1,
++ INSERT_ONLY_TABLES = 2
+ };
+ };
+
+ extern const std::map<int, const char*> _ClientCapability_VALUES_TO_NAMES;
+
+ class Version;
+
+ class FieldSchema;
+
+ class SQLPrimaryKey;
+
+ class SQLForeignKey;
+
+ class SQLUniqueConstraint;
+
+ class SQLNotNullConstraint;
+
+ class Type;
+
+ class HiveObjectRef;
+
+ class PrivilegeGrantInfo;
+
+ class HiveObjectPrivilege;
+
+ class PrivilegeBag;
+
+ class PrincipalPrivilegeSet;
+
+ class GrantRevokePrivilegeRequest;
+
+ class GrantRevokePrivilegeResponse;
+
+ class Role;
+
+ class RolePrincipalGrant;
+
+ class GetRoleGrantsForPrincipalRequest;
+
+ class GetRoleGrantsForPrincipalResponse;
+
+ class GetPrincipalsInRoleRequest;
+
+ class GetPrincipalsInRoleResponse;
+
+ class GrantRevokeRoleRequest;
+
+ class GrantRevokeRoleResponse;
+
+ class Database;
+
+ class SerDeInfo;
+
+ class Order;
+
+ class SkewedInfo;
+
+ class StorageDescriptor;
+
+ class Table;
+
+ class Partition;
+
+ class PartitionWithoutSD;
+
+ class PartitionSpecWithSharedSD;
+
+ class PartitionListComposingSpec;
+
+ class PartitionSpec;
+
+ class Index;
+
+ class BooleanColumnStatsData;
+
+ class DoubleColumnStatsData;
+
+ class LongColumnStatsData;
+
+ class StringColumnStatsData;
+
+ class BinaryColumnStatsData;
+
+ class Decimal;
+
+ class DecimalColumnStatsData;
+
+ class Date;
+
+ class DateColumnStatsData;
+
+ class ColumnStatisticsData;
+
+ class ColumnStatisticsObj;
+
+ class ColumnStatisticsDesc;
+
+ class ColumnStatistics;
+
+ class AggrStats;
+
+ class SetPartitionsStatsRequest;
+
+ class Schema;
+
+ class EnvironmentContext;
+
+ class PrimaryKeysRequest;
+
+ class PrimaryKeysResponse;
+
+ class ForeignKeysRequest;
+
+ class ForeignKeysResponse;
+
+ class UniqueConstraintsRequest;
+
+ class UniqueConstraintsResponse;
+
+ class NotNullConstraintsRequest;
+
+ class NotNullConstraintsResponse;
+
+ class DropConstraintRequest;
+
+ class AddPrimaryKeyRequest;
+
+ class AddForeignKeyRequest;
+
+ class AddUniqueConstraintRequest;
+
+ class AddNotNullConstraintRequest;
+
+ class PartitionsByExprResult;
+
+ class PartitionsByExprRequest;
+
+ class TableStatsResult;
+
+ class PartitionsStatsResult;
+
+ class TableStatsRequest;
+
+ class PartitionsStatsRequest;
+
+ class AddPartitionsResult;
+
+ class AddPartitionsRequest;
+
+ class DropPartitionsResult;
+
+ class DropPartitionsExpr;
+
+ class RequestPartsSpec;
+
+ class DropPartitionsRequest;
+
+ class ResourceUri;
+
+ class Function;
+
+ class TxnInfo;
+
+ class GetOpenTxnsInfoResponse;
+
+ class GetOpenTxnsResponse;
+
+ class OpenTxnRequest;
+
+ class OpenTxnsResponse;
+
+ class AbortTxnRequest;
+
+ class AbortTxnsRequest;
+
+ class CommitTxnRequest;
+
+ class LockComponent;
+
+ class LockRequest;
+
+ class LockResponse;
+
+ class CheckLockRequest;
+
+ class UnlockRequest;
+
+ class ShowLocksRequest;
+
+ class ShowLocksResponseElement;
+
+ class ShowLocksResponse;
+
+ class HeartbeatRequest;
+
+ class HeartbeatTxnRangeRequest;
+
+ class HeartbeatTxnRangeResponse;
+
+ class CompactionRequest;
+
+ class CompactionResponse;
+
+ class ShowCompactRequest;
+
+ class ShowCompactResponseElement;
+
+ class ShowCompactResponse;
+
+ class AddDynamicPartitions;
+
+ class NotificationEventRequest;
+
+ class NotificationEvent;
+
+ class NotificationEventResponse;
+
+ class CurrentNotificationEventId;
+
+ class NotificationEventsCountRequest;
+
+ class NotificationEventsCountResponse;
+
+ class InsertEventRequestData;
+
+ class FireEventRequestData;
+
+ class FireEventRequest;
+
+ class FireEventResponse;
+
+ class MetadataPpdResult;
+
+ class GetFileMetadataByExprResult;
+
+ class GetFileMetadataByExprRequest;
+
+ class GetFileMetadataResult;
+
+ class GetFileMetadataRequest;
+
+ class PutFileMetadataResult;
+
+ class PutFileMetadataRequest;
+
+ class ClearFileMetadataResult;
+
+ class ClearFileMetadataRequest;
+
+ class CacheFileMetadataResult;
+
+ class CacheFileMetadataRequest;
+
+ class GetAllFunctionsResponse;
+
+ class ClientCapabilities;
+
+ class GetTableRequest;
+
+ class GetTableResult;
+
+ class GetTablesRequest;
+
+ class GetTablesResult;
+
+ class CmRecycleRequest;
+
+ class CmRecycleResponse;
+
+ class TableMeta;
+
+ class MetaException;
+
+ class UnknownTableException;
+
+ class UnknownDBException;
+
+ class AlreadyExistsException;
+
+ class InvalidPartitionException;
+
+ class UnknownPartitionException;
+
+ class InvalidObjectException;
+
+ class NoSuchObjectException;
+
+ class IndexAlreadyExistsException;
+
+ class InvalidOperationException;
+
+ class ConfigValSecurityException;
+
+ class InvalidInputException;
+
+ class NoSuchTxnException;
+
+ class TxnAbortedException;
+
+ class TxnOpenException;
+
+ class NoSuchLockException;
+
+ typedef struct _Version__isset {
+ _Version__isset() : version(false), comments(false) {}
+ bool version :1;
+ bool comments :1;
+ } _Version__isset;
+
+ class Version {
+ public:
+
+ Version(const Version&);
+ Version& operator=(const Version&);
+ Version() : version(), comments() {
+ }
+
+ virtual ~Version() throw();
+ std::string version;
+ std::string comments;
+
+ _Version__isset __isset;
+
+ void __set_version(const std::string& val);
+
+ void __set_comments(const std::string& val);
+
+ bool operator == (const Version & rhs) const
+ {
+ if (!(version == rhs.version))
+ return false;
+ if (!(comments == rhs.comments))
+ return false;
+ return true;
+ }
+ bool operator != (const Version &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const Version & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(Version &a, Version &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const Version& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _FieldSchema__isset {
+ _FieldSchema__isset() : name(false), type(false), comment(false) {}
+ bool name :1;
+ bool type :1;
+ bool comment :1;
+ } _FieldSchema__isset;
+
+ class FieldSchema {
+ public:
+
+ FieldSchema(const FieldSchema&);
+ FieldSchema& operator=(const FieldSchema&);
+ FieldSchema() : name(), type(), comment() {
+ }
+
+ virtual ~FieldSchema() throw();
+ std::string name;
+ std::string type;
+ std::string comment;
+
+ _FieldSchema__isset __isset;
+
+ void __set_name(const std::string& val);
+
+ void __set_type(const std::string& val);
+
+ void __set_comment(const std::string& val);
+
+ bool operator == (const FieldSchema & rhs) const
+ {
+ if (!(name == rhs.name))
+ return false;
+ if (!(type == rhs.type))
+ return false;
+ if (!(comment == rhs.comment))
+ return false;
+ return true;
+ }
+ bool operator != (const FieldSchema &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const FieldSchema & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(FieldSchema &a, FieldSchema &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const FieldSchema& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _SQLPrimaryKey__isset {
+ _SQLPrimaryKey__isset() : table_db(false), table_name(false), column_name(false), key_seq(false), pk_name(false), enable_cstr(false), validate_cstr(false), rely_cstr(false) {}
+ bool table_db :1;
+ bool table_name :1;
+ bool column_name :1;
+ bool key_seq :1;
+ bool pk_name :1;
+ bool enable_cstr :1;
+ bool validate_cstr :1;
+ bool rely_cstr :1;
+ } _SQLPrimaryKey__isset;
+
+ class SQLPrimaryKey {
+ public:
+
+ SQLPrimaryKey(const SQLPrimaryKey&);
+ SQLPrimaryKey& operator=(const SQLPrimaryKey&);
+ SQLPrimaryKey() : table_db(), table_name(), column_name(), key_seq(0), pk_name(), enable_cstr(0), validate_cstr(0), rely_cstr(0) {
+ }
+
+ virtual ~SQLPrimaryKey() throw();
+ std::string table_db;
+ std::string table_name;
+ std::string column_name;
+ int32_t key_seq;
+ std::string pk_name;
+ bool enable_cstr;
+ bool validate_cstr;
+ bool rely_cstr;
+
+ _SQLPrimaryKey__isset __isset;
+
+ void __set_table_db(const std::string& val);
+
+ void __set_table_name(const std::string& val);
+
+ void __set_column_name(const std::string& val);
+
+ void __set_key_seq(const int32_t val);
+
+ void __set_pk_name(const std::string& val);
+
+ void __set_enable_cstr(const bool val);
+
+ void __set_validate_cstr(const bool val);
+
+ void __set_rely_cstr(const bool val);
+
+ bool operator == (const SQLPrimaryKey & rhs) const
+ {
+ if (!(table_db == rhs.table_db))
+ return false;
+ if (!(table_name == rhs.table_name))
+ return false;
+ if (!(column_name == rhs.column_name))
+ return false;
+ if (!(key_seq == rhs.key_seq))
+ return false;
+ if (!(pk_name == rhs.pk_name))
+ return false;
+ if (!(enable_cstr == rhs.enable_cstr))
+ return false;
+ if (!(validate_cstr == rhs.validate_cstr))
+ return false;
+ if (!(rely_cstr == rhs.rely_cstr))
+ return false;
+ return true;
+ }
+ bool operator != (const SQLPrimaryKey &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const SQLPrimaryKey & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(SQLPrimaryKey &a, SQLPrimaryKey &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const SQLPrimaryKey& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _SQLForeignKey__isset {
+ _SQLForeignKey__isset() : pktable_db(false), pktable_name(false), pkcolumn_name(false), fktable_db(false), fktable_name(false), fkcolumn_name(false), key_seq(false), update_rule(false), delete_rule(false), fk_name(false), pk_name(false), enable_cstr(false), validate_cstr(false), rely_cstr(false) {}
+ bool pktable_db :1;
+ bool pktable_name :1;
+ bool pkcolumn_name :1;
+ bool fktable_db :1;
+ bool fktable_name :1;
+ bool fkcolumn_name :1;
+ bool key_seq :1;
+ bool update_rule :1;
+ bool delete_rule :1;
+ bool fk_name :1;
+ bool pk_name :1;
+ bool enable_cstr :1;
+ bool validate_cstr :1;
+ bool rely_cstr :1;
+ } _SQLForeignKey__isset;
+
+ class SQLForeignKey {
+ public:
+
+ SQLForeignKey(const SQLForeignKey&);
+ SQLForeignKey& operator=(const SQLForeignKey&);
+ SQLForeignKey() : pktable_db(), pktable_name(), pkcolumn_name(), fktable_db(), fktable_name(), fkcolumn_name(), key_seq(0), update_rule(0), delete_rule(0), fk_name(), pk_name(), enable_cstr(0), validate_cstr(0), rely_cstr(0) {
+ }
+
+ virtual ~SQLForeignKey() throw();
+ std::string pktable_db;
+ std::string pktable_name;
+ std::string pkcolumn_name;
+ std::string fktable_db;
+ std::string fktable_name;
+ std::string fkcolumn_name;
+ int32_t key_seq;
+ int32_t update_rule;
+ int32_t delete_rule;
+ std::string fk_name;
+ std::string pk_name;
+ bool enable_cstr;
+ bool validate_cstr;
+ bool rely_cstr;
+
+ _SQLForeignKey__isset __isset;
+
+ void __set_pktable_db(const std::string& val);
+
+ void __set_pktable_name(const std::string& val);
+
+ void __set_pkcolumn_name(const std::string& val);
+
+ void __set_fktable_db(const std::string& val);
+
+ void __set_fktable_name(const std::string& val);
+
+ void __set_fkcolumn_name(const std::string& val);
+
+ void __set_key_seq(const int32_t val);
+
+ void __set_update_rule(const int32_t val);
+
+ void __set_delete_rule(const int32_t val);
+
+ void __set_fk_name(const std::string& val);
+
+ void __set_pk_name(const std::string& val);
+
+ void __set_enable_cstr(const bool val);
+
+ void __set_validate_cstr(const bool val);
+
+ void __set_rely_cstr(const bool val);
+
+ bool operator == (const SQLForeignKey & rhs) const
+ {
+ if (!(pktable_db == rhs.pktable_db))
+ return false;
+ if (!(pktable_name == rhs.pktable_name))
+ return false;
+ if (!(pkcolumn_name == rhs.pkcolumn_name))
+ return false;
+ if (!(fktable_db == rhs.fktable_db))
+ return false;
+ if (!(fktable_name == rhs.fktable_name))
+ return false;
+ if (!(fkcolumn_name == rhs.fkcolumn_name))
+ return false;
+ if (!(key_seq == rhs.key_seq))
+ return false;
+ if (!(update_rule == rhs.update_rule))
+ return false;
+ if (!(delete_rule == rhs.delete_rule))
+ return false;
+ if (!(fk_name == rhs.fk_name))
+ return false;
+ if (!(pk_name == rhs.pk_name))
+ return false;
+ if (!(enable_cstr == rhs.enable_cstr))
+ return false;
+ if (!(validate_cstr == rhs.validate_cstr))
+ return false;
+ if (!(rely_cstr == rhs.rely_cstr))
+ return false;
+ return true;
+ }
+ bool operator != (const SQLForeignKey &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const SQLForeignKey & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(SQLForeignKey &a, SQLForeignKey &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const SQLForeignKey& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _SQLUniqueConstraint__isset {
+ _SQLUniqueConstraint__isset() : table_db(false), table_name(false), column_name(false), key_seq(false), uk_name(false), enable_cstr(false), validate_cstr(false), rely_cstr(false) {}
+ bool table_db :1;
+ bool table_name :1;
+ bool column_name :1;
+ bool key_seq :1;
+ bool uk_name :1;
+ bool enable_cstr :1;
+ bool validate_cstr :1;
+ bool rely_cstr :1;
+ } _SQLUniqueConstraint__isset;
+
+ class SQLUniqueConstraint {
+ public:
+
+ SQLUniqueConstraint(const SQLUniqueConstraint&);
+ SQLUniqueConstraint& operator=(const SQLUniqueConstraint&);
+ SQLUniqueConstraint() : table_db(), table_name(), column_name(), key_seq(0), uk_name(), enable_cstr(0), validate_cstr(0), rely_cstr(0) {
+ }
+
+ virtual ~SQLUniqueConstraint() throw();
+ std::string table_db;
+ std::string table_name;
+ std::string column_name;
+ int32_t key_seq;
+ std::string uk_name;
+ bool enable_cstr;
+ bool validate_cstr;
+ bool rely_cstr;
+
+ _SQLUniqueConstraint__isset __isset;
+
+ void __set_table_db(const std::string& val);
+
+ void __set_table_name(const std::string& val);
+
+ void __set_column_name(const std::string& val);
+
+ void __set_key_seq(const int32_t val);
+
+ void __set_uk_name(const std::string& val);
+
+ void __set_enable_cstr(const bool val);
+
+ void __set_validate_cstr(const bool val);
+
+ void __set_rely_cstr(const bool val);
+
+ bool operator == (const SQLUniqueConstraint & rhs) const
+ {
+ if (!(table_db == rhs.table_db))
+ return false;
+ if (!(table_name == rhs.table_name))
+ return false;
+ if (!(column_name == rhs.column_name))
+ return false;
+ if (!(key_seq == rhs.key_seq))
+ return false;
+ if (!(uk_name == rhs.uk_name))
+ return false;
+ if (!(enable_cstr == rhs.enable_cstr))
+ return false;
+ if (!(validate_cstr == rhs.validate_cstr))
+ return false;
+ if (!(rely_cstr == rhs.rely_cstr))
+ return false;
+ return true;
+ }
+ bool operator != (const SQLUniqueConstraint &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const SQLUniqueConstraint & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(SQLUniqueConstraint &a, SQLUniqueConstraint &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const SQLUniqueConstraint& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _SQLNotNullConstraint__isset {
+ _SQLNotNullConstraint__isset() : table_db(false), table_name(false), column_name(false), nn_name(false), enable_cstr(false), validate_cstr(false), rely_cstr(false) {}
+ bool table_db :1;
+ bool table_name :1;
+ bool column_name :1;
+ bool nn_name :1;
+ bool enable_cstr :1;
+ bool validate_cstr :1;
+ bool rely_cstr :1;
+ } _SQLNotNullConstraint__isset;
+
+ class SQLNotNullConstraint {
+ public:
+
+ SQLNotNullConstraint(const SQLNotNullConstraint&);
+ SQLNotNullConstraint& operator=(const SQLNotNullConstraint&);
+ SQLNotNullConstraint() : table_db(), table_name(), column_name(), nn_name(), enable_cstr(0), validate_cstr(0), rely_cstr(0) {
+ }
+
+ virtual ~SQLNotNullConstraint() throw();
+ std::string table_db;
+ std::string table_name;
+ std::string column_name;
+ std::string nn_name;
+ bool enable_cstr;
+ bool validate_cstr;
+ bool rely_cstr;
+
+ _SQLNotNullConstraint__isset __isset;
+
+ void __set_table_db(const std::string& val);
+
+ void __set_table_name(const std::string& val);
+
+ void __set_column_name(const std::string& val);
+
+ void __set_nn_name(const std::string& val);
+
+ void __set_enable_cstr(const bool val);
+
+ void __set_validate_cstr(const bool val);
+
+ void __set_rely_cstr(const bool val);
+
+ bool operator == (const SQLNotNullConstraint & rhs) const
+ {
+ if (!(table_db == rhs.table_db))
+ return false;
+ if (!(table_name == rhs.table_name))
+ return false;
+ if (!(column_name == rhs.column_name))
+ return false;
+ if (!(nn_name == rhs.nn_name))
+ return false;
+ if (!(enable_cstr == rhs.enable_cstr))
+ return false;
+ if (!(validate_cstr == rhs.validate_cstr))
+ return false;
+ if (!(rely_cstr == rhs.rely_cstr))
+ return false;
+ return true;
+ }
+ bool operator != (const SQLNotNullConstraint &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const SQLNotNullConstraint & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(SQLNotNullConstraint &a, SQLNotNullConstraint &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const SQLNotNullConstraint& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _Type__isset {
+ _Type__isset() : name(false), type1(false), type2(false), fields(false) {}
+ bool name :1;
+ bool type1 :1;
+ bool type2 :1;
+ bool fields :1;
+ } _Type__isset;
+
+ class Type {
+ public:
+
+ Type(const Type&);
+ Type& operator=(const Type&);
+ Type() : name(), type1(), type2() {
+ }
+
+ virtual ~Type() throw();
+ std::string name;
+ std::string type1;
+ std::string type2;
+ std::vector<FieldSchema> fields;
+
+ _Type__isset __isset;
+
+ void __set_name(const std::string& val);
+
+ void __set_type1(const std::string& val);
+
+ void __set_type2(const std::string& val);
+
+ void __set_fields(const std::vector<FieldSchema> & val);
+
+ bool operator == (const Type & rhs) const
+ {
+ if (!(name == rhs.name))
+ return false;
+ if (__isset.type1 != rhs.__isset.type1)
+ return false;
+ else if (__isset.type1 && !(type1 == rhs.type1))
+ return false;
+ if (__isset.type2 != rhs.__isset.type2)
+ return false;
+ else if (__isset.type2 && !(type2 == rhs.type2))
+ return false;
+ if (__isset.fields != rhs.__isset.fields)
+ return false;
+ else if (__isset.fields && !(fields == rhs.fields))
+ return false;
+ return true;
+ }
+ bool operator != (const Type &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const Type & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(Type &a, Type &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const Type& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _HiveObjectRef__isset {
+ _HiveObjectRef__isset() : objectType(false), dbName(false), objectName(false), partValues(false), columnName(false) {}
+ bool objectType :1;
+ bool dbName :1;
+ bool objectName :1;
+ bool partValues :1;
+ bool columnName :1;
+ } _HiveObjectRef__isset;
+
+ class HiveObjectRef {
+ public:
+
+ HiveObjectRef(const HiveObjectRef&);
+ HiveObjectRef& operator=(const HiveObjectRef&);
+ HiveObjectRef() : objectType((HiveObjectType::type)0), dbName(), objectName(), columnName() {
+ }
+
+ virtual ~HiveObjectRef() throw();
+ HiveObjectType::type objectType;
+ std::string dbName;
+ std::string objectName;
+ std::vector<std::string> partValues;
+ std::string columnName;
+
+ _HiveObjectRef__isset __isset;
+
+ void __set_objectType(const HiveObjectType::type val);
+
+ void __set_dbName(const std::string& val);
+
+ void __set_objectName(const std::string& val);
+
+ void __set_partValues(const std::vector<std::string> & val);
+
+ void __set_columnName(const std::string& val);
+
+ bool operator == (const HiveObjectRef & rhs) const
+ {
+ if (!(objectType == rhs.objectType))
+ return false;
+ if (!(dbName == rhs.dbName))
+ return false;
+ if (!(objectName == rhs.objectName))
+ return false;
+ if (!(partValues == rhs.partValues))
+ return false;
+ if (!(columnName == rhs.columnName))
+ return false;
+ return true;
+ }
+ bool operator != (const HiveObjectRef &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const HiveObjectRef & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(HiveObjectRef &a, HiveObjectRef &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const HiveObjectRef& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _PrivilegeGrantInfo__isset {
+ _PrivilegeGrantInfo__isset() : privilege(false), createTime(false), grantor(false), grantorType(false), grantOption(false) {}
+ bool privilege :1;
+ bool createTime :1;
+ bool grantor :1;
+ bool grantorType :1;
+ bool grantOption :1;
+ } _PrivilegeGrantInfo__isset;
+
+ class PrivilegeGrantInfo {
+ public:
+
+ PrivilegeGrantInfo(const PrivilegeGrantInfo&);
+ PrivilegeGrantInfo& operator=(const PrivilegeGrantInfo&);
+ PrivilegeGrantInfo() : privilege(), createTime(0), grantor(), grantorType((PrincipalType::type)0), grantOption(0) {
+ }
+
+ virtual ~PrivilegeGrantInfo() throw();
+ std::string privilege;
+ int32_t createTime;
+ std::string grantor;
+ PrincipalType::type grantorType;
+ bool grantOption;
+
+ _PrivilegeGrantInfo__isset __isset;
+
+ void __set_privilege(const std::string& val);
+
+ void __set_createTime(const int32_t val);
+
+ void __set_grantor(const std::string& val);
+
+ void __set_grantorType(const PrincipalType::type val);
+
+ void __set_grantOption(const bool val);
+
+ bool operator == (const PrivilegeGrantInfo & rhs) const
+ {
+ if (!(privilege == rhs.privilege))
+ return false;
+ if (!(createTime == rhs.createTime))
+ return false;
+ if (!(grantor == rhs.grantor))
+ return false;
+ if (!(grantorType == rhs.grantorType))
+ return false;
+ if (!(grantOption == rhs.grantOption))
+ return false;
+ return true;
+ }
+ bool operator != (const PrivilegeGrantInfo &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const PrivilegeGrantInfo & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(PrivilegeGrantInfo &a, PrivilegeGrantInfo &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const PrivilegeGrantInfo& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _HiveObjectPrivilege__isset {
+ _HiveObjectPrivilege__isset() : hiveObject(false), principalName(false), principalType(false), grantInfo(false) {}
+ bool hiveObject :1;
+ bool principalName :1;
+ bool principalType :1;
+ bool grantInfo :1;
+ } _HiveObjectPrivilege__isset;
+
+ class HiveObjectPrivilege {
+ public:
+
+ HiveObjectPrivilege(const HiveObjectPrivilege&);
+ HiveObjectPrivilege& operator=(const HiveObjectPrivilege&);
+ HiveObjectPrivilege() : principalName(), principalType((PrincipalType::type)0) {
+ }
+
+ virtual ~HiveObjectPrivilege() throw();
+ HiveObjectRef hiveObject;
+ std::string principalName;
+ PrincipalType::type principalType;
+ PrivilegeGrantInfo grantInfo;
+
+ _HiveObjectPrivilege__isset __isset;
+
+ void __set_hiveObject(const HiveObjectRef& val);
+
+ void __set_principalName(const std::string& val);
+
+ void __set_principalType(const PrincipalType::type val);
+
+ void __set_grantInfo(const PrivilegeGrantInfo& val);
+
+ bool operator == (const HiveObjectPrivilege & rhs) const
+ {
+ if (!(hiveObject == rhs.hiveObject))
+ return false;
+ if (!(principalName == rhs.principalName))
+ return false;
+ if (!(principalType == rhs.principalType))
+ return false;
+ if (!(grantInfo == rhs.grantInfo))
+ return false;
+ return true;
+ }
+ bool operator != (const HiveObjectPrivilege &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const HiveObjectPrivilege & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(HiveObjectPrivilege &a, HiveObjectPrivilege &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const HiveObjectPrivilege& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _PrivilegeBag__isset {
+ _PrivilegeBag__isset() : privileges(false) {}
+ bool privileges :1;
+ } _PrivilegeBag__isset;
+
+ class PrivilegeBag {
+ public:
+
+ PrivilegeBag(const PrivilegeBag&);
+ PrivilegeBag& operator=(const PrivilegeBag&);
+ PrivilegeBag() {
+ }
+
+ virtual ~PrivilegeBag() throw();
+ std::vector<HiveObjectPrivilege> privileges;
+
+ _PrivilegeBag__isset __isset;
+
+ void __set_privileges(const std::vector<HiveObjectPrivilege> & val);
+
+ bool operator == (const PrivilegeBag & rhs) const
+ {
+ if (!(privileges == rhs.privileges))
+ return false;
+ return true;
+ }
+ bool operator != (const PrivilegeBag &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const PrivilegeBag & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(PrivilegeBag &a, PrivilegeBag &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const PrivilegeBag& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _PrincipalPrivilegeSet__isset {
+ _PrincipalPrivilegeSet__isset() : userPrivileges(false), groupPrivileges(false), rolePrivileges(false) {}
+ bool userPrivileges :1;
+ bool groupPrivileges :1;
+ bool rolePrivileges :1;
+ } _PrincipalPrivilegeSet__isset;
+
+ class PrincipalPrivilegeSet {
+ public:
+
+ PrincipalPrivilegeSet(const PrincipalPrivilegeSet&);
+ PrincipalPrivilegeSet& operator=(const PrincipalPrivilegeSet&);
+ PrincipalPrivilegeSet() {
+ }
+
+ virtual ~PrincipalPrivilegeSet() throw();
+ std::map<std::string, std::vector<PrivilegeGrantInfo> > userPrivileges;
+ std::map<std::string, std::vector<PrivilegeGrantInfo> > groupPrivileges;
+ std::map<std::string, std::vector<PrivilegeGrantInfo> > rolePrivileges;
+
+ _PrincipalPrivilegeSet__isset __isset;
+
+ void __set_userPrivileges(const std::map<std::string, std::vector<PrivilegeGrantInfo> > & val);
+
+ void __set_groupPrivileges(const std::map<std::string, std::vector<PrivilegeGrantInfo> > & val);
+
+ void __set_rolePrivileges(const std::map<std::string, std::vector<PrivilegeGrantInfo> > & val);
+
+ bool operator == (const PrincipalPrivilegeSet & rhs) const
+ {
+ if (!(userPrivileges == rhs.userPrivileges))
+ return false;
+ if (!(groupPrivileges == rhs.groupPrivileges))
+ return false;
+ if (!(rolePrivileges == rhs.rolePrivileges))
+ return false;
+ return true;
+ }
+ bool operator != (const PrincipalPrivilegeSet &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const PrincipalPrivilegeSet & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(PrincipalPrivilegeSet &a, PrincipalPrivilegeSet &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const PrincipalPrivilegeSet& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _GrantRevokePrivilegeRequest__isset {
+ _GrantRevokePrivilegeRequest__isset() : requestType(false), privileges(false), revokeGrantOption(false) {}
+ bool requestType :1;
+ bool privileges :1;
+ bool revokeGrantOption :1;
+ } _GrantRevokePrivilegeRequest__isset;
+
+ class GrantRevokePrivilegeRequest {
+ public:
+
+ GrantRevokePrivilegeRequest(const GrantRevokePrivilegeRequest&);
+ GrantRevokePrivilegeRequest& operator=(const GrantRevokePrivilegeRequest&);
+ GrantRevokePrivilegeRequest() : requestType((GrantRevokeType::type)0), revokeGrantOption(0) {
+ }
+
+ virtual ~GrantRevokePrivilegeRequest() throw();
+ GrantRevokeType::type requestType;
+ PrivilegeBag privileges;
+ bool revokeGrantOption;
+
+ _GrantRevokePrivilegeRequest__isset __isset;
+
+ void __set_requestType(const GrantRevokeType::type val);
+
+ void __set_privileges(const PrivilegeBag& val);
+
+ void __set_revokeGrantOption(const bool val);
+
+ bool operator == (const GrantRevokePrivilegeRequest & rhs) const
+ {
+ if (!(requestType == rhs.requestType))
+ return false;
+ if (!(privileges == rhs.privileges))
+ return false;
+ if (__isset.revokeGrantOption != rhs.__isset.revokeGrantOption)
+ return false;
+ else if (__isset.revokeGrantOption && !(revokeGrantOption == rhs.revokeGrantOption))
+ return false;
+ return true;
+ }
+ bool operator != (const GrantRevokePrivilegeRequest &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const GrantRevokePrivilegeRequest & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(GrantRevokePrivilegeRequest &a, GrantRevokePrivilegeRequest &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const GrantRevokePrivilegeRequest& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _GrantRevokePrivilegeResponse__isset {
+ _GrantRevokePrivilegeResponse__isset() : success(false) {}
+ bool success :1;
+ } _GrantRevokePrivilegeResponse__isset;
+
+ class GrantRevokePrivilegeResponse {
+ public:
+
+ GrantRevokePrivilegeResponse(const GrantRevokePrivilegeResponse&);
+ GrantRevokePrivilegeResponse& operator=(const GrantRevokePrivilegeResponse&);
+ GrantRevokePrivilegeResponse() : success(0) {
+ }
+
+ virtual ~GrantRevokePrivilegeResponse() throw();
+ bool success;
+
+ _GrantRevokePrivilegeResponse__isset __isset;
+
+ void __set_success(const bool val);
+
+ bool operator == (const GrantRevokePrivilegeResponse & rhs) const
+ {
+ if (__isset.success != rhs.__isset.success)
+ return false;
+ else if (__isset.success && !(success == rhs.success))
+ return false;
+ return true;
+ }
+ bool operator != (const GrantRevokePrivilegeResponse &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const GrantRevokePrivilegeResponse & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(GrantRevokePrivilegeResponse &a, GrantRevokePrivilegeResponse &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const GrantRevokePrivilegeResponse& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _Role__isset {
+ _Role__isset() : roleName(false), createTime(false), ownerName(false) {}
+ bool roleName :1;
+ bool createTime :1;
+ bool ownerName :1;
+ } _Role__isset;
+
+ class Role {
+ public:
+
+ Role(const Role&);
+ Role& operator=(const Role&);
+ Role() : roleName(), createTime(0), ownerName() {
+ }
+
+ virtual ~Role() throw();
+ std::string roleName;
+ int32_t createTime;
+ std::string ownerName;
+
+ _Role__isset __isset;
+
+ void __set_roleName(const std::string& val);
+
+ void __set_createTime(const int32_t val);
+
+ void __set_ownerName(const std::string& val);
+
+ bool operator == (const Role & rhs) const
+ {
+ if (!(roleName == rhs.roleName))
+ return false;
+ if (!(createTime == rhs.createTime))
+ return false;
+ if (!(ownerName == rhs.ownerName))
+ return false;
+ return true;
+ }
+ bool operator != (const Role &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const Role & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(Role &a, Role &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const Role& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _RolePrincipalGrant__isset {
+ _RolePrincipalGrant__isset() : roleName(false), principalName(false), principalType(false), grantOption(false), grantTime(false), grantorName(false), grantorPrincipalType(false) {}
+ bool roleName :1;
+ bool principalName :1;
+ bool principalType :1;
+ bool grantOption :1;
+ bool grantTime :1;
+ bool grantorName :1;
+ bool grantorPrincipalType :1;
+ } _RolePrincipalGrant__isset;
+
+ class RolePrincipalGrant {
+ public:
+
+ RolePrincipalGrant(const RolePrincipalGrant&);
+ RolePrincipalGrant& operator=(const RolePrincipalGrant&);
+ RolePrincipalGrant() : roleName(), principalName(), principalType((PrincipalType::type)0), grantOption(0), grantTime(0), grantorName(), grantorPrincipalType((PrincipalType::type)0) {
+ }
+
+ virtual ~RolePrincipalGrant() throw();
+ std::string roleName;
+ std::string principalName;
+ PrincipalType::type principalType;
+ bool grantOption;
+ int32_t grantTime;
+ std::string grantorName;
+ PrincipalType::type grantorPrincipalType;
+
+ _RolePrincipalGrant__isset __isset;
+
+ void __set_roleName(const std::string& val);
+
+ void __set_principalName(const std::string& val);
+
+ void __set_principalType(const PrincipalType::type val);
+
+ void __set_grantOption(const bool val);
+
+ void __set_grantTime(const int32_t val);
+
+ void __set_grantorName(const std::string& val);
+
+ void __set_grantorPrincipalType(const PrincipalType::type val);
+
+ bool operator == (const RolePrincipalGrant & rhs) const
+ {
+ if (!(roleName == rhs.roleName))
+ return false;
+ if (!(principalName == rhs.principalName))
+ return false;
+ if (!(principalType == rhs.principalType))
+ return false;
+ if (!(grantOption == rhs.grantOption))
+ return false;
+ if (!(grantTime == rhs.grantTime))
+ return false;
+ if (!(grantorName == rhs.grantorName))
+ return false;
+ if (!(grantorPrincipalType == rhs.grantorPrincipalType))
+ return false;
+ return true;
+ }
+ bool operator != (const RolePrincipalGrant &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const RolePrincipalGrant & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(RolePrincipalGrant &a, RolePrincipalGrant &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const RolePrincipalGrant& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+
+ class GetRoleGrantsForPrincipalRequest {
+ public:
+
+ GetRoleGrantsForPrincipalRequest(const GetRoleGrantsForPrincipalRequest&);
+ GetRoleGrantsForPrincipalRequest& operator=(const GetRoleGrantsForPrincipalRequest&);
+ GetRoleGrantsForPrincipalRequest() : principal_name(), principal_type((PrincipalType::type)0) {
+ }
+
+ virtual ~GetRoleGrantsForPrincipalRequest() throw();
+ std::string principal_name;
+ PrincipalType::type principal_type;
+
+ void __set_principal_name(const std::string& val);
+
+ void __set_principal_type(const PrincipalType::type val);
+
+ bool operator == (const GetRoleGrantsForPrincipalRequest & rhs) const
+ {
+ if (!(principal_name == rhs.principal_name))
+ return false;
+ if (!(principal_type == rhs.principal_type))
+ return false;
+ return true;
+ }
+ bool operator != (const GetRoleGrantsForPrincipalRequest &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const GetRoleGrantsForPrincipalRequest & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(GetRoleGrantsForPrincipalRequest &a, GetRoleGrantsForPrincipalRequest &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const GetRoleGrantsForPrincipalRequest& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+
+ class GetRoleGrantsForPrincipalResponse {
+ public:
+
+ GetRoleGrantsForPrincipalResponse(const GetRoleGrantsForPrincipalResponse&);
+ GetRoleGrantsForPrincipalResponse& operator=(const GetRoleGrantsForPrincipalResponse&);
+ GetRoleGrantsForPrincipalResponse() {
+ }
+
+ virtual ~GetRoleGrantsForPrincipalResponse() throw();
+ std::vector<RolePrincipalGrant> principalGrants;
+
+ void __set_principalGrants(const std::vector<RolePrincipalGrant> & val);
+
+ bool operator == (const GetRoleGrantsForPrincipalResponse & rhs) const
+ {
+ if (!(principalGrants == rhs.principalGrants))
+ return false;
+ return true;
+ }
+ bool operator != (const GetRoleGrantsForPrincipalResponse &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const GetRoleGrantsForPrincipalResponse & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(GetRoleGrantsForPrincipalResponse &a, GetRoleGrantsForPrincipalResponse &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const GetRoleGrantsForPrincipalResponse& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+
+ class GetPrincipalsInRoleRequest {
+ public:
+
+ GetPrincipalsInRoleRequest(const GetPrincipalsInRoleRequest&);
+ GetPrincipalsInRoleRequest& operator=(const GetPrincipalsInRoleRequest&);
+ GetPrincipalsInRoleRequest() : roleName() {
+ }
+
+ virtual ~GetPrincipalsInRoleRequest() throw();
+ std::string roleName;
+
+ void __set_roleName(const std::string& val);
+
+ bool operator == (const GetPrincipalsInRoleRequest & rhs) const
+ {
+ if (!(roleName == rhs.roleName))
+ return false;
+ return true;
+ }
+ bool operator != (const GetPrincipalsInRoleRequest &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const GetPrincipalsInRoleRequest & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(GetPrincipalsInRoleRequest &a, GetPrincipalsInRoleRequest &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const GetPrincipalsInRoleRequest& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+
+ class GetPrincipalsInRoleResponse {
+ public:
+
+ GetPrincipalsInRoleResponse(const GetPrincipalsInRoleResponse&);
+ GetPrincipalsInRoleResponse& operator=(const GetPrincipalsInRoleResponse&);
+ GetPrincipalsInRoleResponse() {
+ }
+
+ virtual ~GetPrincipalsInRoleResponse() throw();
+ std::vector<RolePrincipalGrant> principalGrants;
+
+ void __set_principalGrants(const std::vector<RolePrincipalGrant> & val);
+
+ bool operator == (const GetPrincipalsInRoleResponse & rhs) const
+ {
+ if (!(principalGrants == rhs.principalGrants))
+ return false;
+ return true;
+ }
+ bool operator != (const GetPrincipalsInRoleResponse &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const GetPrincipalsInRoleResponse & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(GetPrincipalsInRoleResponse &a, GetPrincipalsInRoleResponse &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const GetPrincipalsInRoleResponse& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _GrantRevokeRoleRequest__isset {
+ _GrantRevokeRoleRequest__isset() : requestType(false), roleName(false), principalName(false), principalType(false), grantor(false), grantorType(false), grantOption(false) {}
+ bool requestType :1;
+ bool roleName :1;
+ bool principalName :1;
+ bool principalType :1;
+ bool grantor :1;
+ bool grantorType :1;
+ bool grantOption :1;
+ } _GrantRevokeRoleRequest__isset;
+
+ class GrantRevokeRoleRequest {
+ public:
+
+ GrantRevokeRoleRequest(const GrantRevokeRoleRequest&);
+ GrantRevokeRoleRequest& operator=(const GrantRevokeRoleRequest&);
+ GrantRevokeRoleRequest() : requestType((GrantRevokeType::type)0), roleName(), principalName(), principalType((PrincipalType::type)0), grantor(), grantorType((PrincipalType::type)0), grantOption(0) {
+ }
+
+ virtual ~GrantRevokeRoleRequest() throw();
+ GrantRevokeType::type requestType;
+ std::string roleName;
+ std::string principalName;
+ PrincipalType::type principalType;
+ std::string grantor;
+ PrincipalType::type grantorType;
+ bool grantOption;
+
+ _GrantRevokeRoleRequest__isset __isset;
+
+ void __set_requestType(const GrantRevokeType::type val);
+
+ void __set_roleName(const std::string& val);
+
+ void __set_principalName(const std::string& val);
+
+ void __set_principalType(const PrincipalType::type val);
+
+ void __set_grantor(const std::string& val);
+
+ void __set_grantorType(const PrincipalType::type val);
+
+ void __set_grantOption(const bool val);
+
+ bool operator == (const GrantRevokeRoleRequest & rhs) const
+ {
+ if (!(requestType == rhs.requestType))
+ return false;
+ if (!(roleName == rhs.roleName))
+ return false;
+ if (!(principalName == rhs.principalName))
+ return false;
+ if (!(principalType == rhs.principalType))
+ return false;
+ if (__isset.grantor != rhs.__isset.grantor)
+ return false;
+ else if (__isset.grantor && !(grantor == rhs.grantor))
+ return false;
+ if (__isset.grantorType != rhs.__isset.grantorType)
+ return false;
+ else if (__isset.grantorType && !(grantorType == rhs.grantorType))
+ return false;
+ if (__isset.grantOption != rhs.__isset.grantOption)
+ return false;
+ else if (__isset.grantOption && !(grantOption == rhs.grantOption))
+ return false;
+ return true;
+ }
+ bool operator != (const GrantRevokeRoleRequest &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const GrantRevokeRoleRequest & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(GrantRevokeRoleRequest &a, GrantRevokeRoleRequest &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const GrantRevokeRoleRequest& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _GrantRevokeRoleResponse__isset {
+ _GrantRevokeRoleResponse__isset() : success(false) {}
+ bool success :1;
+ } _GrantRevokeRoleResponse__isset;
+
+ class GrantRevokeRoleResponse {
+ public:
+
+ GrantRevokeRoleResponse(const GrantRevokeRoleResponse&);
+ GrantRevokeRoleResponse& operator=(const GrantRevokeRoleResponse&);
+ GrantRevokeRoleResponse() : success(0) {
+ }
+
+ virtual ~GrantRevokeRoleResponse() throw();
+ bool success;
+
+ _GrantRevokeRoleResponse__isset __isset;
+
+ void __set_success(const bool val);
+
+ bool operator == (const GrantRevokeRoleResponse & rhs) const
+ {
+ if (__isset.success != rhs.__isset.success)
+ return false;
+ else if (__isset.success && !(success == rhs.success))
+ return false;
+ return true;
+ }
+ bool operator != (const GrantRevokeRoleResponse &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const GrantRevokeRoleResponse & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(GrantRevokeRoleResponse &a, GrantRevokeRoleResponse &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const GrantRevokeRoleResponse& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _Database__isset {
+ _Database__isset() : name(false), description(false), locationUri(false), parameters(false), privileges(false), ownerName(false), ownerType(false) {}
+ bool name :1;
+ bool description :1;
+ bool locationUri :1;
+ bool parameters :1;
+ bool privileges :1;
+ bool ownerName :1;
+ bool ownerType :1;
+ } _Database__isset;
+
+ class Database {
+ public:
+
+ Database(const Database&);
+ Database& operator=(const Database&);
+ Database() : name(), description(), locationUri(), ownerName(), ownerType((PrincipalType::type)0) {
+ }
+
+ virtual ~Database() throw();
+ std::string name;
+ std::string description;
+ std::string locationUri;
+ std::map<std::string, std::string> parameters;
+ PrincipalPrivilegeSet privileges;
+ std::string ownerName;
+ PrincipalType::type ownerType;
+
+ _Database__isset __isset;
+
+ void __set_name(const std::string& val);
+
+ void __set_description(const std::string& val);
+
+ void __set_locationUri(const std::string& val);
+
+ void __set_parameters(const std::map<std::string, std::string> & val);
+
+ void __set_privileges(const PrincipalPrivilegeSet& val);
+
+ void __set_ownerName(const std::string& val);
+
+ void __set_ownerType(const PrincipalType::type val);
+
+ bool operator == (const Database & rhs) const
+ {
+ if (!(name == rhs.name))
+ return false;
+ if (!(description == rhs.description))
+ return false;
+ if (!(locationUri == rhs.locationUri))
+ return false;
+ if (!(parameters == rhs.parameters))
+ return false;
+ if (__isset.privileges != rhs.__isset.privileges)
+ return false;
+ else if (__isset.privileges && !(privileges == rhs.privileges))
+ return false;
+ if (__isset.ownerName != rhs.__isset.ownerName)
+ return false;
+ else if (__isset.ownerName && !(ownerName == rhs.ownerName))
+ return false;
+ if (__isset.ownerType != rhs.__isset.ownerType)
+ return false;
+ else if (__isset.ownerType && !(ownerType == rhs.ownerType))
+ return false;
+ return true;
+ }
+ bool operator != (const Database &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const Database & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(Database &a, Database &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const Database& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _SerDeInfo__isset {
+ _SerDeInfo__isset() : name(false), serializationLib(false), parameters(false) {}
+ bool name :1;
+ bool serializationLib :1;
+ bool parameters :1;
+ } _SerDeInfo__isset;
+
+ class SerDeInfo {
+ public:
+
+ SerDeInfo(const SerDeInfo&);
+ SerDeInfo& operator=(const SerDeInfo&);
+ SerDeInfo() : name(), serializationLib() {
+ }
+
+ virtual ~SerDeInfo() throw();
+ std::string name;
+ std::string serializationLib;
+ std::map<std::string, std::string> parameters;
+
+ _SerDeInfo__isset __isset;
+
+ void __set_name(const std::string& val);
+
+ void __set_serializationLib(const std::string& val);
+
+ void __set_parameters(const std::map<std::string, std::string> & val);
+
+ bool operator == (const SerDeInfo & rhs) const
+ {
+ if (!(name == rhs.name))
+ return false;
+ if (!(serializationLib == rhs.serializationLib))
+ return false;
+ if (!(parameters == rhs.parameters))
+ return false;
+ return true;
+ }
+ bool operator != (const SerDeInfo &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const SerDeInfo & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(SerDeInfo &a, SerDeInfo &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const SerDeInfo& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _Order__isset {
+ _Order__isset() : col(false), order(false) {}
+ bool col :1;
+ bool order :1;
+ } _Order__isset;
+
+ class Order {
+ public:
+
+ Order(const Order&);
+ Order& operator=(const Order&);
+ Order() : col(), order(0) {
+ }
+
+ virtual ~Order() throw();
+ std::string col;
+ int32_t order;
+
+ _Order__isset __isset;
+
+ void __set_col(const std::string& val);
+
+ void __set_order(const int32_t val);
+
+ bool operator == (const Order & rhs) const
+ {
+ if (!(col == rhs.col))
+ return false;
+ if (!(order == rhs.order))
+ return false;
+ return true;
+ }
+ bool operator != (const Order &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const Order & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(Order &a, Order &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const Order& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _SkewedInfo__isset {
+ _SkewedInfo__isset() : skewedColNames(false), skewedColValues(false), skewedColValueLocationMaps(false) {}
+ bool skewedColNames :1;
+ bool skewedColValues :1;
+ bool skewedColValueLocationMaps :1;
+ } _SkewedInfo__isset;
+
+ class SkewedInfo {
+ public:
+
+ SkewedInfo(const SkewedInfo&);
+ SkewedInfo& operator=(const SkewedInfo&);
+ SkewedInfo() {
+ }
+
+ virtual ~SkewedInfo() throw();
+ std::vector<std::string> skewedColNames;
+ std::vector<std::vector<std::string> > skewedColValues;
+ std::map<std::vector<std::string> , std::string> skewedColValueLocationMaps;
+
+ _SkewedInfo__isset __isset;
+
+ void __set_skewedColNames(const std::vector<std::string> & val);
+
+ void __set_skewedColValues(const std::vector<std::vector<std::string> > & val);
+
+ void __set_skewedColValueLocationMaps(const std::map<std::vector<std::string> , std::string> & val);
+
+ bool operator == (const SkewedInfo & rhs) const
+ {
+ if (!(skewedColNames == rhs.skewedColNames))
+ return false;
+ if (!(skewedColValues == rhs.skewedColValues))
+ return false;
+ if (!(skewedColValueLocationMaps == rhs.skewedColValueLocationMaps))
+ return false;
+ return true;
+ }
+ bool operator != (const SkewedInfo &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const SkewedInfo & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(SkewedInfo &a, SkewedInfo &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const SkewedInfo& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _StorageDescriptor__isset {
+ _StorageDescriptor__isset() : cols(false), location(false), inputFormat(false), outputFormat(false), compressed(false), numBuckets(false), serdeInfo(false), bucketCols(false), sortCols(false), parameters(false), skewedInfo(false), storedAsSubDirectories(false) {}
+ bool cols :1;
+ bool location :1;
+ bool inputFormat :1;
+ bool outputFormat :1;
+ bool compressed :1;
+ bool numBuckets :1;
+ bool serdeInfo :1;
+ bool bucketCols :1;
+ bool sortCols :1;
+ bool parameters :1;
+ bool skewedInfo :1;
+ bool storedAsSubDirectories :1;
+ } _StorageDescriptor__isset;
+
+ class StorageDescriptor {
+ public:
+
+ StorageDescriptor(const StorageDescriptor&);
+ StorageDescriptor& operator=(const StorageDescriptor&);
+ StorageDescriptor() : location(), inputFormat(), outputFormat(), compressed(0), numBuckets(0), storedAsSubDirectories(0) {
+ }
+
+ virtual ~StorageDescriptor() throw();
+ std::vector<FieldSchema> cols;
+ std::string location;
+ std::string inputFormat;
+ std::string outputFormat;
+ bool compressed;
+ int32_t numBuckets;
+ SerDeInfo serdeInfo;
+ std::vector<std::string> bucketCols;
+ std::vector<Order> sortCols;
+ std::map<std::string, std::string> parameters;
+ SkewedInfo skewedInfo;
+ bool storedAsSubDirectories;
+
+ _StorageDescriptor__isset __isset;
+
+ void __set_cols(const std::vector<FieldSchema> & val);
+
+ void __set_location(const std::string& val);
+
+ void __set_inputFormat(const std::string& val);
+
+ void __set_outputFormat(const std::string& val);
+
+ void __set_compressed(const bool val);
+
+ void __set_numBuckets(const int32_t val);
+
+ void __set_serdeInfo(const SerDeInfo& val);
+
+ void __set_bucketCols(const std::vector<std::string> & val);
+
+ void __set_sortCols(const std::vector<Order> & val);
+
+ void __set_parameters(const std::map<std::string, std::string> & val);
+
+ void __set_skewedInfo(const SkewedInfo& val);
+
+ void __set_storedAsSubDirectories(const bool val);
+
+ bool operator == (const StorageDescriptor & rhs) const
+ {
+ if (!(cols == rhs.cols))
+ return false;
+ if (!(location == rhs.location))
+ return false;
+ if (!(inputFormat == rhs.inputFormat))
+ return false;
+ if (!(outputFormat == rhs.outputFormat))
+ return false;
+ if (!(compressed == rhs.compressed))
+ return false;
+ if (!(numBuckets == rhs.numBuckets))
+ return false;
+ if (!(serdeInfo == rhs.serdeInfo))
+ return false;
+ if (!(bucketCols == rhs.bucketCols))
+ return false;
+ if (!(sortCols == rhs.sortCols))
+ return false;
+ if (!(parameters == rhs.parameters))
+ return false;
+ if (__isset.skewedInfo != rhs.__isset.skewedInfo)
+ return false;
+ else if (__isset.skewedInfo && !(skewedInfo == rhs.skewedInfo))
+ return false;
+ if (__isset.storedAsSubDirectories != rhs.__isset.storedAsSubDirectories)
+ return false;
+ else if (__isset.storedAsSubDirectories && !(storedAsSubDirectories == rhs.storedAsSubDirectories))
+ return false;
+ return true;
+ }
+ bool operator != (const StorageDescriptor &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const StorageDescriptor & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(StorageDescriptor &a, StorageDescriptor &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const StorageDescriptor& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _Table__isset {
+ _Table__isset() : tableName(false), dbName(false), owner(false), createTime(false), lastAccessTime(false), retention(false), sd(false), partitionKeys(false), parameters(false), viewOriginalText(false), viewExpandedText(false), tableType(false), privileges(false), temporary(true), rewriteEnabled(false) {}
+ bool tableName :1;
+ bool dbName :1;
+ bool owner :1;
+ bool createTime :1;
+ bool lastAccessTime :1;
+ bool retention :1;
+ bool sd :1;
+ bool partitionKeys :1;
+ bool parameters :1;
+ bool viewOriginalText :1;
+ bool viewExpandedText :1;
+ bool tableType :1;
+ bool privileges :1;
+ bool temporary :1;
+ bool rewriteEnabled :1;
+ } _Table__isset;
+
+ class Table {
+ public:
+
+ Table(const Table&);
+ Table& operator=(const Table&);
+ Table() : tableName(), dbName(), owner(), createTime(0), lastAccessTime(0), retention(0), viewOriginalText(), viewExpandedText(), tableType(), temporary(false), rewriteEnabled(0) {
+ }
+
+ virtual ~Table() throw();
+ std::string tableName;
+ std::string dbName;
+ std::string owner;
+ int32_t createTime;
+ int32_t lastAccessTime;
+ int32_t retention;
+ StorageDescriptor sd;
+ std::vector<FieldSchema> partitionKeys;
+ std::map<std::string, std::string> parameters;
+ std::string viewOriginalText;
+ std::string viewExpandedText;
+ std::string tableType;
+ PrincipalPrivilegeSet privileges;
+ bool temporary;
+ bool rewriteEnabled;
+
+ _Table__isset __isset;
+
+ void __set_tableName(const std::string& val);
+
+ void __set_dbName(const std::string& val);
+
+ void __set_owner(const std::string& val);
+
+ void __set_createTime(const int32_t val);
+
+ void __set_lastAccessTime(const int32_t val);
+
+ void __set_retention(const int32_t val);
+
+ void __set_sd(const StorageDescriptor& val);
+
+ void __set_partitionKeys(const std::vector<FieldSchema> & val);
+
+ void __set_parameters(const std::map<std::string, std::string> & val);
+
+ void __set_viewOriginalText(const std::string& val);
+
+ void __set_viewExpandedText(const std::string& val);
+
+ void __set_tableType(const std::string& val);
+
+ void __set_privileges(const PrincipalPrivilegeSet& val);
+
+ void __set_temporary(const bool val);
+
+ void __set_rewriteEnabled(const bool val);
+
+ bool operator == (const Table & rhs) const
+ {
+ if (!(tableName == rhs.tableName))
+ return false;
+ if (!(dbName == rhs.dbName))
+ return false;
+ if (!(owner == rhs.owner))
+ return false;
+ if (!(createTime == rhs.createTime))
+ return false;
+ if (!(lastAccessTime == rhs.lastAccessTime))
+ return false;
+ if (!(retention == rhs.retention))
+ return false;
+ if (!(sd == rhs.sd))
+ return false;
+ if (!(partitionKeys == rhs.partitionKeys))
+ return false;
+ if (!(parameters == rhs.parameters))
+ return false;
+ if (!(viewOriginalText == rhs.viewOriginalText))
+ return false;
+ if (!(viewExpandedText == rhs.viewExpandedText))
+ return false;
+ if (!(tableType == rhs.tableType))
+ return false;
+ if (__isset.privileges != rhs.__isset.privileges)
+ return false;
+ else if (__isset.privileges && !(privileges == rhs.privileges))
+ return false;
+ if (__isset.temporary != rhs.__isset.temporary)
+ return false;
+ else if (__isset.temporary && !(temporary == rhs.temporary))
+ return false;
+ if (__isset.rewriteEnabled != rhs.__isset.rewriteEnabled)
+ return false;
+ else if (__isset.rewriteEnabled && !(rewriteEnabled == rhs.rewriteEnabled))
+ return false;
+ return true;
+ }
+ bool operator != (const Table &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const Table & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(Table &a, Table &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const Table& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _Partition__isset {
+ _Partition__isset() : values(false), dbName(false), tableName(false), createTime(false), lastAccessTime(false), sd(false), parameters(false), privileges(false) {}
+ bool values :1;
+ bool dbName :1;
+ bool tableName :1;
+ bool createTime :1;
+ bool lastAccessTime :1;
+ bool sd :1;
+ bool parameters :1;
+ bool privileges :1;
+ } _Partition__isset;
+
+ class Partition {
+ public:
+
+ Partition(const Partition&);
+ Partition& operator=(const Partition&);
+ Partition() : dbName(), tableName(), createTime(0), lastAccessTime(0) {
+ }
+
+ virtual ~Partition() throw();
+ std::vector<std::string> values;
+ std::string dbName;
+ std::string tableName;
+ int32_t createTime;
+ int32_t lastAccessTime;
+ StorageDescriptor sd;
+ std::map<std::string, std::string> parameters;
+ PrincipalPrivilegeSet privileges;
+
+ _Partition__isset __isset;
+
+ void __set_values(const std::vector<std::string> & val);
+
+ void __set_dbName(const std::string& val);
+
+ void __set_tableName(const std::string& val);
+
+ void __set_createTime(const int32_t val);
+
+ void __set_lastAccessTime(const int32_t val);
+
+ void __set_sd(const StorageDescriptor& val);
+
+ void __set_parameters(const std::map<std::string, std::string> & val);
+
+ void __set_privileges(const PrincipalPrivilegeSet& val);
+
+ bool operator == (const Partition & rhs) const
+ {
+ if (!(values == rhs.values))
+ return false;
+ if (!(dbName == rhs.dbName))
+ return false;
+ if (!(tableName == rhs.tableName))
+ return false;
+ if (!(createTime == rhs.createTime))
+ return false;
+ if (!(lastAccessTime == rhs.lastAccessTime))
+ return false;
+ if (!(sd == rhs.sd))
+ return false;
+ if (!(parameters == rhs.parameters))
+ return false;
+ if (__isset.privileges != rhs.__isset.privileges)
+ return false;
+ else if (__isset.privileges && !(privileges == rhs.privileges))
+ return false;
+ return true;
+ }
+ bool operator != (const Partition &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const Partition & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(Partition &a, Partition &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const Partition& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _PartitionWithoutSD__isset {
+ _PartitionWithoutSD__isset() : values(false), createTime(false), lastAccessTime(false), relativePath(false), parameters(false), privileges(false) {}
+ bool values :1;
+ bool createTime :1;
+ bool lastAccessTime :1;
+ bool relativePath :1;
+ bool parameters :1;
+ bool privileges :1;
+ } _PartitionWithoutSD__isset;
+
+ class PartitionWithoutSD {
+ public:
+
+ PartitionWithoutSD(const PartitionWithoutSD&);
+ PartitionWithoutSD& operator=(const PartitionWithoutSD&);
+ PartitionWithoutSD() : createTime(0), lastAccessTime(0), relativePath() {
+ }
+
+ virtual ~PartitionWithoutSD() throw();
+ std::vector<std::string> values;
+ int32_t createTime;
+ int32_t lastAccessTime;
+ std::string relativePath;
+ std::map<std::string, std::string> parameters;
+ PrincipalPrivilegeSet privileges;
+
+ _PartitionWithoutSD__isset __isset;
+
+ void __set_values(const std::vector<std::string> & val);
+
+ void __set_createTime(const int32_t val);
+
+ void __set_lastAccessTime(const int32_t val);
+
+ void __set_relativePath(const std::string& val);
+
+ void __set_parameters(const std::map<std::string, std::string> & val);
+
+ void __set_privileges(const PrincipalPrivilegeSet& val);
+
+ bool operator == (const PartitionWithoutSD & rhs) const
+ {
+ if (!(values == rhs.values))
+ return false;
+ if (!(createTime == rhs.createTime))
+ return false;
+ if (!(lastAccessTime == rhs.lastAccessTime))
+ return false;
+ if (!(relativePath == rhs.relativePath))
+ return false;
+ if (!(parameters == rhs.parameters))
+ return false;
+ if (__isset.privileges != rhs.__isset.privileges)
+ return false;
+ else if (__isset.privileges && !(privileges == rhs.privileges))
+ return false;
+ return true;
+ }
+ bool operator != (const PartitionWithoutSD &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const PartitionWithoutSD & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(PartitionWithoutSD &a, PartitionWithoutSD &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const PartitionWithoutSD& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _PartitionSpecWithSharedSD__isset {
+ _PartitionSpecWithSharedSD__isset() : partitions(false), sd(false) {}
+ bool partitions :1;
+ bool sd :1;
+ } _PartitionSpecWithSharedSD__isset;
+
+ class PartitionSpecWithSharedSD {
+ public:
+
+ PartitionSpecWithSharedSD(const PartitionSpecWithSharedSD&);
+ PartitionSpecWithSharedSD& operator=(const PartitionSpecWithSharedSD&);
+ PartitionSpecWithSharedSD() {
+ }
+
+ virtual ~PartitionSpecWithSharedSD() throw();
+ std::vector<PartitionWithoutSD> partitions;
+ StorageDescriptor sd;
+
+ _PartitionSpecWithSharedSD__isset __isset;
+
+ void __set_partitions(const std::vector<PartitionWithoutSD> & val);
+
+ void __set_sd(const StorageDescriptor& val);
+
+ bool operator == (const PartitionSpecWithSharedSD & rhs) const
+ {
+ if (!(partitions == rhs.partitions))
+ return false;
+ if (!(sd == rhs.sd))
+ return false;
+ return true;
+ }
+ bool operator != (const PartitionSpecWithSharedSD &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const PartitionSpecWithSharedSD & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(PartitionSpecWithSharedSD &a, PartitionSpecWithSharedSD &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const PartitionSpecWithSharedSD& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _PartitionListComposingSpec__isset {
+ _PartitionListComposingSpec__isset() : partitions(false) {}
+ bool partitions :1;
+ } _PartitionListComposingSpec__isset;
+
+ class PartitionListComposingSpec {
+ public:
+
+ PartitionListComposingSpec(const PartitionListComposingSpec&);
+ PartitionListComposingSpec& operator=(const PartitionListComposingSpec&);
+ PartitionListComposingSpec() {
+ }
+
+ virtual ~PartitionListComposingSpec() throw();
+ std::vector<Partition> partitions;
+
+ _PartitionListComposingSpec__isset __isset;
+
+ void __set_partitions(const std::vector<Partition> & val);
+
+ bool operator == (const PartitionListComposingSpec & rhs) const
+ {
+ if (!(partitions == rhs.partitions))
+ return false;
+ return true;
+ }
+ bool operator != (const PartitionListComposingSpec &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const PartitionListComposingSpec & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(PartitionListComposingSpec &a, PartitionListComposingSpec &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const PartitionListComposingSpec& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _PartitionSpec__isset {
+ _PartitionSpec__isset() : dbName(false), tableName(false), rootPath(false), sharedSDPartitionSpec(false), partitionList(false) {}
+ bool dbName :1;
+ bool tableName :1;
+ bool rootPath :1;
+ bool sharedSDPartitionSpec :1;
+ bool partitionList :1;
+ } _PartitionSpec__isset;
+
+ class PartitionSpec {
+ public:
+
+ PartitionSpec(const PartitionSpec&);
+ PartitionSpec& operator=(const PartitionSpec&);
+ PartitionSpec() : dbName(), tableName(), rootPath() {
+ }
+
+ virtual ~PartitionSpec() throw();
+ std::string dbName;
+ std::string tableName;
+ std::string rootPath;
+ PartitionSpecWithSharedSD sharedSDPartitionSpec;
+ PartitionListComposingSpec partitionList;
+
+ _PartitionSpec__isset __isset;
+
+ void __set_dbName(const std::string& val);
+
+ void __set_tableName(const std::string& val);
+
+ void __set_rootPath(const std::string& val);
+
+ void __set_sharedSDPartitionSpec(const PartitionSpecWithSharedSD& val);
+
+ void __set_partitionList(const PartitionListComposingSpec& val);
+
+ bool operator == (const PartitionSpec & rhs) const
+ {
+ if (!(dbName == rhs.dbName))
+ return false;
+ if (!(tableName == rhs.tableName))
+ return false;
+ if (!(rootPath == rhs.rootPath))
+ return false;
+ if (__isset.sharedSDPartitionSpec != rhs.__isset.sharedSDPartitionSpec)
+ return false;
+ else if (__isset.sharedSDPartitionSpec && !(sharedSDPartitionSpec == rhs.sharedSDPartitionSpec))
+ return false;
+ if (__isset.partitionList != rhs.__isset.partitionList)
+ return false;
+ else if (__isset.partitionList && !(partitionList == rhs.partitionList))
+ return false;
+ return true;
+ }
+ bool operator != (const PartitionSpec &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const PartitionSpec & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(PartitionSpec &a, PartitionSpec &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const PartitionSpec& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _Index__isset {
+ _Index__isset() : indexName(false), indexHandlerClass(false), dbName(false), origTableName(false), createTime(false), lastAccessTime(false), indexTableName(false), sd(false), parameters(false), deferredRebuild(false) {}
+ bool indexName :1;
+ bool indexHandlerClass :1;
+ bool dbName :1;
+ bool origTableName :1;
+ bool createTime :1;
+ bool lastAccessTime :1;
+ bool indexTableName :1;
+ bool sd :1;
+ bool parameters :1;
+ bool deferredRebuild :1;
+ } _Index__isset;
+
+ class Index {
+ public:
+
+ Index(const Index&);
+ Index& operator=(const Index&);
+ Index() : indexName(), indexHandlerClass(), dbName(), origTableName(), createTime(0), lastAccessTime(0), indexTableName(), deferredRebuild(0) {
+ }
+
+ virtual ~Index() throw();
+ std::string indexName;
+ std::string indexHandlerClass;
+ std::string dbName;
+ std::string origTableName;
+ int32_t createTime;
+ int32_t lastAccessTime;
+ std::string indexTableName;
+ StorageDescriptor sd;
+ std::map<std::string, std::string> parameters;
+ bool deferredRebuild;
+
+ _Index__isset __isset;
+
+ void __set_indexName(const std::string& val);
+
+ void __set_indexHandlerClass(const std::string& val);
+
+ void __set_dbName(const std::string& val);
+
+ void __set_origTableName(const std::string& val);
+
+ void __set_createTime(const int32_t val);
+
+ void __set_lastAccessTime(const int32_t val);
+
+ void __set_indexTableName(const std::string& val);
+
+ void __set_sd(const StorageDescriptor& val);
+
+ void __set_parameters(const std::map<std::string, std::string> & val);
+
+ void __set_deferredRebuild(const bool val);
+
+ bool operator == (const Index & rhs) const
+ {
+ if (!(indexName == rhs.indexName))
+ return false;
+ if (!(indexHandlerClass == rhs.indexHandlerClass))
+ return false;
+ if (!(dbName == rhs.dbName))
+ return false;
+ if (!(origTableName == rhs.origTableName))
+ return false;
+ if (!(createTime == rhs.createTime))
+ return false;
+ if (!(lastAccessTime == rhs.lastAccessTime))
+ return false;
+ if (!(indexTableName == rhs.indexTableName))
+ return false;
+ if (!(sd == rhs.sd))
+ return false;
+ if (!(parameters == rhs.parameters))
+ return false;
+ if (!(deferredRebuild == rhs.deferredRebuild))
+ return false;
+ return true;
+ }
+ bool operator != (const Index &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const Index & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(Index &a, Index &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const Index& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _BooleanColumnStatsData__isset {
+ _BooleanColumnStatsData__isset() : bitVectors(false) {}
+ bool bitVectors :1;
+ } _BooleanColumnStatsData__isset;
+
+ class BooleanColumnStatsData {
+ public:
+
+ BooleanColumnStatsData(const BooleanColumnStatsData&);
+ BooleanColumnStatsData& operator=(const BooleanColumnStatsData&);
+ BooleanColumnStatsData() : numTrues(0), numFalses(0), numNulls(0), bitVectors() {
+ }
+
+ virtual ~BooleanColumnStatsData() throw();
+ int64_t numTrues;
+ int64_t numFalses;
+ int64_t numNulls;
+ std::string bitVectors;
+
+ _BooleanColumnStatsData__isset __isset;
+
+ void __set_numTrues(const int64_t val);
+
+ void __set_numFalses(const int64_t val);
+
+ void __set_numNulls(const int64_t val);
+
+ void __set_bitVectors(const std::string& val);
+
+ bool operator == (const BooleanColumnStatsData & rhs) const
+ {
+ if (!(numTrues == rhs.numTrues))
+ return false;
+ if (!(numFalses == rhs.numFalses))
+ return false;
+ if (!(numNulls == rhs.numNulls))
+ return false;
+ if (__isset.bitVectors != rhs.__isset.bitVectors)
+ return false;
+ else if (__isset.bitVectors && !(bitVectors == rhs.bitVectors))
+ return false;
+ return true;
+ }
+ bool operator != (const BooleanColumnStatsData &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const BooleanColumnStatsData & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(BooleanColumnStatsData &a, BooleanColumnStatsData &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const BooleanColumnStatsData& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _DoubleColumnStatsData__isset {
+ _DoubleColumnStatsData__isset() : lowValue(false), highValue(false), bitVectors(false) {}
+ bool lowValue :1;
+ bool highValue :1;
+ bool bitVectors :1;
+ } _DoubleColumnStatsData__isset;
+
+ class DoubleColumnStatsData {
+ public:
+
+ DoubleColumnStatsData(const DoubleColumnStatsData&);
+ DoubleColumnStatsData& operator=(const DoubleColumnStatsData&);
+ DoubleColumnStatsData() : lowValue(0), highValue(0), numNulls(0), numDVs(0), bitVectors() {
+ }
+
+ virtual ~DoubleColumnStatsData() throw();
+ double lowValue;
+ double highValue;
+ int64_t numNulls;
+ int64_t numDVs;
+ std::string bitVectors;
+
+ _DoubleColumnStatsData__isset __isset;
+
+ void __set_lowValue(const double val);
+
+ void __set_highValue(const double val);
+
+ void __set_numNulls(const int64_t val);
+
+ void __set_numDVs(const int64_t val);
+
+ void __set_bitVectors(const std::string& val);
+
+ bool operator == (const DoubleColumnStatsData & rhs) const
+ {
+ if (__isset.lowValue != rhs.__isset.lowValue)
+ return false;
+ else if (__isset.lowValue && !(lowValue == rhs.lowValue))
+ return false;
+ if (__isset.highValue != rhs.__isset.highValue)
+ return false;
+ else if (__isset.highValue && !(highValue == rhs.highValue))
+ return false;
+ if (!(numNulls == rhs.numNulls))
+ return false;
+ if (!(numDVs == rhs.numDVs))
+ return false;
+ if (__isset.bitVectors != rhs.__isset.bitVectors)
+ return false;
+ else if (__isset.bitVectors && !(bitVectors == rhs.bitVectors))
+ return false;
+ return true;
+ }
+ bool operator != (const DoubleColumnStatsData &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const DoubleColumnStatsData & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(DoubleColumnStatsData &a, DoubleColumnStatsData &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const DoubleColumnStatsData& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _LongColumnStatsData__isset {
+ _LongColumnStatsData__isset() : lowValue(false), highValue(false), bitVectors(false) {}
+ bool lowValue :1;
+ bool highValue :1;
+ bool bitVectors :1;
+ } _LongColumnStatsData__isset;
+
+ class LongColumnStatsData {
+ public:
+
+ LongColumnStatsData(const LongColumnStatsData&);
+ LongColumnStatsData& operator=(const LongColumnStatsData&);
+ LongColumnStatsData() : lowValue(0), highValue(0), numNulls(0), numDVs(0), bitVectors() {
+ }
+
+ virtual ~LongColumnStatsData() throw();
+ int64_t lowValue;
+ int64_t highValue;
+ int64_t numNulls;
+ int64_t numDVs;
+ std::string bitVectors;
+
+ _LongColumnStatsData__isset __isset;
+
+ void __set_lowValue(const int64_t val);
+
+ void __set_highValue(const int64_t val);
+
+ void __set_numNulls(const int64_t val);
+
+ void __set_numDVs(const int64_t val);
+
+ void __set_bitVectors(const std::string& val);
+
+ bool operator == (const LongColumnStatsData & rhs) const
+ {
+ if (__isset.lowValue != rhs.__isset.lowValue)
+ return false;
+ else if (__isset.lowValue && !(lowValue == rhs.lowValue))
+ return false;
+ if (__isset.highValue != rhs.__isset.highValue)
+ return false;
+ else if (__isset.highValue && !(highValue == rhs.highValue))
+ return false;
+ if (!(numNulls == rhs.numNulls))
+ return false;
+ if (!(numDVs == rhs.numDVs))
+ return false;
+ if (__isset.bitVectors != rhs.__isset.bitVectors)
+ return false;
+ else if (__isset.bitVectors && !(bitVectors == rhs.bitVectors))
+ return false;
+ return true;
+ }
+ bool operator != (const LongColumnStatsData &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const LongColumnStatsData & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(LongColumnStatsData &a, LongColumnStatsData &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const LongColumnStatsData& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _StringColumnStatsData__isset {
+ _StringColumnStatsData__isset() : bitVectors(false) {}
+ bool bitVectors :1;
+ } _StringColumnStatsData__isset;
+
+ class StringColumnStatsData {
+ public:
+
+ StringColumnStatsData(const StringColumnStatsData&);
+ StringColumnStatsData& operator=(const StringColumnStatsData&);
+ StringColumnStatsData() : maxColLen(0), avgColLen(0), numNulls(0), numDVs(0), bitVectors() {
+ }
+
+ virtual ~StringColumnStatsData() throw();
+ int64_t maxColLen;
+ double avgColLen;
+ int64_t numNulls;
+ int64_t numDVs;
+ std::string bitVectors;
+
+ _StringColumnStatsData__isset __isset;
+
+ void __set_maxColLen(const int64_t val);
+
+ void __set_avgColLen(const double val);
+
+ void __set_numNulls(const int64_t val);
+
+ void __set_numDVs(const int64_t val);
+
+ void __set_bitVectors(const std::string& val);
+
+ bool operator == (const StringColumnStatsData & rhs) const
+ {
+ if (!(maxColLen == rhs.maxColLen))
+ return false;
+ if (!(avgColLen == rhs.avgColLen))
+ return false;
+ if (!(numNulls == rhs.numNulls))
+ return false;
+ if (!(numDVs == rhs.numDVs))
+ return false;
+ if (__isset.bitVectors != rhs.__isset.bitVectors)
+ return false;
+ else if (__isset.bitVectors && !(bitVectors == rhs.bitVectors))
+ return false;
+ return true;
+ }
+ bool operator != (const StringColumnStatsData &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const StringColumnStatsData & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(StringColumnStatsData &a, StringColumnStatsData &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const StringColumnStatsData& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+ typedef struct _BinaryColumnStatsData__isset {
+ _BinaryColumnStatsData__isset() : bitVectors(false) {}
+ bool bitVectors :1;
+ } _BinaryColumnStatsData__isset;
+
+ class BinaryColumnStatsData {
+ public:
+
+ BinaryColumnStatsData(const BinaryColumnStatsData&);
+ BinaryColumnStatsData& operator=(const BinaryColumnStatsData&);
+ BinaryColumnStatsData() : maxColLen(0), avgColLen(0), numNulls(0), bitVectors() {
+ }
+
+ virtual ~BinaryColumnStatsData() throw();
+ int64_t maxColLen;
+ double avgColLen;
+ int64_t numNulls;
+ std::string bitVectors;
+
+ _BinaryColumnStatsData__isset __isset;
+
+ void __set_maxColLen(const int64_t val);
+
+ void __set_avgColLen(const double val);
+
+ void __set_numNulls(const int64_t val);
+
+ void __set_bitVectors(const std::string& val);
+
+ bool operator == (const BinaryColumnStatsData & rhs) const
+ {
+ if (!(maxColLen == rhs.maxColLen))
+ return false;
+ if (!(avgColLen == rhs.avgColLen))
+ return false;
+ if (!(numNulls == rhs.numNulls))
+ return false;
+ if (__isset.bitVectors != rhs.__isset.bitVectors)
+ return false;
+ else if (__isset.bitVectors && !(bitVectors == rhs.bitVectors))
+ return false;
+ return true;
+ }
+ bool operator != (const BinaryColumnStatsData &rhs) const {
+ return !(*this == rhs);
+ }
+
+ bool operator < (const BinaryColumnStatsData & ) const;
+
+ uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+ uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+ virtual void printTo(std::ostream& out) const;
+ };
+
+ void swap(BinaryColumnStatsData &a, BinaryColumnStatsData &b);
+
+ inline std::ostream& operator<<(std::ostream& out, const BinaryColumnStatsData& obj)
+ {
+ obj.printTo(out);
+ return out;
+ }
+
+
+ class Decimal {
+ public:
+
+ Decimal(const Decimal&);
+ Decimal& operator=(const Decimal&);
+ Decimal() : unscaled(), scale(0) {
+ }
+
+ virtual ~Decimal() throw();
+ std::string unscaled;
+ int16_t scale;
+
+ void __set_unscaled(const std::string& val);
+
+ void __set_scale(const int16_t val);
+
+ bool operator == (const Decimal & rhs) const
+ {
+ if (!(unscaled == rhs.unscaled))
+ return false;
+ if (!(scale =
<TRUNCATED>
[42/50] [abbrv] hive git commit: HIVE-17674 : grep TODO
HIVE-15212.17.patch |wc - l = 49 (Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-17674 : grep TODO HIVE-15212.17.patch |wc - l = 49 (Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/64015972
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/64015972
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/64015972
Branch: refs/heads/master
Commit: 640159726f4406e752e9555b0b9a54452d8e9157
Parents: 77f3f28
Author: sergey <se...@apache.org>
Authored: Tue Oct 3 18:59:41 2017 -0700
Committer: sergey <se...@apache.org>
Committed: Tue Oct 3 18:59:41 2017 -0700
----------------------------------------------------------------------
.../hcatalog/mapreduce/HCatOutputFormat.java | 3 +-
.../hadoop/hive/metastore/HiveMetaStore.java | 4 +-
.../hadoop/hive/metastore/MetaStoreUtils.java | 58 ++-----------------
.../TransactionalValidationListener.java | 4 +-
.../apache/hadoop/hive/ql/exec/CopyTask.java | 2 +-
.../org/apache/hadoop/hive/ql/exec/DDLTask.java | 24 ++++----
.../hadoop/hive/ql/exec/FetchOperator.java | 4 +-
.../hadoop/hive/ql/exec/FileSinkOperator.java | 2 +-
.../hive/ql/exec/HashTableSinkOperator.java | 3 +-
.../apache/hadoop/hive/ql/exec/MoveTask.java | 3 +-
.../apache/hadoop/hive/ql/exec/Utilities.java | 3 -
.../org/apache/hadoop/hive/ql/io/AcidUtils.java | 59 ++++++++++++++++++--
.../hive/ql/io/CombineHiveInputFormat.java | 2 +-
.../hadoop/hive/ql/io/HiveInputFormat.java | 11 ++--
.../apache/hadoop/hive/ql/metadata/Hive.java | 20 +++----
.../formatting/JsonMetaDataFormatter.java | 2 +-
.../formatting/TextMetaDataFormatter.java | 3 +-
.../ql/optimizer/AbstractBucketJoinProc.java | 3 +-
.../BucketingSortingReduceSinkOptimizer.java | 4 +-
.../hive/ql/optimizer/GenMapRedUtils.java | 11 +---
.../hadoop/hive/ql/optimizer/SamplePruner.java | 5 +-
.../optimizer/physical/SamplingOptimizer.java | 3 +-
.../hive/ql/optimizer/physical/Vectorizer.java | 2 +-
.../hive/ql/parse/DDLSemanticAnalyzer.java | 4 +-
.../hive/ql/parse/ImportSemanticAnalyzer.java | 25 +++++----
.../hive/ql/parse/LoadSemanticAnalyzer.java | 4 +-
.../hadoop/hive/ql/parse/SemanticAnalyzer.java | 18 +++---
.../hadoop/hive/ql/plan/FileSinkDesc.java | 4 +-
.../hadoop/hive/ql/plan/LoadTableDesc.java | 4 +-
.../apache/hadoop/hive/ql/plan/MoveWork.java | 8 ---
.../hive/ql/txn/compactor/CompactorMR.java | 2 +-
.../hadoop/hive/ql/txn/compactor/Initiator.java | 2 +-
32 files changed, 147 insertions(+), 159 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/hcatalog/core/src/main/java/org/apache/hive/hcatalog/mapreduce/HCatOutputFormat.java
----------------------------------------------------------------------
diff --git a/hcatalog/core/src/main/java/org/apache/hive/hcatalog/mapreduce/HCatOutputFormat.java b/hcatalog/core/src/main/java/org/apache/hive/hcatalog/mapreduce/HCatOutputFormat.java
index bbd594a..2654212 100644
--- a/hcatalog/core/src/main/java/org/apache/hive/hcatalog/mapreduce/HCatOutputFormat.java
+++ b/hcatalog/core/src/main/java/org/apache/hive/hcatalog/mapreduce/HCatOutputFormat.java
@@ -33,6 +33,7 @@ import org.apache.hadoop.hive.common.classification.InterfaceStability;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.metastore.IMetaStoreClient;
import org.apache.hadoop.hive.metastore.MetaStoreUtils;
+import org.apache.hadoop.hive.ql.io.AcidUtils;
import org.apache.hadoop.hive.ql.metadata.HiveStorageHandler;
import org.apache.hadoop.hive.metastore.api.FieldSchema;
import org.apache.hadoop.hive.metastore.api.Index;
@@ -114,7 +115,7 @@ public class HCatOutputFormat extends HCatBaseOutputFormat {
throw new HCatException(ErrorType.ERROR_NOT_SUPPORTED, "Store into a partition with sorted column definition from Pig/Mapreduce is not supported");
}
- if (MetaStoreUtils.isInsertOnlyTable(table.getParameters())) {
+ if (AcidUtils.isInsertOnlyTable(table.getParameters())) {
throw new HCatException(ErrorType.ERROR_NOT_SUPPORTED, "Store into an insert-only ACID table from Pig/Mapreduce is not supported");
}
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
----------------------------------------------------------------------
diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
index 375b34a..497b5af 100644
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
@@ -2378,7 +2378,7 @@ public class HiveMetaStore extends ThriftHiveMetastore {
Exception ex = null;
try {
t = get_table_core(dbname, name);
- if (MetaStoreUtils.isInsertOnlyTable(t.getParameters())) {
+ if (MetaStoreUtils.isInsertOnlyTableParam(t.getParameters())) {
assertClientHasCapability(capabilities, ClientCapability.INSERT_ONLY_TABLES,
"insert-only tables", "get_table_req");
}
@@ -2510,7 +2510,7 @@ public class HiveMetaStore extends ThriftHiveMetastore {
startIndex = endIndex;
}
for (Table t : tables) {
- if (MetaStoreUtils.isInsertOnlyTable(t.getParameters())) {
+ if (MetaStoreUtils.isInsertOnlyTableParam(t.getParameters())) {
assertClientHasCapability(capabilities, ClientCapability.INSERT_ONLY_TABLES,
"insert-only tables", "get_table_req");
}
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
----------------------------------------------------------------------
diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
index 235d042..96c8871 100644
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
@@ -1821,58 +1821,6 @@ public class MetaStoreUtils {
return cols;
}
- // TODO The following two utility methods can be moved to AcidUtils once no class in metastore is relying on them,
- // right now ObjectStore.getAllMmTablesForCleanup is calling these method
- /**
- * Checks if a table is an ACID table that only supports INSERT, but not UPDATE/DELETE
- * @param params table properties
- * @return true if table is an INSERT_ONLY table, false otherwise
- */
- public static boolean isInsertOnlyTable(Map<String, String> params) {
- return isInsertOnlyTable(params, false);
- }
-
- // TODO: CTAS for MM may currently be broken. It used to work. See the old code and why isCtas isn't used?
- public static boolean isInsertOnlyTable(Map<String, String> params, boolean isCtas) {
- String transactionalProp = params.get(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES);
- return (transactionalProp != null && "insert_only".equalsIgnoreCase(transactionalProp));
- }
-
- public static boolean isInsertOnlyTable(Properties params) {
- String transactionalProp = params.getProperty(
- hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES);
- return (transactionalProp != null && "insert_only".equalsIgnoreCase(transactionalProp));
- }
-
- /** The method for altering table props; may set the table to MM, non-MM, or not affect MM. */
- public static Boolean isToInsertOnlyTable(Map<String, String> props) {
- // TODO: Setting these separately is a very hairy issue in certain combinations, since we
- // cannot decide what type of table this becomes without taking both into account, and
- // in many cases the conversion might be illegal.
- // The only thing we allow is tx = true w/o tx-props, for backward compat.
- String transactional = props.get(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL);
- String transactionalProp = props.get(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES);
- if (transactional == null && transactionalProp == null) return null; // Not affected.
- boolean isSetToTxn = "true".equalsIgnoreCase(transactional);
- if (transactionalProp == null) {
- if (isSetToTxn) return false; // Assume the full ACID table.
- throw new RuntimeException("Cannot change '" + hive_metastoreConstants.TABLE_IS_TRANSACTIONAL
- + "' without '" + hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES + "'");
- }
- if (!"insert_only".equalsIgnoreCase(transactionalProp)) return false; // Not MM.
- if (!isSetToTxn) {
- throw new RuntimeException("Cannot set '"
- + hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES + "' to 'insert_only' without "
- + "setting '" + hive_metastoreConstants.TABLE_IS_TRANSACTIONAL + "' to 'true'");
- }
- return true;
- }
-
- public static boolean isRemovedInsertOnlyTable(Set<String> removedSet) {
- boolean hasTxn = removedSet.contains(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL),
- hasProps = removedSet.contains(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES);
- return hasTxn || hasProps;
- }
// given a list of partStats, this function will give you an aggr stats
public static List<ColumnStatisticsObj> aggrPartitionStats(List<ColumnStatistics> partStats,
@@ -2056,4 +2004,10 @@ public class MetaStoreUtils {
ipAddress = (ipAddress == null) ? StringUtils.EMPTY : ipAddress;
return machineList.includes(ipAddress);
}
+
+ /** Duplicates AcidUtils; used in a couple places in metastore. */
+ public static boolean isInsertOnlyTableParam(Map<String, String> params) {
+ String transactionalProp = params.get(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES);
+ return (transactionalProp != null && "insert_only".equalsIgnoreCase(transactionalProp));
+ }
}
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/metastore/src/java/org/apache/hadoop/hive/metastore/TransactionalValidationListener.java
----------------------------------------------------------------------
diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/TransactionalValidationListener.java b/metastore/src/java/org/apache/hadoop/hive/metastore/TransactionalValidationListener.java
index dabede4..29d8da8 100644
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/TransactionalValidationListener.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/TransactionalValidationListener.java
@@ -139,7 +139,7 @@ public final class TransactionalValidationListener extends MetaStorePreEventList
hasValidTransactionalValue = true;
}
- if (!hasValidTransactionalValue && !MetaStoreUtils.isInsertOnlyTable(oldTable.getParameters())) {
+ if (!hasValidTransactionalValue && !MetaStoreUtils.isInsertOnlyTableParam(oldTable.getParameters())) {
// if here, there is attempt to set transactional to something other than 'true'
// and NOT the same value it was before
throw new MetaException("TBLPROPERTIES with 'transactional'='true' cannot be unset");
@@ -158,7 +158,7 @@ public final class TransactionalValidationListener extends MetaStorePreEventList
// null and an attempt is made to set it. This behaviour can be changed in the future.
if ((oldTransactionalPropertiesValue == null
|| !oldTransactionalPropertiesValue.equalsIgnoreCase(transactionalPropertiesValue))
- && !MetaStoreUtils.isInsertOnlyTable(oldTable.getParameters())) {
+ && !MetaStoreUtils.isInsertOnlyTableParam(oldTable.getParameters())) {
throw new MetaException("TBLPROPERTIES with 'transactional_properties' cannot be "
+ "altered after the table is created");
}
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/exec/CopyTask.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/CopyTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/CopyTask.java
index 7299ed1..664a11d 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/CopyTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/CopyTask.java
@@ -108,7 +108,7 @@ public class CopyTask extends Task<CopyWork> implements Serializable {
FileSystem fs, Path path, boolean isSourceMm) throws IOException {
if (!fs.exists(path)) return null;
if (!isSourceMm) return matchFilesOneDir(fs, path, null);
- // TODO: this doesn't handle list bucketing properly. Does the original exim do that?
+ // Note: this doesn't handle list bucketing properly; neither does the original code.
FileStatus[] mmDirs = fs.listStatus(path, new JavaUtils.AnyIdDirFilter());
if (mmDirs == null || mmDirs.length == 0) return null;
List<FileStatus> allFiles = new ArrayList<FileStatus>();
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
index 4cf0f89..205ca77 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
@@ -1911,7 +1911,7 @@ public class DDLTask extends Task<DDLWork> implements Serializable {
private int compact(Hive db, AlterTableSimpleDesc desc) throws HiveException {
Table tbl = db.getTable(desc.getTableName());
- if (!AcidUtils.isFullAcidTable(tbl) && !MetaStoreUtils.isInsertOnlyTable(tbl.getParameters())) {
+ if (!AcidUtils.isFullAcidTable(tbl) && !AcidUtils.isInsertOnlyTable(tbl.getParameters())) {
throw new HiveException(ErrorMsg.NONACID_COMPACTION_NOT_SUPPORTED, tbl.getDbName(),
tbl.getTableName());
}
@@ -4098,8 +4098,8 @@ public class DDLTask extends Task<DDLWork> implements Serializable {
List<Task<?>> result = null;
if (part == null) {
Set<String> removedSet = alterTbl.getProps().keySet();
- boolean isFromMmTable = MetaStoreUtils.isInsertOnlyTable(tbl.getParameters()),
- isRemoved = MetaStoreUtils.isRemovedInsertOnlyTable(removedSet);
+ boolean isFromMmTable = AcidUtils.isInsertOnlyTable(tbl.getParameters()),
+ isRemoved = AcidUtils.isRemovedInsertOnlyTable(removedSet);
if (isFromMmTable && isRemoved) {
result = generateRemoveMmTasks(tbl);
}
@@ -4124,11 +4124,7 @@ public class DDLTask extends Task<DDLWork> implements Serializable {
// operation commits. Deleting uncommitted things is safe, but moving stuff before we convert
// could cause data loss.
List<Path> allMmDirs = new ArrayList<>();
- if (tbl.isStoredAsSubDirectories()) {
- // TODO: support this? we only bail because it's a PITA and hardly anyone seems to care.
- throw new HiveException("Converting list bucketed tables stored as subdirectories "
- + " to and from MM is not supported");
- }
+ checkMmLb(tbl);
List<String> bucketCols = tbl.getBucketCols();
if (bucketCols != null && !bucketCols.isEmpty()
&& HiveConf.getBoolVar(conf, ConfVars.HIVE_STRICT_CHECKS_BUCKETING)) {
@@ -4175,16 +4171,16 @@ public class DDLTask extends Task<DDLWork> implements Serializable {
private void checkMmLb(Table tbl) throws HiveException {
if (!tbl.isStoredAsSubDirectories()) return;
- // TODO: support this?
+ // TODO [MM gap?]: by design; no-one seems to use LB tables. They will work, but not convert.
+ // It's possible to work around this by re-creating and re-inserting the table.
throw new HiveException("Converting list bucketed tables stored as subdirectories "
- + " to and from MM is not supported");
+ + " to and from MM is not supported. Please re-create a table in the desired format.");
}
private void checkMmLb(Partition part) throws HiveException {
if (!part.isStoredAsSubDirectories()) return;
- // TODO: support this?
throw new HiveException("Converting list bucketed tables stored as subdirectories "
- + " to and from MM is not supported. Please create a table in the desired format.");
+ + " to and from MM is not supported. Please re-create a table in the desired format.");
}
private void handleRemoveMm(
@@ -4289,8 +4285,8 @@ public class DDLTask extends Task<DDLWork> implements Serializable {
if (part != null) {
part.getTPartition().getParameters().putAll(alterTbl.getProps());
} else {
- boolean isFromMmTable = MetaStoreUtils.isInsertOnlyTable(tbl.getParameters());
- Boolean isToMmTable = MetaStoreUtils.isToInsertOnlyTable(alterTbl.getProps());
+ boolean isFromMmTable = AcidUtils.isInsertOnlyTable(tbl.getParameters());
+ Boolean isToMmTable = AcidUtils.isToInsertOnlyTable(alterTbl.getProps());
if (isToMmTable != null) {
if (!isFromMmTable && isToMmTable) {
result = generateAddMmTasks(tbl);
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java
index d09b12b..b85a243 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java
@@ -275,7 +275,7 @@ public class FetchOperator implements Serializable {
FileSystem fs = currPath.getFileSystem(job);
if (fs.exists(currPath)) {
if (extractValidTxnList() != null &&
- MetaStoreUtils.isInsertOnlyTable(currDesc.getTableDesc().getProperties())) {
+ AcidUtils.isInsertOnlyTable(currDesc.getTableDesc().getProperties())) {
return true;
}
for (FileStatus fStat : listStatusUnderPath(fs, currPath)) {
@@ -408,7 +408,7 @@ public class FetchOperator implements Serializable {
return StringUtils.escapeString(currPath.toString()); // No need to process here.
}
ValidTxnList validTxnList;
- if (MetaStoreUtils.isInsertOnlyTable(currDesc.getTableDesc().getProperties())) {
+ if (AcidUtils.isInsertOnlyTable(currDesc.getTableDesc().getProperties())) {
validTxnList = extractValidTxnList();
} else {
validTxnList = null; // non-MM case
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java
index 280d3cf..93b967f 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java
@@ -1303,7 +1303,7 @@ public class FileSinkOperator extends TerminalOperator<FileSinkDesc> implements
} else {
int dpLevels = dpCtx == null ? 0 : dpCtx.getNumDPCols(),
lbLevels = lbCtx == null ? 0 : lbCtx.calculateListBucketingLevel();
- // TODO: why is it stored in both?
+ // TODO: why is it stored in both table and dpCtx?
int numBuckets = (conf.getTable() != null) ? conf.getTable().getNumBuckets()
: (dpCtx != null ? dpCtx.getNumBuckets() : 0);
MissingBucketsContext mbc = new MissingBucketsContext(
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableSinkOperator.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableSinkOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableSinkOperator.java
index 0b8045e..9690acb 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableSinkOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableSinkOperator.java
@@ -301,7 +301,8 @@ public class HashTableSinkOperator extends TerminalOperator<HashTableSinkDesc> i
String bigBucketFileName = getExecContext().getCurrentBigBucketFile();
String fileName = getExecContext().getLocalWork().getBucketFileName(bigBucketFileName);
// get the tmp URI path; it will be a hdfs path if not local mode
- // TODO: this doesn't work... the path for writer and reader mismatch
+ // TODO [MM gap?]: this doesn't work, however this is MR only.
+ // The path for writer and reader mismatch:
// Dump the side-table for tag ... -local-10004/HashTable-Stage-1/MapJoin-a-00-(ds%3D2008-04-08)mm_2.hashtable
// Load back 1 hashtable file -local-10004/HashTable-Stage-1/MapJoin-a-00-srcsortbucket3outof4.txt.hashtable
// Hive3 probably won't support MR so do we really care?
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
index e644845..7cc5c30 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
@@ -266,7 +266,6 @@ public class MoveTask extends Task<MoveWork> implements Serializable {
@Override
public int execute(DriverContext driverContext) {
- if (work.isNoop()) return 0;
if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
Utilities.FILE_OP_LOGGER.trace("Executing MoveWork " + System.identityHashCode(work)
+ " with " + work.getLoadFileWork() + "; " + work.getLoadTableWork() + "; "
@@ -713,7 +712,7 @@ public class MoveTask extends Task<MoveWork> implements Serializable {
boolean updateBucketCols = false;
if (bucketCols != null) {
- // TODO: this particular bit will not work for MM tables, as there can be multiple
+ // Note: this particular bit will not work for MM tables, as there can be multiple
// directories for different MM IDs. We could put the path here that would account
// for the current MM ID being written, but it will not guarantee that other MM IDs
// have the correct buckets. The existing code discards the inferred data when the
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
index 99adf7f..c702a24 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
@@ -1642,7 +1642,6 @@ public final class Utilities {
addFilesToPathSet(taskIDToFile.values(), filesKept);
}
- // TODO: not clear why two if conditions are different. Preserve the existing logic for now.
addBucketFileToResults(taskIDToFile, numBuckets, hconf, result);
}
} else {
@@ -1672,7 +1671,6 @@ public final class Utilities {
addFilesToPathSet(taskIDToFile.values(), filesKept);
}
}
- // TODO: not clear why two if conditions are different. Preserve the existing logic for now.
addBucketFileToResults2(taskIDToFile, numBuckets, hconf, result);
}
@@ -4179,7 +4177,6 @@ public final class Utilities {
Utilities.FILE_OP_LOGGER.debug("Looking for files in: " + specPath);
JavaUtils.IdPathFilter filter = new JavaUtils.IdPathFilter(txnId, stmtId, true);
if (isMmCtas && !fs.exists(specPath)) {
- // TODO: do we also need to do this when creating an empty partition from select?
Utilities.FILE_OP_LOGGER.info("Creating table directory for CTAS with no output at " + specPath);
FileUtils.mkdir(fs, specPath, hconf);
}
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java b/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java
index a461bb9..4c0b71f 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java
@@ -26,6 +26,7 @@ import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.Set;
import java.util.regex.Pattern;
import org.apache.hadoop.conf.Configuration;
@@ -447,8 +448,6 @@ public class AcidUtils {
case HASH_BASED_MERGE_STRING:
obj.setHashBasedMerge(true);
break;
- case INSERT_ONLY_STRING:
- obj.setInsertOnly(true);
default:
throw new IllegalArgumentException(
"Unexpected value " + option + " for ACID operational properties!");
@@ -1052,7 +1051,7 @@ public class AcidUtils {
String deltaPrefix =
(fn.startsWith(DELTA_PREFIX)) ? DELTA_PREFIX : DELETE_DELTA_PREFIX;
ParsedDelta delta = parseDelta(child, deltaPrefix);
- if (tblproperties != null && MetaStoreUtils.isInsertOnlyTable(tblproperties) &&
+ if (tblproperties != null && AcidUtils.isInsertOnlyTable(tblproperties) &&
ValidTxnList.RangeResponse.ALL == txnList.isTxnRangeAborted(delta.minTransaction, delta.maxTransaction)) {
aborted.add(child);
}
@@ -1210,7 +1209,7 @@ public class AcidUtils {
}
public static boolean isFullAcidTable(Table table) {
- return isAcidTable(table) && !MetaStoreUtils.isInsertOnlyTable(table.getParameters());
+ return isAcidTable(table) && !AcidUtils.isInsertOnlyTable(table.getParameters());
}
/**
@@ -1327,4 +1326,56 @@ public class AcidUtils {
*/
throw new IOException(lengths + " found but is not readable. Consider waiting or orcfiledump --recover");
}
+
+
+ /**
+ * Checks if a table is an ACID table that only supports INSERT, but not UPDATE/DELETE
+ * @param params table properties
+ * @return true if table is an INSERT_ONLY table, false otherwise
+ */
+ public static boolean isInsertOnlyTable(Map<String, String> params) {
+ return isInsertOnlyTable(params, false);
+ }
+
+ // TODO [MM gap]: CTAS may currently be broken. It used to work. See the old code, and why isCtas isn't used?
+ public static boolean isInsertOnlyTable(Map<String, String> params, boolean isCtas) {
+ String transactionalProp = params.get(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES);
+ return (transactionalProp != null && "insert_only".equalsIgnoreCase(transactionalProp));
+ }
+
+ public static boolean isInsertOnlyTable(Properties params) {
+ String transactionalProp = params.getProperty(
+ hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES);
+ return (transactionalProp != null && "insert_only".equalsIgnoreCase(transactionalProp));
+ }
+
+ /** The method for altering table props; may set the table to MM, non-MM, or not affect MM. */
+ public static Boolean isToInsertOnlyTable(Map<String, String> props) {
+ // Note: Setting these separately is a very hairy issue in certain combinations, since we
+ // cannot decide what type of table this becomes without taking both into account, and
+ // in many cases the conversion might be illegal.
+ // The only thing we allow is tx = true w/o tx-props, for backward compat.
+ String transactional = props.get(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL);
+ String transactionalProp = props.get(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES);
+ if (transactional == null && transactionalProp == null) return null; // Not affected.
+ boolean isSetToTxn = "true".equalsIgnoreCase(transactional);
+ if (transactionalProp == null) {
+ if (isSetToTxn) return false; // Assume the full ACID table.
+ throw new RuntimeException("Cannot change '" + hive_metastoreConstants.TABLE_IS_TRANSACTIONAL
+ + "' without '" + hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES + "'");
+ }
+ if (!"insert_only".equalsIgnoreCase(transactionalProp)) return false; // Not MM.
+ if (!isSetToTxn) {
+ throw new RuntimeException("Cannot set '"
+ + hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES + "' to 'insert_only' without "
+ + "setting '" + hive_metastoreConstants.TABLE_IS_TRANSACTIONAL + "' to 'true'");
+ }
+ return true;
+ }
+
+ public static boolean isRemovedInsertOnlyTable(Set<String> removedSet) {
+ boolean hasTxn = removedSet.contains(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL),
+ hasProps = removedSet.contains(hive_metastoreConstants.TABLE_TRANSACTIONAL_PROPERTIES);
+ return hasTxn || hasProps;
+ }
}
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/io/CombineHiveInputFormat.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/CombineHiveInputFormat.java b/ql/src/java/org/apache/hadoop/hive/ql/io/CombineHiveInputFormat.java
index 93de69f..6a188ac 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/io/CombineHiveInputFormat.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/io/CombineHiveInputFormat.java
@@ -118,7 +118,7 @@ public class CombineHiveInputFormat<K extends WritableComparable, V extends Writ
TableDesc tbl = part.getTableDesc();
boolean isMmNonMerge = false;
if (tbl != null) {
- isMmNonMerge = !isMerge && MetaStoreUtils.isInsertOnlyTable(tbl.getProperties());
+ isMmNonMerge = !isMerge && AcidUtils.isInsertOnlyTable(tbl.getProperties());
} else {
// This would be the case for obscure tasks like truncate column (unsupported for MM).
Utilities.FILE_OP_LOGGER.warn("Assuming not insert-only; no table in partition spec " + part);
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java b/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java
index fba5b7e..6a1dc72 100755
--- a/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java
@@ -459,7 +459,7 @@ public class HiveInputFormat<K extends WritableComparable, V extends Writable>
TableDesc table, List<InputSplit> result)
throws IOException {
ValidTxnList validTxnList;
- if (MetaStoreUtils.isInsertOnlyTable(table.getProperties())) {
+ if (AcidUtils.isInsertOnlyTable(table.getProperties())) {
String txnString = conf.get(ValidTxnList.VALID_TXNS_KEY);
validTxnList = txnString == null ? new ValidReadTxnList() : new ValidReadTxnList(txnString);
} else {
@@ -549,7 +549,7 @@ public class HiveInputFormat<K extends WritableComparable, V extends Writable>
} else if (!hadAcidState) {
AcidUtils.Directory dirInfo = AcidUtils.getAcidState(currDir, conf, validTxnList, Ref.from(false), true, null);
hadAcidState = true;
- // TODO: for IOW, we also need to count in base dir, if any
+ // TODO [MM gap]: for IOW, we also need to count in base dir, if any
for (AcidUtils.ParsedDelta delta : dirInfo.getCurrentDirectories()) {
Utilities.FILE_OP_LOGGER.debug("Adding input " + delta.getPath());
finalPaths.add(delta.getPath());
@@ -706,9 +706,10 @@ public class HiveInputFormat<K extends WritableComparable, V extends Writable>
throws IOException {
PartitionDesc partDesc = pathToPartitionInfo.get(dir);
if (partDesc == null) {
- // TODO: HiveFileFormatUtils.getPartitionDescFromPathRecursively for MM tables?
- // So far, the only case when this is called for a MM directory was in error.
- // Keep it like this for now; may need replacement if we find a valid usage like this.
+ // Note: we could call HiveFileFormatUtils.getPartitionDescFromPathRecursively for MM tables.
+ // The recursive call is usually needed for non-MM tables, because the path management
+ // is not strict and the code does whatever. That should not happen for MM tables.
+ // Keep it like this for now; may need replacement if we find a valid use case.
partDesc = pathToPartitionInfo.get(Path.getPathWithoutSchemeAndAuthority(dir));
}
if (partDesc == null) {
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
index 5e52485..7464a29 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
@@ -1676,7 +1676,7 @@ public class Hive {
boolean isSrcLocal, boolean isAcid, boolean hasFollowingStatsTask, Long txnId, int stmtId)
throws HiveException {
Path tblDataLocationPath = tbl.getDataLocation();
- boolean isMmTableWrite = MetaStoreUtils.isInsertOnlyTable(tbl.getParameters());
+ boolean isMmTableWrite = AcidUtils.isInsertOnlyTable(tbl.getParameters());
try {
// Get the partition object if it already exists
Partition oldPart = getPartition(tbl, partSpec, false);
@@ -1722,7 +1722,7 @@ public class Hive {
if (conf.getBoolVar(ConfVars.FIRE_EVENTS_FOR_DML) && !tbl.isTemporary() && (null != oldPart)) {
newFiles = Collections.synchronizedList(new ArrayList<Path>());
}
- // TODO: this assumes both paths are qualified; which they are, currently.
+ // Note: this assumes both paths are qualified; which they are, currently.
if (isMmTableWrite && loadPath.equals(newPartPath)) {
// MM insert query, move itself is a no-op.
if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
@@ -1870,7 +1870,7 @@ public class Hive {
}
PathFilter subdirFilter = null;
- // TODO: just like the move path, we only do one level of recursion.
+ // Note: just like the move path, we only do one level of recursion.
for (FileStatus src : srcs) {
if (src.isDirectory()) {
if (subdirFilter == null) {
@@ -1920,8 +1920,6 @@ public class Hive {
private void walkDirTree(FileStatus fSta, FileSystem fSys,
Map<List<String>, String> skewedColValueLocationMaps, Path newPartPath, SkewedInfo skewedInfo)
throws IOException {
- // TODO: may be broken? no LB bugs for now but if any are found.
-
/* Base Case. It's leaf. */
if (!fSta.isDir()) {
if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
@@ -1958,7 +1956,7 @@ private void constructOneLBLocationMap(FileStatus fSta,
List<String> skewedValue = new ArrayList<String>();
String lbDirName = FileUtils.unescapePathName(lbdPath.toString());
String partDirName = FileUtils.unescapePathName(newPartPath.toString());
- String lbDirSuffix = lbDirName.replace(partDirName, ""); // TODO: wtf?
+ String lbDirSuffix = lbDirName.replace(partDirName, ""); // TODO: should it rather do a prefix?
if (lbDirSuffix.startsWith(Path.SEPARATOR)) {
lbDirSuffix = lbDirSuffix.substring(1);
}
@@ -2105,7 +2103,7 @@ private void constructOneLBLocationMap(FileStatus fSta,
// Get all valid partition paths and existing partitions for them (if any)
final Table tbl = getTable(tableName);
final Set<Path> validPartitions = getValidPartitionsInPath(numDP, numLB, loadPath, txnId, stmtId,
- MetaStoreUtils.isInsertOnlyTable(tbl.getParameters()));
+ AcidUtils.isInsertOnlyTable(tbl.getParameters()));
final int partsToLoad = validPartitions.size();
final AtomicInteger partitionsLoaded = new AtomicInteger(0);
@@ -2238,7 +2236,7 @@ private void constructOneLBLocationMap(FileStatus fSta,
if (conf.getBoolVar(ConfVars.FIRE_EVENTS_FOR_DML) && !tbl.isTemporary()) {
newFiles = Collections.synchronizedList(new ArrayList<Path>());
}
- // TODO: this assumes both paths are qualified; which they are, currently.
+ // Note: this assumes both paths are qualified; which they are, currently.
if (isMmTable && loadPath.equals(tbl.getPath())) {
Utilities.FILE_OP_LOGGER.debug("not moving " + loadPath + " to " + tbl.getPath());
if (replace) {
@@ -3797,7 +3795,7 @@ private void constructOneLBLocationMap(FileStatus fSta,
}
if (oldPath != null) {
- // TODO: we assume lbLevels is 0 here. Same as old code for non-MM.
+ // Note: we assume lbLevels is 0 here. Same as old code for non-MM.
// For MM tables, this can only be a LOAD command. Does LOAD even support LB?
deleteOldPathForReplace(destf, oldPath, conf, purge, deletePathFilter, isMmTable, 0);
}
@@ -3863,8 +3861,8 @@ private void constructOneLBLocationMap(FileStatus fSta,
} else {
// We need to clean up different MM IDs from each LB directory separately.
// Avoid temporary directories in the immediate table/part dir.
- // TODO: we could just find directories with any MM directories inside?
- // the rest doesn't have to be cleaned up.
+ // Note: we could just find directories with any MM directories inside?
+ // the rest doesn't have to be cleaned up. Play it safe.
String mask = "[^._]*";
for (int i = 0; i < lbLevels - 1; ++i) {
mask += Path.SEPARATOR + "*";
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/JsonMetaDataFormatter.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/JsonMetaDataFormatter.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/JsonMetaDataFormatter.java
index ee8c249..d795a19 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/JsonMetaDataFormatter.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/JsonMetaDataFormatter.java
@@ -248,7 +248,7 @@ public class JsonMetaDataFormatter implements MetaDataFormatter {
* @param tblPath not NULL
* @throws IOException
*/
- // Duplicates logic in TextMetaDataFormatter TODO: wtf?!!
+ // Duplicates logic in TextMetaDataFormatter
private void putFileSystemsStats(MapBuilder builder, List<Path> locations,
HiveConf conf, Path tblPath)
throws IOException {
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/TextMetaDataFormatter.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/TextMetaDataFormatter.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/TextMetaDataFormatter.java
index 3c25896..5a18e33 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/TextMetaDataFormatter.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/TextMetaDataFormatter.java
@@ -318,7 +318,8 @@ class TextMetaDataFormatter implements MetaDataFormatter {
public int numOfFiles = 0;
}
- // TODO: why is this in text formatter? grrr
+ // TODO: why is this in text formatter?!!
+ // This computes stats and should be in stats (de-duplicated too).
private void writeFileSystemStats(DataOutputStream outStream,
HiveConf conf,
List<Path> locations,
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/optimizer/AbstractBucketJoinProc.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/AbstractBucketJoinProc.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/AbstractBucketJoinProc.java
index 66ea4e2..c62d98f 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/AbstractBucketJoinProc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/AbstractBucketJoinProc.java
@@ -40,6 +40,7 @@ import org.apache.hadoop.hive.ql.exec.MapJoinOperator;
import org.apache.hadoop.hive.ql.exec.Operator;
import org.apache.hadoop.hive.ql.exec.TableScanOperator;
import org.apache.hadoop.hive.ql.exec.Utilities;
+import org.apache.hadoop.hive.ql.io.AcidUtils;
import org.apache.hadoop.hive.ql.lib.Node;
import org.apache.hadoop.hive.ql.lib.NodeProcessor;
import org.apache.hadoop.hive.ql.lib.NodeProcessorCtx;
@@ -264,7 +265,7 @@ abstract public class AbstractBucketJoinProc implements NodeProcessor {
}
Table tbl = tso.getConf().getTableMetadata();
- if (MetaStoreUtils.isInsertOnlyTable(tbl.getParameters())) {
+ if (AcidUtils.isInsertOnlyTable(tbl.getParameters())) {
Utilities.FILE_OP_LOGGER.debug("No bucketed join on MM table " + tbl.getTableName());
return false;
}
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/optimizer/BucketingSortingReduceSinkOptimizer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/BucketingSortingReduceSinkOptimizer.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/BucketingSortingReduceSinkOptimizer.java
index 85dcdd7..fc1d4f9 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/BucketingSortingReduceSinkOptimizer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/BucketingSortingReduceSinkOptimizer.java
@@ -415,7 +415,7 @@ public class BucketingSortingReduceSinkOptimizer extends Transform {
/*ACID tables have complex directory layout and require merging of delta files
* on read thus we should not try to read bucket files directly*/
return null;
- } else if (MetaStoreUtils.isInsertOnlyTable(tab.getParameters())) {
+ } else if (AcidUtils.isInsertOnlyTable(tab.getParameters())) {
// Do not support MM tables either at this point. We could do it with some extra logic.
return null;
}
@@ -510,7 +510,7 @@ public class BucketingSortingReduceSinkOptimizer extends Transform {
TableScanOperator ts = (TableScanOperator) op;
Table srcTable = ts.getConf().getTableMetadata();
// Not supported for MM tables for now.
- if (MetaStoreUtils.isInsertOnlyTable(destTable.getParameters())) {
+ if (AcidUtils.isInsertOnlyTable(destTable.getParameters())) {
return null;
}
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
index 9ffda7e..0d13a51 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
@@ -1372,12 +1372,6 @@ public final class GenMapRedUtils {
dummyMv = new MoveWork(null, null, null,
new LoadFileDesc(inputDirName, finalName, true, null, null, false), false,
SessionState.get().getLineageState());
- } else {
- // TODO# noop MoveWork to avoid q file changes in HIVE-14990. Remove (w/the flag) after merge.
- dummyMv = new MoveWork(null, null, null,
- new LoadFileDesc(inputDirName, finalName, true, null, null, false), false,
- SessionState.get().getLineageState());
- dummyMv.setNoop(true);
}
// Use the original fsOp path here in case of MM - while the new FSOP merges files inside the
// MM directory, the original MoveTask still commits based on the parent. Note that this path
@@ -1756,7 +1750,7 @@ public final class GenMapRedUtils {
// Create a dummy task if no move is needed.
Serializable moveWork = mvWork != null ? mvWork : new DependencyCollectionWork();
- // TODO: this should never happen for mm tables.
+ // Note: this should never happen for mm tables.
boolean shouldMergeMovePaths = (moveTaskToLink != null && dependencyTask == null
&& shouldMergeMovePaths(conf, condInputPath, condOutputPath, moveTaskToLink.getWork()));
@@ -1840,7 +1834,6 @@ public final class GenMapRedUtils {
// find the move task
for (Task<MoveWork> mvTsk : mvTasks) {
MoveWork mvWork = mvTsk.getWork();
- if (mvWork.isNoop()) continue;
Path srcDir = null;
boolean isLfd = false;
if (mvWork.getLoadFileWork() != null) {
@@ -1878,7 +1871,7 @@ public final class GenMapRedUtils {
MoveTask mvTask = (MoveTask) GenMapRedUtils.findMoveTaskForFsopOutput(
mvTasks, fsOp.getConf().getFinalDirName(), fsOp.getConf().isMmTable());
- // TODO: wtf? wtf?!! why is this in this method?
+ // TODO: wtf?!! why is this in this method? This has nothing to do with anything.
if (mvTask != null && isInsertTable && hconf.getBoolVar(ConfVars.HIVESTATSAUTOGATHER)
&& !fsOp.getConf().isMaterialization()) {
// mark the MapredWork and FileSinkOperator for gathering stats
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SamplePruner.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SamplePruner.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SamplePruner.java
index 9d2e031..b5891ab 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SamplePruner.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SamplePruner.java
@@ -35,6 +35,7 @@ import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hive.metastore.MetaStoreUtils;
import org.apache.hadoop.hive.ql.exec.FilterOperator;
import org.apache.hadoop.hive.ql.exec.TableScanOperator;
+import org.apache.hadoop.hive.ql.io.AcidUtils;
import org.apache.hadoop.hive.ql.lib.DefaultGraphWalker;
import org.apache.hadoop.hive.ql.lib.DefaultRuleDispatcher;
import org.apache.hadoop.hive.ql.lib.Dispatcher;
@@ -191,8 +192,8 @@ public class SamplePruner extends Transform {
String fullScanMsg = "";
// check if input pruning is possible
- // TODO: this relies a lot on having one file per bucket. No support for MM tables for now.
- boolean isMmTable = MetaStoreUtils.isInsertOnlyTable(part.getTable().getParameters());
+ // TODO: this code is buggy - it relies on having one file per bucket; no MM support (by design).
+ boolean isMmTable = AcidUtils.isInsertOnlyTable(part.getTable().getParameters());
if (sampleDescr.getInputPruning() && !isMmTable) {
LOG.trace("numerator = " + num);
LOG.trace("denominator = " + den);
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/SamplingOptimizer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/SamplingOptimizer.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/SamplingOptimizer.java
index 5b89059..b28315a 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/SamplingOptimizer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/SamplingOptimizer.java
@@ -28,6 +28,7 @@ import org.apache.hadoop.hive.ql.exec.ReduceSinkOperator;
import org.apache.hadoop.hive.ql.exec.TableScanOperator;
import org.apache.hadoop.hive.ql.exec.Task;
import org.apache.hadoop.hive.ql.exec.mr.MapRedTask;
+import org.apache.hadoop.hive.ql.io.AcidUtils;
import org.apache.hadoop.hive.ql.metadata.Table;
import org.apache.hadoop.hive.ql.parse.SemanticException;
import org.apache.hadoop.hive.ql.plan.MapWork;
@@ -66,7 +67,7 @@ public class SamplingOptimizer implements PhysicalPlanResolver {
if (tbl == null) {
continue;
}
- if (MetaStoreUtils.isInsertOnlyTable(tbl.getParameters())) {
+ if (AcidUtils.isInsertOnlyTable(tbl.getParameters())) {
// Not supported for MM tables - sampler breaks separate MM dirs into splits, resulting in
// mismatch when the downstream task looks at them again assuming they are MM table roots.
// We could somehow unset the MM flag for the main job when the sampler succeeds, since the
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
index 87e4ee8..68f7b47 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
@@ -1005,7 +1005,7 @@ public class Vectorizer implements PhysicalPlanResolver {
setOperatorIssue("Alias " + alias + " not present in aliases " + aliases);
return new ImmutablePair<Boolean,Boolean>(false, false);
}
- // TODO: should this use getPartitionDescFromPathRecursively?
+ // TODO: should this use getPartitionDescFromPathRecursively? That's what other code uses.
PartitionDesc partDesc = pathToPartitionInfo.get(path);
if (partDesc.getVectorPartitionDesc() != null) {
// We've seen this already.
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
index 36bb89f..cbb422f 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
@@ -994,7 +994,7 @@ public class DDLSemanticAnalyzer extends BaseSemanticAnalyzer {
throw new SemanticException(ErrorMsg.TRUNCATE_COLUMN_INDEXED_TABLE.getMsg());
}
// It would be possible to support this, but this is such a pointless command.
- if (MetaStoreUtils.isInsertOnlyTable(table.getParameters())) {
+ if (AcidUtils.isInsertOnlyTable(table.getParameters())) {
throw new SemanticException("Truncating MM table columns not presently supported");
}
@@ -1639,7 +1639,7 @@ public class DDLSemanticAnalyzer extends BaseSemanticAnalyzer {
try {
tblObj = getTable(tableName);
// TODO: we should probably block all ACID tables here.
- if (MetaStoreUtils.isInsertOnlyTable(tblObj.getParameters())) {
+ if (AcidUtils.isInsertOnlyTable(tblObj.getParameters())) {
throw new SemanticException("Merge is not supported for MM tables");
}
mergeDesc.setTableDesc(Utilities.getTableDesc(tblObj));
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
index 41b5156..9afeadb 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
@@ -134,7 +134,7 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
parsedTableName = dbTablePair.getValue();
// get partition metadata if partition specified
if (child.getChildCount() == 2) {
- @SuppressWarnings("unused") // TODO: wtf?
+ @SuppressWarnings("unused")
ASTNode partspec = (ASTNode) child.getChild(1);
isPartSpecSet = true;
parsePartitionSpec(child, parsedPartSpec);
@@ -233,7 +233,7 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
} catch (Exception e) {
throw new HiveException(e);
}
- boolean isSourceMm = MetaStoreUtils.isInsertOnlyTable(tblDesc.getTblProps());
+ boolean isSourceMm = AcidUtils.isInsertOnlyTable(tblDesc.getTblProps());
if ((replicationSpec != null) && replicationSpec.isInReplicationScope()){
tblDesc.setReplicationSpec(replicationSpec);
@@ -313,7 +313,8 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
Long txnId = SessionState.get().getTxnMgr().getCurrentTxnId();
int stmtId = 0;
- // TODO: due to the master merge, tblDesc is no longer CreateTableDesc, but ImportTableDesc
+ // TODO [MM gap?]: bad merge; tblDesc is no longer CreateTableDesc, but ImportTableDesc.
+ // We need to verify the tests to see if this works correctly.
/*
if (isAcid(txnId)) {
tblDesc.setInitialMmWriteId(txnId);
@@ -365,7 +366,7 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
ReplicationSpec replicationSpec, EximUtil.SemanticAnalyzerWrapperContext x,
Long txnId, int stmtId, boolean isSourceMm) {
Path dataPath = new Path(fromURI.toString(), EximUtil.DATA_PATH_NAME);
- Path destPath = !MetaStoreUtils.isInsertOnlyTable(table.getParameters()) ? x.getCtx().getExternalTmpPath(tgtPath)
+ Path destPath = !AcidUtils.isInsertOnlyTable(table.getParameters()) ? x.getCtx().getExternalTmpPath(tgtPath)
: new Path(tgtPath, AcidUtils.deltaSubdir(txnId, txnId, stmtId));
if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
Utilities.FILE_OP_LOGGER.trace("adding import work for table with source location: " +
@@ -376,7 +377,7 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
Task<?> copyTask = null;
if (replicationSpec.isInReplicationScope()) {
if (isSourceMm || isAcid(txnId)) {
- // TODO: ReplCopyTask is completely screwed. Need to support when it's not as screwed.
+ // Note: this is replication gap, not MM gap... Repl V2 is not ready yet.
throw new RuntimeException("Replicating MM and ACID tables is not supported");
}
copyTask = ReplCopyTask.getLoadCopyTask(replicationSpec, dataPath, destPath, x.getConf());
@@ -457,9 +458,9 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
+ partSpecToString(partSpec.getPartSpec())
+ " with source location: " + srcLocation);
Path tgtLocation = new Path(partSpec.getLocation());
- Path destPath = !MetaStoreUtils.isInsertOnlyTable(table.getParameters()) ? x.getCtx().getExternalTmpPath(tgtLocation)
+ Path destPath = !AcidUtils.isInsertOnlyTable(table.getParameters()) ? x.getCtx().getExternalTmpPath(tgtLocation)
: new Path(tgtLocation, AcidUtils.deltaSubdir(txnId, txnId, stmtId));
- Path moveTaskSrc = !MetaStoreUtils.isInsertOnlyTable(table.getParameters()) ? destPath : tgtLocation;
+ Path moveTaskSrc = !AcidUtils.isInsertOnlyTable(table.getParameters()) ? destPath : tgtLocation;
if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
Utilities.FILE_OP_LOGGER.trace("adding import work for partition with source location: "
+ srcLocation + "; target: " + tgtLocation + "; copy dest " + destPath + "; mm "
@@ -470,7 +471,7 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
Task<?> copyTask = null;
if (replicationSpec.isInReplicationScope()) {
if (isSourceMm || isAcid(txnId)) {
- // TODO: ReplCopyTask is completely screwed. Need to support when it's not as screwed.
+ // Note: this is replication gap, not MM gap... Repl V2 is not ready yet.
throw new RuntimeException("Replicating MM and ACID tables is not supported");
}
copyTask = ReplCopyTask.getLoadCopyTask(
@@ -792,7 +793,7 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
x.getLOG().debug("table partitioned");
Task<?> ict = createImportCommitTask(
table.getDbName(), table.getTableName(), txnId, stmtId, x.getConf(),
- MetaStoreUtils.isInsertOnlyTable(table.getParameters()));
+ AcidUtils.isInsertOnlyTable(table.getParameters()));
for (AddPartitionDesc addPartitionDesc : partitionDescs) {
Map<String, String> partSpec = addPartitionDesc.getPartition(0).getPartSpec();
@@ -829,7 +830,7 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
if (isPartitioned(tblDesc)) {
Task<?> ict = createImportCommitTask(
tblDesc.getDatabaseName(), tblDesc.getTableName(), txnId, stmtId, x.getConf(),
- MetaStoreUtils.isInsertOnlyTable(tblDesc.getTblProps()));
+ AcidUtils.isInsertOnlyTable(tblDesc.getTblProps()));
for (AddPartitionDesc addPartitionDesc : partitionDescs) {
t.addDependentTask(addSinglePartition(fromURI, fs, tblDesc, table, wh, addPartitionDesc,
replicationSpec, x, txnId, stmtId, isSourceMm, ict));
@@ -956,7 +957,7 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
if (isPartitioned(tblDesc)) {
Task<?> ict = createImportCommitTask(
tblDesc.getDatabaseName(), tblDesc.getTableName(), txnId, stmtId, x.getConf(),
- MetaStoreUtils.isInsertOnlyTable(tblDesc.getTblProps()));
+ AcidUtils.isInsertOnlyTable(tblDesc.getTblProps()));
for (AddPartitionDesc addPartitionDesc : partitionDescs) {
addPartitionDesc.setReplicationSpec(replicationSpec);
t.addDependentTask(
@@ -982,7 +983,7 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer {
org.apache.hadoop.hive.ql.metadata.Partition ptn = null;
Task<?> ict = replicationSpec.isMetadataOnly() ? null : createImportCommitTask(
tblDesc.getDatabaseName(), tblDesc.getTableName(), txnId, stmtId, x.getConf(),
- MetaStoreUtils.isInsertOnlyTable(tblDesc.getTblProps()));
+ AcidUtils.isInsertOnlyTable(tblDesc.getTblProps()));
if ((ptn = x.getHive().getPartition(table, partSpec, false)) == null) {
if (!replicationSpec.isMetadataOnly()){
x.getTasks().add(addSinglePartition(
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java
index ab2b65f..51efde1 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java
@@ -228,7 +228,7 @@ public class LoadSemanticAnalyzer extends BaseSemanticAnalyzer {
+ " and use 'insert... select' to allow Hive to enforce bucketing. " + error);
}
- if(AcidUtils.isAcidTable(ts.tableHandle) && !MetaStoreUtils.isInsertOnlyTable(ts.tableHandle.getParameters())) {
+ if(AcidUtils.isAcidTable(ts.tableHandle) && !AcidUtils.isInsertOnlyTable(ts.tableHandle.getParameters())) {
throw new SemanticException(ErrorMsg.LOAD_DATA_ON_ACID_TABLE, ts.tableHandle.getCompleteName());
}
// make sure the arguments make sense
@@ -277,7 +277,7 @@ public class LoadSemanticAnalyzer extends BaseSemanticAnalyzer {
Long txnId = null;
int stmtId = 0;
Table tbl = ts.tableHandle;
- if (MetaStoreUtils.isInsertOnlyTable(tbl.getParameters())) {
+ if (AcidUtils.isInsertOnlyTable(tbl.getParameters())) {
txnId = SessionState.get().getTxnMgr().getCurrentTxnId();
}
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
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 f3f932b..99b8712 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
@@ -6837,7 +6837,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
}
boolean isNonNativeTable = dest_tab.isNonNative();
- isMmTable = MetaStoreUtils.isInsertOnlyTable(dest_tab.getParameters());
+ isMmTable = AcidUtils.isInsertOnlyTable(dest_tab.getParameters());
if (isNonNativeTable || isMmTable) {
queryTmpdir = dest_path;
} else {
@@ -6873,7 +6873,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
acidOp = getAcidType(table_desc.getOutputFileFormatClass(), dest);
checkAcidConstraints(qb, table_desc, dest_tab);
}
- if (MetaStoreUtils.isInsertOnlyTable(table_desc.getProperties())) {
+ if (AcidUtils.isInsertOnlyTable(table_desc.getProperties())) {
acidOp = getAcidType(table_desc.getOutputFileFormatClass(), dest);
}
if (isMmTable) {
@@ -6924,7 +6924,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
dest_path = new Path(tabPath.toUri().getScheme(), tabPath.toUri()
.getAuthority(), partPath.toUri().getPath());
- isMmTable = MetaStoreUtils.isInsertOnlyTable(dest_tab.getParameters());
+ isMmTable = AcidUtils.isInsertOnlyTable(dest_tab.getParameters());
queryTmpdir = isMmTable ? dest_path : ctx.getTempDirForPath(dest_path, true);
if (Utilities.FILE_OP_LOGGER.isTraceEnabled()) {
Utilities.FILE_OP_LOGGER.trace("create filesink w/DEST_PARTITION specifying "
@@ -6947,7 +6947,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
acidOp = getAcidType(table_desc.getOutputFileFormatClass(), dest);
checkAcidConstraints(qb, table_desc, dest_tab);
}
- if (MetaStoreUtils.isInsertOnlyTable(dest_part.getTable().getParameters())) {
+ if (AcidUtils.isInsertOnlyTable(dest_part.getTable().getParameters())) {
acidOp = getAcidType(table_desc.getOutputFileFormatClass(), dest);
}
if (isMmTable) {
@@ -6990,7 +6990,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
field_schemas = new ArrayList<FieldSchema>();
destTableIsTemporary = tblDesc.isTemporary();
destTableIsMaterialization = tblDesc.isMaterialization();
- if (!destTableIsTemporary && MetaStoreUtils.isInsertOnlyTable(tblDesc.getTblProps(), true)) {
+ if (!destTableIsTemporary && AcidUtils.isInsertOnlyTable(tblDesc.getTblProps(), true)) {
isMmTable = isMmCtas = true;
txnId = SessionState.get().getTxnMgr().getCurrentTxnId();
tblDesc.setInitialMmWriteId(txnId);
@@ -7253,8 +7253,8 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
// If this is an insert, update, or delete on an ACID table then mark that so the
// FileSinkOperator knows how to properly write to it.
boolean isDestInsertOnly = (dest_part != null && dest_part.getTable() != null &&
- MetaStoreUtils.isInsertOnlyTable(dest_part.getTable().getParameters()))
- || (table_desc != null && MetaStoreUtils.isInsertOnlyTable(table_desc.getProperties()));
+ AcidUtils.isInsertOnlyTable(dest_part.getTable().getParameters()))
+ || (table_desc != null && AcidUtils.isInsertOnlyTable(table_desc.getProperties()));
if (isDestInsertOnly) {
fileSinkDesc.setWriteType(Operation.INSERT);
@@ -12056,7 +12056,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
if (p != null) {
tbl = p.getTable();
}
- if (tbl != null && (AcidUtils.isFullAcidTable(tbl) || MetaStoreUtils.isInsertOnlyTable(tbl.getParameters()))) {
+ if (tbl != null && (AcidUtils.isFullAcidTable(tbl) || AcidUtils.isInsertOnlyTable(tbl.getParameters()))) {
acidInQuery = true;
checkAcidTxnManager(tbl);
}
@@ -12119,7 +12119,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
tbl = writeEntity.getTable();
}
- if (tbl != null && (AcidUtils.isFullAcidTable(tbl) || MetaStoreUtils.isInsertOnlyTable(tbl.getParameters()))) {
+ if (tbl != null && (AcidUtils.isFullAcidTable(tbl) || AcidUtils.isInsertOnlyTable(tbl.getParameters()))) {
acidInQuery = true;
checkAcidTxnManager(tbl);
}
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/plan/FileSinkDesc.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/FileSinkDesc.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/FileSinkDesc.java
index 4732f0a..ea8fc19 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/FileSinkDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/FileSinkDesc.java
@@ -283,9 +283,9 @@ public class FileSinkDesc extends AbstractOperatorDesc {
public boolean isMmTable() {
if (getTable() != null) {
- return MetaStoreUtils.isInsertOnlyTable(table.getParameters());
+ return AcidUtils.isInsertOnlyTable(table.getParameters());
} else { // Dynamic Partition Insert case
- return MetaStoreUtils.isInsertOnlyTable(getTableInfo().getProperties());
+ return AcidUtils.isInsertOnlyTable(getTableInfo().getProperties());
}
}
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
index 0b7fe01..f246115 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
@@ -42,7 +42,7 @@ public class LoadTableDesc extends LoadDesc implements Serializable {
private int stmtId;
private Long currentTransactionId;
- // TODO: the below seems like they should just be combined into partitionDesc
+ // TODO: the below seem like they should just be combined into partitionDesc
private org.apache.hadoop.hive.ql.plan.TableDesc table;
private Map<String, String> partitionSpec; // NOTE: this partitionSpec has to be ordered map
@@ -162,7 +162,7 @@ public class LoadTableDesc extends LoadDesc implements Serializable {
}
public boolean isMmTable() {
- return MetaStoreUtils.isInsertOnlyTable(table.getProperties());
+ return AcidUtils.isInsertOnlyTable(table.getProperties());
}
public void setReplace(boolean replace) {
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/plan/MoveWork.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/MoveWork.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/MoveWork.java
index 17d2f31..28a3374 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/MoveWork.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/MoveWork.java
@@ -165,14 +165,6 @@ public class MoveWork implements Serializable {
public void setSrcLocal(boolean srcLocal) {
this.srcLocal = srcLocal;
}
-
- public void setNoop(boolean b) {
- this.isNoop = true;
- }
-
- public boolean isNoop() {
- return this.isNoop;
- }
public LineageState getLineagState() {
return sessionStateLineageState;
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/CompactorMR.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/CompactorMR.java b/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/CompactorMR.java
index 8b3ad75..7d4d379 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/CompactorMR.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/CompactorMR.java
@@ -210,7 +210,7 @@ public class CompactorMR {
// For MM tables we don't need to launch MR jobs as there is no compaction needed.
// We just need to delete the directories for aborted transactions.
- if (MetaStoreUtils.isInsertOnlyTable(t.getParameters())) {
+ if (AcidUtils.isInsertOnlyTable(t.getParameters())) {
LOG.debug("Going to delete directories for aborted transactions for MM table "
+ t.getDbName() + "." + t.getTableName());
removeFiles(conf, sd.getLocation(), txns, t);
http://git-wip-us.apache.org/repos/asf/hive/blob/64015972/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/Initiator.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/Initiator.java b/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/Initiator.java
index c52bd3e..8daa5c0 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/Initiator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/Initiator.java
@@ -253,7 +253,7 @@ public class Initiator extends CompactorThread {
StorageDescriptor sd, Map<String, String> tblproperties)
throws IOException, InterruptedException {
- if (MetaStoreUtils.isInsertOnlyTable(tblproperties)) {
+ if (AcidUtils.isInsertOnlyTable(tblproperties)) {
return CompactionType.MINOR;
}
[41/50] [abbrv] hive git commit: HIVE-14671 : merge master into
hive-14535 (Sergey Shelukhin)
Posted by se...@apache.org.
HIVE-14671 : merge master into hive-14535 (Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/77f3f28e
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/77f3f28e
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/77f3f28e
Branch: refs/heads/master
Commit: 77f3f28e26fa069c3e3c49d0e2f45073b59b2b60
Parents: 4717849 8ffd8ea
Author: sergey <se...@apache.org>
Authored: Tue Oct 3 15:54:51 2017 -0700
Committer: sergey <se...@apache.org>
Committed: Tue Oct 3 15:54:51 2017 -0700
----------------------------------------------------------------------
.../metrics2/JsonFileMetricsReporter.java | 192 +-
.../org/apache/hadoop/hive/conf/HiveConf.java | 5 +
.../metrics/metrics2/TestCodahaleMetrics.java | 86 +-
data/conf/perf-reg/hive-site.xml | 285 --
data/conf/perf-reg/tez-site.xml | 10 -
data/conf/perf-reg/tez/hive-site.xml | 285 ++
data/conf/perf-reg/tez/tez-site.xml | 10 +
.../security/TestHadoopAuthBridge23.java | 2 +-
.../test/resources/testconfiguration.properties | 7 +
...SQLStdHiveAuthorizationValidatorForTest.java | 12 +
.../hadoop/hive/metastore/HiveMetaStore.java | 3 +-
pom.xml | 2 +-
.../java/org/apache/hadoop/hive/ql/Context.java | 15 +
.../apache/hadoop/hive/ql/exec/ExplainTask.java | 7 +-
.../apache/hadoop/hive/ql/exec/ExportTask.java | 69 +
.../hadoop/hive/ql/exec/ReplCopyTask.java | 33 +-
.../apache/hadoop/hive/ql/exec/TaskFactory.java | 2 +
.../hadoop/hive/ql/exec/repl/ReplDumpTask.java | 2 +-
.../hive/ql/parse/ExportSemanticAnalyzer.java | 20 +-
.../hadoop/hive/ql/parse/ParseDriver.java | 10 +-
.../apache/hadoop/hive/ql/parse/ParseUtils.java | 6 +-
.../hadoop/hive/ql/parse/SemanticAnalyzer.java | 50 +-
.../apache/hadoop/hive/ql/parse/TableMask.java | 6 +-
.../hadoop/hive/ql/parse/repl/CopyUtils.java | 161 +-
.../ql/parse/repl/dump/PartitionExport.java | 5 +-
.../hive/ql/parse/repl/dump/TableExport.java | 77 +-
.../apache/hadoop/hive/ql/plan/ExportWork.java | 73 +
ql/src/test/queries/clientpositive/masking_12.q | 34 +
.../authorization_uri_export.q.out | 1 -
.../exim_12_nonnative_export.q.out | 6 +-
.../results/clientpositive/masking_12.q.out | 437 ++
.../results/clientpositive/perf/query1.q.out | 169 -
.../results/clientpositive/perf/query10.q.out | 288 --
.../results/clientpositive/perf/query11.q.out | 351 --
.../results/clientpositive/perf/query12.q.out | 138 -
.../results/clientpositive/perf/query13.q.out | 205 -
.../results/clientpositive/perf/query14.q.out | 1286 ------
.../results/clientpositive/perf/query15.q.out | 119 -
.../results/clientpositive/perf/query16.q.out | 192 -
.../results/clientpositive/perf/query17.q.out | 225 -
.../results/clientpositive/perf/query18.q.out | 194 -
.../results/clientpositive/perf/query19.q.out | 161 -
.../results/clientpositive/perf/query2.q.out | 255 --
.../results/clientpositive/perf/query20.q.out | 130 -
.../results/clientpositive/perf/query21.q.out | 139 -
.../results/clientpositive/perf/query22.q.out | 121 -
.../results/clientpositive/perf/query23.q.out | 556 ---
.../results/clientpositive/perf/query24.q.out | 290 --
.../results/clientpositive/perf/query25.q.out | 229 --
.../results/clientpositive/perf/query26.q.out | 132 -
.../results/clientpositive/perf/query27.q.out | 140 -
.../results/clientpositive/perf/query28.q.out | 256 --
.../results/clientpositive/perf/query29.q.out | 230 --
.../results/clientpositive/perf/query3.q.out | 102 -
.../results/clientpositive/perf/query30.q.out | 211 -
.../results/clientpositive/perf/query31.q.out | 358 --
.../results/clientpositive/perf/query32.q.out | 144 -
.../results/clientpositive/perf/query33.q.out | 393 --
.../results/clientpositive/perf/query34.q.out | 156 -
.../results/clientpositive/perf/query35.q.out | 284 --
.../results/clientpositive/perf/query36.q.out | 149 -
.../results/clientpositive/perf/query37.q.out | 103 -
.../results/clientpositive/perf/query38.q.out | 212 -
.../results/clientpositive/perf/query39.q.out | 255 --
.../results/clientpositive/perf/query4.q.out | 500 ---
.../results/clientpositive/perf/query40.q.out | 148 -
.../results/clientpositive/perf/query42.q.out | 108 -
.../results/clientpositive/perf/query43.q.out | 100 -
.../results/clientpositive/perf/query44.q.out | 258 --
.../results/clientpositive/perf/query45.q.out | 180 -
.../results/clientpositive/perf/query46.q.out | 191 -
.../results/clientpositive/perf/query47.q.out | 325 --
.../results/clientpositive/perf/query48.q.out | 218 -
.../results/clientpositive/perf/query49.q.out | 496 ---
.../results/clientpositive/perf/query5.q.out | 473 ---
.../results/clientpositive/perf/query50.q.out | 210 -
.../results/clientpositive/perf/query51.q.out | 188 -
.../results/clientpositive/perf/query52.q.out | 106 -
.../results/clientpositive/perf/query53.q.out | 141 -
.../results/clientpositive/perf/query54.q.out | 386 --
.../results/clientpositive/perf/query55.q.out | 88 -
.../results/clientpositive/perf/query56.q.out | 379 --
.../results/clientpositive/perf/query57.q.out | 319 --
.../results/clientpositive/perf/query58.q.out | 440 --
.../results/clientpositive/perf/query59.q.out | 230 --
.../results/clientpositive/perf/query6.q.out | 226 -
.../results/clientpositive/perf/query60.q.out | 399 --
.../results/clientpositive/perf/query61.q.out | 280 --
.../results/clientpositive/perf/query63.q.out | 143 -
.../results/clientpositive/perf/query64.q.out | 772 ----
.../results/clientpositive/perf/query65.q.out | 169 -
.../results/clientpositive/perf/query66.q.out | 612 ---
.../results/clientpositive/perf/query67.q.out | 179 -
.../results/clientpositive/perf/query68.q.out | 205 -
.../results/clientpositive/perf/query69.q.out | 268 --
.../results/clientpositive/perf/query7.q.out | 132 -
.../results/clientpositive/perf/query70.q.out | 205 -
.../results/clientpositive/perf/query71.q.out | 208 -
.../results/clientpositive/perf/query72.q.out | 250 --
.../results/clientpositive/perf/query73.q.out | 150 -
.../results/clientpositive/perf/query74.q.out | 313 --
.../results/clientpositive/perf/query75.q.out | 481 ---
.../results/clientpositive/perf/query76.q.out | 187 -
.../results/clientpositive/perf/query77.q.out | 481 ---
.../results/clientpositive/perf/query78.q.out | 292 --
.../results/clientpositive/perf/query79.q.out | 140 -
.../results/clientpositive/perf/query8.q.out | 358 --
.../results/clientpositive/perf/query80.q.out | 478 ---
.../results/clientpositive/perf/query81.q.out | 214 -
.../results/clientpositive/perf/query82.q.out | 103 -
.../results/clientpositive/perf/query83.q.out | 372 --
.../results/clientpositive/perf/query84.q.out | 135 -
.../results/clientpositive/perf/query85.q.out | 304 --
.../results/clientpositive/perf/query86.q.out | 126 -
.../results/clientpositive/perf/query87.q.out | 239 --
.../results/clientpositive/perf/query88.q.out | 569 ---
.../results/clientpositive/perf/query89.q.out | 147 -
.../results/clientpositive/perf/query9.q.out | 414 --
.../results/clientpositive/perf/query90.q.out | 170 -
.../results/clientpositive/perf/query91.q.out | 184 -
.../results/clientpositive/perf/query92.q.out | 155 -
.../results/clientpositive/perf/query93.q.out | 98 -
.../results/clientpositive/perf/query94.q.out | 188 -
.../results/clientpositive/perf/query95.q.out | 231 --
.../results/clientpositive/perf/query96.q.out | 108 -
.../results/clientpositive/perf/query97.q.out | 132 -
.../results/clientpositive/perf/query98.q.out | 134 -
.../results/clientpositive/perf/query99.q.out | 164 -
.../clientpositive/perf/tez/query1.q.out | 169 +
.../clientpositive/perf/tez/query10.q.out | 288 ++
.../clientpositive/perf/tez/query11.q.out | 351 ++
.../clientpositive/perf/tez/query12.q.out | 138 +
.../clientpositive/perf/tez/query13.q.out | 205 +
.../clientpositive/perf/tez/query14.q.out | 1286 ++++++
.../clientpositive/perf/tez/query15.q.out | 119 +
.../clientpositive/perf/tez/query16.q.out | 192 +
.../clientpositive/perf/tez/query17.q.out | 225 +
.../clientpositive/perf/tez/query18.q.out | 194 +
.../clientpositive/perf/tez/query19.q.out | 161 +
.../clientpositive/perf/tez/query2.q.out | 255 ++
.../clientpositive/perf/tez/query20.q.out | 130 +
.../clientpositive/perf/tez/query21.q.out | 139 +
.../clientpositive/perf/tez/query22.q.out | 121 +
.../clientpositive/perf/tez/query23.q.out | 556 +++
.../clientpositive/perf/tez/query24.q.out | 290 ++
.../clientpositive/perf/tez/query25.q.out | 229 ++
.../clientpositive/perf/tez/query26.q.out | 132 +
.../clientpositive/perf/tez/query27.q.out | 140 +
.../clientpositive/perf/tez/query28.q.out | 256 ++
.../clientpositive/perf/tez/query29.q.out | 230 ++
.../clientpositive/perf/tez/query3.q.out | 102 +
.../clientpositive/perf/tez/query30.q.out | 211 +
.../clientpositive/perf/tez/query31.q.out | 358 ++
.../clientpositive/perf/tez/query32.q.out | 144 +
.../clientpositive/perf/tez/query33.q.out | 393 ++
.../clientpositive/perf/tez/query34.q.out | 156 +
.../clientpositive/perf/tez/query35.q.out | 284 ++
.../clientpositive/perf/tez/query36.q.out | 149 +
.../clientpositive/perf/tez/query37.q.out | 103 +
.../clientpositive/perf/tez/query38.q.out | 212 +
.../clientpositive/perf/tez/query39.q.out | 255 ++
.../clientpositive/perf/tez/query4.q.out | 500 +++
.../clientpositive/perf/tez/query40.q.out | 148 +
.../clientpositive/perf/tez/query42.q.out | 108 +
.../clientpositive/perf/tez/query43.q.out | 100 +
.../clientpositive/perf/tez/query44.q.out | 258 ++
.../clientpositive/perf/tez/query45.q.out | 180 +
.../clientpositive/perf/tez/query46.q.out | 191 +
.../clientpositive/perf/tez/query47.q.out | 325 ++
.../clientpositive/perf/tez/query48.q.out | 218 +
.../clientpositive/perf/tez/query49.q.out | 496 +++
.../clientpositive/perf/tez/query5.q.out | 473 +++
.../clientpositive/perf/tez/query50.q.out | 210 +
.../clientpositive/perf/tez/query51.q.out | 188 +
.../clientpositive/perf/tez/query52.q.out | 106 +
.../clientpositive/perf/tez/query53.q.out | 141 +
.../clientpositive/perf/tez/query54.q.out | 386 ++
.../clientpositive/perf/tez/query55.q.out | 88 +
.../clientpositive/perf/tez/query56.q.out | 379 ++
.../clientpositive/perf/tez/query57.q.out | 319 ++
.../clientpositive/perf/tez/query58.q.out | 440 ++
.../clientpositive/perf/tez/query59.q.out | 230 ++
.../clientpositive/perf/tez/query6.q.out | 226 +
.../clientpositive/perf/tez/query60.q.out | 399 ++
.../clientpositive/perf/tez/query61.q.out | 280 ++
.../clientpositive/perf/tez/query63.q.out | 143 +
.../clientpositive/perf/tez/query64.q.out | 772 ++++
.../clientpositive/perf/tez/query65.q.out | 169 +
.../clientpositive/perf/tez/query66.q.out | 612 +++
.../clientpositive/perf/tez/query67.q.out | 179 +
.../clientpositive/perf/tez/query68.q.out | 205 +
.../clientpositive/perf/tez/query69.q.out | 268 ++
.../clientpositive/perf/tez/query7.q.out | 132 +
.../clientpositive/perf/tez/query70.q.out | 205 +
.../clientpositive/perf/tez/query71.q.out | 208 +
.../clientpositive/perf/tez/query72.q.out | 250 ++
.../clientpositive/perf/tez/query73.q.out | 150 +
.../clientpositive/perf/tez/query74.q.out | 313 ++
.../clientpositive/perf/tez/query75.q.out | 481 +++
.../clientpositive/perf/tez/query76.q.out | 187 +
.../clientpositive/perf/tez/query77.q.out | 481 +++
.../clientpositive/perf/tez/query78.q.out | 292 ++
.../clientpositive/perf/tez/query79.q.out | 140 +
.../clientpositive/perf/tez/query8.q.out | 358 ++
.../clientpositive/perf/tez/query80.q.out | 478 +++
.../clientpositive/perf/tez/query81.q.out | 214 +
.../clientpositive/perf/tez/query82.q.out | 103 +
.../clientpositive/perf/tez/query83.q.out | 372 ++
.../clientpositive/perf/tez/query84.q.out | 135 +
.../clientpositive/perf/tez/query85.q.out | 304 ++
.../clientpositive/perf/tez/query86.q.out | 126 +
.../clientpositive/perf/tez/query87.q.out | 239 ++
.../clientpositive/perf/tez/query88.q.out | 569 +++
.../clientpositive/perf/tez/query89.q.out | 147 +
.../clientpositive/perf/tez/query9.q.out | 414 ++
.../clientpositive/perf/tez/query90.q.out | 170 +
.../clientpositive/perf/tez/query91.q.out | 184 +
.../clientpositive/perf/tez/query92.q.out | 155 +
.../clientpositive/perf/tez/query93.q.out | 98 +
.../clientpositive/perf/tez/query94.q.out | 188 +
.../clientpositive/perf/tez/query95.q.out | 231 ++
.../clientpositive/perf/tez/query96.q.out | 108 +
.../clientpositive/perf/tez/query97.q.out | 132 +
.../clientpositive/perf/tez/query98.q.out | 134 +
.../clientpositive/perf/tez/query99.q.out | 164 +
.../clientpositive/spark/auto_join32.q.out | 574 +++
.../spark/auto_sortmerge_join_2.q.out | 594 +++
.../results/clientpositive/spark/insert1.q.out | 412 ++
.../results/clientpositive/spark/join40.q.out | 3845 ++++++++++++++++++
.../clientpositive/spark/join_empty.q.out | 56 +
.../clientpositive/spark/ppd_join4.q.out | 128 +
.../clientpositive/spark/transform1.q.out | 138 +
.../hive/service/auth/HiveAuthFactory.java | 3 +-
.../hive/thrift/HadoopThriftAuthBridge.java | 27 +-
.../hive/metastore/ReplChangeManager.java | 73 +-
.../hive/metastore/metrics/JsonReporter.java | 131 +-
.../security/HadoopThriftAuthBridge.java | 26 +-
.../hive/metastore/metrics/TestMetrics.java | 75 +-
238 files changed, 32142 insertions(+), 25397 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/77f3f28e/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/77f3f28e/itests/src/test/resources/testconfiguration.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/77f3f28e/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/77f3f28e/ql/src/java/org/apache/hadoop/hive/ql/Context.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/77f3f28e/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/77f3f28e/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskFactory.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/77f3f28e/ql/src/java/org/apache/hadoop/hive/ql/parse/ExportSemanticAnalyzer.java
----------------------------------------------------------------------
diff --cc ql/src/java/org/apache/hadoop/hive/ql/parse/ExportSemanticAnalyzer.java
index 54ee7ae,f094805..2400f9c
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ExportSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ExportSemanticAnalyzer.java
@@@ -51,13 -21,12 +51,16 @@@ import org.apache.hadoop.hive.ql.metada
import org.antlr.runtime.tree.Tree;
import org.apache.hadoop.hive.ql.ErrorMsg;
import org.apache.hadoop.hive.ql.QueryState;
+ import org.apache.hadoop.hive.ql.exec.Task;
+ import org.apache.hadoop.hive.ql.exec.TaskFactory;
import org.apache.hadoop.hive.ql.metadata.InvalidTableException;
+import org.apache.hadoop.hive.ql.metadata.Partition;
+import org.apache.hadoop.hive.ql.metadata.PartitionIterable;
import org.apache.hadoop.hive.ql.metadata.Table;
+import org.apache.hadoop.hive.ql.plan.CopyWork;
+import org.slf4j.Logger;
import org.apache.hadoop.hive.ql.parse.repl.dump.TableExport;
+ import org.apache.hadoop.hive.ql.plan.ExportWork;
/**
* ExportSemanticAnalyzer.
http://git-wip-us.apache.org/repos/asf/hive/blob/77f3f28e/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------