This is an automated email from the ASF dual-hosted git repository.
kgyrtkirk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new 869b6db HIVE-18702: INSERT OVERWRITE TABLE doesn't clean the table
directory before overwriting (Ivan Suller via Ashutosh Chauhan, Zoltan
Haindrich)
869b6db is described below
commit 869b6db7d74f3f76ddfa495d12ba950eaefeee7a
Author: Ivan Suller <[email protected]>
AuthorDate: Tue Apr 16 12:24:48 2019 +0200
HIVE-18702: INSERT OVERWRITE TABLE doesn't clean the table directory before
overwriting (Ivan Suller via Ashutosh Chauhan, Zoltan Haindrich)
Signed-off-by: Zoltan Haindrich <[email protected]>
---
.../test/resources/testconfiguration.properties | 1 +
.../org/apache/hadoop/hive/ql/metadata/Hive.java | 18 +-
.../test/queries/clientpositive/insert_overwrite.q | 77 +++++
.../clientpositive/llap/insert_overwrite.q.out | 375 +++++++++++++++++++++
4 files changed, 463 insertions(+), 8 deletions(-)
diff --git a/itests/src/test/resources/testconfiguration.properties
b/itests/src/test/resources/testconfiguration.properties
index 4a4cca7..09c3f2a 100644
--- a/itests/src/test/resources/testconfiguration.properties
+++ b/itests/src/test/resources/testconfiguration.properties
@@ -546,6 +546,7 @@ minillaplocal.query.files=\
insert_dir_distcp.q,\
insert_into_default_keyword.q,\
insert_into_with_schema.q,\
+ insert_overwrite.q,\
insert_values_orig_table.q,\
insert_values_orig_table_use_metadata.q,\
insert1_overwrite_partitions.q,\
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 fdd3e46..40c6cf6 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
@@ -2138,7 +2138,7 @@ public class Hive {
boolean needRecycle = !tbl.isTemporary()
&&
ReplChangeManager.isSourceOfReplication(Hive.get().getDatabase(tbl.getDbName()));
replaceFiles(tbl.getPath(), loadPath, destPath, oldPartPath,
getConf(), isSrcLocal,
- isAutoPurge, newFiles, FileUtils.HIDDEN_FILES_PATH_FILTER,
needRecycle, isManaged);
+ isAutoPurge, newFiles, FileUtils.HIDDEN_FILES_PATH_FILTER,
needRecycle, isManaged, isInsertOverwrite);
} else {
FileSystem fs = destPath.getFileSystem(conf);
copyFiles(conf, loadPath, destPath, fs, isSrcLocal,
isAcidIUDoperation,
@@ -2897,7 +2897,7 @@ private void constructOneLBLocationMap(FileStatus fSta,
boolean needRecycle = !tbl.isTemporary()
&&
ReplChangeManager.isSourceOfReplication(Hive.get().getDatabase(tbl.getDbName()));
replaceFiles(tblPath, loadPath, destPath, tblPath, conf, isSrcLocal,
isAutopurge,
- newFiles, FileUtils.HIDDEN_FILES_PATH_FILTER, needRecycle,
isManaged);
+ newFiles, FileUtils.HIDDEN_FILES_PATH_FILTER, needRecycle,
isManaged, isInsertOverwrite);
} else {
try {
FileSystem fs = tbl.getDataLocation().getFileSystem(conf);
@@ -4748,9 +4748,9 @@ private void constructOneLBLocationMap(FileStatus fSta,
* @param isManaged
* If the table is managed.
*/
- protected void replaceFiles(Path tablePath, Path srcf, Path destf, Path
oldPath, HiveConf conf,
+ private void replaceFiles(Path tablePath, Path srcf, Path destf, Path
oldPath, HiveConf conf,
boolean isSrcLocal, boolean purge, List<Path> newFiles, PathFilter
deletePathFilter,
- boolean isNeedRecycle, boolean isManaged) throws HiveException {
+ boolean isNeedRecycle, boolean isManaged, boolean isInsertOverwrite)
throws HiveException {
try {
FileSystem destFs = destf.getFileSystem(conf);
@@ -4763,15 +4763,17 @@ private void constructOneLBLocationMap(FileStatus fSta,
} catch (IOException e) {
throw new HiveException("Getting globStatus " + srcf.toString(), e);
}
+
+ // the extra check is required to make ALTER TABLE ... CONCATENATE work
+ if (oldPath != null && (srcs != null || isInsertOverwrite)) {
+ deleteOldPathForReplace(destf, oldPath, conf, purge, deletePathFilter,
isNeedRecycle);
+ }
+
if (srcs == null) {
LOG.info("No sources specified to move: " + srcf);
return;
}
- if (oldPath != null) {
- deleteOldPathForReplace(destf, oldPath, conf, purge, deletePathFilter,
isNeedRecycle);
- }
-
// first call FileUtils.mkdir to make sure that destf directory exists,
if not, it creates
// destf
boolean destfExist = FileUtils.mkdir(destFs, destf, conf);
diff --git a/ql/src/test/queries/clientpositive/insert_overwrite.q
b/ql/src/test/queries/clientpositive/insert_overwrite.q
new file mode 100644
index 0000000..12dd1b5
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/insert_overwrite.q
@@ -0,0 +1,77 @@
+set hive.exec.dynamic.partition.mode=nonstrict;
+set hive.stats.column.autogather=false;
+set hive.stats.autogather=false;
+set hive.compute.query.using.stats=false;
+
+CREATE EXTERNAL TABLE ext_non_part (col string);
+INSERT INTO ext_non_part VALUES ('first'), ('second');
+CREATE TABLE b LIKE ext_non_part;
+
+INSERT OVERWRITE TABLE ext_non_part SELECT * FROM b;
+
+-- should be 0
+SELECT count(*) FROM ext_non_part;
+
+drop table ext_non_part;
+
+CREATE TABLE int_non_part (col string);
+INSERT INTO int_non_part VALUES ('first'), ('second');
+
+INSERT OVERWRITE TABLE int_non_part SELECT * FROM b;
+
+-- should be 0
+SELECT count(*) FROM int_non_part;
+
+drop table int_non_part;
+drop table b;
+
+
+CREATE EXTERNAL TABLE ext_part (col string) partitioned by (par string);
+INSERT INTO ext_part PARTITION (par='1') VALUES ('first'), ('second');
+INSERT INTO ext_part PARTITION (par='2') VALUES ('first'), ('second');
+CREATE TABLE b (par string, col string);
+
+INSERT OVERWRITE TABLE ext_part PARTITION (par) SELECT * FROM b;
+
+-- should be 4
+SELECT count(*) FROM ext_part;
+
+INSERT INTO b VALUES ('third', '1');
+
+INSERT OVERWRITE TABLE ext_part PARTITION (par) SELECT * FROM b;
+
+-- should be 3
+SELECT count(*) FROM ext_part;
+
+SELECT * FROM ext_part ORDER BY par, col;
+
+drop table ext_part;
+drop table b;
+
+CREATE TABLE int_part (col string) partitioned by (par string);
+INSERT INTO int_part PARTITION (par='1') VALUES ('first'), ('second');
+INSERT INTO int_part PARTITION (par='2') VALUES ('first'), ('second');
+INSERT INTO int_part PARTITION (par='3') VALUES ('first'), ('second');
+CREATE TABLE b (par string, col string);
+
+INSERT OVERWRITE TABLE int_part PARTITION (par) SELECT * FROM b;
+
+-- should be 6
+SELECT count(*) FROM int_part;
+
+INSERT OVERWRITE TABLE int_part PARTITION (par='3') SELECT col FROM b;
+
+-- should be 4
+SELECT count(*) FROM int_part;
+
+INSERT INTO b VALUES ('third', '1');
+
+INSERT OVERWRITE TABLE int_part PARTITION (par) SELECT * FROM b;
+
+-- should be 3
+SELECT count(*) FROM int_part;
+
+SELECT * FROM int_part ORDER BY par, col;
+
+drop table int_part;
+drop table b;
diff --git a/ql/src/test/results/clientpositive/llap/insert_overwrite.q.out
b/ql/src/test/results/clientpositive/llap/insert_overwrite.q.out
new file mode 100644
index 0000000..68f7cc8
--- /dev/null
+++ b/ql/src/test/results/clientpositive/llap/insert_overwrite.q.out
@@ -0,0 +1,375 @@
+PREHOOK: query: CREATE EXTERNAL TABLE ext_non_part (col string)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@ext_non_part
+POSTHOOK: query: CREATE EXTERNAL TABLE ext_non_part (col string)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@ext_non_part
+PREHOOK: query: INSERT INTO ext_non_part VALUES ('first'), ('second')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@ext_non_part
+POSTHOOK: query: INSERT INTO ext_non_part VALUES ('first'), ('second')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@ext_non_part
+POSTHOOK: Lineage: ext_non_part.col SCRIPT []
+PREHOOK: query: CREATE TABLE b LIKE ext_non_part
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@b
+POSTHOOK: query: CREATE TABLE b LIKE ext_non_part
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@b
+PREHOOK: query: INSERT OVERWRITE TABLE ext_non_part SELECT * FROM b
+PREHOOK: type: QUERY
+PREHOOK: Input: default@b
+PREHOOK: Output: default@ext_non_part
+POSTHOOK: query: INSERT OVERWRITE TABLE ext_non_part SELECT * FROM b
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@b
+POSTHOOK: Output: default@ext_non_part
+POSTHOOK: Lineage: ext_non_part.col SIMPLE [(b)b.FieldSchema(name:col,
type:string, comment:null), ]
+PREHOOK: query: SELECT count(*) FROM ext_non_part
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ext_non_part
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT count(*) FROM ext_non_part
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ext_non_part
+#### A masked pattern was here ####
+0
+PREHOOK: query: drop table ext_non_part
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@ext_non_part
+PREHOOK: Output: default@ext_non_part
+POSTHOOK: query: drop table ext_non_part
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@ext_non_part
+POSTHOOK: Output: default@ext_non_part
+PREHOOK: query: CREATE TABLE int_non_part (col string)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@int_non_part
+POSTHOOK: query: CREATE TABLE int_non_part (col string)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@int_non_part
+PREHOOK: query: INSERT INTO int_non_part VALUES ('first'), ('second')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@int_non_part
+POSTHOOK: query: INSERT INTO int_non_part VALUES ('first'), ('second')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@int_non_part
+POSTHOOK: Lineage: int_non_part.col SCRIPT []
+PREHOOK: query: INSERT OVERWRITE TABLE int_non_part SELECT * FROM b
+PREHOOK: type: QUERY
+PREHOOK: Input: default@b
+PREHOOK: Output: default@int_non_part
+POSTHOOK: query: INSERT OVERWRITE TABLE int_non_part SELECT * FROM b
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@b
+POSTHOOK: Output: default@int_non_part
+POSTHOOK: Lineage: int_non_part.col SIMPLE [(b)b.FieldSchema(name:col,
type:string, comment:null), ]
+PREHOOK: query: SELECT count(*) FROM int_non_part
+PREHOOK: type: QUERY
+PREHOOK: Input: default@int_non_part
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT count(*) FROM int_non_part
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@int_non_part
+#### A masked pattern was here ####
+0
+PREHOOK: query: drop table int_non_part
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@int_non_part
+PREHOOK: Output: default@int_non_part
+POSTHOOK: query: drop table int_non_part
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@int_non_part
+POSTHOOK: Output: default@int_non_part
+PREHOOK: query: drop table b
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@b
+PREHOOK: Output: default@b
+POSTHOOK: query: drop table b
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@b
+POSTHOOK: Output: default@b
+PREHOOK: query: CREATE EXTERNAL TABLE ext_part (col string) partitioned by
(par string)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@ext_part
+POSTHOOK: query: CREATE EXTERNAL TABLE ext_part (col string) partitioned by
(par string)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@ext_part
+PREHOOK: query: INSERT INTO ext_part PARTITION (par='1') VALUES ('first'),
('second')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@ext_part@par=1
+POSTHOOK: query: INSERT INTO ext_part PARTITION (par='1') VALUES ('first'),
('second')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@ext_part@par=1
+POSTHOOK: Lineage: ext_part PARTITION(par=1).col SCRIPT []
+PREHOOK: query: INSERT INTO ext_part PARTITION (par='2') VALUES ('first'),
('second')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@ext_part@par=2
+POSTHOOK: query: INSERT INTO ext_part PARTITION (par='2') VALUES ('first'),
('second')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@ext_part@par=2
+POSTHOOK: Lineage: ext_part PARTITION(par=2).col SCRIPT []
+PREHOOK: query: CREATE TABLE b (par string, col string)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@b
+POSTHOOK: query: CREATE TABLE b (par string, col string)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@b
+PREHOOK: query: INSERT OVERWRITE TABLE ext_part PARTITION (par) SELECT * FROM b
+PREHOOK: type: QUERY
+PREHOOK: Input: default@b
+PREHOOK: Output: default@ext_part
+POSTHOOK: query: INSERT OVERWRITE TABLE ext_part PARTITION (par) SELECT * FROM
b
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@b
+PREHOOK: query: SELECT count(*) FROM ext_part
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ext_part
+PREHOOK: Input: default@ext_part@par=1
+PREHOOK: Input: default@ext_part@par=2
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT count(*) FROM ext_part
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ext_part
+POSTHOOK: Input: default@ext_part@par=1
+POSTHOOK: Input: default@ext_part@par=2
+#### A masked pattern was here ####
+4
+PREHOOK: query: INSERT INTO b VALUES ('third', '1')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@b
+POSTHOOK: query: INSERT INTO b VALUES ('third', '1')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@b
+POSTHOOK: Lineage: b.col SCRIPT []
+POSTHOOK: Lineage: b.par SCRIPT []
+PREHOOK: query: INSERT OVERWRITE TABLE ext_part PARTITION (par) SELECT * FROM b
+PREHOOK: type: QUERY
+PREHOOK: Input: default@b
+PREHOOK: Output: default@ext_part
+POSTHOOK: query: INSERT OVERWRITE TABLE ext_part PARTITION (par) SELECT * FROM
b
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@b
+POSTHOOK: Output: default@ext_part@par=1
+POSTHOOK: Lineage: ext_part PARTITION(par=1).col SIMPLE
[(b)b.FieldSchema(name:par, type:string, comment:null), ]
+PREHOOK: query: SELECT count(*) FROM ext_part
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ext_part
+PREHOOK: Input: default@ext_part@par=1
+PREHOOK: Input: default@ext_part@par=2
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT count(*) FROM ext_part
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ext_part
+POSTHOOK: Input: default@ext_part@par=1
+POSTHOOK: Input: default@ext_part@par=2
+#### A masked pattern was here ####
+3
+PREHOOK: query: SELECT * FROM ext_part ORDER BY par, col
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ext_part
+PREHOOK: Input: default@ext_part@par=1
+PREHOOK: Input: default@ext_part@par=2
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT * FROM ext_part ORDER BY par, col
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ext_part
+POSTHOOK: Input: default@ext_part@par=1
+POSTHOOK: Input: default@ext_part@par=2
+#### A masked pattern was here ####
+third 1
+first 2
+second 2
+PREHOOK: query: drop table ext_part
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@ext_part
+PREHOOK: Output: default@ext_part
+POSTHOOK: query: drop table ext_part
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@ext_part
+POSTHOOK: Output: default@ext_part
+PREHOOK: query: drop table b
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@b
+PREHOOK: Output: default@b
+POSTHOOK: query: drop table b
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@b
+POSTHOOK: Output: default@b
+PREHOOK: query: CREATE TABLE int_part (col string) partitioned by (par string)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@int_part
+POSTHOOK: query: CREATE TABLE int_part (col string) partitioned by (par string)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@int_part
+PREHOOK: query: INSERT INTO int_part PARTITION (par='1') VALUES ('first'),
('second')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@int_part@par=1
+POSTHOOK: query: INSERT INTO int_part PARTITION (par='1') VALUES ('first'),
('second')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@int_part@par=1
+POSTHOOK: Lineage: int_part PARTITION(par=1).col SCRIPT []
+PREHOOK: query: INSERT INTO int_part PARTITION (par='2') VALUES ('first'),
('second')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@int_part@par=2
+POSTHOOK: query: INSERT INTO int_part PARTITION (par='2') VALUES ('first'),
('second')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@int_part@par=2
+POSTHOOK: Lineage: int_part PARTITION(par=2).col SCRIPT []
+PREHOOK: query: INSERT INTO int_part PARTITION (par='3') VALUES ('first'),
('second')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@int_part@par=3
+POSTHOOK: query: INSERT INTO int_part PARTITION (par='3') VALUES ('first'),
('second')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@int_part@par=3
+POSTHOOK: Lineage: int_part PARTITION(par=3).col SCRIPT []
+PREHOOK: query: CREATE TABLE b (par string, col string)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@b
+POSTHOOK: query: CREATE TABLE b (par string, col string)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@b
+PREHOOK: query: INSERT OVERWRITE TABLE int_part PARTITION (par) SELECT * FROM b
+PREHOOK: type: QUERY
+PREHOOK: Input: default@b
+PREHOOK: Output: default@int_part
+POSTHOOK: query: INSERT OVERWRITE TABLE int_part PARTITION (par) SELECT * FROM
b
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@b
+PREHOOK: query: SELECT count(*) FROM int_part
+PREHOOK: type: QUERY
+PREHOOK: Input: default@int_part
+PREHOOK: Input: default@int_part@par=1
+PREHOOK: Input: default@int_part@par=2
+PREHOOK: Input: default@int_part@par=3
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT count(*) FROM int_part
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@int_part
+POSTHOOK: Input: default@int_part@par=1
+POSTHOOK: Input: default@int_part@par=2
+POSTHOOK: Input: default@int_part@par=3
+#### A masked pattern was here ####
+6
+PREHOOK: query: INSERT OVERWRITE TABLE int_part PARTITION (par='3') SELECT col
FROM b
+PREHOOK: type: QUERY
+PREHOOK: Input: default@b
+PREHOOK: Output: default@int_part@par=3
+POSTHOOK: query: INSERT OVERWRITE TABLE int_part PARTITION (par='3') SELECT
col FROM b
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@b
+POSTHOOK: Output: default@int_part@par=3
+POSTHOOK: Lineage: int_part PARTITION(par=3).col SIMPLE
[(b)b.FieldSchema(name:col, type:string, comment:null), ]
+PREHOOK: query: SELECT count(*) FROM int_part
+PREHOOK: type: QUERY
+PREHOOK: Input: default@int_part
+PREHOOK: Input: default@int_part@par=1
+PREHOOK: Input: default@int_part@par=2
+PREHOOK: Input: default@int_part@par=3
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT count(*) FROM int_part
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@int_part
+POSTHOOK: Input: default@int_part@par=1
+POSTHOOK: Input: default@int_part@par=2
+POSTHOOK: Input: default@int_part@par=3
+#### A masked pattern was here ####
+4
+PREHOOK: query: INSERT INTO b VALUES ('third', '1')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@b
+POSTHOOK: query: INSERT INTO b VALUES ('third', '1')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@b
+POSTHOOK: Lineage: b.col SCRIPT []
+POSTHOOK: Lineage: b.par SCRIPT []
+PREHOOK: query: INSERT OVERWRITE TABLE int_part PARTITION (par) SELECT * FROM b
+PREHOOK: type: QUERY
+PREHOOK: Input: default@b
+PREHOOK: Output: default@int_part
+POSTHOOK: query: INSERT OVERWRITE TABLE int_part PARTITION (par) SELECT * FROM
b
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@b
+POSTHOOK: Output: default@int_part@par=1
+POSTHOOK: Lineage: int_part PARTITION(par=1).col SIMPLE
[(b)b.FieldSchema(name:par, type:string, comment:null), ]
+PREHOOK: query: SELECT count(*) FROM int_part
+PREHOOK: type: QUERY
+PREHOOK: Input: default@int_part
+PREHOOK: Input: default@int_part@par=1
+PREHOOK: Input: default@int_part@par=2
+PREHOOK: Input: default@int_part@par=3
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT count(*) FROM int_part
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@int_part
+POSTHOOK: Input: default@int_part@par=1
+POSTHOOK: Input: default@int_part@par=2
+POSTHOOK: Input: default@int_part@par=3
+#### A masked pattern was here ####
+3
+PREHOOK: query: SELECT * FROM int_part ORDER BY par, col
+PREHOOK: type: QUERY
+PREHOOK: Input: default@int_part
+PREHOOK: Input: default@int_part@par=1
+PREHOOK: Input: default@int_part@par=2
+PREHOOK: Input: default@int_part@par=3
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT * FROM int_part ORDER BY par, col
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@int_part
+POSTHOOK: Input: default@int_part@par=1
+POSTHOOK: Input: default@int_part@par=2
+POSTHOOK: Input: default@int_part@par=3
+#### A masked pattern was here ####
+third 1
+first 2
+second 2
+PREHOOK: query: drop table int_part
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@int_part
+PREHOOK: Output: default@int_part
+POSTHOOK: query: drop table int_part
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@int_part
+POSTHOOK: Output: default@int_part
+PREHOOK: query: drop table b
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@b
+PREHOOK: Output: default@b
+POSTHOOK: query: drop table b
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@b
+POSTHOOK: Output: default@b