Repository: hive Updated Branches: refs/heads/master bd6d91f11 -> 1e6a18250
HIVE-18750: Exchange partition should be disabled on ACID/Insert-only tables with per table write ID (Sankar Hariappan, reviewed by Eugene Koifman) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/1e6a1825 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/1e6a1825 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/1e6a1825 Branch: refs/heads/master Commit: 1e6a18250a9f7f601dff9c292a961007de0ec358 Parents: bd6d91f Author: Sankar Hariappan <sank...@apache.org> Authored: Thu Mar 1 10:52:52 2018 +0530 Committer: Sankar Hariappan <sank...@apache.org> Committed: Thu Mar 1 10:52:52 2018 +0530 ---------------------------------------------------------------------- .../org/apache/hadoop/hive/ql/ErrorMsg.java | 2 + .../hive/ql/parse/DDLSemanticAnalyzer.java | 12 + ...exchange_partition_neg_with_fullacid_table.q | 14 + .../exchange_partition_neg_with_mm_table.q | 19 + .../clientpositive/mm_exchangepartition.q | 68 ---- ...ange_partition_neg_with_fullacid_table.q.out | 45 +++ .../exchange_partition_neg_with_mm_table.q.out | 69 ++++ .../clientpositive/mm_exchangepartition.q.out | 382 ------------------- 8 files changed, 161 insertions(+), 450 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/1e6a1825/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java b/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java index 6087e02..d3546d4 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java @@ -324,6 +324,8 @@ public enum ErrorMsg { " A subpartition value is specified without specifying the parent partition's value"), TABLES_INCOMPATIBLE_SCHEMAS(10235, "Tables have incompatible schemas and their partitions " + " cannot be exchanged."), + EXCHANGE_PARTITION_NOT_ALLOWED_WITH_TRANSACTIONAL_TABLES(10236, "Exchange partition is not allowed with " + + "transactional tables. Alternatively, shall use load data or insert overwrite to move partitions."), TRUNCATE_COLUMN_NOT_RC(10237, "Only RCFileFormat supports column truncation."), TRUNCATE_COLUMN_ARCHIVED(10238, "Column truncation cannot be performed on archived partitions."), http://git-wip-us.apache.org/repos/asf/hive/blob/1e6a1825/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 e926b63..e393424 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 @@ -818,6 +818,18 @@ public class DDLSemanticAnalyzer extends BaseSemanticAnalyzer { if (!sameColumns || !samePartitions) { throw new SemanticException(ErrorMsg.TABLES_INCOMPATIBLE_SCHEMAS.getMsg()); } + + // Exchange partition is not allowed with transactional tables. + // If only source is transactional table, then target will see deleted rows too as no snapshot + // isolation applicable for non-acid tables. + // If only target is transactional table, then data would be visible to all ongoing transactions + // affecting the snapshot isolation. + // If both source and targets are transactional tables, then target partition may have delta/base + // files with write IDs may not be valid. It may affect snapshot isolation for on-going txns as well. + if (AcidUtils.isTransactionalTable(sourceTable) || AcidUtils.isTransactionalTable(destTable)) { + throw new SemanticException(ErrorMsg.EXCHANGE_PARTITION_NOT_ALLOWED_WITH_TRANSACTIONAL_TABLES.getMsg()); + } + // check if source partition exists getPartitions(sourceTable, partSpecs, true); http://git-wip-us.apache.org/repos/asf/hive/blob/1e6a1825/ql/src/test/queries/clientnegative/exchange_partition_neg_with_fullacid_table.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/exchange_partition_neg_with_fullacid_table.q b/ql/src/test/queries/clientnegative/exchange_partition_neg_with_fullacid_table.q new file mode 100644 index 0000000..e94492d --- /dev/null +++ b/ql/src/test/queries/clientnegative/exchange_partition_neg_with_fullacid_table.q @@ -0,0 +1,14 @@ +set hive.support.concurrency=true; +set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; + +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t2; + +CREATE TABLE t1 (a int) PARTITIONED BY (d1 int) STORED AS ORC TBLPROPERTIES ("transactional"="true"); +CREATE TABLE t2 (a int) PARTITIONED BY (d1 int) STORED AS ORC TBLPROPERTIES ("transactional"="true"); +set hive.mapred.mode=nonstrict; + +INSERT INTO TABLE t1 PARTITION (d1 = 1) SELECT key FROM src where key = 100 limit 1; +SELECT * FROM t1; + +ALTER TABLE t2 EXCHANGE PARTITION (d1 = 1) WITH TABLE t1; http://git-wip-us.apache.org/repos/asf/hive/blob/1e6a1825/ql/src/test/queries/clientnegative/exchange_partition_neg_with_mm_table.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/exchange_partition_neg_with_mm_table.q b/ql/src/test/queries/clientnegative/exchange_partition_neg_with_mm_table.q new file mode 100644 index 0000000..94e830b --- /dev/null +++ b/ql/src/test/queries/clientnegative/exchange_partition_neg_with_mm_table.q @@ -0,0 +1,19 @@ +set hive.support.concurrency=true; +set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; + +drop database if exists ex1 cascade; +drop database if exists ex2 cascade; + +create database ex1; +create database ex2; + +CREATE TABLE ex1.exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only"); +CREATE TABLE ex2.exchange_part_test2 (f1 string) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only"); +SHOW PARTITIONS ex1.exchange_part_test1; +SHOW PARTITIONS ex2.exchange_part_test2; + +ALTER TABLE ex2.exchange_part_test2 ADD PARTITION (ds='2013-04-05'); +SHOW PARTITIONS ex1.exchange_part_test1; +SHOW PARTITIONS ex2.exchange_part_test2; + +ALTER TABLE ex1.exchange_part_test1 EXCHANGE PARTITION (ds='2013-04-05') WITH TABLE ex2.exchange_part_test2; http://git-wip-us.apache.org/repos/asf/hive/blob/1e6a1825/ql/src/test/queries/clientpositive/mm_exchangepartition.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientpositive/mm_exchangepartition.q b/ql/src/test/queries/clientpositive/mm_exchangepartition.q deleted file mode 100644 index 0c04136..0000000 --- a/ql/src/test/queries/clientpositive/mm_exchangepartition.q +++ /dev/null @@ -1,68 +0,0 @@ -set hive.support.concurrency=true; -set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; - -drop database if exists ex1; -drop database if exists ex2; - -create database ex1; -create database ex2; - -CREATE TABLE ex1.exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only"); -CREATE TABLE ex2.exchange_part_test2 (f1 string) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only"); -SHOW PARTITIONS ex1.exchange_part_test1; -SHOW PARTITIONS ex2.exchange_part_test2; - -ALTER TABLE ex2.exchange_part_test2 ADD PARTITION (ds='2013-04-05'); -SHOW PARTITIONS ex1.exchange_part_test1; -SHOW PARTITIONS ex2.exchange_part_test2; - -ALTER TABLE ex1.exchange_part_test1 EXCHANGE PARTITION (ds='2013-04-05') WITH TABLE ex2.exchange_part_test2; -SHOW PARTITIONS ex1.exchange_part_test1; -SHOW PARTITIONS ex2.exchange_part_test2; - - -DROP TABLE IF EXISTS t1; -DROP TABLE IF EXISTS t2; -DROP TABLE IF EXISTS t3; -DROP TABLE IF EXISTS t4; -DROP TABLE IF EXISTS t5; -DROP TABLE IF EXISTS t6; - -CREATE TABLE t1 (a int) PARTITIONED BY (d1 int) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only"); -CREATE TABLE t2 (a int) PARTITIONED BY (d1 int) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only"); -CREATE TABLE t3 (a int) PARTITIONED BY (d1 int, d2 int) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only"); -CREATE TABLE t4 (a int) PARTITIONED BY (d1 int, d2 int) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only"); -CREATE TABLE t5 (a int) PARTITIONED BY (d1 int, d2 int, d3 int) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only"); -CREATE TABLE t6 (a int) PARTITIONED BY (d1 int, d2 int, d3 int) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only"); -set hive.mapred.mode=nonstrict; - -INSERT INTO TABLE t1 PARTITION (d1 = 1) SELECT key FROM src where key = 100 limit 1; -INSERT INTO TABLE t3 PARTITION (d1 = 1, d2 = 1) SELECT key FROM src where key = 100 limit 1; -INSERT INTO TABLE t5 PARTITION (d1 = 1, d2 = 1, d3=1) SELECT key FROM src where key = 100 limit 1; - -SELECT * FROM t1; - -SELECT * FROM t3; - -SELECT * FROM t5; - -ALTER TABLE t2 EXCHANGE PARTITION (d1 = 1) WITH TABLE t1; -SELECT * FROM t1; -SELECT * FROM t2; - -ALTER TABLE t4 EXCHANGE PARTITION (d1 = 1, d2 = 1) WITH TABLE t3; -SELECT * FROM t3; -SELECT * FROM t4; - -ALTER TABLE t6 EXCHANGE PARTITION (d1 = 1, d2 = 1, d3 = 1) WITH TABLE t5; -SELECT * FROM t5; -SELECT * FROM t6; - -DROP DATABASE ex1 CASCADE; -DROP DATABASE ex2 CASCADE; -DROP TABLE t1; -DROP TABLE t2; -DROP TABLE t3; -DROP TABLE t4; -DROP TABLE t5; -DROP TABLE t6; http://git-wip-us.apache.org/repos/asf/hive/blob/1e6a1825/ql/src/test/results/clientnegative/exchange_partition_neg_with_fullacid_table.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/exchange_partition_neg_with_fullacid_table.q.out b/ql/src/test/results/clientnegative/exchange_partition_neg_with_fullacid_table.q.out new file mode 100644 index 0000000..9a7f345 --- /dev/null +++ b/ql/src/test/results/clientnegative/exchange_partition_neg_with_fullacid_table.q.out @@ -0,0 +1,45 @@ +PREHOOK: query: DROP TABLE IF EXISTS t1 +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE IF EXISTS t1 +POSTHOOK: type: DROPTABLE +PREHOOK: query: DROP TABLE IF EXISTS t2 +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE IF EXISTS t2 +POSTHOOK: type: DROPTABLE +PREHOOK: query: CREATE TABLE t1 (a int) PARTITIONED BY (d1 int) STORED AS ORC TBLPROPERTIES ("transactional"="true") +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@t1 +POSTHOOK: query: CREATE TABLE t1 (a int) PARTITIONED BY (d1 int) STORED AS ORC TBLPROPERTIES ("transactional"="true") +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@t1 +PREHOOK: query: CREATE TABLE t2 (a int) PARTITIONED BY (d1 int) STORED AS ORC TBLPROPERTIES ("transactional"="true") +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@t2 +POSTHOOK: query: CREATE TABLE t2 (a int) PARTITIONED BY (d1 int) STORED AS ORC TBLPROPERTIES ("transactional"="true") +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@t2 +PREHOOK: query: INSERT INTO TABLE t1 PARTITION (d1 = 1) SELECT key FROM src where key = 100 limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@t1@d1=1 +POSTHOOK: query: INSERT INTO TABLE t1 PARTITION (d1 = 1) SELECT key FROM src where key = 100 limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@t1@d1=1 +POSTHOOK: Lineage: t1 PARTITION(d1=1).a EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ] +PREHOOK: query: SELECT * FROM t1 +PREHOOK: type: QUERY +PREHOOK: Input: default@t1 +PREHOOK: Input: default@t1@d1=1 +#### A masked pattern was here #### +POSTHOOK: query: SELECT * FROM t1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@t1 +POSTHOOK: Input: default@t1@d1=1 +#### A masked pattern was here #### +100 1 +FAILED: SemanticException [Error 10236]: Exchange partition is not allowed with transactional tables. Alternatively, shall use load data or insert overwrite to move partitions. http://git-wip-us.apache.org/repos/asf/hive/blob/1e6a1825/ql/src/test/results/clientnegative/exchange_partition_neg_with_mm_table.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/exchange_partition_neg_with_mm_table.q.out b/ql/src/test/results/clientnegative/exchange_partition_neg_with_mm_table.q.out new file mode 100644 index 0000000..7908b0e --- /dev/null +++ b/ql/src/test/results/clientnegative/exchange_partition_neg_with_mm_table.q.out @@ -0,0 +1,69 @@ +PREHOOK: query: drop database if exists ex1 cascade +PREHOOK: type: DROPDATABASE +POSTHOOK: query: drop database if exists ex1 cascade +POSTHOOK: type: DROPDATABASE +PREHOOK: query: drop database if exists ex2 cascade +PREHOOK: type: DROPDATABASE +POSTHOOK: query: drop database if exists ex2 cascade +POSTHOOK: type: DROPDATABASE +PREHOOK: query: create database ex1 +PREHOOK: type: CREATEDATABASE +PREHOOK: Output: database:ex1 +POSTHOOK: query: create database ex1 +POSTHOOK: type: CREATEDATABASE +POSTHOOK: Output: database:ex1 +PREHOOK: query: create database ex2 +PREHOOK: type: CREATEDATABASE +PREHOOK: Output: database:ex2 +POSTHOOK: query: create database ex2 +POSTHOOK: type: CREATEDATABASE +POSTHOOK: Output: database:ex2 +PREHOOK: query: CREATE TABLE ex1.exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:ex1 +PREHOOK: Output: ex1@exchange_part_test1 +POSTHOOK: query: CREATE TABLE ex1.exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:ex1 +POSTHOOK: Output: ex1@exchange_part_test1 +PREHOOK: query: CREATE TABLE ex2.exchange_part_test2 (f1 string) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:ex2 +PREHOOK: Output: ex2@exchange_part_test2 +POSTHOOK: query: CREATE TABLE ex2.exchange_part_test2 (f1 string) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:ex2 +POSTHOOK: Output: ex2@exchange_part_test2 +PREHOOK: query: SHOW PARTITIONS ex1.exchange_part_test1 +PREHOOK: type: SHOWPARTITIONS +PREHOOK: Input: ex1@exchange_part_test1 +POSTHOOK: query: SHOW PARTITIONS ex1.exchange_part_test1 +POSTHOOK: type: SHOWPARTITIONS +POSTHOOK: Input: ex1@exchange_part_test1 +PREHOOK: query: SHOW PARTITIONS ex2.exchange_part_test2 +PREHOOK: type: SHOWPARTITIONS +PREHOOK: Input: ex2@exchange_part_test2 +POSTHOOK: query: SHOW PARTITIONS ex2.exchange_part_test2 +POSTHOOK: type: SHOWPARTITIONS +POSTHOOK: Input: ex2@exchange_part_test2 +PREHOOK: query: ALTER TABLE ex2.exchange_part_test2 ADD PARTITION (ds='2013-04-05') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: ex2@exchange_part_test2 +POSTHOOK: query: ALTER TABLE ex2.exchange_part_test2 ADD PARTITION (ds='2013-04-05') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: ex2@exchange_part_test2 +POSTHOOK: Output: ex2@exchange_part_test2@ds=2013-04-05 +PREHOOK: query: SHOW PARTITIONS ex1.exchange_part_test1 +PREHOOK: type: SHOWPARTITIONS +PREHOOK: Input: ex1@exchange_part_test1 +POSTHOOK: query: SHOW PARTITIONS ex1.exchange_part_test1 +POSTHOOK: type: SHOWPARTITIONS +POSTHOOK: Input: ex1@exchange_part_test1 +PREHOOK: query: SHOW PARTITIONS ex2.exchange_part_test2 +PREHOOK: type: SHOWPARTITIONS +PREHOOK: Input: ex2@exchange_part_test2 +POSTHOOK: query: SHOW PARTITIONS ex2.exchange_part_test2 +POSTHOOK: type: SHOWPARTITIONS +POSTHOOK: Input: ex2@exchange_part_test2 +ds=2013-04-05 +FAILED: SemanticException [Error 10236]: Exchange partition is not allowed with transactional tables. Alternatively, shall use load data or insert overwrite to move partitions. http://git-wip-us.apache.org/repos/asf/hive/blob/1e6a1825/ql/src/test/results/clientpositive/mm_exchangepartition.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/mm_exchangepartition.q.out b/ql/src/test/results/clientpositive/mm_exchangepartition.q.out deleted file mode 100644 index 3ba6c21..0000000 --- a/ql/src/test/results/clientpositive/mm_exchangepartition.q.out +++ /dev/null @@ -1,382 +0,0 @@ -PREHOOK: query: drop database if exists ex1 -PREHOOK: type: DROPDATABASE -POSTHOOK: query: drop database if exists ex1 -POSTHOOK: type: DROPDATABASE -PREHOOK: query: drop database if exists ex2 -PREHOOK: type: DROPDATABASE -POSTHOOK: query: drop database if exists ex2 -POSTHOOK: type: DROPDATABASE -PREHOOK: query: create database ex1 -PREHOOK: type: CREATEDATABASE -PREHOOK: Output: database:ex1 -POSTHOOK: query: create database ex1 -POSTHOOK: type: CREATEDATABASE -POSTHOOK: Output: database:ex1 -PREHOOK: query: create database ex2 -PREHOOK: type: CREATEDATABASE -PREHOOK: Output: database:ex2 -POSTHOOK: query: create database ex2 -POSTHOOK: type: CREATEDATABASE -POSTHOOK: Output: database:ex2 -PREHOOK: query: CREATE TABLE ex1.exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") -PREHOOK: type: CREATETABLE -PREHOOK: Output: database:ex1 -PREHOOK: Output: ex1@exchange_part_test1 -POSTHOOK: query: CREATE TABLE ex1.exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") -POSTHOOK: type: CREATETABLE -POSTHOOK: Output: database:ex1 -POSTHOOK: Output: ex1@exchange_part_test1 -PREHOOK: query: CREATE TABLE ex2.exchange_part_test2 (f1 string) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") -PREHOOK: type: CREATETABLE -PREHOOK: Output: database:ex2 -PREHOOK: Output: ex2@exchange_part_test2 -POSTHOOK: query: CREATE TABLE ex2.exchange_part_test2 (f1 string) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") -POSTHOOK: type: CREATETABLE -POSTHOOK: Output: database:ex2 -POSTHOOK: Output: ex2@exchange_part_test2 -PREHOOK: query: SHOW PARTITIONS ex1.exchange_part_test1 -PREHOOK: type: SHOWPARTITIONS -PREHOOK: Input: ex1@exchange_part_test1 -POSTHOOK: query: SHOW PARTITIONS ex1.exchange_part_test1 -POSTHOOK: type: SHOWPARTITIONS -POSTHOOK: Input: ex1@exchange_part_test1 -PREHOOK: query: SHOW PARTITIONS ex2.exchange_part_test2 -PREHOOK: type: SHOWPARTITIONS -PREHOOK: Input: ex2@exchange_part_test2 -POSTHOOK: query: SHOW PARTITIONS ex2.exchange_part_test2 -POSTHOOK: type: SHOWPARTITIONS -POSTHOOK: Input: ex2@exchange_part_test2 -PREHOOK: query: ALTER TABLE ex2.exchange_part_test2 ADD PARTITION (ds='2013-04-05') -PREHOOK: type: ALTERTABLE_ADDPARTS -PREHOOK: Output: ex2@exchange_part_test2 -POSTHOOK: query: ALTER TABLE ex2.exchange_part_test2 ADD PARTITION (ds='2013-04-05') -POSTHOOK: type: ALTERTABLE_ADDPARTS -POSTHOOK: Output: ex2@exchange_part_test2 -POSTHOOK: Output: ex2@exchange_part_test2@ds=2013-04-05 -PREHOOK: query: SHOW PARTITIONS ex1.exchange_part_test1 -PREHOOK: type: SHOWPARTITIONS -PREHOOK: Input: ex1@exchange_part_test1 -POSTHOOK: query: SHOW PARTITIONS ex1.exchange_part_test1 -POSTHOOK: type: SHOWPARTITIONS -POSTHOOK: Input: ex1@exchange_part_test1 -PREHOOK: query: SHOW PARTITIONS ex2.exchange_part_test2 -PREHOOK: type: SHOWPARTITIONS -PREHOOK: Input: ex2@exchange_part_test2 -POSTHOOK: query: SHOW PARTITIONS ex2.exchange_part_test2 -POSTHOOK: type: SHOWPARTITIONS -POSTHOOK: Input: ex2@exchange_part_test2 -ds=2013-04-05 -PREHOOK: query: ALTER TABLE ex1.exchange_part_test1 EXCHANGE PARTITION (ds='2013-04-05') WITH TABLE ex2.exchange_part_test2 -PREHOOK: type: ALTERTABLE_EXCHANGEPARTITION -PREHOOK: Input: ex2@exchange_part_test2 -PREHOOK: Output: ex1@exchange_part_test1 -POSTHOOK: query: ALTER TABLE ex1.exchange_part_test1 EXCHANGE PARTITION (ds='2013-04-05') WITH TABLE ex2.exchange_part_test2 -POSTHOOK: type: ALTERTABLE_EXCHANGEPARTITION -POSTHOOK: Input: ex2@exchange_part_test2 -POSTHOOK: Input: ex2@exchange_part_test2@ds=2013-04-05 -POSTHOOK: Output: ex1@exchange_part_test1 -POSTHOOK: Output: ex1@exchange_part_test1@ds=2013-04-05 -POSTHOOK: Output: ex2@exchange_part_test2@ds=2013-04-05 -PREHOOK: query: SHOW PARTITIONS ex1.exchange_part_test1 -PREHOOK: type: SHOWPARTITIONS -PREHOOK: Input: ex1@exchange_part_test1 -POSTHOOK: query: SHOW PARTITIONS ex1.exchange_part_test1 -POSTHOOK: type: SHOWPARTITIONS -POSTHOOK: Input: ex1@exchange_part_test1 -ds=2013-04-05 -PREHOOK: query: SHOW PARTITIONS ex2.exchange_part_test2 -PREHOOK: type: SHOWPARTITIONS -PREHOOK: Input: ex2@exchange_part_test2 -POSTHOOK: query: SHOW PARTITIONS ex2.exchange_part_test2 -POSTHOOK: type: SHOWPARTITIONS -POSTHOOK: Input: ex2@exchange_part_test2 -PREHOOK: query: DROP TABLE IF EXISTS t1 -PREHOOK: type: DROPTABLE -POSTHOOK: query: DROP TABLE IF EXISTS t1 -POSTHOOK: type: DROPTABLE -PREHOOK: query: DROP TABLE IF EXISTS t2 -PREHOOK: type: DROPTABLE -POSTHOOK: query: DROP TABLE IF EXISTS t2 -POSTHOOK: type: DROPTABLE -PREHOOK: query: DROP TABLE IF EXISTS t3 -PREHOOK: type: DROPTABLE -POSTHOOK: query: DROP TABLE IF EXISTS t3 -POSTHOOK: type: DROPTABLE -PREHOOK: query: DROP TABLE IF EXISTS t4 -PREHOOK: type: DROPTABLE -POSTHOOK: query: DROP TABLE IF EXISTS t4 -POSTHOOK: type: DROPTABLE -PREHOOK: query: DROP TABLE IF EXISTS t5 -PREHOOK: type: DROPTABLE -POSTHOOK: query: DROP TABLE IF EXISTS t5 -POSTHOOK: type: DROPTABLE -PREHOOK: query: DROP TABLE IF EXISTS t6 -PREHOOK: type: DROPTABLE -POSTHOOK: query: DROP TABLE IF EXISTS t6 -POSTHOOK: type: DROPTABLE -PREHOOK: query: CREATE TABLE t1 (a int) PARTITIONED BY (d1 int) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") -PREHOOK: type: CREATETABLE -PREHOOK: Output: database:default -PREHOOK: Output: default@t1 -POSTHOOK: query: CREATE TABLE t1 (a int) PARTITIONED BY (d1 int) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") -POSTHOOK: type: CREATETABLE -POSTHOOK: Output: database:default -POSTHOOK: Output: default@t1 -PREHOOK: query: CREATE TABLE t2 (a int) PARTITIONED BY (d1 int) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") -PREHOOK: type: CREATETABLE -PREHOOK: Output: database:default -PREHOOK: Output: default@t2 -POSTHOOK: query: CREATE TABLE t2 (a int) PARTITIONED BY (d1 int) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") -POSTHOOK: type: CREATETABLE -POSTHOOK: Output: database:default -POSTHOOK: Output: default@t2 -PREHOOK: query: CREATE TABLE t3 (a int) PARTITIONED BY (d1 int, d2 int) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") -PREHOOK: type: CREATETABLE -PREHOOK: Output: database:default -PREHOOK: Output: default@t3 -POSTHOOK: query: CREATE TABLE t3 (a int) PARTITIONED BY (d1 int, d2 int) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") -POSTHOOK: type: CREATETABLE -POSTHOOK: Output: database:default -POSTHOOK: Output: default@t3 -PREHOOK: query: CREATE TABLE t4 (a int) PARTITIONED BY (d1 int, d2 int) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") -PREHOOK: type: CREATETABLE -PREHOOK: Output: database:default -PREHOOK: Output: default@t4 -POSTHOOK: query: CREATE TABLE t4 (a int) PARTITIONED BY (d1 int, d2 int) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") -POSTHOOK: type: CREATETABLE -POSTHOOK: Output: database:default -POSTHOOK: Output: default@t4 -PREHOOK: query: CREATE TABLE t5 (a int) PARTITIONED BY (d1 int, d2 int, d3 int) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") -PREHOOK: type: CREATETABLE -PREHOOK: Output: database:default -PREHOOK: Output: default@t5 -POSTHOOK: query: CREATE TABLE t5 (a int) PARTITIONED BY (d1 int, d2 int, d3 int) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") -POSTHOOK: type: CREATETABLE -POSTHOOK: Output: database:default -POSTHOOK: Output: default@t5 -PREHOOK: query: CREATE TABLE t6 (a int) PARTITIONED BY (d1 int, d2 int, d3 int) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") -PREHOOK: type: CREATETABLE -PREHOOK: Output: database:default -PREHOOK: Output: default@t6 -POSTHOOK: query: CREATE TABLE t6 (a int) PARTITIONED BY (d1 int, d2 int, d3 int) TBLPROPERTIES ("transactional"="true", "transactional_properties"="insert_only") -POSTHOOK: type: CREATETABLE -POSTHOOK: Output: database:default -POSTHOOK: Output: default@t6 -PREHOOK: query: INSERT INTO TABLE t1 PARTITION (d1 = 1) SELECT key FROM src where key = 100 limit 1 -PREHOOK: type: QUERY -PREHOOK: Input: default@src -PREHOOK: Output: default@t1@d1=1 -POSTHOOK: query: INSERT INTO TABLE t1 PARTITION (d1 = 1) SELECT key FROM src where key = 100 limit 1 -POSTHOOK: type: QUERY -POSTHOOK: Input: default@src -POSTHOOK: Output: default@t1@d1=1 -POSTHOOK: Lineage: t1 PARTITION(d1=1).a EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ] -PREHOOK: query: INSERT INTO TABLE t3 PARTITION (d1 = 1, d2 = 1) SELECT key FROM src where key = 100 limit 1 -PREHOOK: type: QUERY -PREHOOK: Input: default@src -PREHOOK: Output: default@t3@d1=1/d2=1 -POSTHOOK: query: INSERT INTO TABLE t3 PARTITION (d1 = 1, d2 = 1) SELECT key FROM src where key = 100 limit 1 -POSTHOOK: type: QUERY -POSTHOOK: Input: default@src -POSTHOOK: Output: default@t3@d1=1/d2=1 -POSTHOOK: Lineage: t3 PARTITION(d1=1,d2=1).a EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ] -PREHOOK: query: INSERT INTO TABLE t5 PARTITION (d1 = 1, d2 = 1, d3=1) SELECT key FROM src where key = 100 limit 1 -PREHOOK: type: QUERY -PREHOOK: Input: default@src -PREHOOK: Output: default@t5@d1=1/d2=1/d3=1 -POSTHOOK: query: INSERT INTO TABLE t5 PARTITION (d1 = 1, d2 = 1, d3=1) SELECT key FROM src where key = 100 limit 1 -POSTHOOK: type: QUERY -POSTHOOK: Input: default@src -POSTHOOK: Output: default@t5@d1=1/d2=1/d3=1 -POSTHOOK: Lineage: t5 PARTITION(d1=1,d2=1,d3=1).a EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ] -PREHOOK: query: SELECT * FROM t1 -PREHOOK: type: QUERY -PREHOOK: Input: default@t1 -PREHOOK: Input: default@t1@d1=1 -#### A masked pattern was here #### -POSTHOOK: query: SELECT * FROM t1 -POSTHOOK: type: QUERY -POSTHOOK: Input: default@t1 -POSTHOOK: Input: default@t1@d1=1 -#### A masked pattern was here #### -100 1 -PREHOOK: query: SELECT * FROM t3 -PREHOOK: type: QUERY -PREHOOK: Input: default@t3 -PREHOOK: Input: default@t3@d1=1/d2=1 -#### A masked pattern was here #### -POSTHOOK: query: SELECT * FROM t3 -POSTHOOK: type: QUERY -POSTHOOK: Input: default@t3 -POSTHOOK: Input: default@t3@d1=1/d2=1 -#### A masked pattern was here #### -100 1 1 -PREHOOK: query: SELECT * FROM t5 -PREHOOK: type: QUERY -PREHOOK: Input: default@t5 -PREHOOK: Input: default@t5@d1=1/d2=1/d3=1 -#### A masked pattern was here #### -POSTHOOK: query: SELECT * FROM t5 -POSTHOOK: type: QUERY -POSTHOOK: Input: default@t5 -POSTHOOK: Input: default@t5@d1=1/d2=1/d3=1 -#### A masked pattern was here #### -100 1 1 1 -PREHOOK: query: ALTER TABLE t2 EXCHANGE PARTITION (d1 = 1) WITH TABLE t1 -PREHOOK: type: ALTERTABLE_EXCHANGEPARTITION -PREHOOK: Input: default@t1 -PREHOOK: Output: default@t2 -POSTHOOK: query: ALTER TABLE t2 EXCHANGE PARTITION (d1 = 1) WITH TABLE t1 -POSTHOOK: type: ALTERTABLE_EXCHANGEPARTITION -POSTHOOK: Input: default@t1 -POSTHOOK: Input: default@t1@d1=1 -POSTHOOK: Output: default@t1@d1=1 -POSTHOOK: Output: default@t2 -POSTHOOK: Output: default@t2@d1=1 -PREHOOK: query: SELECT * FROM t1 -PREHOOK: type: QUERY -PREHOOK: Input: default@t1 -#### A masked pattern was here #### -POSTHOOK: query: SELECT * FROM t1 -POSTHOOK: type: QUERY -POSTHOOK: Input: default@t1 -#### A masked pattern was here #### -PREHOOK: query: SELECT * FROM t2 -PREHOOK: type: QUERY -PREHOOK: Input: default@t2 -PREHOOK: Input: default@t2@d1=1 -#### A masked pattern was here #### -POSTHOOK: query: SELECT * FROM t2 -POSTHOOK: type: QUERY -POSTHOOK: Input: default@t2 -POSTHOOK: Input: default@t2@d1=1 -#### A masked pattern was here #### -100 1 -PREHOOK: query: ALTER TABLE t4 EXCHANGE PARTITION (d1 = 1, d2 = 1) WITH TABLE t3 -PREHOOK: type: ALTERTABLE_EXCHANGEPARTITION -PREHOOK: Input: default@t3 -PREHOOK: Output: default@t4 -POSTHOOK: query: ALTER TABLE t4 EXCHANGE PARTITION (d1 = 1, d2 = 1) WITH TABLE t3 -POSTHOOK: type: ALTERTABLE_EXCHANGEPARTITION -POSTHOOK: Input: default@t3 -POSTHOOK: Input: default@t3@d1=1/d2=1 -POSTHOOK: Output: default@t3@d1=1/d2=1 -POSTHOOK: Output: default@t4 -POSTHOOK: Output: default@t4@d1=1/d2=1 -PREHOOK: query: SELECT * FROM t3 -PREHOOK: type: QUERY -PREHOOK: Input: default@t3 -#### A masked pattern was here #### -POSTHOOK: query: SELECT * FROM t3 -POSTHOOK: type: QUERY -POSTHOOK: Input: default@t3 -#### A masked pattern was here #### -PREHOOK: query: SELECT * FROM t4 -PREHOOK: type: QUERY -PREHOOK: Input: default@t4 -PREHOOK: Input: default@t4@d1=1/d2=1 -#### A masked pattern was here #### -POSTHOOK: query: SELECT * FROM t4 -POSTHOOK: type: QUERY -POSTHOOK: Input: default@t4 -POSTHOOK: Input: default@t4@d1=1/d2=1 -#### A masked pattern was here #### -100 1 1 -PREHOOK: query: ALTER TABLE t6 EXCHANGE PARTITION (d1 = 1, d2 = 1, d3 = 1) WITH TABLE t5 -PREHOOK: type: ALTERTABLE_EXCHANGEPARTITION -PREHOOK: Input: default@t5 -PREHOOK: Output: default@t6 -POSTHOOK: query: ALTER TABLE t6 EXCHANGE PARTITION (d1 = 1, d2 = 1, d3 = 1) WITH TABLE t5 -POSTHOOK: type: ALTERTABLE_EXCHANGEPARTITION -POSTHOOK: Input: default@t5 -POSTHOOK: Input: default@t5@d1=1/d2=1/d3=1 -POSTHOOK: Output: default@t5@d1=1/d2=1/d3=1 -POSTHOOK: Output: default@t6 -POSTHOOK: Output: default@t6@d1=1/d2=1/d3=1 -PREHOOK: query: SELECT * FROM t5 -PREHOOK: type: QUERY -PREHOOK: Input: default@t5 -#### A masked pattern was here #### -POSTHOOK: query: SELECT * FROM t5 -POSTHOOK: type: QUERY -POSTHOOK: Input: default@t5 -#### A masked pattern was here #### -PREHOOK: query: SELECT * FROM t6 -PREHOOK: type: QUERY -PREHOOK: Input: default@t6 -PREHOOK: Input: default@t6@d1=1/d2=1/d3=1 -#### A masked pattern was here #### -POSTHOOK: query: SELECT * FROM t6 -POSTHOOK: type: QUERY -POSTHOOK: Input: default@t6 -POSTHOOK: Input: default@t6@d1=1/d2=1/d3=1 -#### A masked pattern was here #### -100 1 1 1 -PREHOOK: query: DROP DATABASE ex1 CASCADE -PREHOOK: type: DROPDATABASE -PREHOOK: Input: database:ex1 -PREHOOK: Output: database:ex1 -PREHOOK: Output: ex1@exchange_part_test1 -POSTHOOK: query: DROP DATABASE ex1 CASCADE -POSTHOOK: type: DROPDATABASE -POSTHOOK: Input: database:ex1 -POSTHOOK: Output: database:ex1 -POSTHOOK: Output: ex1@exchange_part_test1 -PREHOOK: query: DROP DATABASE ex2 CASCADE -PREHOOK: type: DROPDATABASE -PREHOOK: Input: database:ex2 -PREHOOK: Output: database:ex2 -PREHOOK: Output: ex2@exchange_part_test2 -POSTHOOK: query: DROP DATABASE ex2 CASCADE -POSTHOOK: type: DROPDATABASE -POSTHOOK: Input: database:ex2 -POSTHOOK: Output: database:ex2 -POSTHOOK: Output: ex2@exchange_part_test2 -PREHOOK: query: DROP TABLE t1 -PREHOOK: type: DROPTABLE -PREHOOK: Input: default@t1 -PREHOOK: Output: default@t1 -POSTHOOK: query: DROP TABLE t1 -POSTHOOK: type: DROPTABLE -POSTHOOK: Input: default@t1 -POSTHOOK: Output: default@t1 -PREHOOK: query: DROP TABLE t2 -PREHOOK: type: DROPTABLE -PREHOOK: Input: default@t2 -PREHOOK: Output: default@t2 -POSTHOOK: query: DROP TABLE t2 -POSTHOOK: type: DROPTABLE -POSTHOOK: Input: default@t2 -POSTHOOK: Output: default@t2 -PREHOOK: query: DROP TABLE t3 -PREHOOK: type: DROPTABLE -PREHOOK: Input: default@t3 -PREHOOK: Output: default@t3 -POSTHOOK: query: DROP TABLE t3 -POSTHOOK: type: DROPTABLE -POSTHOOK: Input: default@t3 -POSTHOOK: Output: default@t3 -PREHOOK: query: DROP TABLE t4 -PREHOOK: type: DROPTABLE -PREHOOK: Input: default@t4 -PREHOOK: Output: default@t4 -POSTHOOK: query: DROP TABLE t4 -POSTHOOK: type: DROPTABLE -POSTHOOK: Input: default@t4 -POSTHOOK: Output: default@t4 -PREHOOK: query: DROP TABLE t5 -PREHOOK: type: DROPTABLE -PREHOOK: Input: default@t5 -PREHOOK: Output: default@t5 -POSTHOOK: query: DROP TABLE t5 -POSTHOOK: type: DROPTABLE -POSTHOOK: Input: default@t5 -POSTHOOK: Output: default@t5 -PREHOOK: query: DROP TABLE t6 -PREHOOK: type: DROPTABLE -PREHOOK: Input: default@t6 -PREHOOK: Output: default@t6 -POSTHOOK: query: DROP TABLE t6 -POSTHOOK: type: DROPTABLE -POSTHOOK: Input: default@t6 -POSTHOOK: Output: default@t6