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 ####