diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/read/DataWritableReadSupport.java b/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/read/DataWritableReadSupport.java index 97f228f..3c31f97 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/read/DataWritableReadSupport.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/read/DataWritableReadSupport.java @@ -14,6 +14,7 @@ package org.apache.hadoop.hive.ql.io.parquet.read; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.ListIterator; @@ -225,12 +226,18 @@ private static MessageType getSchemaByIndex(MessageType schema, List col contextMetadata.put(HIVE_TABLE_AS_PARQUET_SCHEMA, tableSchema.toString()); List indexColumnsWanted = ColumnProjectionUtils.getReadColumnIDs(configuration); - if (!ColumnProjectionUtils.isReadAllColumns(configuration) && !indexColumnsWanted.isEmpty()) { + if (ColumnProjectionUtils.isReadAllColumns(configuration)) { + return new ReadContext(tableSchema, contextMetadata); + } else if (!indexColumnsWanted.isEmpty()) { MessageType requestedSchemaByUser = getSchemaByIndex(tableSchema, columnNamesList, indexColumnsWanted); return new ReadContext(requestedSchemaByUser, contextMetadata); } else { - return new ReadContext(tableSchema, contextMetadata); + // select count(1) + // Just fetch the first element instead of every columns and rows + MessageType requestedSchemaByUser = + getSchemaByIndex(tableSchema, columnNamesList, Arrays.asList(0)); + return new ReadContext(requestedSchemaByUser, contextMetadata); } } else { contextMetadata.put(HIVE_TABLE_AS_PARQUET_SCHEMA, fileSchema.toString()); diff --git a/ql/src/test/queries/clientpositive/parquet_columnar.q b/ql/src/test/queries/clientpositive/parquet_columnar.q index b5aca1b..dac9327 100644 --- a/ql/src/test/queries/clientpositive/parquet_columnar.q +++ b/ql/src/test/queries/clientpositive/parquet_columnar.q @@ -28,3 +28,5 @@ SELECT * FROM parquet_columnar_access; ALTER TABLE parquet_columnar_access REPLACE COLUMNS (s1 string, x1 int, y1 int, f1 float); SELECT * FROM parquet_columnar_access; + +SELECT count(1) FROM parquet_columnar_access; diff --git a/ql/src/test/results/clientpositive/parquet_columnar.q.out b/ql/src/test/results/clientpositive/parquet_columnar.q.out index 934333b..ffce86b 100644 --- a/ql/src/test/results/clientpositive/parquet_columnar.q.out +++ b/ql/src/test/results/clientpositive/parquet_columnar.q.out @@ -137,3 +137,12 @@ POSTHOOK: Input: default@parquet_columnar_access 1cde18 1 2 1.3 1fgh19 2 3 1.4 1ijk20 3 4 1.0 +PREHOOK: query: SELECT count(1) FROM parquet_columnar_access +PREHOOK: type: QUERY +PREHOOK: Input: default@parquet_columnar_access +#### A masked pattern was here #### +POSTHOOK: query: SELECT count(1) FROM parquet_columnar_access +POSTHOOK: type: QUERY +POSTHOOK: Input: default@parquet_columnar_access +#### A masked pattern was here #### +21