columnTypes)
{
- HiveRecordCursorProvider cursorProvider = new ParquetRecordCursorProvider(hdfsEnvironment, new FileFormatDataSourceStats());
- return createPageSource(cursorProvider, session, targetFile, columnNames, columnTypes, HiveStorageFormat.PARQUET);
+ HivePageSourceFactory pageSourceFactory = new ParquetPageSourceFactory(TYPE_MANAGER, hdfsEnvironment, new FileFormatDataSourceStats());
+ return createPageSource(pageSourceFactory, session, targetFile, columnNames, columnTypes, HiveStorageFormat.PARQUET);
}
@Override
diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/benchmark/HiveFileFormatBenchmark.java b/presto-hive/src/test/java/com/facebook/presto/hive/benchmark/HiveFileFormatBenchmark.java
index ac9cf6ab6175f..50a7cc516b114 100644
--- a/presto-hive/src/test/java/com/facebook/presto/hive/benchmark/HiveFileFormatBenchmark.java
+++ b/presto-hive/src/test/java/com/facebook/presto/hive/benchmark/HiveFileFormatBenchmark.java
@@ -94,8 +94,7 @@ public class HiveFileFormatBenchmark
}
@SuppressWarnings("deprecation")
- private static final HiveClientConfig CONFIG = new HiveClientConfig()
- .setParquetOptimizedReaderEnabled(true);
+ private static final HiveClientConfig CONFIG = new HiveClientConfig();
private static final ConnectorSession SESSION = new TestingConnectorSession(new HiveSessionProperties(CONFIG, new OrcFileWriterConfig(), new ParquetFileWriterConfig())
.getSessionProperties());
diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/parquet/ParquetTester.java b/presto-hive/src/test/java/com/facebook/presto/hive/parquet/ParquetTester.java
index cd621311d71a9..ff69635d1eee5 100644
--- a/presto-hive/src/test/java/com/facebook/presto/hive/parquet/ParquetTester.java
+++ b/presto-hive/src/test/java/com/facebook/presto/hive/parquet/ParquetTester.java
@@ -411,8 +411,6 @@ private static HiveClientConfig createHiveClientConfig(boolean useParquetColumnN
{
HiveClientConfig config = new HiveClientConfig();
config.setHiveStorageFormat(HiveStorageFormat.PARQUET)
- .setParquetOptimizedReaderEnabled(OPTIMIZED)
- .setParquetPredicatePushdownEnabled(OPTIMIZED)
.setUseParquetColumnNames(useParquetColumnNames);
return config;
}
diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/parquet/predicate/TestParquetPredicateUtils.java b/presto-hive/src/test/java/com/facebook/presto/hive/parquet/predicate/TestParquetPredicateUtils.java
index c6e507375aa08..f5baa47dfd630 100644
--- a/presto-hive/src/test/java/com/facebook/presto/hive/parquet/predicate/TestParquetPredicateUtils.java
+++ b/presto-hive/src/test/java/com/facebook/presto/hive/parquet/predicate/TestParquetPredicateUtils.java
@@ -15,7 +15,7 @@
import com.facebook.presto.hive.HiveColumnHandle;
import com.facebook.presto.hive.HiveType;
-import com.facebook.presto.hive.parquet.RichColumnDescriptor;
+import com.facebook.presto.parquet.RichColumnDescriptor;
import com.facebook.presto.spi.predicate.Domain;
import com.facebook.presto.spi.predicate.TupleDomain;
import com.facebook.presto.spi.type.ArrayType;
@@ -39,9 +39,9 @@
import java.util.Set;
import static com.facebook.presto.hive.HiveColumnHandle.ColumnType.REGULAR;
-import static com.facebook.presto.hive.parquet.ParquetTypeUtils.getDescriptors;
-import static com.facebook.presto.hive.parquet.predicate.ParquetPredicateUtils.getParquetTupleDomain;
-import static com.facebook.presto.hive.parquet.predicate.ParquetPredicateUtils.isOnlyDictionaryEncodingPages;
+import static com.facebook.presto.hive.parquet.ParquetPageSourceFactory.getParquetTupleDomain;
+import static com.facebook.presto.parquet.ParquetTypeUtils.getDescriptors;
+import static com.facebook.presto.parquet.predicate.PredicateUtils.isOnlyDictionaryEncodingPages;
import static com.facebook.presto.spi.block.MethodHandleUtil.methodHandle;
import static com.facebook.presto.spi.predicate.TupleDomain.withColumnDomains;
import static com.facebook.presto.spi.type.BigintType.BIGINT;
diff --git a/presto-parquet/pom.xml b/presto-parquet/pom.xml
new file mode 100644
index 0000000000000..d2b72c5b4ee65
--- /dev/null
+++ b/presto-parquet/pom.xml
@@ -0,0 +1,180 @@
+
+
+ 4.0.0
+
+
+ com.facebook.presto
+ presto-root
+ 0.213-SNAPSHOT
+
+
+ presto-parquet
+ presto-parquet
+
+
+ ${project.parent.basedir}
+
+
+
+
+ com.facebook.presto
+ presto-memory-context
+
+
+
+ com.facebook.presto.hadoop
+ hadoop-apache2
+ provided
+
+
+
+ com.facebook.presto.hive
+ hive-apache
+
+
+
+ io.airlift
+ aircompressor
+
+
+
+ com.google.guava
+ guava
+
+
+
+ it.unimi.dsi
+ fastutil
+
+
+
+ org.xerial.snappy
+ snappy-java
+ runtime
+
+
+
+
+ io.airlift
+ log-manager
+ runtime
+
+
+
+
+ com.facebook.presto
+ presto-spi
+
+
+
+ io.airlift
+ slice
+
+
+
+
+ com.facebook.presto
+ presto-main
+ test
+
+
+
+ com.facebook.presto
+ presto-tests
+ test
+
+
+
+ com.facebook.presto
+ presto-tpch
+ test
+
+
+
+ io.airlift.tpch
+ tpch
+ test
+
+
+
+ org.jetbrains
+ annotations
+ provided
+
+
+
+ org.testng
+ testng
+ test
+
+
+
+ io.airlift
+ testing
+ test
+
+
+
+ org.assertj
+ assertj-core
+ test
+
+
+
+ org.anarres.lzo
+ lzo-hadoop
+ test
+
+
+
+
+ com.facebook.presto
+ presto-benchmark
+ test
+
+
+
+ org.openjdk.jmh
+ jmh-core
+ test
+
+
+
+ org.openjdk.jmh
+ jmh-generator-annprocess
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+
+ **/TestFullParquetReader.java
+
+
+
+
+
+
+
+
+ ci
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+
+
+
+
+
+
+
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetDataPage.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/DataPage.java
similarity index 80%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetDataPage.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/DataPage.java
index b8d8122a32eac..065684e6f91fb 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetDataPage.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/DataPage.java
@@ -11,14 +11,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet;
+package com.facebook.presto.parquet;
-public abstract class ParquetDataPage
- extends ParquetPage
+public abstract class DataPage
+ extends Page
{
protected final int valueCount;
- public ParquetDataPage(int compressedSize, int uncompressedSize, int valueCount)
+ public DataPage(int compressedSize, int uncompressedSize, int valueCount)
{
super(compressedSize, uncompressedSize);
this.valueCount = valueCount;
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetDataPageV1.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/DataPageV1.java
similarity index 95%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetDataPageV1.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/DataPageV1.java
index 5e7a41eebd10d..f278fe1f2ee17 100755
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetDataPageV1.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/DataPageV1.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet;
+package com.facebook.presto.parquet;
import io.airlift.slice.Slice;
import parquet.column.statistics.Statistics;
@@ -19,8 +19,8 @@
import static com.google.common.base.MoreObjects.toStringHelper;
import static java.util.Objects.requireNonNull;
-public class ParquetDataPageV1
- extends ParquetDataPage
+public class DataPageV1
+ extends DataPage
{
private final Slice slice;
private final Statistics> statistics;
@@ -28,7 +28,7 @@ public class ParquetDataPageV1
private final ParquetEncoding definitionLevelEncoding;
private final ParquetEncoding valuesEncoding;
- public ParquetDataPageV1(
+ public DataPageV1(
Slice slice,
int valueCount,
int uncompressedSize,
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetDataPageV2.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/DataPageV2.java
similarity index 96%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetDataPageV2.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/DataPageV2.java
index 39fb49db8cb6e..9034c0a66a004 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetDataPageV2.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/DataPageV2.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet;
+package com.facebook.presto.parquet;
import io.airlift.slice.Slice;
import parquet.column.statistics.Statistics;
@@ -19,8 +19,8 @@
import static com.google.common.base.MoreObjects.toStringHelper;
import static java.util.Objects.requireNonNull;
-public class ParquetDataPageV2
- extends ParquetDataPage
+public class DataPageV2
+ extends DataPage
{
private final int rowCount;
private final int nullCount;
@@ -31,7 +31,7 @@ public class ParquetDataPageV2
private final Statistics> statistics;
private final boolean isCompressed;
- public ParquetDataPageV2(
+ public DataPageV2(
int rowCount,
int nullCount,
int valueCount,
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetDictionaryPage.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/DictionaryPage.java
similarity index 79%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetDictionaryPage.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/DictionaryPage.java
index c1b91d5bc43bb..dc48a898105f8 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetDictionaryPage.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/DictionaryPage.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet;
+package com.facebook.presto.parquet;
import io.airlift.slice.Slice;
@@ -21,14 +21,14 @@
import static io.airlift.slice.Slices.wrappedBuffer;
import static java.util.Objects.requireNonNull;
-public class ParquetDictionaryPage
- extends ParquetPage
+public class DictionaryPage
+ extends Page
{
private final Slice slice;
private final int dictionarySize;
private final ParquetEncoding encoding;
- public ParquetDictionaryPage(Slice slice, int dictionarySize, ParquetEncoding encoding)
+ public DictionaryPage(Slice slice, int dictionarySize, ParquetEncoding encoding)
{
this(requireNonNull(slice, "slice is null"),
slice.length(),
@@ -36,7 +36,7 @@ public ParquetDictionaryPage(Slice slice, int dictionarySize, ParquetEncoding en
requireNonNull(encoding, "encoding is null"));
}
- public ParquetDictionaryPage(Slice slice, int uncompressedSize, int dictionarySize, ParquetEncoding encoding)
+ public DictionaryPage(Slice slice, int uncompressedSize, int dictionarySize, ParquetEncoding encoding)
{
super(requireNonNull(slice, "slice is null").length(), uncompressedSize);
this.slice = slice;
@@ -59,9 +59,9 @@ public ParquetEncoding getEncoding()
return encoding;
}
- public ParquetDictionaryPage copy()
+ public DictionaryPage copy()
{
- return new ParquetDictionaryPage(wrappedBuffer(Arrays.copyOf(slice.getBytes(), slice.length())), getUncompressedSize(), dictionarySize, encoding);
+ return new DictionaryPage(wrappedBuffer(Arrays.copyOf(slice.getBytes(), slice.length())), getUncompressedSize(), dictionarySize, encoding);
}
@Override
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/Field.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/Field.java
similarity index 97%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/Field.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/Field.java
index 063e426239694..c3ceea2db14f7 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/Field.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/Field.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet;
+package com.facebook.presto.parquet;
import com.facebook.presto.spi.type.Type;
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/GroupField.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/GroupField.java
similarity index 96%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/GroupField.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/GroupField.java
index 934a1c2c43348..8618bb02940f7 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/GroupField.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/GroupField.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet;
+package com.facebook.presto.parquet;
import com.facebook.presto.spi.type.Type;
import com.google.common.collect.ImmutableList;
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetPage.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/Page.java
similarity index 86%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetPage.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/Page.java
index 50fee0831ad6a..b5b917af2aa57 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetPage.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/Page.java
@@ -11,14 +11,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet;
+package com.facebook.presto.parquet;
-public abstract class ParquetPage
+public abstract class Page
{
protected final int compressedSize;
protected final int uncompressedSize;
- public ParquetPage(int compressedSize, int uncompressedSize)
+ public Page(int compressedSize, int uncompressedSize)
{
this.compressedSize = compressedSize;
this.uncompressedSize = uncompressedSize;
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetCompressionUtils.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetCompressionUtils.java
similarity index 99%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetCompressionUtils.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetCompressionUtils.java
index ef9a300a4acdf..65579e6d1ddb8 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetCompressionUtils.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetCompressionUtils.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet;
+package com.facebook.presto.parquet;
import io.airlift.compress.Decompressor;
import io.airlift.compress.lzo.LzoDecompressor;
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetCorruptionException.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetCorruptionException.java
similarity index 96%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetCorruptionException.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetCorruptionException.java
index 7065bbe6142e2..d99e72c5f6596 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetCorruptionException.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetCorruptionException.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet;
+package com.facebook.presto.parquet;
import java.io.IOException;
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetDataSource.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetDataSource.java
similarity index 95%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetDataSource.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetDataSource.java
index 75cbdab480b7c..43458a6661997 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetDataSource.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetDataSource.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet;
+package com.facebook.presto.parquet;
import java.io.Closeable;
import java.io.IOException;
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetEncoding.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetEncoding.java
similarity index 73%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetEncoding.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetEncoding.java
index 77879cee2e769..fc4c93670c8d3 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetEncoding.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetEncoding.java
@@ -11,15 +11,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet;
-
-import com.facebook.presto.hive.parquet.dictionary.ParquetBinaryDictionary;
-import com.facebook.presto.hive.parquet.dictionary.ParquetDictionary;
-import com.facebook.presto.hive.parquet.dictionary.ParquetDictionaryReader;
-import com.facebook.presto.hive.parquet.dictionary.ParquetDoubleDictionary;
-import com.facebook.presto.hive.parquet.dictionary.ParquetFloatDictionary;
-import com.facebook.presto.hive.parquet.dictionary.ParquetIntegerDictionary;
-import com.facebook.presto.hive.parquet.dictionary.ParquetLongDictionary;
+package com.facebook.presto.parquet;
+
+import com.facebook.presto.parquet.dictionary.BinaryDictionary;
+import com.facebook.presto.parquet.dictionary.Dictionary;
+import com.facebook.presto.parquet.dictionary.DictionaryReader;
+import com.facebook.presto.parquet.dictionary.DoubleDictionary;
+import com.facebook.presto.parquet.dictionary.FloatDictionary;
+import com.facebook.presto.parquet.dictionary.IntegerDictionary;
+import com.facebook.presto.parquet.dictionary.LongDictionary;
import parquet.bytes.BytesUtils;
import parquet.column.ColumnDescriptor;
import parquet.column.values.ValuesReader;
@@ -51,7 +51,7 @@ public enum ParquetEncoding
{
PLAIN {
@Override
- public ValuesReader getValuesReader(ColumnDescriptor descriptor, ParquetValuesType valuesType)
+ public ValuesReader getValuesReader(ColumnDescriptor descriptor, ValuesType valuesType)
{
switch (descriptor.getType()) {
case BOOLEAN:
@@ -76,24 +76,24 @@ public ValuesReader getValuesReader(ColumnDescriptor descriptor, ParquetValuesTy
}
@Override
- public ParquetDictionary initDictionary(ColumnDescriptor descriptor, ParquetDictionaryPage dictionaryPage)
+ public Dictionary initDictionary(ColumnDescriptor descriptor, DictionaryPage dictionaryPage)
throws IOException
{
switch (descriptor.getType()) {
case BINARY:
- return new ParquetBinaryDictionary(dictionaryPage);
+ return new BinaryDictionary(dictionaryPage);
case FIXED_LEN_BYTE_ARRAY:
- return new ParquetBinaryDictionary(dictionaryPage, descriptor.getTypeLength());
+ return new BinaryDictionary(dictionaryPage, descriptor.getTypeLength());
case INT96:
- return new ParquetBinaryDictionary(dictionaryPage, INT96_TYPE_LENGTH);
+ return new BinaryDictionary(dictionaryPage, INT96_TYPE_LENGTH);
case INT64:
- return new ParquetLongDictionary(dictionaryPage);
+ return new LongDictionary(dictionaryPage);
case DOUBLE:
- return new ParquetDoubleDictionary(dictionaryPage);
+ return new DoubleDictionary(dictionaryPage);
case INT32:
- return new ParquetIntegerDictionary(dictionaryPage);
+ return new IntegerDictionary(dictionaryPage);
case FLOAT:
- return new ParquetFloatDictionary(dictionaryPage);
+ return new FloatDictionary(dictionaryPage);
default:
throw new ParquetDecodingException("Dictionary encoding does not support: " + descriptor.getType());
}
@@ -102,7 +102,7 @@ public ParquetDictionary initDictionary(ColumnDescriptor descriptor, ParquetDict
RLE {
@Override
- public ValuesReader getValuesReader(ColumnDescriptor descriptor, ParquetValuesType valuesType)
+ public ValuesReader getValuesReader(ColumnDescriptor descriptor, ValuesType valuesType)
{
int bitWidth = BytesUtils.getWidthFromMaxInt(getMaxLevel(descriptor, valuesType));
if (bitWidth == 0) {
@@ -114,7 +114,7 @@ public ValuesReader getValuesReader(ColumnDescriptor descriptor, ParquetValuesTy
BIT_PACKED {
@Override
- public ValuesReader getValuesReader(ColumnDescriptor descriptor, ParquetValuesType valuesType)
+ public ValuesReader getValuesReader(ColumnDescriptor descriptor, ValuesType valuesType)
{
return new ByteBitPackingValuesReader(getMaxLevel(descriptor, valuesType), BIG_ENDIAN);
}
@@ -122,13 +122,13 @@ public ValuesReader getValuesReader(ColumnDescriptor descriptor, ParquetValuesTy
PLAIN_DICTIONARY {
@Override
- public ValuesReader getDictionaryBasedValuesReader(ColumnDescriptor descriptor, ParquetValuesType valuesType, ParquetDictionary dictionary)
+ public ValuesReader getDictionaryBasedValuesReader(ColumnDescriptor descriptor, ValuesType valuesType, Dictionary dictionary)
{
return RLE_DICTIONARY.getDictionaryBasedValuesReader(descriptor, valuesType, dictionary);
}
@Override
- public ParquetDictionary initDictionary(ColumnDescriptor descriptor, ParquetDictionaryPage dictionaryPage)
+ public Dictionary initDictionary(ColumnDescriptor descriptor, DictionaryPage dictionaryPage)
throws IOException
{
return PLAIN.initDictionary(descriptor, dictionaryPage);
@@ -143,7 +143,7 @@ public boolean usesDictionary()
DELTA_BINARY_PACKED {
@Override
- public ValuesReader getValuesReader(ColumnDescriptor descriptor, ParquetValuesType valuesType)
+ public ValuesReader getValuesReader(ColumnDescriptor descriptor, ValuesType valuesType)
{
checkArgument(descriptor.getType() == INT32, "Encoding DELTA_BINARY_PACKED is only supported for type INT32");
return new DeltaBinaryPackingValuesReader();
@@ -152,7 +152,7 @@ public ValuesReader getValuesReader(ColumnDescriptor descriptor, ParquetValuesTy
DELTA_LENGTH_BYTE_ARRAY {
@Override
- public ValuesReader getValuesReader(ColumnDescriptor descriptor, ParquetValuesType valuesType)
+ public ValuesReader getValuesReader(ColumnDescriptor descriptor, ValuesType valuesType)
{
checkArgument(descriptor.getType() == BINARY, "Encoding DELTA_LENGTH_BYTE_ARRAY is only supported for type BINARY");
return new DeltaLengthByteArrayValuesReader();
@@ -161,7 +161,7 @@ public ValuesReader getValuesReader(ColumnDescriptor descriptor, ParquetValuesTy
DELTA_BYTE_ARRAY {
@Override
- public ValuesReader getValuesReader(ColumnDescriptor descriptor, ParquetValuesType valuesType)
+ public ValuesReader getValuesReader(ColumnDescriptor descriptor, ValuesType valuesType)
{
checkArgument(
descriptor.getType() == BINARY || descriptor.getType() == FIXED_LEN_BYTE_ARRAY,
@@ -172,13 +172,13 @@ public ValuesReader getValuesReader(ColumnDescriptor descriptor, ParquetValuesTy
RLE_DICTIONARY {
@Override
- public ValuesReader getDictionaryBasedValuesReader(ColumnDescriptor descriptor, ParquetValuesType valuesType, ParquetDictionary dictionary)
+ public ValuesReader getDictionaryBasedValuesReader(ColumnDescriptor descriptor, ValuesType valuesType, Dictionary dictionary)
{
- return new ParquetDictionaryReader(dictionary);
+ return new DictionaryReader(dictionary);
}
@Override
- public ParquetDictionary initDictionary(ColumnDescriptor descriptor, ParquetDictionaryPage dictionaryPage)
+ public Dictionary initDictionary(ColumnDescriptor descriptor, DictionaryPage dictionaryPage)
throws IOException
{
return PLAIN.initDictionary(descriptor, dictionaryPage);
@@ -193,7 +193,7 @@ public boolean usesDictionary()
static final int INT96_TYPE_LENGTH = 12;
- static int getMaxLevel(ColumnDescriptor descriptor, ParquetValuesType valuesType)
+ static int getMaxLevel(ColumnDescriptor descriptor, ValuesType valuesType)
{
switch (valuesType) {
case REPETITION_LEVEL:
@@ -205,7 +205,7 @@ static int getMaxLevel(ColumnDescriptor descriptor, ParquetValuesType valuesType
return 1;
}
default:
- throw new ParquetDecodingException("Unsupported Parquet values type: " + valuesType);
+ throw new ParquetDecodingException("Unsupported values type: " + valuesType);
}
}
@@ -214,19 +214,19 @@ public boolean usesDictionary()
return false;
}
- public ParquetDictionary initDictionary(ColumnDescriptor descriptor, ParquetDictionaryPage dictionaryPage)
+ public Dictionary initDictionary(ColumnDescriptor descriptor, DictionaryPage dictionaryPage)
throws IOException
{
- throw new UnsupportedOperationException("Parquet Dictionary encoding is not supported for: " + name());
+ throw new UnsupportedOperationException(" Dictionary encoding is not supported for: " + name());
}
- public ValuesReader getValuesReader(ColumnDescriptor descriptor, ParquetValuesType valuesType)
+ public ValuesReader getValuesReader(ColumnDescriptor descriptor, ValuesType valuesType)
{
- throw new UnsupportedOperationException("Error decoding Parquet values in encoding: " + this.name());
+ throw new UnsupportedOperationException("Error decoding values in encoding: " + this.name());
}
- public ValuesReader getDictionaryBasedValuesReader(ColumnDescriptor descriptor, ParquetValuesType valuesType, ParquetDictionary dictionary)
+ public ValuesReader getDictionaryBasedValuesReader(ColumnDescriptor descriptor, ValuesType valuesType, Dictionary dictionary)
{
- throw new UnsupportedOperationException("Parquet Dictionary encoding is not supported for: " + name());
+ throw new UnsupportedOperationException(" Dictionary encoding is not supported for: " + name());
}
}
diff --git a/presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetTimestampUtils.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetTimestampUtils.java
new file mode 100644
index 0000000000000..7a1e856633a6e
--- /dev/null
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetTimestampUtils.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed 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 com.facebook.presto.parquet;
+
+import com.facebook.presto.spi.PrestoException;
+import com.google.common.primitives.Ints;
+import com.google.common.primitives.Longs;
+import parquet.io.api.Binary;
+
+import java.util.concurrent.TimeUnit;
+
+import static com.facebook.presto.spi.StandardErrorCode.NOT_SUPPORTED;
+
+/**
+ * Utility class for decoding INT96 encoded parquet timestamp to timestamp millis in GMT.
+ *
+ */
+public final class ParquetTimestampUtils
+{
+ private static final int JULIAN_EPOCH_OFFSET_DAYS = 2_440_588;
+ private static final long MILLIS_IN_DAY = TimeUnit.DAYS.toMillis(1);
+ private static final long NANOS_PER_MILLISECOND = TimeUnit.MILLISECONDS.toNanos(1);
+
+ private ParquetTimestampUtils() {}
+
+ /**
+ * Returns GMT timestamp from binary encoded parquet timestamp (12 bytes - julian date + time of day nanos).
+ *
+ * @param timestampBinary INT96 parquet timestamp
+ * @return timestamp in millis, GMT timezone
+ */
+ public static long getTimestampMillis(Binary timestampBinary)
+ {
+ if (timestampBinary.length() != 12) {
+ throw new PrestoException(NOT_SUPPORTED, "Parquet timestamp must be 12 bytes, actual " + timestampBinary.length());
+ }
+ byte[] bytes = timestampBinary.getBytes();
+
+ // little endian encoding - need to invert byte order
+ long timeOfDayNanos = Longs.fromBytes(bytes[7], bytes[6], bytes[5], bytes[4], bytes[3], bytes[2], bytes[1], bytes[0]);
+ int julianDay = Ints.fromBytes(bytes[11], bytes[10], bytes[9], bytes[8]);
+
+ return julianDayToMillis(julianDay) + (timeOfDayNanos / NANOS_PER_MILLISECOND);
+ }
+
+ private static long julianDayToMillis(int julianDay)
+ {
+ return (julianDay - JULIAN_EPOCH_OFFSET_DAYS) * MILLIS_IN_DAY;
+ }
+}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetTypeUtils.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetTypeUtils.java
similarity index 95%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetTypeUtils.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetTypeUtils.java
index 88c8bb895dc27..a2a2d0f961345 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetTypeUtils.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetTypeUtils.java
@@ -11,9 +11,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet;
+package com.facebook.presto.parquet;
-import com.facebook.presto.hive.HiveColumnHandle;
import com.facebook.presto.spi.PrestoException;
import com.facebook.presto.spi.predicate.Domain;
import com.facebook.presto.spi.predicate.TupleDomain;
@@ -214,18 +213,6 @@ public static int getFieldIndex(MessageType fileSchema, String name)
}
}
- public static parquet.schema.Type getParquetType(HiveColumnHandle column, MessageType messageType, boolean useParquetColumnNames)
- {
- if (useParquetColumnNames) {
- return getParquetTypeByName(column.getName(), messageType);
- }
-
- if (column.getHiveColumnIndex() < messageType.getFieldCount()) {
- return messageType.getType(column.getHiveColumnIndex());
- }
- return null;
- }
-
public static ParquetEncoding getParquetEncoding(Encoding encoding)
{
switch (encoding) {
@@ -250,7 +237,7 @@ public static ParquetEncoding getParquetEncoding(Encoding encoding)
}
}
- private static parquet.schema.Type getParquetTypeByName(String columnName, MessageType messageType)
+ public static parquet.schema.Type getParquetTypeByName(String columnName, MessageType messageType)
{
if (messageType.containsField(columnName)) {
return messageType.getType(columnName);
@@ -306,4 +293,21 @@ public static boolean isValueNull(boolean required, int definitionLevel, int max
{
return !required && (definitionLevel == maxDefinitionLevel - 1);
}
+
+ // copied from presto-hive DecimalUtils
+ public static long getShortDecimalValue(byte[] bytes)
+ {
+ long value = 0;
+ if ((bytes[0] & 0x80) != 0) {
+ for (int i = 0; i < 8 - bytes.length; ++i) {
+ value |= 0xFFL << (8 * (7 - i));
+ }
+ }
+
+ for (int i = 0; i < bytes.length; i++) {
+ value |= ((long) bytes[bytes.length - i - 1] & 0xFFL) << (8 * i);
+ }
+
+ return value;
+ }
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetValidationUtils.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetValidationUtils.java
similarity index 95%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetValidationUtils.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetValidationUtils.java
index aae8432aa9a74..1e4ca48c9c764 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/ParquetValidationUtils.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetValidationUtils.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet;
+package com.facebook.presto.parquet;
import static java.lang.String.format;
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/PrimitiveField.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/PrimitiveField.java
similarity index 96%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/PrimitiveField.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/PrimitiveField.java
index 4eca7ef9af7ed..71915444bba0a 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/PrimitiveField.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/PrimitiveField.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet;
+package com.facebook.presto.parquet;
import com.facebook.presto.spi.type.Type;
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/RichColumnDescriptor.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/RichColumnDescriptor.java
similarity index 97%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/RichColumnDescriptor.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/RichColumnDescriptor.java
index 4f69e3a46dc2d..364018e3a489a 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/RichColumnDescriptor.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/RichColumnDescriptor.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet;
+package com.facebook.presto.parquet;
import parquet.column.ColumnDescriptor;
import parquet.schema.PrimitiveType;
diff --git a/presto-parquet/src/main/java/com/facebook/presto/parquet/ValuesType.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/ValuesType.java
new file mode 100644
index 0000000000000..66558498dfa3f
--- /dev/null
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/ValuesType.java
@@ -0,0 +1,21 @@
+/*
+ * Licensed 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 com.facebook.presto.parquet;
+
+public enum ValuesType
+{
+ REPETITION_LEVEL,
+ DEFINITION_LEVEL,
+ VALUES
+}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetBinaryDictionary.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/BinaryDictionary.java
similarity index 85%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetBinaryDictionary.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/BinaryDictionary.java
index 529e95c218367..98de7778662fd 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetBinaryDictionary.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/BinaryDictionary.java
@@ -11,9 +11,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.dictionary;
+package com.facebook.presto.parquet.dictionary;
-import com.facebook.presto.hive.parquet.ParquetDictionaryPage;
+import com.facebook.presto.parquet.DictionaryPage;
import parquet.io.api.Binary;
import java.io.IOException;
@@ -22,18 +22,18 @@
import static com.google.common.base.Preconditions.checkArgument;
import static parquet.bytes.BytesUtils.readIntLittleEndian;
-public class ParquetBinaryDictionary
- extends ParquetDictionary
+public class BinaryDictionary
+ extends Dictionary
{
private final Binary[] content;
- public ParquetBinaryDictionary(ParquetDictionaryPage dictionaryPage)
+ public BinaryDictionary(DictionaryPage dictionaryPage)
throws IOException
{
this(dictionaryPage, null);
}
- public ParquetBinaryDictionary(ParquetDictionaryPage dictionaryPage, Integer length)
+ public BinaryDictionary(DictionaryPage dictionaryPage, Integer length)
throws IOException
{
super(dictionaryPage.getEncoding());
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetDictionary.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/Dictionary.java
similarity index 83%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetDictionary.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/Dictionary.java
index 328992de7e80b..389ae428f03b9 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetDictionary.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/Dictionary.java
@@ -11,22 +11,22 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.dictionary;
+package com.facebook.presto.parquet.dictionary;
-import com.facebook.presto.hive.parquet.ParquetEncoding;
+import com.facebook.presto.parquet.ParquetEncoding;
import parquet.io.api.Binary;
import static com.google.common.base.Preconditions.checkArgument;
-public abstract class ParquetDictionary
+public abstract class Dictionary
{
private final ParquetEncoding encoding;
- public ParquetDictionary(ParquetEncoding encoding)
+ public Dictionary(ParquetEncoding encoding)
{
checkArgument(
encoding == ParquetEncoding.PLAIN_DICTIONARY || encoding == ParquetEncoding.PLAIN,
- "Parquet dictionary does not support encoding: %s", encoding);
+ " dictionary does not support encoding: %s", encoding);
this.encoding = encoding;
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetDictionaryReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/DictionaryReader.java
similarity index 91%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetDictionaryReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/DictionaryReader.java
index fca427e3e221c..714c1213e9cc1 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetDictionaryReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/DictionaryReader.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.dictionary;
+package com.facebook.presto.parquet.dictionary;
import parquet.bytes.BytesUtils;
import parquet.column.values.ValuesReader;
@@ -24,13 +24,13 @@
import static com.google.common.base.Preconditions.checkArgument;
-public class ParquetDictionaryReader
+public class DictionaryReader
extends ValuesReader
{
- private final ParquetDictionary dictionary;
+ private final Dictionary dictionary;
private RunLengthBitPackingHybridDecoder decoder;
- public ParquetDictionaryReader(ParquetDictionary dictionary)
+ public DictionaryReader(Dictionary dictionary)
{
this.dictionary = dictionary;
}
@@ -39,7 +39,7 @@ public ParquetDictionaryReader(ParquetDictionary dictionary)
public void initFromPage(int valueCount, byte[] page, int offset)
throws IOException
{
- checkArgument(page.length > offset, "Attempt to read offset not in the Parquet page");
+ checkArgument(page.length > offset, "Attempt to read offset not in the page");
ByteArrayInputStream in = new ByteArrayInputStream(page, offset, page.length - offset);
int bitWidth = BytesUtils.readIntLittleEndianOnOneByte(in);
decoder = new RunLengthBitPackingHybridDecoder(bitWidth, in);
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetDoubleDictionary.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/DoubleDictionary.java
similarity index 85%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetDoubleDictionary.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/DoubleDictionary.java
index 825b043a708d2..9ba33b629e480 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetDoubleDictionary.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/DoubleDictionary.java
@@ -11,21 +11,21 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.dictionary;
+package com.facebook.presto.parquet.dictionary;
-import com.facebook.presto.hive.parquet.ParquetDictionaryPage;
+import com.facebook.presto.parquet.DictionaryPage;
import parquet.column.values.plain.PlainValuesReader.DoublePlainValuesReader;
import java.io.IOException;
import static com.google.common.base.MoreObjects.toStringHelper;
-public class ParquetDoubleDictionary
- extends ParquetDictionary
+public class DoubleDictionary
+ extends Dictionary
{
private final double[] content;
- public ParquetDoubleDictionary(ParquetDictionaryPage dictionaryPage)
+ public DoubleDictionary(DictionaryPage dictionaryPage)
throws IOException
{
super(dictionaryPage.getEncoding());
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetFloatDictionary.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/FloatDictionary.java
similarity index 85%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetFloatDictionary.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/FloatDictionary.java
index 2db9b64b81eb3..2ae885f53f6c3 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetFloatDictionary.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/FloatDictionary.java
@@ -11,21 +11,21 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.dictionary;
+package com.facebook.presto.parquet.dictionary;
-import com.facebook.presto.hive.parquet.ParquetDictionaryPage;
+import com.facebook.presto.parquet.DictionaryPage;
import parquet.column.values.plain.PlainValuesReader.FloatPlainValuesReader;
import java.io.IOException;
import static com.google.common.base.MoreObjects.toStringHelper;
-public class ParquetFloatDictionary
- extends ParquetDictionary
+public class FloatDictionary
+ extends Dictionary
{
private final float[] content;
- public ParquetFloatDictionary(ParquetDictionaryPage dictionaryPage)
+ public FloatDictionary(DictionaryPage dictionaryPage)
throws IOException
{
super(dictionaryPage.getEncoding());
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetIntegerDictionary.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/IntegerDictionary.java
similarity index 84%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetIntegerDictionary.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/IntegerDictionary.java
index c4660797876be..0d8fb9974fa5f 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetIntegerDictionary.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/IntegerDictionary.java
@@ -11,21 +11,21 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.dictionary;
+package com.facebook.presto.parquet.dictionary;
-import com.facebook.presto.hive.parquet.ParquetDictionaryPage;
+import com.facebook.presto.parquet.DictionaryPage;
import parquet.column.values.plain.PlainValuesReader.IntegerPlainValuesReader;
import java.io.IOException;
import static com.google.common.base.MoreObjects.toStringHelper;
-public class ParquetIntegerDictionary
- extends ParquetDictionary
+public class IntegerDictionary
+ extends Dictionary
{
private final int[] content;
- public ParquetIntegerDictionary(ParquetDictionaryPage dictionaryPage)
+ public IntegerDictionary(DictionaryPage dictionaryPage)
throws IOException
{
super(dictionaryPage.getEncoding());
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetLongDictionary.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/LongDictionary.java
similarity index 85%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetLongDictionary.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/LongDictionary.java
index adf2aeb60296d..a1b227d7f1134 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/dictionary/ParquetLongDictionary.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/dictionary/LongDictionary.java
@@ -11,21 +11,21 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.dictionary;
+package com.facebook.presto.parquet.dictionary;
-import com.facebook.presto.hive.parquet.ParquetDictionaryPage;
+import com.facebook.presto.parquet.DictionaryPage;
import parquet.column.values.plain.PlainValuesReader.LongPlainValuesReader;
import java.io.IOException;
import static com.google.common.base.MoreObjects.toStringHelper;
-public class ParquetLongDictionary
- extends ParquetDictionary
+public class LongDictionary
+ extends Dictionary
{
private final long[] content;
- public ParquetLongDictionary(ParquetDictionaryPage dictionaryPage)
+ public LongDictionary(DictionaryPage dictionaryPage)
throws IOException
{
super(dictionaryPage.getEncoding());
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetDictionaryDescriptor.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/DictionaryDescriptor.java
similarity index 69%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetDictionaryDescriptor.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/DictionaryDescriptor.java
index e2ba85cbe29e0..f789e391f809a 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetDictionaryDescriptor.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/DictionaryDescriptor.java
@@ -11,19 +11,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.predicate;
+package com.facebook.presto.parquet.predicate;
-import com.facebook.presto.hive.parquet.ParquetDictionaryPage;
+import com.facebook.presto.parquet.DictionaryPage;
import parquet.column.ColumnDescriptor;
import java.util.Optional;
-public class ParquetDictionaryDescriptor
+public class DictionaryDescriptor
{
private final ColumnDescriptor columnDescriptor;
- private final Optional dictionaryPage;
+ private final Optional dictionaryPage;
- public ParquetDictionaryDescriptor(ColumnDescriptor columnDescriptor, Optional dictionaryPage)
+ public DictionaryDescriptor(ColumnDescriptor columnDescriptor, Optional dictionaryPage)
{
this.columnDescriptor = columnDescriptor;
this.dictionaryPage = dictionaryPage;
@@ -34,7 +34,7 @@ public ColumnDescriptor getColumnDescriptor()
return columnDescriptor;
}
- public Optional getDictionaryPage()
+ public Optional getDictionaryPage()
{
return dictionaryPage;
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetDoubleStatistics.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/ParquetDoubleStatistics.java
similarity index 95%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetDoubleStatistics.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/ParquetDoubleStatistics.java
index 8c70e0f93368f..1879663736f2a 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetDoubleStatistics.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/ParquetDoubleStatistics.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.predicate;
+package com.facebook.presto.parquet.predicate;
public class ParquetDoubleStatistics
implements ParquetRangeStatistics
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetIntegerStatistics.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/ParquetIntegerStatistics.java
similarity index 95%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetIntegerStatistics.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/ParquetIntegerStatistics.java
index b5f8223a06269..46f0abde71bd2 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetIntegerStatistics.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/ParquetIntegerStatistics.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.predicate;
+package com.facebook.presto.parquet.predicate;
public class ParquetIntegerStatistics
implements ParquetRangeStatistics
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetRangeStatistics.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/ParquetRangeStatistics.java
similarity index 92%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetRangeStatistics.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/ParquetRangeStatistics.java
index 6d0ff77f0c278..43f54e55b53f7 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetRangeStatistics.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/ParquetRangeStatistics.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.predicate;
+package com.facebook.presto.parquet.predicate;
public interface ParquetRangeStatistics
{
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetStringStatistics.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/ParquetStringStatistics.java
similarity index 95%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetStringStatistics.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/ParquetStringStatistics.java
index 7722e66fdeb09..89fc21d8e25db 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetStringStatistics.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/ParquetStringStatistics.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.predicate;
+package com.facebook.presto.parquet.predicate;
import io.airlift.slice.Slice;
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetPredicate.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/Predicate.java
similarity index 82%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetPredicate.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/Predicate.java
index f0b97b668c93b..611f71a587356 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetPredicate.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/Predicate.java
@@ -11,16 +11,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.predicate;
+package com.facebook.presto.parquet.predicate;
import parquet.column.ColumnDescriptor;
import parquet.column.statistics.Statistics;
import java.util.Map;
-public interface ParquetPredicate
+public interface Predicate
{
- ParquetPredicate TRUE = new ParquetPredicate()
+ Predicate TRUE = new Predicate()
{
@Override
public boolean matches(long numberOfRows, Map> statistics)
@@ -29,7 +29,7 @@ public boolean matches(long numberOfRows, Map> s
}
@Override
- public boolean matches(Map dictionaries)
+ public boolean matches(Map dictionaries)
{
return true;
}
@@ -49,5 +49,5 @@ public boolean matches(Map dictio
*
* @param dictionaries dictionaries per column
*/
- boolean matches(Map dictionaries);
+ boolean matches(Map dictionaries);
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetPredicateUtils.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/PredicateUtils.java
similarity index 66%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetPredicateUtils.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/PredicateUtils.java
index 1de48312d1580..6816d15ac19d1 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/ParquetPredicateUtils.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/PredicateUtils.java
@@ -11,14 +11,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.predicate;
-
-import com.facebook.presto.hive.HiveColumnHandle;
-import com.facebook.presto.hive.parquet.ParquetDataSource;
-import com.facebook.presto.hive.parquet.ParquetDictionaryPage;
-import com.facebook.presto.hive.parquet.ParquetEncoding;
-import com.facebook.presto.hive.parquet.RichColumnDescriptor;
-import com.facebook.presto.spi.predicate.Domain;
+package com.facebook.presto.parquet.predicate;
+
+import com.facebook.presto.parquet.DictionaryPage;
+import com.facebook.presto.parquet.ParquetDataSource;
+import com.facebook.presto.parquet.ParquetEncoding;
+import com.facebook.presto.parquet.RichColumnDescriptor;
import com.facebook.presto.spi.predicate.TupleDomain;
import com.facebook.presto.spi.type.Type;
import com.google.common.annotations.VisibleForTesting;
@@ -47,23 +45,21 @@
import java.util.Optional;
import java.util.Set;
-import static com.facebook.presto.hive.parquet.ParquetCompressionUtils.decompress;
-import static com.facebook.presto.hive.parquet.ParquetTypeUtils.getParquetEncoding;
+import static com.facebook.presto.parquet.ParquetCompressionUtils.decompress;
+import static com.facebook.presto.parquet.ParquetTypeUtils.getParquetEncoding;
import static com.facebook.presto.spi.type.IntegerType.INTEGER;
import static com.facebook.presto.spi.type.SmallintType.SMALLINT;
import static com.facebook.presto.spi.type.TinyintType.TINYINT;
import static com.google.common.base.Verify.verify;
import static io.airlift.slice.Slices.wrappedBuffer;
import static java.lang.Math.toIntExact;
-import static java.util.Map.Entry;
-import static org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector.Category.PRIMITIVE;
import static parquet.column.Encoding.BIT_PACKED;
import static parquet.column.Encoding.PLAIN_DICTIONARY;
import static parquet.column.Encoding.RLE;
-public final class ParquetPredicateUtils
+public final class PredicateUtils
{
- private ParquetPredicateUtils()
+ private PredicateUtils()
{
}
@@ -76,29 +72,7 @@ public static boolean isStatisticsOverflow(Type type, ParquetIntegerStatistics p
(type.equals(INTEGER) && (min < Integer.MIN_VALUE || max > Integer.MAX_VALUE));
}
- public static TupleDomain getParquetTupleDomain(Map, RichColumnDescriptor> descriptorsByPath, TupleDomain effectivePredicate)
- {
- if (effectivePredicate.isNone()) {
- return TupleDomain.none();
- }
-
- ImmutableMap.Builder predicate = ImmutableMap.builder();
- for (Entry entry : effectivePredicate.getDomains().get().entrySet()) {
- HiveColumnHandle columnHandle = entry.getKey();
- // skip looking up predicates for complex types as Parquet only stores stats for primitives
- if (!columnHandle.getHiveType().getCategory().equals(PRIMITIVE)) {
- continue;
- }
-
- RichColumnDescriptor descriptor = descriptorsByPath.get(ImmutableList.of(columnHandle.getName()));
- if (descriptor != null) {
- predicate.put(descriptor, entry.getValue());
- }
- }
- return TupleDomain.withColumnDomains(predicate.build());
- }
-
- public static ParquetPredicate buildParquetPredicate(MessageType requestedSchema, TupleDomain parquetTupleDomain, Map, RichColumnDescriptor> descriptorsByPath)
+ public static Predicate buildPredicate(MessageType requestedSchema, TupleDomain parquetTupleDomain, Map, RichColumnDescriptor> descriptorsByPath)
{
ImmutableList.Builder columnReferences = ImmutableList.builder();
for (String[] paths : requestedSchema.getPaths()) {
@@ -110,14 +84,14 @@ public static ParquetPredicate buildParquetPredicate(MessageType requestedSchema
return new TupleDomainParquetPredicate(parquetTupleDomain, columnReferences.build());
}
- public static boolean predicateMatches(ParquetPredicate parquetPredicate, BlockMetaData block, ParquetDataSource dataSource, Map, RichColumnDescriptor> descriptorsByPath, TupleDomain parquetTupleDomain)
+ public static boolean predicateMatches(Predicate parquetPredicate, BlockMetaData block, ParquetDataSource dataSource, Map, RichColumnDescriptor> descriptorsByPath, TupleDomain parquetTupleDomain)
{
Map> columnStatistics = getStatistics(block, descriptorsByPath);
if (!parquetPredicate.matches(block.getRowCount(), columnStatistics)) {
return false;
}
- Map dictionaries = getDictionaries(block, dataSource, descriptorsByPath, parquetTupleDomain);
+ Map dictionaries = getDictionaries(block, dataSource, descriptorsByPath, parquetTupleDomain);
return parquetPredicate.matches(dictionaries);
}
@@ -136,9 +110,9 @@ private static Map> getStatistics(BlockMetaData
return statistics.build();
}
- private static Map getDictionaries(BlockMetaData blockMetadata, ParquetDataSource dataSource, Map, RichColumnDescriptor> descriptorsByPath, TupleDomain parquetTupleDomain)
+ private static Map getDictionaries(BlockMetaData blockMetadata, ParquetDataSource dataSource, Map, RichColumnDescriptor> descriptorsByPath, TupleDomain parquetTupleDomain)
{
- ImmutableMap.Builder dictionaries = ImmutableMap.builder();
+ ImmutableMap.Builder dictionaries = ImmutableMap.builder();
for (ColumnChunkMetaData columnMetaData : blockMetadata.getColumns()) {
RichColumnDescriptor descriptor = descriptorsByPath.get(Arrays.asList(columnMetaData.getPath().toArray()));
if (descriptor != null) {
@@ -146,8 +120,8 @@ private static Map getDictionarie
int totalSize = toIntExact(columnMetaData.getTotalSize());
byte[] buffer = new byte[totalSize];
dataSource.readFully(columnMetaData.getStartingPos(), buffer);
- Optional dictionaryPage = readDictionaryPage(buffer, columnMetaData.getCodec());
- dictionaries.put(descriptor, new ParquetDictionaryDescriptor(descriptor, dictionaryPage));
+ Optional dictionaryPage = readDictionaryPage(buffer, columnMetaData.getCodec());
+ dictionaries.put(descriptor, new DictionaryDescriptor(descriptor, dictionaryPage));
break;
}
}
@@ -155,7 +129,7 @@ private static Map getDictionarie
return dictionaries.build();
}
- private static Optional readDictionaryPage(byte[] data, CompressionCodecName codecName)
+ private static Optional readDictionaryPage(byte[] data, CompressionCodecName codecName)
{
try {
ByteArrayInputStream inputStream = new ByteArrayInputStream(data);
@@ -170,7 +144,7 @@ private static Optional readDictionaryPage(byte[] data, C
ParquetEncoding encoding = getParquetEncoding(Encoding.valueOf(dicHeader.getEncoding().name()));
int dictionarySize = dicHeader.getNum_values();
- return Optional.of(new ParquetDictionaryPage(decompress(codecName, compressedData, pageHeader.getUncompressed_page_size()), dictionarySize, encoding));
+ return Optional.of(new DictionaryPage(decompress(codecName, compressedData, pageHeader.getUncompressed_page_size()), dictionarySize, encoding));
}
catch (IOException ignored) {
return Optional.empty();
@@ -185,7 +159,7 @@ private static boolean isColumnPredicate(ColumnDescriptor columnDescriptor, Tupl
@VisibleForTesting
@SuppressWarnings("deprecation")
- static boolean isOnlyDictionaryEncodingPages(Set encodings)
+ public static boolean isOnlyDictionaryEncodingPages(Set encodings)
{
// TODO: update to use EncodingStats in ColumnChunkMetaData when available
if (encodings.contains(PLAIN_DICTIONARY)) {
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/TupleDomainParquetPredicate.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/TupleDomainParquetPredicate.java
similarity index 93%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/TupleDomainParquetPredicate.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/TupleDomainParquetPredicate.java
index 598a7d7a83a16..50c7cc62b3f28 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/predicate/TupleDomainParquetPredicate.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/TupleDomainParquetPredicate.java
@@ -11,11 +11,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.predicate;
+package com.facebook.presto.parquet.predicate;
-import com.facebook.presto.hive.parquet.ParquetDictionaryPage;
-import com.facebook.presto.hive.parquet.RichColumnDescriptor;
-import com.facebook.presto.hive.parquet.dictionary.ParquetDictionary;
+import com.facebook.presto.parquet.DictionaryPage;
+import com.facebook.presto.parquet.RichColumnDescriptor;
+import com.facebook.presto.parquet.dictionary.Dictionary;
import com.facebook.presto.spi.predicate.Domain;
import com.facebook.presto.spi.predicate.Range;
import com.facebook.presto.spi.predicate.TupleDomain;
@@ -42,8 +42,8 @@
import java.util.Optional;
import java.util.function.Function;
-import static com.facebook.presto.hive.parquet.ParquetTypeUtils.getPrestoType;
-import static com.facebook.presto.hive.parquet.predicate.ParquetPredicateUtils.isStatisticsOverflow;
+import static com.facebook.presto.parquet.ParquetTypeUtils.getPrestoType;
+import static com.facebook.presto.parquet.predicate.PredicateUtils.isStatisticsOverflow;
import static com.facebook.presto.spi.type.BigintType.BIGINT;
import static com.facebook.presto.spi.type.BooleanType.BOOLEAN;
import static com.facebook.presto.spi.type.DoubleType.DOUBLE;
@@ -56,7 +56,7 @@
import static java.util.Objects.requireNonNull;
public class TupleDomainParquetPredicate
- implements ParquetPredicate
+ implements Predicate
{
private final TupleDomain effectivePredicate;
private final List columns;
@@ -95,12 +95,12 @@ public boolean matches(long numberOfRows, Map> s
}
@Override
- public boolean matches(Map dictionaries)
+ public boolean matches(Map dictionaries)
{
ImmutableMap.Builder domains = ImmutableMap.builder();
for (RichColumnDescriptor column : columns) {
- ParquetDictionaryDescriptor dictionaryDescriptor = dictionaries.get(column);
+ DictionaryDescriptor dictionaryDescriptor = dictionaries.get(column);
Domain domain = getDomain(getPrestoType(effectivePredicate, column), dictionaryDescriptor);
if (domain != null) {
domains.put(column, domain);
@@ -204,19 +204,19 @@ else if (isVarcharType(type) && statistics instanceof BinaryStatistics) {
}
@VisibleForTesting
- public static Domain getDomain(Type type, ParquetDictionaryDescriptor dictionaryDescriptor)
+ public static Domain getDomain(Type type, DictionaryDescriptor dictionaryDescriptor)
{
if (dictionaryDescriptor == null) {
return null;
}
ColumnDescriptor columnDescriptor = dictionaryDescriptor.getColumnDescriptor();
- Optional dictionaryPage = dictionaryDescriptor.getDictionaryPage();
+ Optional dictionaryPage = dictionaryDescriptor.getDictionaryPage();
if (!dictionaryPage.isPresent()) {
return null;
}
- ParquetDictionary dictionary;
+ Dictionary dictionary;
try {
dictionary = dictionaryPage.get().getEncoding().initDictionary(columnDescriptor, dictionaryPage.get());
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetBinaryColumnReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/BinaryColumnReader.java
similarity index 88%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetBinaryColumnReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/BinaryColumnReader.java
index d63b4b60ed9dd..2722e028604ff 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetBinaryColumnReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/BinaryColumnReader.java
@@ -11,9 +11,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
-import com.facebook.presto.hive.parquet.RichColumnDescriptor;
+import com.facebook.presto.parquet.RichColumnDescriptor;
import com.facebook.presto.spi.block.BlockBuilder;
import com.facebook.presto.spi.type.Type;
import io.airlift.slice.Slice;
@@ -26,10 +26,10 @@
import static io.airlift.slice.Slices.EMPTY_SLICE;
import static io.airlift.slice.Slices.wrappedBuffer;
-public class ParquetBinaryColumnReader
- extends ParquetPrimitiveColumnReader
+public class BinaryColumnReader
+ extends PrimitiveColumnReader
{
- public ParquetBinaryColumnReader(RichColumnDescriptor descriptor)
+ public BinaryColumnReader(RichColumnDescriptor descriptor)
{
super(descriptor);
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetBooleanColumnReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/BooleanColumnReader.java
similarity index 82%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetBooleanColumnReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/BooleanColumnReader.java
index 3d1f0225f4dc4..24bc03236a299 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetBooleanColumnReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/BooleanColumnReader.java
@@ -11,16 +11,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
-import com.facebook.presto.hive.parquet.RichColumnDescriptor;
+import com.facebook.presto.parquet.RichColumnDescriptor;
import com.facebook.presto.spi.block.BlockBuilder;
import com.facebook.presto.spi.type.Type;
-public class ParquetBooleanColumnReader
- extends ParquetPrimitiveColumnReader
+public class BooleanColumnReader
+ extends PrimitiveColumnReader
{
- public ParquetBooleanColumnReader(RichColumnDescriptor descriptor)
+ public BooleanColumnReader(RichColumnDescriptor descriptor)
{
super(descriptor);
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ColumnChunk.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ColumnChunk.java
similarity index 96%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ColumnChunk.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ColumnChunk.java
index 1cfcabe844418..f4a1a8dcf3dcc 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ColumnChunk.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ColumnChunk.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
import com.facebook.presto.spi.block.Block;
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetColumnChunkDescriptor.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ColumnChunkDescriptor.java
similarity index 90%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetColumnChunkDescriptor.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ColumnChunkDescriptor.java
index 65a148a29241e..388ca74b0f041 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetColumnChunkDescriptor.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ColumnChunkDescriptor.java
@@ -11,18 +11,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
import parquet.column.ColumnDescriptor;
import parquet.hadoop.metadata.ColumnChunkMetaData;
-public class ParquetColumnChunkDescriptor
+public class ColumnChunkDescriptor
{
private final ColumnDescriptor columnDescriptor;
private final ColumnChunkMetaData columnChunkMetaData;
private final int size;
- public ParquetColumnChunkDescriptor(
+ public ColumnChunkDescriptor(
ColumnDescriptor columnDescriptor,
ColumnChunkMetaData columnChunkMetaData,
int size)
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetDecimalColumnReaderFactory.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/DecimalColumnReaderFactory.java
similarity index 62%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetDecimalColumnReaderFactory.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/DecimalColumnReaderFactory.java
index 4903f3811fc6b..4616f0563bc56 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetDecimalColumnReaderFactory.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/DecimalColumnReaderFactory.java
@@ -11,23 +11,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
-import com.facebook.presto.hive.parquet.RichColumnDescriptor;
+import com.facebook.presto.parquet.RichColumnDescriptor;
import com.facebook.presto.spi.type.DecimalType;
-public final class ParquetDecimalColumnReaderFactory
+public final class DecimalColumnReaderFactory
{
- private ParquetDecimalColumnReaderFactory() {}
+ private DecimalColumnReaderFactory() {}
- public static ParquetPrimitiveColumnReader createReader(RichColumnDescriptor descriptor, int precision, int scale)
+ public static PrimitiveColumnReader createReader(RichColumnDescriptor descriptor, int precision, int scale)
{
DecimalType decimalType = DecimalType.createDecimalType(precision, scale);
if (decimalType.isShort()) {
- return new ParquetShortDecimalColumnReader(descriptor);
+ return new ShortDecimalColumnReader(descriptor);
}
else {
- return new ParquetLongDecimalColumnReader(descriptor);
+ return new LongDecimalColumnReader(descriptor);
}
}
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetDoubleColumnReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/DoubleColumnReader.java
similarity index 82%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetDoubleColumnReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/DoubleColumnReader.java
index 416ae35f10dc9..5adb4ee8fbd3e 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetDoubleColumnReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/DoubleColumnReader.java
@@ -11,16 +11,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
-import com.facebook.presto.hive.parquet.RichColumnDescriptor;
+import com.facebook.presto.parquet.RichColumnDescriptor;
import com.facebook.presto.spi.block.BlockBuilder;
import com.facebook.presto.spi.type.Type;
-public class ParquetDoubleColumnReader
- extends ParquetPrimitiveColumnReader
+public class DoubleColumnReader
+ extends PrimitiveColumnReader
{
- public ParquetDoubleColumnReader(RichColumnDescriptor descriptor)
+ public DoubleColumnReader(RichColumnDescriptor descriptor)
{
super(descriptor);
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetFloatColumnReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/FloatColumnReader.java
similarity index 82%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetFloatColumnReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/FloatColumnReader.java
index 559b3e6d2f10f..d8e8253d65cf4 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetFloatColumnReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/FloatColumnReader.java
@@ -11,18 +11,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
-import com.facebook.presto.hive.parquet.RichColumnDescriptor;
+import com.facebook.presto.parquet.RichColumnDescriptor;
import com.facebook.presto.spi.block.BlockBuilder;
import com.facebook.presto.spi.type.Type;
import static java.lang.Float.floatToRawIntBits;
-public class ParquetFloatColumnReader
- extends ParquetPrimitiveColumnReader
+public class FloatColumnReader
+ extends PrimitiveColumnReader
{
- public ParquetFloatColumnReader(RichColumnDescriptor descriptor)
+ public FloatColumnReader(RichColumnDescriptor descriptor)
{
super(descriptor);
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetIntColumnReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/IntColumnReader.java
similarity index 82%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetIntColumnReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/IntColumnReader.java
index 8564ef56cfdee..33e5d3d477388 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetIntColumnReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/IntColumnReader.java
@@ -11,16 +11,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
-import com.facebook.presto.hive.parquet.RichColumnDescriptor;
+import com.facebook.presto.parquet.RichColumnDescriptor;
import com.facebook.presto.spi.block.BlockBuilder;
import com.facebook.presto.spi.type.Type;
-public class ParquetIntColumnReader
- extends ParquetPrimitiveColumnReader
+public class IntColumnReader
+ extends PrimitiveColumnReader
{
- public ParquetIntColumnReader(RichColumnDescriptor descriptor)
+ public IntColumnReader(RichColumnDescriptor descriptor)
{
super(descriptor);
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetLevelNullReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/LevelNullReader.java
similarity index 83%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetLevelNullReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/LevelNullReader.java
index 444f6b31e051e..04004504d39f8 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetLevelNullReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/LevelNullReader.java
@@ -11,10 +11,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
-public class ParquetLevelNullReader
- implements ParquetLevelReader
+public class LevelNullReader
+ implements LevelReader
{
@Override
public int readLevel()
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetLevelRLEReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/LevelRLEReader.java
similarity index 83%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetLevelRLEReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/LevelRLEReader.java
index 60d04f7e7766f..f64ef584d9808 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetLevelRLEReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/LevelRLEReader.java
@@ -11,19 +11,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
import parquet.column.values.rle.RunLengthBitPackingHybridDecoder;
import parquet.io.ParquetDecodingException;
import java.io.IOException;
-public class ParquetLevelRLEReader
- implements ParquetLevelReader
+public class LevelRLEReader
+ implements LevelReader
{
private final RunLengthBitPackingHybridDecoder delegate;
- public ParquetLevelRLEReader(RunLengthBitPackingHybridDecoder delegate)
+ public LevelRLEReader(RunLengthBitPackingHybridDecoder delegate)
{
this.delegate = delegate;
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetLevelReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/LevelReader.java
similarity index 87%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetLevelReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/LevelReader.java
index 2bfe049128ace..4028afdd99c0f 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetLevelReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/LevelReader.java
@@ -11,9 +11,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
-public interface ParquetLevelReader
+public interface LevelReader
{
int readLevel();
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetLevelValuesReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/LevelValuesReader.java
similarity index 81%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetLevelValuesReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/LevelValuesReader.java
index 6e36cc9e3ee57..622ccdb4501bd 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetLevelValuesReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/LevelValuesReader.java
@@ -11,16 +11,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
import parquet.column.values.ValuesReader;
-public class ParquetLevelValuesReader
- implements ParquetLevelReader
+public class LevelValuesReader
+ implements LevelReader
{
private final ValuesReader delegate;
- public ParquetLevelValuesReader(ValuesReader delegate)
+ public LevelValuesReader(ValuesReader delegate)
{
this.delegate = delegate;
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetListColumnReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ListColumnReader.java
similarity index 94%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetListColumnReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ListColumnReader.java
index d24fc55d86c94..71773540cd998 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetListColumnReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ListColumnReader.java
@@ -11,16 +11,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
-import com.facebook.presto.hive.parquet.Field;
-import com.facebook.presto.hive.parquet.ParquetTypeUtils;
+import com.facebook.presto.parquet.Field;
+import com.facebook.presto.parquet.ParquetTypeUtils;
import it.unimi.dsi.fastutil.booleans.BooleanList;
import it.unimi.dsi.fastutil.ints.IntList;
-public class ParquetListColumnReader
+public class ListColumnReader
{
- private ParquetListColumnReader()
+ private ListColumnReader()
{
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetLongColumnReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/LongColumnReader.java
similarity index 82%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetLongColumnReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/LongColumnReader.java
index 7c1da0904c502..a4284b5fb8964 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetLongColumnReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/LongColumnReader.java
@@ -11,16 +11,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
-import com.facebook.presto.hive.parquet.RichColumnDescriptor;
+import com.facebook.presto.parquet.RichColumnDescriptor;
import com.facebook.presto.spi.block.BlockBuilder;
import com.facebook.presto.spi.type.Type;
-public class ParquetLongColumnReader
- extends ParquetPrimitiveColumnReader
+public class LongColumnReader
+ extends PrimitiveColumnReader
{
- public ParquetLongColumnReader(RichColumnDescriptor descriptor)
+ public LongColumnReader(RichColumnDescriptor descriptor)
{
super(descriptor);
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetLongDecimalColumnReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/LongDecimalColumnReader.java
similarity index 84%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetLongDecimalColumnReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/LongDecimalColumnReader.java
index b2a3ad711283b..f090080c2214c 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetLongDecimalColumnReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/LongDecimalColumnReader.java
@@ -11,9 +11,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
-import com.facebook.presto.hive.parquet.RichColumnDescriptor;
+import com.facebook.presto.parquet.RichColumnDescriptor;
import com.facebook.presto.spi.block.BlockBuilder;
import com.facebook.presto.spi.type.Decimals;
import com.facebook.presto.spi.type.Type;
@@ -21,10 +21,10 @@
import java.math.BigInteger;
-public class ParquetLongDecimalColumnReader
- extends ParquetPrimitiveColumnReader
+public class LongDecimalColumnReader
+ extends PrimitiveColumnReader
{
- ParquetLongDecimalColumnReader(RichColumnDescriptor descriptor)
+ LongDecimalColumnReader(RichColumnDescriptor descriptor)
{
super(descriptor);
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetMetadataReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/MetadataReader.java
similarity index 98%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetMetadataReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/MetadataReader.java
index f45ef6373cb0c..bfe31878c9f2f 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetMetadataReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/MetadataReader.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
@@ -51,16 +51,16 @@
import java.util.Map;
import java.util.Set;
-import static com.facebook.presto.hive.parquet.ParquetValidationUtils.validateParquet;
+import static com.facebook.presto.parquet.ParquetValidationUtils.validateParquet;
import static java.nio.charset.StandardCharsets.US_ASCII;
import static parquet.format.Util.readFileMetaData;
-public final class ParquetMetadataReader
+public final class MetadataReader
{
private static final int PARQUET_METADATA_LENGTH = 4;
private static final byte[] MAGIC = "PAR1".getBytes(US_ASCII);
- private ParquetMetadataReader() {}
+ private MetadataReader() {}
public static ParquetMetadata readFooter(FileSystem fileSystem, Path file, long fileSize)
throws IOException
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetPageReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/PageReader.java
similarity index 72%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetPageReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/PageReader.java
index 4302c3be22fea..6e036e2be9b9e 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetPageReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/PageReader.java
@@ -11,37 +11,37 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
-import com.facebook.presto.hive.parquet.ParquetDataPage;
-import com.facebook.presto.hive.parquet.ParquetDataPageV1;
-import com.facebook.presto.hive.parquet.ParquetDataPageV2;
-import com.facebook.presto.hive.parquet.ParquetDictionaryPage;
+import com.facebook.presto.parquet.DataPage;
+import com.facebook.presto.parquet.DataPageV1;
+import com.facebook.presto.parquet.DataPageV2;
+import com.facebook.presto.parquet.DictionaryPage;
import parquet.hadoop.metadata.CompressionCodecName;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
-import static com.facebook.presto.hive.parquet.ParquetCompressionUtils.decompress;
+import static com.facebook.presto.parquet.ParquetCompressionUtils.decompress;
import static java.lang.Math.toIntExact;
-class ParquetPageReader
+class PageReader
{
private final CompressionCodecName codec;
private final long valueCount;
- private final List compressedPages;
- private final ParquetDictionaryPage compressedDictionaryPage;
+ private final List compressedPages;
+ private final DictionaryPage compressedDictionaryPage;
- public ParquetPageReader(CompressionCodecName codec,
- List compressedPages,
- ParquetDictionaryPage compressedDictionaryPage)
+ public PageReader(CompressionCodecName codec,
+ List compressedPages,
+ DictionaryPage compressedDictionaryPage)
{
this.codec = codec;
this.compressedPages = new LinkedList<>(compressedPages);
this.compressedDictionaryPage = compressedDictionaryPage;
int count = 0;
- for (ParquetDataPage page : compressedPages) {
+ for (DataPage page : compressedPages) {
count += page.getValueCount();
}
this.valueCount = count;
@@ -52,16 +52,16 @@ public long getTotalValueCount()
return valueCount;
}
- public ParquetDataPage readPage()
+ public DataPage readPage()
{
if (compressedPages.isEmpty()) {
return null;
}
- ParquetDataPage compressedPage = compressedPages.remove(0);
+ DataPage compressedPage = compressedPages.remove(0);
try {
- if (compressedPage instanceof ParquetDataPageV1) {
- ParquetDataPageV1 dataPageV1 = (ParquetDataPageV1) compressedPage;
- return new ParquetDataPageV1(
+ if (compressedPage instanceof DataPageV1) {
+ DataPageV1 dataPageV1 = (DataPageV1) compressedPage;
+ return new DataPageV1(
decompress(codec, dataPageV1.getSlice(), dataPageV1.getUncompressedSize()),
dataPageV1.getValueCount(),
dataPageV1.getUncompressedSize(),
@@ -71,14 +71,14 @@ public ParquetDataPage readPage()
dataPageV1.getValueEncoding());
}
else {
- ParquetDataPageV2 dataPageV2 = (ParquetDataPageV2) compressedPage;
+ DataPageV2 dataPageV2 = (DataPageV2) compressedPage;
if (!dataPageV2.isCompressed()) {
return dataPageV2;
}
int uncompressedSize = toIntExact(dataPageV2.getUncompressedSize()
- dataPageV2.getDefinitionLevels().length()
- dataPageV2.getRepetitionLevels().length());
- return new ParquetDataPageV2(
+ return new DataPageV2(
dataPageV2.getRowCount(),
dataPageV2.getNullCount(),
dataPageV2.getValueCount(),
@@ -96,13 +96,13 @@ public ParquetDataPage readPage()
}
}
- public ParquetDictionaryPage readDictionaryPage()
+ public DictionaryPage readDictionaryPage()
{
if (compressedDictionaryPage == null) {
return null;
}
try {
- return new ParquetDictionaryPage(
+ return new DictionaryPage(
decompress(codec, compressedDictionaryPage.getSlice(), compressedDictionaryPage.getUncompressedSize()),
compressedDictionaryPage.getDictionarySize(),
compressedDictionaryPage.getEncoding());
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetColumnChunk.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ParquetColumnChunk.java
similarity index 79%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetColumnChunk.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ParquetColumnChunk.java
index 188ae23d5259f..c54c1628b0462 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetColumnChunk.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ParquetColumnChunk.java
@@ -11,13 +11,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
-import com.facebook.presto.hive.parquet.ParquetCorruptionException;
-import com.facebook.presto.hive.parquet.ParquetDataPage;
-import com.facebook.presto.hive.parquet.ParquetDataPageV1;
-import com.facebook.presto.hive.parquet.ParquetDataPageV2;
-import com.facebook.presto.hive.parquet.ParquetDictionaryPage;
+import com.facebook.presto.parquet.DataPage;
+import com.facebook.presto.parquet.DataPageV1;
+import com.facebook.presto.parquet.DataPageV2;
+import com.facebook.presto.parquet.DictionaryPage;
+import com.facebook.presto.parquet.ParquetCorruptionException;
import io.airlift.slice.Slice;
import parquet.column.Encoding;
import parquet.format.DataPageHeader;
@@ -31,16 +31,16 @@
import java.util.ArrayList;
import java.util.List;
-import static com.facebook.presto.hive.parquet.ParquetTypeUtils.getParquetEncoding;
+import static com.facebook.presto.parquet.ParquetTypeUtils.getParquetEncoding;
import static io.airlift.slice.Slices.wrappedBuffer;
public class ParquetColumnChunk
extends ByteArrayInputStream
{
- private final ParquetColumnChunkDescriptor descriptor;
+ private final ColumnChunkDescriptor descriptor;
public ParquetColumnChunk(
- ParquetColumnChunkDescriptor descriptor,
+ ColumnChunkDescriptor descriptor,
byte[] data,
int offset)
{
@@ -49,7 +49,7 @@ public ParquetColumnChunk(
this.pos = offset;
}
- public ParquetColumnChunkDescriptor getDescriptor()
+ public ColumnChunkDescriptor getDescriptor()
{
return descriptor;
}
@@ -60,11 +60,11 @@ protected PageHeader readPageHeader()
return Util.readPageHeader(this);
}
- public ParquetPageReader readAllPages()
+ public PageReader readAllPages()
throws IOException
{
- List pages = new ArrayList<>();
- ParquetDictionaryPage dictionaryPage = null;
+ List pages = new ArrayList<>();
+ DictionaryPage dictionaryPage = null;
long valueCount = 0;
while (valueCount < descriptor.getColumnChunkMetaData().getValueCount()) {
PageHeader pageHeader = readPageHeader();
@@ -88,7 +88,7 @@ public ParquetPageReader readAllPages()
break;
}
}
- return new ParquetPageReader(descriptor.getColumnChunkMetaData().getCodec(), pages, dictionaryPage);
+ return new PageReader(descriptor.getColumnChunkMetaData().getCodec(), pages, dictionaryPage);
}
public int getPosition()
@@ -103,10 +103,10 @@ private Slice getSlice(int size)
return slice;
}
- private ParquetDictionaryPage readDictionaryPage(PageHeader pageHeader, int uncompressedPageSize, int compressedPageSize)
+ private DictionaryPage readDictionaryPage(PageHeader pageHeader, int uncompressedPageSize, int compressedPageSize)
{
DictionaryPageHeader dicHeader = pageHeader.getDictionary_page_header();
- return new ParquetDictionaryPage(
+ return new DictionaryPage(
getSlice(compressedPageSize),
uncompressedPageSize,
dicHeader.getNum_values(),
@@ -116,14 +116,14 @@ private ParquetDictionaryPage readDictionaryPage(PageHeader pageHeader, int unco
private long readDataPageV1(PageHeader pageHeader,
int uncompressedPageSize,
int compressedPageSize,
- List pages)
+ List pages)
{
DataPageHeader dataHeaderV1 = pageHeader.getData_page_header();
- pages.add(new ParquetDataPageV1(
+ pages.add(new DataPageV1(
getSlice(compressedPageSize),
dataHeaderV1.getNum_values(),
uncompressedPageSize,
- ParquetMetadataReader.readStats(
+ MetadataReader.readStats(
dataHeaderV1.getStatistics(),
descriptor.getColumnDescriptor().getType()),
getParquetEncoding(Encoding.valueOf(dataHeaderV1.getRepetition_level_encoding().name())),
@@ -135,11 +135,11 @@ private long readDataPageV1(PageHeader pageHeader,
private long readDataPageV2(PageHeader pageHeader,
int uncompressedPageSize,
int compressedPageSize,
- List pages)
+ List pages)
{
DataPageHeaderV2 dataHeaderV2 = pageHeader.getData_page_header_v2();
int dataSize = compressedPageSize - dataHeaderV2.getRepetition_levels_byte_length() - dataHeaderV2.getDefinition_levels_byte_length();
- pages.add(new ParquetDataPageV2(
+ pages.add(new DataPageV2(
dataHeaderV2.getNum_rows(),
dataHeaderV2.getNum_nulls(),
dataHeaderV2.getNum_values(),
@@ -148,7 +148,7 @@ private long readDataPageV2(PageHeader pageHeader,
getParquetEncoding(Encoding.valueOf(dataHeaderV2.getEncoding().name())),
getSlice(dataSize),
uncompressedPageSize,
- ParquetMetadataReader.readStats(
+ MetadataReader.readStats(
dataHeaderV2.getStatistics(),
descriptor.getColumnDescriptor().getType()),
dataHeaderV2.isIs_compressed()));
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ParquetReader.java
similarity index 89%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ParquetReader.java
index 684e60f37f89d..570bd37bd2a98 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ParquetReader.java
@@ -11,16 +11,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
-import com.facebook.presto.hive.parquet.Field;
-import com.facebook.presto.hive.parquet.GroupField;
-import com.facebook.presto.hive.parquet.ParquetCorruptionException;
-import com.facebook.presto.hive.parquet.ParquetDataSource;
-import com.facebook.presto.hive.parquet.PrimitiveField;
-import com.facebook.presto.hive.parquet.RichColumnDescriptor;
import com.facebook.presto.memory.context.AggregatedMemoryContext;
import com.facebook.presto.memory.context.LocalMemoryContext;
+import com.facebook.presto.parquet.Field;
+import com.facebook.presto.parquet.GroupField;
+import com.facebook.presto.parquet.ParquetCorruptionException;
+import com.facebook.presto.parquet.ParquetDataSource;
+import com.facebook.presto.parquet.PrimitiveField;
+import com.facebook.presto.parquet.RichColumnDescriptor;
import com.facebook.presto.spi.block.ArrayBlock;
import com.facebook.presto.spi.block.Block;
import com.facebook.presto.spi.block.RowBlock;
@@ -45,8 +45,8 @@
import java.util.List;
import java.util.Optional;
-import static com.facebook.presto.hive.parquet.ParquetValidationUtils.validateParquet;
-import static com.facebook.presto.hive.parquet.reader.ParquetListColumnReader.calculateCollectionOffsets;
+import static com.facebook.presto.parquet.ParquetValidationUtils.validateParquet;
+import static com.facebook.presto.parquet.reader.ListColumnReader.calculateCollectionOffsets;
import static com.facebook.presto.spi.type.StandardTypes.ARRAY;
import static com.facebook.presto.spi.type.StandardTypes.MAP;
import static com.facebook.presto.spi.type.StandardTypes.ROW;
@@ -71,7 +71,7 @@ public class ParquetReader
private long currentGroupRowCount;
private long nextRowInGroup;
private int batchSize;
- private final ParquetPrimitiveColumnReader[] columnReaders;
+ private final PrimitiveColumnReader[] columnReaders;
private AggregatedMemoryContext currentRowGroupMemoryContext;
@@ -85,7 +85,7 @@ public ParquetReader(MessageColumnIO messageColumnIO,
this.systemMemoryContext = requireNonNull(systemMemoryContext, "systemMemoryContext is null");
this.currentRowGroupMemoryContext = systemMemoryContext.newAggregatedMemoryContext();
columns = messageColumnIO.getLeaves();
- columnReaders = new ParquetPrimitiveColumnReader[columns.size()];
+ columnReaders = new PrimitiveColumnReader[columns.size()];
}
@Override
@@ -184,7 +184,7 @@ private ColumnChunk readStruct(GroupField field)
blocks[i] = RunLengthEncodedBlock.create(field.getType(), null, columnChunk.getBlock().getPositionCount());
}
}
- BooleanList structIsNull = ParquetStructColumnReader.calculateStructOffsets(field, columnChunk.getDefinitionLevels(), columnChunk.getRepetitionLevels());
+ BooleanList structIsNull = StructColumnReader.calculateStructOffsets(field, columnChunk.getDefinitionLevels(), columnChunk.getRepetitionLevels());
boolean[] structIsNullVector = structIsNull.toBooleanArray();
Block rowBlock = RowBlock.fromFieldBlocks(structIsNullVector.length, Optional.of(structIsNullVector), blocks);
return new ColumnChunk(rowBlock, columnChunk.getDefinitionLevels(), columnChunk.getRepetitionLevels());
@@ -194,7 +194,7 @@ private ColumnChunk readPrimitive(PrimitiveField field)
throws IOException
{
ColumnDescriptor columnDescriptor = field.getDescriptor();
- ParquetPrimitiveColumnReader columnReader = columnReaders[field.getId()];
+ PrimitiveColumnReader columnReader = columnReaders[field.getId()];
if (columnReader.getPageReader() == null) {
validateParquet(currentBlockMetadata.getRowCount() > 0, "Row group has 0 rows");
ColumnChunkMetaData metadata = getColumnChunkMetaData(columnDescriptor);
@@ -202,7 +202,7 @@ private ColumnChunk readPrimitive(PrimitiveField field)
int totalSize = toIntExact(metadata.getTotalSize());
byte[] buffer = allocateBlock(totalSize);
dataSource.readFully(startingPosition, buffer);
- ParquetColumnChunkDescriptor descriptor = new ParquetColumnChunkDescriptor(columnDescriptor, metadata, totalSize);
+ ColumnChunkDescriptor descriptor = new ColumnChunkDescriptor(columnDescriptor, metadata, totalSize);
ParquetColumnChunk columnChunk = new ParquetColumnChunk(descriptor, buffer, 0);
columnReader.setPageReader(columnChunk.readAllPages());
}
@@ -232,7 +232,7 @@ private void initializeColumnReaders()
{
for (PrimitiveColumnIO columnIO : columns) {
RichColumnDescriptor column = new RichColumnDescriptor(columnIO.getColumnDescriptor(), columnIO.getType().asPrimitiveType());
- columnReaders[columnIO.getId()] = ParquetPrimitiveColumnReader.createReader(column);
+ columnReaders[columnIO.getId()] = PrimitiveColumnReader.createReader(column);
}
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetPrimitiveColumnReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/PrimitiveColumnReader.java
similarity index 76%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetPrimitiveColumnReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/PrimitiveColumnReader.java
index db60d55af3633..e2ad69008617a 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetPrimitiveColumnReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/PrimitiveColumnReader.java
@@ -11,17 +11,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
-import com.facebook.presto.hive.parquet.Field;
-import com.facebook.presto.hive.parquet.ParquetDataPage;
-import com.facebook.presto.hive.parquet.ParquetDataPageV1;
-import com.facebook.presto.hive.parquet.ParquetDataPageV2;
-import com.facebook.presto.hive.parquet.ParquetDictionaryPage;
-import com.facebook.presto.hive.parquet.ParquetEncoding;
-import com.facebook.presto.hive.parquet.ParquetTypeUtils;
-import com.facebook.presto.hive.parquet.RichColumnDescriptor;
-import com.facebook.presto.hive.parquet.dictionary.ParquetDictionary;
+import com.facebook.presto.parquet.DataPage;
+import com.facebook.presto.parquet.DataPageV1;
+import com.facebook.presto.parquet.DataPageV2;
+import com.facebook.presto.parquet.DictionaryPage;
+import com.facebook.presto.parquet.Field;
+import com.facebook.presto.parquet.ParquetEncoding;
+import com.facebook.presto.parquet.ParquetTypeUtils;
+import com.facebook.presto.parquet.RichColumnDescriptor;
+import com.facebook.presto.parquet.dictionary.Dictionary;
import com.facebook.presto.spi.PrestoException;
import com.facebook.presto.spi.block.BlockBuilder;
import com.facebook.presto.spi.type.DecimalType;
@@ -40,16 +40,16 @@
import java.util.Optional;
import java.util.function.Consumer;
-import static com.facebook.presto.hive.parquet.ParquetTypeUtils.createDecimalType;
-import static com.facebook.presto.hive.parquet.ParquetValuesType.DEFINITION_LEVEL;
-import static com.facebook.presto.hive.parquet.ParquetValuesType.REPETITION_LEVEL;
-import static com.facebook.presto.hive.parquet.ParquetValuesType.VALUES;
+import static com.facebook.presto.parquet.ParquetTypeUtils.createDecimalType;
+import static com.facebook.presto.parquet.ValuesType.DEFINITION_LEVEL;
+import static com.facebook.presto.parquet.ValuesType.REPETITION_LEVEL;
+import static com.facebook.presto.parquet.ValuesType.VALUES;
import static com.facebook.presto.spi.StandardErrorCode.NOT_SUPPORTED;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Verify.verify;
import static java.util.Objects.requireNonNull;
-public abstract class ParquetPrimitiveColumnReader
+public abstract class PrimitiveColumnReader
{
private static final int EMPTY_LEVEL_VALUE = -1;
protected final RichColumnDescriptor columnDescriptor;
@@ -59,13 +59,13 @@ public abstract class ParquetPrimitiveColumnReader
protected ValuesReader valuesReader;
private int nextBatchSize;
- private ParquetLevelReader repetitionReader;
- private ParquetLevelReader definitionReader;
+ private LevelReader repetitionReader;
+ private LevelReader definitionReader;
private long totalValueCount;
- private ParquetPageReader pageReader;
- private ParquetDictionary dictionary;
+ private PageReader pageReader;
+ private Dictionary dictionary;
private int currentValueCount;
- private ParquetDataPage page;
+ private DataPage page;
private int remainingValueCountInPage;
private int readOffset;
@@ -78,56 +78,56 @@ protected boolean isValueNull()
return ParquetTypeUtils.isValueNull(columnDescriptor.isRequired(), definitionLevel, columnDescriptor.getMaxDefinitionLevel());
}
- public static ParquetPrimitiveColumnReader createReader(RichColumnDescriptor descriptor)
+ public static PrimitiveColumnReader createReader(RichColumnDescriptor descriptor)
{
switch (descriptor.getType()) {
case BOOLEAN:
- return new ParquetBooleanColumnReader(descriptor);
+ return new BooleanColumnReader(descriptor);
case INT32:
- return createDecimalColumnReader(descriptor).orElse(new ParquetIntColumnReader(descriptor));
+ return createDecimalColumnReader(descriptor).orElse(new IntColumnReader(descriptor));
case INT64:
- return createDecimalColumnReader(descriptor).orElse(new ParquetLongColumnReader(descriptor));
+ return createDecimalColumnReader(descriptor).orElse(new LongColumnReader(descriptor));
case INT96:
- return new ParquetTimestampColumnReader(descriptor);
+ return new TimestampColumnReader(descriptor);
case FLOAT:
- return new ParquetFloatColumnReader(descriptor);
+ return new FloatColumnReader(descriptor);
case DOUBLE:
- return new ParquetDoubleColumnReader(descriptor);
+ return new DoubleColumnReader(descriptor);
case BINARY:
- return createDecimalColumnReader(descriptor).orElse(new ParquetBinaryColumnReader(descriptor));
+ return createDecimalColumnReader(descriptor).orElse(new BinaryColumnReader(descriptor));
case FIXED_LEN_BYTE_ARRAY:
return createDecimalColumnReader(descriptor)
- .orElseThrow(() -> new PrestoException(NOT_SUPPORTED, "Parquet type FIXED_LEN_BYTE_ARRAY supported as DECIMAL; got " + descriptor.getPrimitiveType().getOriginalType()));
+ .orElseThrow(() -> new PrestoException(NOT_SUPPORTED, " type FIXED_LEN_BYTE_ARRAY supported as DECIMAL; got " + descriptor.getPrimitiveType().getOriginalType()));
default:
throw new PrestoException(NOT_SUPPORTED, "Unsupported parquet type: " + descriptor.getType());
}
}
- private static Optional createDecimalColumnReader(RichColumnDescriptor descriptor)
+ private static Optional createDecimalColumnReader(RichColumnDescriptor descriptor)
{
Optional type = createDecimalType(descriptor);
if (type.isPresent()) {
DecimalType decimalType = (DecimalType) type.get();
- return Optional.of(ParquetDecimalColumnReaderFactory.createReader(descriptor, decimalType.getPrecision(), decimalType.getScale()));
+ return Optional.of(DecimalColumnReaderFactory.createReader(descriptor, decimalType.getPrecision(), decimalType.getScale()));
}
return Optional.empty();
}
- public ParquetPrimitiveColumnReader(RichColumnDescriptor columnDescriptor)
+ public PrimitiveColumnReader(RichColumnDescriptor columnDescriptor)
{
this.columnDescriptor = requireNonNull(columnDescriptor, "columnDescriptor");
pageReader = null;
}
- public ParquetPageReader getPageReader()
+ public PageReader getPageReader()
{
return pageReader;
}
- public void setPageReader(ParquetPageReader pageReader)
+ public void setPageReader(PageReader pageReader)
{
this.pageReader = requireNonNull(pageReader, "pageReader");
- ParquetDictionaryPage dictionaryPage = pageReader.readDictionaryPage();
+ DictionaryPage dictionaryPage = pageReader.readDictionaryPage();
if (dictionaryPage != null) {
try {
@@ -245,11 +245,11 @@ private boolean readNextPage()
return false;
}
remainingValueCountInPage = page.getValueCount();
- if (page instanceof ParquetDataPageV1) {
- valuesReader = readPageV1((ParquetDataPageV1) page);
+ if (page instanceof DataPageV1) {
+ valuesReader = readPageV1((DataPageV1) page);
}
else {
- valuesReader = readPageV2((ParquetDataPageV2) page);
+ valuesReader = readPageV2((DataPageV2) page);
}
return true;
}
@@ -264,12 +264,12 @@ private void updateValueCounts(int valuesRead)
currentValueCount += valuesRead;
}
- private ValuesReader readPageV1(ParquetDataPageV1 page)
+ private ValuesReader readPageV1(DataPageV1 page)
{
ValuesReader rlReader = page.getRepetitionLevelEncoding().getValuesReader(columnDescriptor, REPETITION_LEVEL);
ValuesReader dlReader = page.getDefinitionLevelEncoding().getValuesReader(columnDescriptor, DEFINITION_LEVEL);
- repetitionReader = new ParquetLevelValuesReader(rlReader);
- definitionReader = new ParquetLevelValuesReader(dlReader);
+ repetitionReader = new LevelValuesReader(rlReader);
+ definitionReader = new LevelValuesReader(dlReader);
try {
byte[] bytes = page.getSlice().getBytes();
rlReader.initFromPage(page.getValueCount(), bytes, 0);
@@ -283,19 +283,19 @@ private ValuesReader readPageV1(ParquetDataPageV1 page)
}
}
- private ValuesReader readPageV2(ParquetDataPageV2 page)
+ private ValuesReader readPageV2(DataPageV2 page)
{
repetitionReader = buildLevelRLEReader(columnDescriptor.getMaxRepetitionLevel(), page.getRepetitionLevels());
definitionReader = buildLevelRLEReader(columnDescriptor.getMaxDefinitionLevel(), page.getDefinitionLevels());
return initDataReader(page.getDataEncoding(), page.getSlice().getBytes(), 0, page.getValueCount());
}
- private ParquetLevelReader buildLevelRLEReader(int maxLevel, Slice slice)
+ private LevelReader buildLevelRLEReader(int maxLevel, Slice slice)
{
if (maxLevel == 0) {
- return new ParquetLevelNullReader();
+ return new LevelNullReader();
}
- return new ParquetLevelRLEReader(new RunLengthBitPackingHybridDecoder(BytesUtils.getWidthFromMaxInt(maxLevel), new ByteArrayInputStream(slice.getBytes())));
+ return new LevelRLEReader(new RunLengthBitPackingHybridDecoder(BytesUtils.getWidthFromMaxInt(maxLevel), new ByteArrayInputStream(slice.getBytes())));
}
private ValuesReader initDataReader(ParquetEncoding dataEncoding, byte[] bytes, int offset, int valueCount)
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetShortDecimalColumnReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ShortDecimalColumnReader.java
similarity index 85%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetShortDecimalColumnReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ShortDecimalColumnReader.java
index e3d72532fab0f..db15d58cf7835 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetShortDecimalColumnReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ShortDecimalColumnReader.java
@@ -11,20 +11,20 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
-import com.facebook.presto.hive.parquet.RichColumnDescriptor;
+import com.facebook.presto.parquet.RichColumnDescriptor;
import com.facebook.presto.spi.block.BlockBuilder;
import com.facebook.presto.spi.type.Type;
-import static com.facebook.presto.hive.util.DecimalUtils.getShortDecimalValue;
+import static com.facebook.presto.parquet.ParquetTypeUtils.getShortDecimalValue;
import static parquet.schema.PrimitiveType.PrimitiveTypeName.INT32;
import static parquet.schema.PrimitiveType.PrimitiveTypeName.INT64;
-public class ParquetShortDecimalColumnReader
- extends ParquetPrimitiveColumnReader
+public class ShortDecimalColumnReader
+ extends PrimitiveColumnReader
{
- ParquetShortDecimalColumnReader(RichColumnDescriptor descriptor)
+ ShortDecimalColumnReader(RichColumnDescriptor descriptor)
{
super(descriptor);
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetStructColumnReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/StructColumnReader.java
similarity index 88%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetStructColumnReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/StructColumnReader.java
index a6cebcda36c11..da35f4fb3f2b2 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetStructColumnReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/StructColumnReader.java
@@ -11,17 +11,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
-import com.facebook.presto.hive.parquet.Field;
+import com.facebook.presto.parquet.Field;
import it.unimi.dsi.fastutil.booleans.BooleanArrayList;
import it.unimi.dsi.fastutil.booleans.BooleanList;
-import static com.facebook.presto.hive.parquet.ParquetTypeUtils.isValueNull;
+import static com.facebook.presto.parquet.ParquetTypeUtils.isValueNull;
-public class ParquetStructColumnReader
+public class StructColumnReader
{
- private ParquetStructColumnReader()
+ private StructColumnReader()
{
}
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetTimestampColumnReader.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/TimestampColumnReader.java
similarity index 78%
rename from presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetTimestampColumnReader.java
rename to presto-parquet/src/main/java/com/facebook/presto/parquet/reader/TimestampColumnReader.java
index 7c79859dac908..9a3820df675b1 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetTimestampColumnReader.java
+++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/reader/TimestampColumnReader.java
@@ -11,19 +11,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet.reader;
+package com.facebook.presto.parquet.reader;
-import com.facebook.presto.hive.parquet.RichColumnDescriptor;
+import com.facebook.presto.parquet.RichColumnDescriptor;
import com.facebook.presto.spi.block.BlockBuilder;
import com.facebook.presto.spi.type.Type;
import parquet.io.api.Binary;
-import static com.facebook.presto.hive.parquet.ParquetTimestampUtils.getTimestampMillis;
+import static com.facebook.presto.parquet.ParquetTimestampUtils.getTimestampMillis;
-public class ParquetTimestampColumnReader
- extends ParquetPrimitiveColumnReader
+public class TimestampColumnReader
+ extends PrimitiveColumnReader
{
- public ParquetTimestampColumnReader(RichColumnDescriptor descriptor)
+ public TimestampColumnReader(RichColumnDescriptor descriptor)
{
super(descriptor);
}
diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/parquet/TestParquetTimestampUtils.java b/presto-parquet/src/test/java/com/facebook/presto/parquet/TestParquetTimestampUtils.java
similarity index 87%
rename from presto-hive/src/test/java/com/facebook/presto/hive/parquet/TestParquetTimestampUtils.java
rename to presto-parquet/src/test/java/com/facebook/presto/parquet/TestParquetTimestampUtils.java
index 3bdfd508cfad9..3205c2e663245 100644
--- a/presto-hive/src/test/java/com/facebook/presto/hive/parquet/TestParquetTimestampUtils.java
+++ b/presto-parquet/src/test/java/com/facebook/presto/parquet/TestParquetTimestampUtils.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet;
+package com.facebook.presto.parquet;
import com.facebook.presto.spi.PrestoException;
import org.apache.hadoop.hive.ql.io.parquet.timestamp.NanoTimeUtils;
@@ -20,8 +20,8 @@
import java.sql.Timestamp;
-import static com.facebook.presto.hive.HiveErrorCode.HIVE_BAD_DATA;
-import static com.facebook.presto.hive.parquet.ParquetTimestampUtils.getTimestampMillis;
+import static com.facebook.presto.parquet.ParquetTimestampUtils.getTimestampMillis;
+import static com.facebook.presto.spi.StandardErrorCode.NOT_SUPPORTED;
import static org.testng.Assert.assertEquals;
public class TestParquetTimestampUtils
@@ -42,7 +42,7 @@ public void testInvalidBinaryLength()
getTimestampMillis(Binary.fromByteArray(invalidLengthBinaryTimestamp));
}
catch (PrestoException e) {
- assertEquals(e.getErrorCode(), HIVE_BAD_DATA.toErrorCode());
+ assertEquals(e.getErrorCode(), NOT_SUPPORTED.toErrorCode());
assertEquals(e.getMessage(), "Parquet timestamp must be 12 bytes, actual 8");
}
}
diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/parquet/TestTupleDomainParquetPredicate.java b/presto-parquet/src/test/java/com/facebook/presto/parquet/TestTupleDomainParquetPredicate.java
similarity index 94%
rename from presto-hive/src/test/java/com/facebook/presto/hive/parquet/TestTupleDomainParquetPredicate.java
rename to presto-parquet/src/test/java/com/facebook/presto/parquet/TestTupleDomainParquetPredicate.java
index e0b6dea1ad06f..e4b53c4aafe7c 100644
--- a/presto-hive/src/test/java/com/facebook/presto/hive/parquet/TestTupleDomainParquetPredicate.java
+++ b/presto-parquet/src/test/java/com/facebook/presto/parquet/TestTupleDomainParquetPredicate.java
@@ -11,10 +11,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.facebook.presto.hive.parquet;
+package com.facebook.presto.parquet;
-import com.facebook.presto.hive.parquet.predicate.ParquetDictionaryDescriptor;
-import com.facebook.presto.hive.parquet.predicate.TupleDomainParquetPredicate;
+import com.facebook.presto.parquet.predicate.DictionaryDescriptor;
+import com.facebook.presto.parquet.predicate.TupleDomainParquetPredicate;
import com.facebook.presto.spi.predicate.Domain;
import com.facebook.presto.spi.predicate.TupleDomain;
import com.facebook.presto.spi.predicate.ValueSet;
@@ -35,8 +35,8 @@
import java.util.Map;
import java.util.Optional;
-import static com.facebook.presto.hive.parquet.ParquetEncoding.PLAIN_DICTIONARY;
-import static com.facebook.presto.hive.parquet.predicate.TupleDomainParquetPredicate.getDomain;
+import static com.facebook.presto.parquet.ParquetEncoding.PLAIN_DICTIONARY;
+import static com.facebook.presto.parquet.predicate.TupleDomainParquetPredicate.getDomain;
import static com.facebook.presto.spi.predicate.Domain.all;
import static com.facebook.presto.spi.predicate.Domain.create;
import static com.facebook.presto.spi.predicate.Domain.notNull;
@@ -210,8 +210,8 @@ public void testMatchesWithDescriptors()
RichColumnDescriptor column = new RichColumnDescriptor(columnDescriptor, new PrimitiveType(OPTIONAL, BINARY, "Test column"));
TupleDomain effectivePredicate = getEffectivePredicate(column, createVarcharType(255), EMPTY_SLICE);
TupleDomainParquetPredicate parquetPredicate = new TupleDomainParquetPredicate(effectivePredicate, singletonList(column));
- ParquetDictionaryPage page = new ParquetDictionaryPage(Slices.wrappedBuffer(new byte[] {0, 0, 0, 0}), 1, PLAIN_DICTIONARY);
- assertTrue(parquetPredicate.matches(singletonMap(column, new ParquetDictionaryDescriptor(column, Optional.of(page)))));
+ DictionaryPage page = new DictionaryPage(Slices.wrappedBuffer(new byte[] {0, 0, 0, 0}), 1, PLAIN_DICTIONARY);
+ assertTrue(parquetPredicate.matches(singletonMap(column, new DictionaryDescriptor(column, Optional.of(page)))));
}
private TupleDomain getEffectivePredicate(RichColumnDescriptor column, VarcharType type, Slice value)
diff --git a/presto-product-tests/src/main/java/com/facebook/presto/tests/hive/TestHiveStorageFormats.java b/presto-product-tests/src/main/java/com/facebook/presto/tests/hive/TestHiveStorageFormats.java
index ef2b01ca523cf..9b8ddc458863c 100644
--- a/presto-product-tests/src/main/java/com/facebook/presto/tests/hive/TestHiveStorageFormats.java
+++ b/presto-product-tests/src/main/java/com/facebook/presto/tests/hive/TestHiveStorageFormats.java
@@ -50,8 +50,7 @@ public static Object[][] storageFormats()
{storageFormat("ORC", ImmutableMap.of("hive.orc_optimized_writer_enabled", "false"))},
{storageFormat("ORC", ImmutableMap.of("hive.orc_optimized_writer_enabled", "true", "hive.orc_optimized_writer_validate", "true"))},
{storageFormat("DWRF")},
- {storageFormat("PARQUET", ImmutableMap.of("hive.parquet_optimized_reader_enabled", "false"))},
- {storageFormat("PARQUET", ImmutableMap.of("hive.parquet_optimized_reader_enabled", "true"))},
+ {storageFormat("PARQUET")},
{storageFormat("RCBINARY", ImmutableMap.of("hive.rcfile_optimized_writer_enabled", "false", "hive.rcfile_optimized_writer_validate", "false"))},
{storageFormat("RCBINARY", ImmutableMap.of("hive.rcfile_optimized_writer_enabled", "true", "hive.rcfile_optimized_writer_validate", "true"))},
{storageFormat("RCTEXT", ImmutableMap.of("hive.rcfile_optimized_writer_enabled", "false", "hive.rcfile_optimized_writer_validate", "false"))},