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