You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2020/10/06 04:13:13 UTC
[hive] branch master updated: HIVE-24224: Fix skipping
header/footer for Hive on Tez on compressed file ( Panos G via Ashutosh
Chauhan)s
This is an automated email from the ASF dual-hosted git repository.
hashutosh 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 6946c81 HIVE-24224: Fix skipping header/footer for Hive on Tez on compressed file ( Panos G via Ashutosh Chauhan)s
6946c81 is described below
commit 6946c816694f2706098caed95e3219520fd57c5d
Author: Panos Garefalakis <pg...@cloudera.com>
AuthorDate: Fri Oct 2 12:29:21 2020 +0100
HIVE-24224: Fix skipping header/footer for Hive on Tez on compressed file ( Panos G via Ashutosh Chauhan)s
Signed-off-by: Ashutosh Chauhan <ha...@apache.org>
---
.../test/resources/testconfiguration.properties | 2 +-
.../hive/llap/io/encoded/PassThruOffsetReader.java | 9 +-
.../apache/hadoop/hive/ql/io/HiveInputFormat.java | 10 +-
.../hadoop/hive/ql/io/RecordReaderWrapper.java | 205 ++++++++++++++
.../compressed_skip_header_footer_aggr.q | 74 ++++-
.../llap/compressed_skip_header_footer_aggr.q.out | 290 +++++++++++++++++--
.../tez/compressed_skip_header_footer_aggr.q.out | 308 +++++++++++++++++++++
7 files changed, 854 insertions(+), 44 deletions(-)
diff --git a/itests/src/test/resources/testconfiguration.properties b/itests/src/test/resources/testconfiguration.properties
index a29a4a3..3680dc7 100644
--- a/itests/src/test/resources/testconfiguration.properties
+++ b/itests/src/test/resources/testconfiguration.properties
@@ -6,6 +6,7 @@ minimr.query.files=\
# Queries ran by both MiniLlapLocal and MiniTez
minitez.query.files.shared=\
+ compressed_skip_header_footer_aggr.q,\
hybridgrace_hashjoin_1.q,\
hybridgrace_hashjoin_2.q
@@ -43,7 +44,6 @@ minillap.query.files=\
binary_output_format.q,\
bucket5.q,\
bucket6.q,\
- compressed_skip_header_footer_aggr.q,\
create_genericudaf.q,\
create_udaf.q,\
create_view.q,\
diff --git a/llap-server/src/java/org/apache/hadoop/hive/llap/io/encoded/PassThruOffsetReader.java b/llap-server/src/java/org/apache/hadoop/hive/llap/io/encoded/PassThruOffsetReader.java
index cab13ee..56faace 100644
--- a/llap-server/src/java/org/apache/hadoop/hive/llap/io/encoded/PassThruOffsetReader.java
+++ b/llap-server/src/java/org/apache/hadoop/hive/llap/io/encoded/PassThruOffsetReader.java
@@ -27,7 +27,7 @@ import org.apache.hadoop.io.WritableComparable;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.RecordReader;
-@SuppressWarnings("rawtypes") class PassThruOffsetReader implements ReaderWithOffsets {
+class PassThruOffsetReader implements ReaderWithOffsets {
protected final RecordReader sourceReader;
protected final Object key;
protected final Writable value;
@@ -58,7 +58,7 @@ import org.apache.hadoop.mapred.RecordReader;
*/
if (!initialized) {
// Skip header lines.
- opNotEOF = Utilities.skipHeader(sourceReader, skipFooterCnt, key, value);
+ opNotEOF = Utilities.skipHeader(sourceReader, skipHeaderCnt, key, value);
// Initialize footer buffer.
if (opNotEOF && skipFooterCnt > 0) {
@@ -87,10 +87,9 @@ import org.apache.hadoop.mapred.RecordReader;
if (opNotEOF) {
// File reached the end
return true;
- } else {
- // Done reading
- return false;
}
+ // Done reading
+ return false;
} catch (Exception e) {
throw new IOException(e);
}
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java b/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java
index f564ed7..f5c25d6 100755
--- a/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java
@@ -401,7 +401,6 @@ public class HiveInputFormat<K extends WritableComparable, V extends Writable>
public RecordReader getRecordReader(InputSplit split, JobConf job,
Reporter reporter) throws IOException {
HiveInputSplit hsplit = (HiveInputSplit) split;
- InputSplit inputSplit = hsplit.getInputSplit();
String inputFormatClassName = null;
Class inputFormatClass = null;
try {
@@ -444,7 +443,8 @@ public class HiveInputFormat<K extends WritableComparable, V extends Writable>
}
RecordReader innerReader = null;
try {
- innerReader = inputFormat.getRecordReader(inputSplit, job, reporter);
+ // Handle the special header/footer skipping cases here.
+ innerReader = RecordReaderWrapper.create(inputFormat, hsplit, part.getTableDesc(), job, reporter);
} catch (Exception e) {
innerReader = HiveIOExceptionHandlerUtil
.handleRecordReaderCreationException(e, job);
@@ -531,12 +531,10 @@ public class HiveInputFormat<K extends WritableComparable, V extends Writable>
}
conf.setInputFormat(inputFormat.getClass());
- int headerCount = 0;
- int footerCount = 0;
boolean isCompressedFormat = isCompressedInput(finalDirs);
if (table != null) {
- headerCount = Utilities.getHeaderCount(table);
- footerCount = Utilities.getFooterCount(table, conf);
+ int headerCount = Utilities.getHeaderCount(table);
+ int footerCount = Utilities.getFooterCount(table, conf);
if (headerCount != 0 || footerCount != 0) {
if (TextInputFormat.class.isAssignableFrom(inputFormatClass) && !isCompressedFormat) {
SkippingTextInputFormat skippingTextInputFormat = new SkippingTextInputFormat();
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/RecordReaderWrapper.java b/ql/src/java/org/apache/hadoop/hive/ql/io/RecordReaderWrapper.java
new file mode 100644
index 0000000..811c314
--- /dev/null
+++ b/ql/src/java/org/apache/hadoop/hive/ql/io/RecordReaderWrapper.java
@@ -0,0 +1,205 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.ql.io;
+
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.hadoop.hive.ql.exec.Utilities;
+import org.apache.hadoop.hive.ql.plan.TableDesc;
+import org.apache.hadoop.io.LongWritable;
+import org.apache.hadoop.io.Text;
+import org.apache.hadoop.io.Writable;
+import org.apache.hadoop.io.WritableComparable;
+import org.apache.hadoop.mapred.FileSplit;
+import org.apache.hadoop.mapred.InputFormat;
+import org.apache.hadoop.mapred.JobConf;
+import org.apache.hadoop.mapred.LineRecordReader;
+import org.apache.hadoop.mapred.RecordReader;
+import org.apache.hadoop.mapred.Reporter;
+import org.apache.hadoop.util.ReflectionUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+class RecordReaderWrapper extends LineRecordReader {
+ private static final Method isCompressedMethod;
+ private transient boolean initialized = false;
+ protected final JobConf jobConf;
+ protected final int skipHeaderCnt;
+ protected final int skipFooterCnt;
+
+ private List<Pair<WritableComparable, Writable>> footerBuffer;
+ private int cur;
+
+ private static final Logger LOG = LoggerFactory.getLogger(RecordReaderWrapper.class.getName());
+
+ static {
+ Method isCompressedMethodTmp;
+ try {
+ isCompressedMethodTmp = LineRecordReader.class.getDeclaredMethod("isCompressedInput");
+ isCompressedMethodTmp.setAccessible(true);
+ } catch (Throwable t) {
+ isCompressedMethodTmp = null;
+ LOG.warn("Cannot get LineRecordReader isCompressedInput method", t);
+ }
+ isCompressedMethod = isCompressedMethodTmp;
+ }
+
+ static RecordReader create(InputFormat inputFormat, HiveInputFormat.HiveInputSplit split, TableDesc tableDesc,
+ JobConf jobConf, Reporter reporter) throws IOException {
+ int headerCount = Utilities.getHeaderCount(tableDesc);
+ int footerCount = Utilities.getFooterCount(tableDesc, jobConf);
+ RecordReader innerReader = inputFormat.getRecordReader(split.getInputSplit(), jobConf, reporter);
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Using {} to read data with skip.header.line.count {} and skip.footer.line.count {}",
+ innerReader.getClass().getSimpleName(), headerCount, footerCount);
+ }
+
+ // For non-compressed Text Files Header/Footer Skipping is already done as part of SkippingTextInputFormat
+ if (innerReader instanceof LineRecordReader) {
+ // File not compressed, skipping is already done as part of SkippingTextInputFormat
+ if (isCompressedMethod == null) {
+ return innerReader;
+ }
+ Boolean isCompressed = null;
+ try {
+ isCompressed = (Boolean) isCompressedMethod.invoke(innerReader);
+ } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
+ LOG.error("Cannot check the reader for compression; offsets not supported", e);
+ return innerReader;
+ }
+ if (isCompressed && (headerCount > 0 || footerCount > 0)) {
+ // Cannot slice compressed files - do header/footer skipping within the Reader
+ LOG.info("Reader is compressed; offsets not supported");
+ return new RecordReaderWrapper(split, jobConf, headerCount, footerCount);
+ }
+ }
+ return innerReader;
+ }
+
+ private RecordReaderWrapper(FileSplit split, JobConf jobConf, int headerCnt, int footerCnt) throws IOException {
+ super(jobConf, split);
+ this.jobConf = jobConf;
+ this.skipHeaderCnt = headerCnt;
+ this.skipFooterCnt = footerCnt;
+ }
+
+ @Override
+ public synchronized boolean next(LongWritable key, Text value) throws IOException {
+ try {
+ boolean opNotEOF = true;
+ /**
+ * Start reading a new file.
+ * If file contains header, skip header lines before reading the records.
+ * If file contains footer, used FooterBuffer to cache and remove footer
+ * records at the end of the file.
+ */
+ if (!initialized) {
+ // Skip header lines.
+ opNotEOF = skipHeader(skipHeaderCnt, key, value);
+
+ // Initialize footer buffer.
+ if (opNotEOF && skipFooterCnt > 0) {
+ opNotEOF = initializeBuffer(jobConf, skipFooterCnt, key, value);
+ }
+ this.initialized = true;
+ }
+
+ if (opNotEOF && footerBuffer == null) {
+ /**
+ * When file doesn't end after skipping header line
+ * and there is NO footer lines, read normally.
+ */
+ opNotEOF = super.next(key, value);
+ }
+
+ if (opNotEOF && footerBuffer != null) {
+ /**
+ * When file doesn't end after skipping header line
+ * and there IS footer lines, update footerBuffer
+ */
+ opNotEOF = updateBuffer(jobConf, key, value);
+ }
+
+ if (opNotEOF) {
+ // File reached the end
+ return true;
+ }
+ // Done reading
+ return false;
+ } catch (Exception e) {
+ throw new IOException(e);
+ }
+ }
+
+ private boolean skipHeader(int headerCount, LongWritable key, Text value) throws IOException {
+ while (headerCount > 0) {
+ if (!super.next(key, value)) {
+ return false;
+ }
+ headerCount--;
+ }
+ return true;
+ }
+
+ public boolean initializeBuffer(JobConf job, int footerCount, LongWritable key, Text value) throws IOException {
+ // Fill the buffer with key value pairs.
+ this.footerBuffer = new ArrayList<>();
+ while (footerBuffer.size() < footerCount) {
+ boolean notEOF = super.next(key, value);
+ if (!notEOF) {
+ return false;
+ }
+ WritableComparable left = ReflectionUtils.copy(job, key, null);
+ Writable right = ReflectionUtils.copy(job, value, null);
+ Pair<WritableComparable, Writable> tem = Pair.of(left, right);
+ footerBuffer.add(tem);
+ }
+ this.cur = 0;
+ return true;
+ }
+
+ /**
+ * Enqueue most recent record read, and dequeue earliest result in the queue.
+ *
+ * @param job
+ * Current job configuration.
+ * @param key
+ * Key of current reading record.
+ *
+ * @param value
+ * Value of current reading record.
+ *
+ * @return Return false if reaches the end of file, otherwise return true.
+ */
+ public boolean updateBuffer(JobConf job, WritableComparable key, Writable value) throws IOException {
+ key = ReflectionUtils.copy(job, footerBuffer.get(cur).getKey(), key);
+ value = ReflectionUtils.copy(job, footerBuffer.get(cur).getValue(), value);
+ boolean notEOF = super.next((LongWritable) footerBuffer.get(cur).getKey(), (Text) footerBuffer.get(cur).getValue());
+ if (notEOF) {
+ cur = (++cur) % footerBuffer.size();
+ }
+ return notEOF;
+ }
+}
diff --git a/ql/src/test/queries/clientpositive/compressed_skip_header_footer_aggr.q b/ql/src/test/queries/clientpositive/compressed_skip_header_footer_aggr.q
index 25f87b2..e218206 100644
--- a/ql/src/test/queries/clientpositive/compressed_skip_header_footer_aggr.q
+++ b/ql/src/test/queries/clientpositive/compressed_skip_header_footer_aggr.q
@@ -1,28 +1,84 @@
-set hive.mapred.mode=nonstrict;
+SET hive.query.results.cache.enabled=false;
+SET hive.mapred.mode=nonstrict;
+SET hive.explain.user=false;
dfs ${system:test.dfs.mkdir} ${system:test.tmp.dir}/testcase1;
dfs -copyFromLocal ../../data/files/compressed_4line_file1.csv ${system:test.tmp.dir}/testcase1/;
-
-
+--
+--
CREATE EXTERNAL TABLE `testcase1`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
LOCATION '${system:test.tmp.dir}/testcase1'
TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="1");
+CREATE EXTERNAL TABLE `testcase2`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+ LOCATION '${system:test.tmp.dir}/testcase1'
+ TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="0");
+
+CREATE EXTERNAL TABLE `testcase3`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+ LOCATION '${system:test.tmp.dir}/testcase1'
+ TBLPROPERTIES ("skip.header.line.count"="0", "skip.footer.line.count"="1");
+
+SET hive.fetch.task.conversion = more;
select * from testcase1;
-
select count(*) from testcase1;
+select * from testcase2;
+select count(*) from testcase2;
-dfs ${system:test.dfs.mkdir} ${system:test.tmp.dir}/testcase2;
-dfs -copyFromLocal ../../data/files/compressed_4line_file2.csv ${system:test.tmp.dir}/testcase2/;
+select * from testcase3;
+select count(*) from testcase3;
+SET hive.fetch.task.conversion = none;
-CREATE EXTERNAL TABLE `testcase2`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+
+select * from testcase1;
+select count(*) from testcase1;
+
+select * from testcase2;
+select count(*) from testcase2;
+
+select * from testcase3;
+select count(*) from testcase3;
+
+dfs ${system:test.dfs.mkdir} ${system:test.tmp.dir}/testcase2;
+dfs ${system:test.dfs.mkdir} ${system:test.tmp.dir}/testcase3;
+dfs ${system:test.dfs.mkdir} ${system:test.tmp.dir}/testcase4;
+dfs -copyFromLocal ../../data/files/compressed_4line_file2.csv.bz2 ${system:test.tmp.dir}/testcase2/;
+dfs -copyFromLocal ../../data/files/compressed_4line_file2.csv.bz2 ${system:test.tmp.dir}/testcase3/;
+dfs -copyFromLocal ../../data/files/compressed_4line_file2.csv.bz2 ${system:test.tmp.dir}/testcase4/;
+--
+-- Stored encoded in Cache so need to create separate Tables
+CREATE EXTERNAL TABLE `testcase4`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
LOCATION '${system:test.tmp.dir}/testcase2'
TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="1");
+CREATE EXTERNAL TABLE `testcase5`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+ LOCATION '${system:test.tmp.dir}/testcase3'
+ TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="0");
-select * from testcase2;
+CREATE EXTERNAL TABLE `testcase6`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+ LOCATION '${system:test.tmp.dir}/testcase4'
+ TBLPROPERTIES ("skip.header.line.count"="0", "skip.footer.line.count"="1");
-select count(*) from testcase2;
+SET hive.fetch.task.conversion = more;
+
+select * from testcase4;
+select count(*) from testcase4;
+
+select * from testcase5;
+select count(*) from testcase5;
+
+select * from testcase6;
+select count(*) from testcase6;
+
+SET hive.fetch.task.conversion = none;
+
+select * from testcase4;
+select count(*) from testcase4;
+
+select * from testcase5;
+select count(*) from testcase5;
+
+select * from testcase6;
+select count(*) from testcase6;
diff --git a/ql/src/test/results/clientpositive/llap/compressed_skip_header_footer_aggr.q.out b/ql/src/test/results/clientpositive/llap/compressed_skip_header_footer_aggr.q.out
index 330d2d0..e617956 100644
--- a/ql/src/test/results/clientpositive/llap/compressed_skip_header_footer_aggr.q.out
+++ b/ql/src/test/results/clientpositive/llap/compressed_skip_header_footer_aggr.q.out
@@ -2,63 +2,307 @@ PREHOOK: query: CREATE EXTERNAL TABLE `testcase1`(id int, name string) ROW FORMA
#### A masked pattern was here ####
TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="1")
PREHOOK: type: CREATETABLE
-PREHOOK: Input: hdfs://### HDFS PATH ###
+#### A masked pattern was here ####
PREHOOK: Output: database:default
PREHOOK: Output: default@testcase1
POSTHOOK: query: CREATE EXTERNAL TABLE `testcase1`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
#### A masked pattern was here ####
TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="1")
POSTHOOK: type: CREATETABLE
-POSTHOOK: Input: hdfs://### HDFS PATH ###
+#### A masked pattern was here ####
POSTHOOK: Output: database:default
POSTHOOK: Output: default@testcase1
+PREHOOK: query: CREATE EXTERNAL TABLE `testcase2`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="0")
+PREHOOK: type: CREATETABLE
+#### A masked pattern was here ####
+PREHOOK: Output: database:default
+PREHOOK: Output: default@testcase2
+POSTHOOK: query: CREATE EXTERNAL TABLE `testcase2`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="0")
+POSTHOOK: type: CREATETABLE
+#### A masked pattern was here ####
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@testcase2
+PREHOOK: query: CREATE EXTERNAL TABLE `testcase3`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="0", "skip.footer.line.count"="1")
+PREHOOK: type: CREATETABLE
+#### A masked pattern was here ####
+PREHOOK: Output: database:default
+PREHOOK: Output: default@testcase3
+POSTHOOK: query: CREATE EXTERNAL TABLE `testcase3`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="0", "skip.footer.line.count"="1")
+POSTHOOK: type: CREATETABLE
+#### A masked pattern was here ####
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@testcase3
PREHOOK: query: select * from testcase1
PREHOOK: type: QUERY
PREHOOK: Input: default@testcase1
-PREHOOK: Output: hdfs://### HDFS PATH ###
+#### A masked pattern was here ####
POSTHOOK: query: select * from testcase1
POSTHOOK: type: QUERY
POSTHOOK: Input: default@testcase1
-POSTHOOK: Output: hdfs://### HDFS PATH ###
+#### A masked pattern was here ####
2 2019-12-31
PREHOOK: query: select count(*) from testcase1
PREHOOK: type: QUERY
PREHOOK: Input: default@testcase1
-PREHOOK: Output: hdfs://### HDFS PATH ###
+#### A masked pattern was here ####
POSTHOOK: query: select count(*) from testcase1
POSTHOOK: type: QUERY
POSTHOOK: Input: default@testcase1
-POSTHOOK: Output: hdfs://### HDFS PATH ###
+#### A masked pattern was here ####
1
-PREHOOK: query: CREATE EXTERNAL TABLE `testcase2`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+PREHOOK: query: select * from testcase2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase2
#### A masked pattern was here ####
- TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="1")
-PREHOOK: type: CREATETABLE
-PREHOOK: Input: hdfs://### HDFS PATH ###
-PREHOOK: Output: database:default
-PREHOOK: Output: default@testcase2
-POSTHOOK: query: CREATE EXTERNAL TABLE `testcase2`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+POSTHOOK: query: select * from testcase2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase2
#### A masked pattern was here ####
- TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="1")
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Input: hdfs://### HDFS PATH ###
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@testcase2
+2 2019-12-31
+3 2019-12-31
+PREHOOK: query: select count(*) from testcase2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase2
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from testcase2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase2
+#### A masked pattern was here ####
+2
+PREHOOK: query: select * from testcase3
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase3
+#### A masked pattern was here ####
+POSTHOOK: query: select * from testcase3
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase3
+#### A masked pattern was here ####
+1 2019-12-31
+2 2019-12-31
+PREHOOK: query: select count(*) from testcase3
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase3
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from testcase3
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase3
+#### A masked pattern was here ####
+2
+PREHOOK: query: select * from testcase1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase1
+#### A masked pattern was here ####
+POSTHOOK: query: select * from testcase1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase1
+#### A masked pattern was here ####
+2 2019-12-31
+PREHOOK: query: select count(*) from testcase1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase1
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from testcase1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase1
+#### A masked pattern was here ####
+1
PREHOOK: query: select * from testcase2
PREHOOK: type: QUERY
PREHOOK: Input: default@testcase2
-PREHOOK: Output: hdfs://### HDFS PATH ###
+#### A masked pattern was here ####
POSTHOOK: query: select * from testcase2
POSTHOOK: type: QUERY
POSTHOOK: Input: default@testcase2
-POSTHOOK: Output: hdfs://### HDFS PATH ###
-2 2019-12-31 01
+#### A masked pattern was here ####
+2 2019-12-31
+3 2019-12-31
PREHOOK: query: select count(*) from testcase2
PREHOOK: type: QUERY
PREHOOK: Input: default@testcase2
-PREHOOK: Output: hdfs://### HDFS PATH ###
+#### A masked pattern was here ####
POSTHOOK: query: select count(*) from testcase2
POSTHOOK: type: QUERY
POSTHOOK: Input: default@testcase2
-POSTHOOK: Output: hdfs://### HDFS PATH ###
+#### A masked pattern was here ####
+2
+PREHOOK: query: select * from testcase3
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase3
+#### A masked pattern was here ####
+POSTHOOK: query: select * from testcase3
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase3
+#### A masked pattern was here ####
+1 2019-12-31
+2 2019-12-31
+PREHOOK: query: select count(*) from testcase3
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase3
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from testcase3
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase3
+#### A masked pattern was here ####
+2
+PREHOOK: query: CREATE EXTERNAL TABLE `testcase4`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="1")
+PREHOOK: type: CREATETABLE
+#### A masked pattern was here ####
+PREHOOK: Output: database:default
+PREHOOK: Output: default@testcase4
+POSTHOOK: query: CREATE EXTERNAL TABLE `testcase4`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="1")
+POSTHOOK: type: CREATETABLE
+#### A masked pattern was here ####
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@testcase4
+PREHOOK: query: CREATE EXTERNAL TABLE `testcase5`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="0")
+PREHOOK: type: CREATETABLE
+#### A masked pattern was here ####
+PREHOOK: Output: database:default
+PREHOOK: Output: default@testcase5
+POSTHOOK: query: CREATE EXTERNAL TABLE `testcase5`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="0")
+POSTHOOK: type: CREATETABLE
+#### A masked pattern was here ####
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@testcase5
+PREHOOK: query: CREATE EXTERNAL TABLE `testcase6`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="0", "skip.footer.line.count"="1")
+PREHOOK: type: CREATETABLE
+#### A masked pattern was here ####
+PREHOOK: Output: database:default
+PREHOOK: Output: default@testcase6
+POSTHOOK: query: CREATE EXTERNAL TABLE `testcase6`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="0", "skip.footer.line.count"="1")
+POSTHOOK: type: CREATETABLE
+#### A masked pattern was here ####
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@testcase6
+PREHOOK: query: select * from testcase4
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase4
+#### A masked pattern was here ####
+POSTHOOK: query: select * from testcase4
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase4
+#### A masked pattern was here ####
+2 2019-12-31 01
+PREHOOK: query: select count(*) from testcase4
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase4
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from testcase4
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase4
+#### A masked pattern was here ####
1
+PREHOOK: query: select * from testcase5
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase5
+#### A masked pattern was here ####
+POSTHOOK: query: select * from testcase5
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase5
+#### A masked pattern was here ####
+2 2019-12-31 01
+3 2019-12-31 02
+PREHOOK: query: select count(*) from testcase5
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase5
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from testcase5
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase5
+#### A masked pattern was here ####
+2
+PREHOOK: query: select * from testcase6
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase6
+#### A masked pattern was here ####
+POSTHOOK: query: select * from testcase6
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase6
+#### A masked pattern was here ####
+1 2019-12-31 00
+2 2019-12-31 01
+PREHOOK: query: select count(*) from testcase6
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase6
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from testcase6
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase6
+#### A masked pattern was here ####
+2
+PREHOOK: query: select * from testcase4
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase4
+#### A masked pattern was here ####
+POSTHOOK: query: select * from testcase4
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase4
+#### A masked pattern was here ####
+2 2019-12-31 01
+PREHOOK: query: select count(*) from testcase4
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase4
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from testcase4
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase4
+#### A masked pattern was here ####
+1
+PREHOOK: query: select * from testcase5
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase5
+#### A masked pattern was here ####
+POSTHOOK: query: select * from testcase5
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase5
+#### A masked pattern was here ####
+2 2019-12-31 01
+3 2019-12-31 02
+PREHOOK: query: select count(*) from testcase5
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase5
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from testcase5
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase5
+#### A masked pattern was here ####
+2
+PREHOOK: query: select * from testcase6
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase6
+#### A masked pattern was here ####
+POSTHOOK: query: select * from testcase6
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase6
+#### A masked pattern was here ####
+1 2019-12-31 00
+2 2019-12-31 01
+PREHOOK: query: select count(*) from testcase6
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase6
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from testcase6
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase6
+#### A masked pattern was here ####
+2
diff --git a/ql/src/test/results/clientpositive/tez/compressed_skip_header_footer_aggr.q.out b/ql/src/test/results/clientpositive/tez/compressed_skip_header_footer_aggr.q.out
new file mode 100644
index 0000000..aea4661
--- /dev/null
+++ b/ql/src/test/results/clientpositive/tez/compressed_skip_header_footer_aggr.q.out
@@ -0,0 +1,308 @@
+PREHOOK: query: CREATE EXTERNAL TABLE `testcase1`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="1")
+PREHOOK: type: CREATETABLE
+PREHOOK: Input: hdfs://### HDFS PATH ###
+PREHOOK: Output: database:default
+PREHOOK: Output: default@testcase1
+POSTHOOK: query: CREATE EXTERNAL TABLE `testcase1`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="1")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Input: hdfs://### HDFS PATH ###
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@testcase1
+PREHOOK: query: CREATE EXTERNAL TABLE `testcase2`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="0")
+PREHOOK: type: CREATETABLE
+PREHOOK: Input: hdfs://### HDFS PATH ###
+PREHOOK: Output: database:default
+PREHOOK: Output: default@testcase2
+POSTHOOK: query: CREATE EXTERNAL TABLE `testcase2`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="0")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Input: hdfs://### HDFS PATH ###
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@testcase2
+PREHOOK: query: CREATE EXTERNAL TABLE `testcase3`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="0", "skip.footer.line.count"="1")
+PREHOOK: type: CREATETABLE
+PREHOOK: Input: hdfs://### HDFS PATH ###
+PREHOOK: Output: database:default
+PREHOOK: Output: default@testcase3
+POSTHOOK: query: CREATE EXTERNAL TABLE `testcase3`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="0", "skip.footer.line.count"="1")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Input: hdfs://### HDFS PATH ###
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@testcase3
+PREHOOK: query: select * from testcase1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase1
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select * from testcase1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase1
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+2 2019-12-31
+PREHOOK: query: select count(*) from testcase1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase1
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select count(*) from testcase1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase1
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+1
+PREHOOK: query: select * from testcase2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase2
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select * from testcase2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase2
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+2 2019-12-31
+3 2019-12-31
+PREHOOK: query: select count(*) from testcase2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase2
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select count(*) from testcase2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase2
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+2
+PREHOOK: query: select * from testcase3
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase3
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select * from testcase3
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase3
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+1 2019-12-31
+2 2019-12-31
+PREHOOK: query: select count(*) from testcase3
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase3
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select count(*) from testcase3
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase3
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+2
+PREHOOK: query: select * from testcase1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase1
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select * from testcase1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase1
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+2 2019-12-31
+PREHOOK: query: select count(*) from testcase1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase1
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select count(*) from testcase1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase1
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+1
+PREHOOK: query: select * from testcase2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase2
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select * from testcase2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase2
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+2 2019-12-31
+3 2019-12-31
+PREHOOK: query: select count(*) from testcase2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase2
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select count(*) from testcase2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase2
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+2
+PREHOOK: query: select * from testcase3
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase3
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select * from testcase3
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase3
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+1 2019-12-31
+2 2019-12-31
+PREHOOK: query: select count(*) from testcase3
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase3
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select count(*) from testcase3
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase3
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+2
+PREHOOK: query: CREATE EXTERNAL TABLE `testcase4`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="1")
+PREHOOK: type: CREATETABLE
+PREHOOK: Input: hdfs://### HDFS PATH ###
+PREHOOK: Output: database:default
+PREHOOK: Output: default@testcase4
+POSTHOOK: query: CREATE EXTERNAL TABLE `testcase4`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="1")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Input: hdfs://### HDFS PATH ###
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@testcase4
+PREHOOK: query: CREATE EXTERNAL TABLE `testcase5`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="0")
+PREHOOK: type: CREATETABLE
+PREHOOK: Input: hdfs://### HDFS PATH ###
+PREHOOK: Output: database:default
+PREHOOK: Output: default@testcase5
+POSTHOOK: query: CREATE EXTERNAL TABLE `testcase5`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="1", "skip.footer.line.count"="0")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Input: hdfs://### HDFS PATH ###
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@testcase5
+PREHOOK: query: CREATE EXTERNAL TABLE `testcase6`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="0", "skip.footer.line.count"="1")
+PREHOOK: type: CREATETABLE
+PREHOOK: Input: hdfs://### HDFS PATH ###
+PREHOOK: Output: database:default
+PREHOOK: Output: default@testcase6
+POSTHOOK: query: CREATE EXTERNAL TABLE `testcase6`(id int, name string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
+#### A masked pattern was here ####
+ TBLPROPERTIES ("skip.header.line.count"="0", "skip.footer.line.count"="1")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Input: hdfs://### HDFS PATH ###
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@testcase6
+PREHOOK: query: select * from testcase4
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase4
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select * from testcase4
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase4
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+2 2019-12-31 01
+PREHOOK: query: select count(*) from testcase4
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase4
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select count(*) from testcase4
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase4
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+1
+PREHOOK: query: select * from testcase5
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase5
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select * from testcase5
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase5
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+2 2019-12-31 01
+3 2019-12-31 02
+PREHOOK: query: select count(*) from testcase5
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase5
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select count(*) from testcase5
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase5
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+2
+PREHOOK: query: select * from testcase6
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase6
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select * from testcase6
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase6
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+1 2019-12-31 00
+2 2019-12-31 01
+PREHOOK: query: select count(*) from testcase6
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase6
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select count(*) from testcase6
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase6
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+2
+PREHOOK: query: select * from testcase4
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase4
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select * from testcase4
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase4
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+2 2019-12-31 01
+PREHOOK: query: select count(*) from testcase4
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase4
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select count(*) from testcase4
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase4
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+1
+PREHOOK: query: select * from testcase5
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase5
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select * from testcase5
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase5
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+2 2019-12-31 01
+3 2019-12-31 02
+PREHOOK: query: select count(*) from testcase5
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase5
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select count(*) from testcase5
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase5
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+2
+PREHOOK: query: select * from testcase6
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase6
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select * from testcase6
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase6
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+1 2019-12-31 00
+2 2019-12-31 01
+PREHOOK: query: select count(*) from testcase6
+PREHOOK: type: QUERY
+PREHOOK: Input: default@testcase6
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select count(*) from testcase6
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@testcase6
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+2