From ef8f5db89f9531c3cb8f0b319504d2b5f407e653 Mon Sep 17 00:00:00 2001 From: Zhenxiao Luo Date: Fri, 15 Jun 2018 18:03:42 -0700 Subject: [PATCH] Fix New Parquet Reader reading array> --- .../src/main/java/parquet/io/ColumnIOConverter.java | 7 +++++++ .../hive/parquet/AbstractTestParquetReader.java | 13 +++++++++++++ 2 files changed, 20 insertions(+) diff --git a/presto-hive/src/main/java/parquet/io/ColumnIOConverter.java b/presto-hive/src/main/java/parquet/io/ColumnIOConverter.java index 1a7e34fd0bfa0..6f8a17df6744e 100644 --- a/presto-hive/src/main/java/parquet/io/ColumnIOConverter.java +++ b/presto-hive/src/main/java/parquet/io/ColumnIOConverter.java @@ -52,6 +52,13 @@ public static Optional constructField(Type type, ColumnIO columnIO) int repetitionLevel = columnIO.getRepetitionLevel(); int definitionLevel = columnIO.getDefinitionLevel(); if (ROW.equals(type.getTypeSignature().getBase())) { + if (columnIO instanceof PrimitiveColumnIO) { + // single element struct + PrimitiveColumnIO primitiveColumnIO = (PrimitiveColumnIO) columnIO; + RichColumnDescriptor column = new RichColumnDescriptor(primitiveColumnIO.getColumnDescriptor(), columnIO.getType().asPrimitiveType()); + Optional field = Optional.of(new PrimitiveField(type.getTypeParameters().get(0), repetitionLevel, definitionLevel, required, column, primitiveColumnIO.getId())); + return Optional.of(new GroupField(type, repetitionLevel, definitionLevel, required, ImmutableList.of(field))); + } GroupColumnIO groupColumnIO = (GroupColumnIO) columnIO; List parameters = type.getTypeParameters(); ImmutableList.Builder> fileldsBuilder = ImmutableList.builder(); diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/parquet/AbstractTestParquetReader.java b/presto-hive/src/test/java/com/facebook/presto/hive/parquet/AbstractTestParquetReader.java index 909816901c55a..3a3f0ca19d8be 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/parquet/AbstractTestParquetReader.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/parquet/AbstractTestParquetReader.java @@ -185,6 +185,19 @@ public void testArrayOfStructs() values, values, new ArrayType(structType)); } + @Test + public void testArrayOfStructOfSingleElement() + throws Exception + { + Iterable structs = createNullableTestStructs(transform(intsBetween(0, 31_234), Object::toString)); + Iterable> values = createTestArrays(structs); + List structFieldNames = asList("stringField"); + Type structType = RowType.from(asList(field("stringField", VARCHAR))); + tester.testRoundTrip( + getStandardListObjectInspector(getStandardStructObjectInspector(structFieldNames, asList(javaStringObjectInspector))), + values, values, new ArrayType(structType)); + } + @Test public void testCustomSchemaArrayOfStucts() throws Exception