Index: common/src/java/org/apache/hadoop/hive/conf/HiveConf.java =================================================================== --- common/src/java/org/apache/hadoop/hive/conf/HiveConf.java (revision 1489269) +++ common/src/java/org/apache/hadoop/hive/conf/HiveConf.java (working copy) @@ -211,6 +211,7 @@ JOB_DEBUG_TIMEOUT("hive.exec.job.debug.timeout", 30000), TASKLOG_DEBUG_TIMEOUT("hive.exec.tasklog.debug.timeout", 20000), OUTPUT_FILE_EXTENSION("hive.output.file.extension", null), + OUTPUT_MARKSCHEMA("hive.output.markschema", false), // should hive determine whether to run in local mode automatically ? LOCALMODEAUTO("hive.exec.mode.local.auto", false), @@ -442,7 +443,7 @@ HIVECHECKFILEFORMAT("hive.fileformat.check", true), // default serde for rcfile - HIVEDEFAULTRCFILESERDE("hive.default.rcfile.serde", + HIVEDEFAULTRCFILESERDE("hive.default.rcfile.serde", "org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe"), //Location of Hive run time structured log file Index: conf/hive-default.xml.template =================================================================== --- conf/hive-default.xml.template (revision 1489269) +++ conf/hive-default.xml.template (working copy) @@ -1633,6 +1633,15 @@ + hive.output.markschema + + If set as true, for INSERT OVEWITE [LOCAL] DIRETORY statement, + the output will generate a file name _metadata,which contains result schema + with user defined separator. + + + + hive.insert.into.multilevel.dirs false Where to insert into multilevel directories like Index: ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java (revision 1489269) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java (working copy) @@ -19,6 +19,7 @@ package org.apache.hadoop.hive.ql.exec; import java.io.IOException; +import java.io.OutputStream; import java.io.Serializable; import java.security.AccessControlException; import java.util.ArrayList; @@ -35,6 +36,7 @@ import org.apache.hadoop.fs.LocalFileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hive.conf.HiveConf; +import org.apache.hadoop.hive.conf.HiveConf.ConfVars; import org.apache.hadoop.hive.metastore.MetaStoreUtils; import org.apache.hadoop.hive.metastore.api.InvalidOperationException; import org.apache.hadoop.hive.metastore.api.Order; @@ -202,6 +204,28 @@ if (lfd != null) { Path targetPath = new Path(lfd.getTargetDir()); Path sourcePath = new Path(lfd.getSourceDir()); + List schema = lfd.getAlias(); + if (HiveConf.getBoolVar(conf, ConfVars.OUTPUT_MARKSCHEMA) && schema != null) { + Path metaDataPath = new Path(sourcePath, "_metadata"); + FileSystem fs = FileSystem.get(conf); + OutputStream out = fs.create(metaDataPath); + String resultSchema = ""; + String fieldDelim = lfd.getFieldDelim(); + if (null == fieldDelim || fieldDelim.equals("1")) { + fieldDelim = "\001"; + } + boolean first = true; + for (String col : schema) { + if (!first) { + resultSchema = resultSchema.concat(fieldDelim); + } + first = false; + resultSchema = resultSchema.concat(col); + } + resultSchema = resultSchema.concat("\n"); + out.write(resultSchema.getBytes("UTF-8")); + out.close(); + } moveFile(sourcePath, targetPath, lfd.getIsDfsDir()); } Index: ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (revision 1489269) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (working copy) @@ -192,6 +192,7 @@ import org.apache.hadoop.hive.ql.udf.generic.GenericUDFHash; import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPOr; import org.apache.hadoop.hive.ql.udf.generic.GenericUDTF; +import org.apache.hadoop.hive.serde.Constants; import org.apache.hadoop.hive.serde.serdeConstants; import org.apache.hadoop.hive.serde2.Deserializer; import org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe; @@ -5144,6 +5145,7 @@ + dest_path, e); } } + List alias = new ArrayList(); String cols = ""; String colTypes = ""; ArrayList colInfos = inputRR.getColumnInfos(); @@ -5163,6 +5165,7 @@ if (nm[1] != null) { // non-null column alias colInfo.setAlias(nm[1]); + alias.add(nm[1]); } if (field_schemas != null) { @@ -5216,8 +5219,8 @@ } boolean isDfsDir = (dest_type.intValue() == QBMetaData.DEST_DFS_FILE); - loadFileWork.add(new LoadFileDesc(tblDesc, queryTmpdir, destStr, isDfsDir, cols, - colTypes)); + LoadFileDesc lfd = new LoadFileDesc(tblDesc, queryTmpdir, destStr, isDfsDir, alias, cols, + colTypes); if (tblDesc == null) { if (qb.getIsQuery()) { @@ -5230,6 +5233,9 @@ table_desc = PlanUtils.getTableDesc(tblDesc, cols, colTypes); } + lfd.setFieldDelim(table_desc.getProperties().getProperty(Constants.FIELD_DELIM)); + loadFileWork.add(lfd); + if (!outputs.add(new WriteEntity(destStr, !isDfsDir))) { throw new SemanticException(ErrorMsg.OUTPUT_SPECIFIED_MULTIPLE_TIMES .getMsg(destStr)); Index: ql/src/java/org/apache/hadoop/hive/ql/plan/LoadFileDesc.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/plan/LoadFileDesc.java (revision 1489269) +++ ql/src/java/org/apache/hadoop/hive/ql/plan/LoadFileDesc.java (working copy) @@ -19,7 +19,10 @@ package org.apache.hadoop.hive.ql.plan; import java.io.Serializable; +import java.util.List; +import org.apache.hadoop.hive.ql.exec.Utilities; + /** * LoadFileDesc. * @@ -28,10 +31,15 @@ private static final long serialVersionUID = 1L; private String targetDir; private boolean isDfsDir; - // list of columns, comma separated - private String columns; + private List alias; // list of alias of the column (external name as seen by the users) + private String columns; // list of columns, comma separated private String columnTypes; private String destinationCreateTable; + private String fieldDelim = Integer.toString(Utilities.ctrlaCode); + private String fieldEscape; + private String collItemDelim; + private String mapKeyDelim; + private String lineDelim; public LoadFileDesc() { } @@ -58,6 +66,29 @@ this.columnTypes = columnTypes; } + public LoadFileDesc(final CreateTableDesc createTableDesc, final String sourceDir, + final String targetDir, + final boolean isDfsDir,final List alias, final String columns, final String columnTypes) { + this(sourceDir, targetDir, isDfsDir, alias, columns, columnTypes); + if (createTableDesc != null && createTableDesc.getDatabaseName() != null + && createTableDesc.getTableName() != null) { + destinationCreateTable = (createTableDesc.getTableName().contains(".") ? "" : createTableDesc + .getDatabaseName() + ".") + + createTableDesc.getTableName(); + } + } + + public LoadFileDesc(final String sourceDir, final String targetDir, + final boolean isDfsDir, final List alias, final String columns, final String columnTypes) { + + super(sourceDir); + this.targetDir = targetDir; + this.isDfsDir = isDfsDir; + this.alias = alias; + this.columns = columns; + this.columnTypes = columnTypes; + } + @Explain(displayName = "destination") public String getTargetDir() { return targetDir; @@ -112,4 +143,56 @@ public String getDestinationCreateTable(){ return destinationCreateTable; } + + public List getAlias() { + return alias; + } + + public void setAlias(List alias) { + this.alias = alias; + } + + public String getFieldEscape() { + return fieldEscape; + } + + public void setFieldEscape(String fieldEscape) { + this.fieldEscape = fieldEscape; + } + + public String getMapKeyDelim() { + return mapKeyDelim; + } + + public void setMapKeyDelim(String mapKeyDelim) { + this.mapKeyDelim = mapKeyDelim; + } + + public String getLineDelim() { + return lineDelim; + } + + public void setLineDelim(String lineDelim) { + this.lineDelim = lineDelim; + } + + public String getFieldDelim() { + return fieldDelim; + } + + public void setFieldDelim(String fieldDelim) { + this.fieldDelim = fieldDelim; + } + + public void setDfsDir(boolean isDfsDir) { + this.isDfsDir = isDfsDir; + } + + public String getCollItemDelim() { + return collItemDelim; + } + + public void setCollItemDelim(String collItemDelim) { + this.collItemDelim = collItemDelim; + } } Index: ql/src/test/queries/clientpositive/insert_overwrite_local_directory_2.q =================================================================== --- ql/src/test/queries/clientpositive/insert_overwrite_local_directory_2.q (revision 0) +++ ql/src/test/queries/clientpositive/insert_overwrite_local_directory_2.q (revision 0) @@ -0,0 +1,110 @@ +set hive.output.markschema=true; +insert overwrite local directory '../data/files/local_src_table_1' +select * from src ; +dfs -cat ../data/files/local_src_table_1/_metadata; + +insert overwrite local directory '../data/files/local_src_table_2' +row format delimited +FIELDS TERMINATED BY ':' +select * from src ; + +dfs -cat ../data/files/local_src_table_2/_metadata; + +create table array_table (a array, b array) +ROW FORMAT DELIMITED +FIELDS TERMINATED BY '\t' +COLLECTION ITEMS TERMINATED BY ','; + +load data local inpath "../data/files/array_table.txt" overwrite into table array_table; + +insert overwrite local directory '../data/files/local_array_table_1' +select * from array_table; +dfs -cat ../data/files/local_array_table_1/_metadata; + +insert overwrite local directory '../data/files/local_array_table_2' +ROW FORMAT DELIMITED +FIELDS TERMINATED BY ':' +COLLECTION ITEMS TERMINATED BY '#' +select * from array_table; + +dfs -cat ../data/files/local_array_table_2/_metadata; + +insert overwrite local directory '../data/files/local_array_table_2_withfields' +ROW FORMAT DELIMITED +FIELDS TERMINATED BY ':' +COLLECTION ITEMS TERMINATED BY '#' +select b,a from array_table; + +dfs -cat ../data/files/local_array_table_2_withfields/_metadata; + + +create table map_table (foo STRING , bar MAP) +ROW FORMAT DELIMITED +FIELDS TERMINATED BY '\t' +COLLECTION ITEMS TERMINATED BY ',' +MAP KEYS TERMINATED BY ':' +STORED AS TEXTFILE; + +load data local inpath "../data/files/map_table.txt" overwrite into table map_table; + +insert overwrite local directory '../data/files/local_map_table_1' +select * from map_table; +dfs -cat ../data/files/local_map_table_1/_metadata; + +insert overwrite local directory '../data/files/local_map_table_2' +ROW FORMAT DELIMITED +FIELDS TERMINATED BY ':' +COLLECTION ITEMS TERMINATED BY '#' +MAP KEYS TERMINATED BY '=' +select * from map_table; + +dfs -cat ../data/files/local_map_table_2/_metadata; + +insert overwrite local directory '../data/files/local_map_table_2_withfields' +ROW FORMAT DELIMITED +FIELDS TERMINATED BY ':' +COLLECTION ITEMS TERMINATED BY '#' +MAP KEYS TERMINATED BY '=' +select bar,foo from map_table; + +dfs -cat ../data/files/local_map_table_2_withfields/_metadata; + +insert overwrite local directory '../data/files/local_array_table_3' +ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.DelimitedJSONSerDe' +STORED AS TEXTFILE +select * from array_table; + +dfs -cat ../data/files/local_array_table_3/_metadata; + +insert overwrite local directory '../data/files/local_map_table_3' +ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.DelimitedJSONSerDe' +STORED AS TEXTFILE +select * from map_table; + +dfs -cat ../data/files/local_map_table_3/_metadata; + +insert overwrite local directory '../data/files/local_rctable' +STORED AS RCFILE +select value,key from src; + +dfs ${system:test.dfs.mkdir} ${system:test.tmp.dir}/local_rctable/temp; +dfs -rmr ${system:test.tmp.dir}/local_rctable; +dfs ${system:test.dfs.mkdir} ${system:test.tmp.dir}/local_rctable; +dfs -put ../data/files/local_rctable/000000_0 ${system:test.tmp.dir}/local_rctable/000000_0; + +create external table local_rctable(value string, key string) +STORED AS RCFILE +LOCATION '${system:test.tmp.dir}/local_rctable'; + +insert overwrite local directory '../data/files/local_rctable_out' +ROW FORMAT DELIMITED +FIELDS TERMINATED BY '\t' +select key,value from local_rctable; + +dfs -cat ../data/files/local_rctable_out/_metadata; + +drop table local_rctable; +drop table array_table; +drop table map_table; +dfs -rmr ${system:test.tmp.dir}/local_rctable; + Index: ql/src/test/results/clientpositive/insert_overwrite_local_directory_2.q.out =================================================================== --- ql/src/test/results/clientpositive/insert_overwrite_local_directory_2.q.out (revision 0) +++ ql/src/test/results/clientpositive/insert_overwrite_local_directory_2.q.out (revision 0) @@ -0,0 +1,250 @@ +PREHOOK: query: insert overwrite local directory '../data/files/local_src_table_1' +select * from src +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: ../data/files/local_src_table_1 +POSTHOOK: query: insert overwrite local directory '../data/files/local_src_table_1' +select * from src +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: ../data/files/local_src_table_1 +keyvalue +PREHOOK: query: insert overwrite local directory '../data/files/local_src_table_2' +row format delimited +FIELDS TERMINATED BY ':' +select * from src +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: ../data/files/local_src_table_2 +POSTHOOK: query: insert overwrite local directory '../data/files/local_src_table_2' +row format delimited +FIELDS TERMINATED BY ':' +select * from src +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: ../data/files/local_src_table_2 +key:value +PREHOOK: query: create table array_table (a array, b array) +ROW FORMAT DELIMITED +FIELDS TERMINATED BY '\t' +COLLECTION ITEMS TERMINATED BY ',' +PREHOOK: type: CREATETABLE +POSTHOOK: query: create table array_table (a array, b array) +ROW FORMAT DELIMITED +FIELDS TERMINATED BY '\t' +COLLECTION ITEMS TERMINATED BY ',' +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@array_table +PREHOOK: query: load data local inpath "../data/files/array_table.txt" overwrite into table array_table +PREHOOK: type: LOAD +PREHOOK: Output: default@array_table +POSTHOOK: query: load data local inpath "../data/files/array_table.txt" overwrite into table array_table +POSTHOOK: type: LOAD +POSTHOOK: Output: default@array_table +PREHOOK: query: insert overwrite local directory '../data/files/local_array_table_1' +select * from array_table +PREHOOK: type: QUERY +PREHOOK: Input: default@array_table +PREHOOK: Output: ../data/files/local_array_table_1 +POSTHOOK: query: insert overwrite local directory '../data/files/local_array_table_1' +select * from array_table +POSTHOOK: type: QUERY +POSTHOOK: Input: default@array_table +POSTHOOK: Output: ../data/files/local_array_table_1 +ab +PREHOOK: query: insert overwrite local directory '../data/files/local_array_table_2' +ROW FORMAT DELIMITED +FIELDS TERMINATED BY ':' +COLLECTION ITEMS TERMINATED BY '#' +select * from array_table +PREHOOK: type: QUERY +PREHOOK: Input: default@array_table +PREHOOK: Output: ../data/files/local_array_table_2 +POSTHOOK: query: insert overwrite local directory '../data/files/local_array_table_2' +ROW FORMAT DELIMITED +FIELDS TERMINATED BY ':' +COLLECTION ITEMS TERMINATED BY '#' +select * from array_table +POSTHOOK: type: QUERY +POSTHOOK: Input: default@array_table +POSTHOOK: Output: ../data/files/local_array_table_2 +a:b +PREHOOK: query: insert overwrite local directory '../data/files/local_array_table_2_withfields' +ROW FORMAT DELIMITED +FIELDS TERMINATED BY ':' +COLLECTION ITEMS TERMINATED BY '#' +select b,a from array_table +PREHOOK: type: QUERY +PREHOOK: Input: default@array_table +PREHOOK: Output: ../data/files/local_array_table_2_withfields +POSTHOOK: query: insert overwrite local directory '../data/files/local_array_table_2_withfields' +ROW FORMAT DELIMITED +FIELDS TERMINATED BY ':' +COLLECTION ITEMS TERMINATED BY '#' +select b,a from array_table +POSTHOOK: type: QUERY +POSTHOOK: Input: default@array_table +POSTHOOK: Output: ../data/files/local_array_table_2_withfields +b:a +PREHOOK: query: create table map_table (foo STRING , bar MAP) +ROW FORMAT DELIMITED +FIELDS TERMINATED BY '\t' +COLLECTION ITEMS TERMINATED BY ',' +MAP KEYS TERMINATED BY ':' +STORED AS TEXTFILE +PREHOOK: type: CREATETABLE +POSTHOOK: query: create table map_table (foo STRING , bar MAP) +ROW FORMAT DELIMITED +FIELDS TERMINATED BY '\t' +COLLECTION ITEMS TERMINATED BY ',' +MAP KEYS TERMINATED BY ':' +STORED AS TEXTFILE +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@map_table +PREHOOK: query: load data local inpath "../data/files/map_table.txt" overwrite into table map_table +PREHOOK: type: LOAD +PREHOOK: Output: default@map_table +POSTHOOK: query: load data local inpath "../data/files/map_table.txt" overwrite into table map_table +POSTHOOK: type: LOAD +POSTHOOK: Output: default@map_table +PREHOOK: query: insert overwrite local directory '../data/files/local_map_table_1' +select * from map_table +PREHOOK: type: QUERY +PREHOOK: Input: default@map_table +PREHOOK: Output: ../data/files/local_map_table_1 +POSTHOOK: query: insert overwrite local directory '../data/files/local_map_table_1' +select * from map_table +POSTHOOK: type: QUERY +POSTHOOK: Input: default@map_table +POSTHOOK: Output: ../data/files/local_map_table_1 +foobar +PREHOOK: query: insert overwrite local directory '../data/files/local_map_table_2' +ROW FORMAT DELIMITED +FIELDS TERMINATED BY ':' +COLLECTION ITEMS TERMINATED BY '#' +MAP KEYS TERMINATED BY '=' +select * from map_table +PREHOOK: type: QUERY +PREHOOK: Input: default@map_table +PREHOOK: Output: ../data/files/local_map_table_2 +POSTHOOK: query: insert overwrite local directory '../data/files/local_map_table_2' +ROW FORMAT DELIMITED +FIELDS TERMINATED BY ':' +COLLECTION ITEMS TERMINATED BY '#' +MAP KEYS TERMINATED BY '=' +select * from map_table +POSTHOOK: type: QUERY +POSTHOOK: Input: default@map_table +POSTHOOK: Output: ../data/files/local_map_table_2 +foo:bar +PREHOOK: query: insert overwrite local directory '../data/files/local_map_table_2_withfields' +ROW FORMAT DELIMITED +FIELDS TERMINATED BY ':' +COLLECTION ITEMS TERMINATED BY '#' +MAP KEYS TERMINATED BY '=' +select bar,foo from map_table +PREHOOK: type: QUERY +PREHOOK: Input: default@map_table +PREHOOK: Output: ../data/files/local_map_table_2_withfields +POSTHOOK: query: insert overwrite local directory '../data/files/local_map_table_2_withfields' +ROW FORMAT DELIMITED +FIELDS TERMINATED BY ':' +COLLECTION ITEMS TERMINATED BY '#' +MAP KEYS TERMINATED BY '=' +select bar,foo from map_table +POSTHOOK: type: QUERY +POSTHOOK: Input: default@map_table +POSTHOOK: Output: ../data/files/local_map_table_2_withfields +bar:foo +PREHOOK: query: insert overwrite local directory '../data/files/local_array_table_3' +ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.DelimitedJSONSerDe' +STORED AS TEXTFILE +select * from array_table +PREHOOK: type: QUERY +PREHOOK: Input: default@array_table +PREHOOK: Output: ../data/files/local_array_table_3 +POSTHOOK: query: insert overwrite local directory '../data/files/local_array_table_3' +ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.DelimitedJSONSerDe' +STORED AS TEXTFILE +select * from array_table +POSTHOOK: type: QUERY +POSTHOOK: Input: default@array_table +POSTHOOK: Output: ../data/files/local_array_table_3 +ab +PREHOOK: query: insert overwrite local directory '../data/files/local_map_table_3' +ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.DelimitedJSONSerDe' +STORED AS TEXTFILE +select * from map_table +PREHOOK: type: QUERY +PREHOOK: Input: default@map_table +PREHOOK: Output: ../data/files/local_map_table_3 +POSTHOOK: query: insert overwrite local directory '../data/files/local_map_table_3' +ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.DelimitedJSONSerDe' +STORED AS TEXTFILE +select * from map_table +POSTHOOK: type: QUERY +POSTHOOK: Input: default@map_table +POSTHOOK: Output: ../data/files/local_map_table_3 +foobar +PREHOOK: query: insert overwrite local directory '../data/files/local_rctable' +STORED AS RCFILE +select value,key from src +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: ../data/files/local_rctable +POSTHOOK: query: insert overwrite local directory '../data/files/local_rctable' +STORED AS RCFILE +select value,key from src +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: ../data/files/local_rctable +#### A masked pattern was here #### +PREHOOK: query: create external table local_rctable(value string, key string) +STORED AS RCFILE +#### A masked pattern was here #### +PREHOOK: type: CREATETABLE +POSTHOOK: query: create external table local_rctable(value string, key string) +STORED AS RCFILE +#### A masked pattern was here #### +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@local_rctable +PREHOOK: query: insert overwrite local directory '../data/files/local_rctable_out' +ROW FORMAT DELIMITED +FIELDS TERMINATED BY '\t' +select key,value from local_rctable +PREHOOK: type: QUERY +PREHOOK: Input: default@local_rctable +PREHOOK: Output: ../data/files/local_rctable_out +POSTHOOK: query: insert overwrite local directory '../data/files/local_rctable_out' +ROW FORMAT DELIMITED +FIELDS TERMINATED BY '\t' +select key,value from local_rctable +POSTHOOK: type: QUERY +POSTHOOK: Input: default@local_rctable +POSTHOOK: Output: ../data/files/local_rctable_out +key value +PREHOOK: query: drop table local_rctable +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@local_rctable +PREHOOK: Output: default@local_rctable +POSTHOOK: query: drop table local_rctable +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@local_rctable +POSTHOOK: Output: default@local_rctable +PREHOOK: query: drop table array_table +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@array_table +PREHOOK: Output: default@array_table +POSTHOOK: query: drop table array_table +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@array_table +POSTHOOK: Output: default@array_table +PREHOOK: query: drop table map_table +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@map_table +PREHOOK: Output: default@map_table +POSTHOOK: query: drop table map_table +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@map_table +POSTHOOK: Output: default@map_table +#### A masked pattern was here ####