This is an automated email from the ASF dual-hosted git repository.
zivanfi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/parquet-mr.git
The following commit(s) were added to refs/heads/master by this push:
new 4b40d96 PARQUET-1502: Convert FIXED_LEN_BYTE_ARRAY to arrow type in
logicalTypeAnnotation if it is not null (#593)
4b40d96 is described below
commit 4b40d96a13f3e9bf75f8b2aaa0bef901491f2789
Author: Yongyan Wang <[email protected]>
AuthorDate: Wed Jan 23 07:45:55 2019 -0800
PARQUET-1502: Convert FIXED_LEN_BYTE_ARRAY to arrow type in
logicalTypeAnnotation if it is not null (#593)
---
.../apache/parquet/arrow/schema/SchemaConverter.java | 12 +++++++++++-
.../parquet/arrow/schema/TestSchemaConverter.java | 20 ++++++++++++++++++++
2 files changed, 31 insertions(+), 1 deletion(-)
diff --git
a/parquet-arrow/src/main/java/org/apache/parquet/arrow/schema/SchemaConverter.java
b/parquet-arrow/src/main/java/org/apache/parquet/arrow/schema/SchemaConverter.java
index 51057c5..0bfb888 100644
---
a/parquet-arrow/src/main/java/org/apache/parquet/arrow/schema/SchemaConverter.java
+++
b/parquet-arrow/src/main/java/org/apache/parquet/arrow/schema/SchemaConverter.java
@@ -498,7 +498,17 @@ public class SchemaConverter {
@Override
public TypeMapping convertFIXED_LEN_BYTE_ARRAY(PrimitiveTypeName
primitiveTypeName) throws RuntimeException {
- return field(new ArrowType.Binary());
+ LogicalTypeAnnotation logicalTypeAnnotation =
type.getLogicalTypeAnnotation();
+ if (logicalTypeAnnotation == null) {
+ return field(new ArrowType.Binary());
+ }
+
+ return logicalTypeAnnotation.accept(new
LogicalTypeAnnotation.LogicalTypeAnnotationVisitor<TypeMapping>() {
+ @Override
+ public Optional<TypeMapping>
visit(LogicalTypeAnnotation.DecimalLogicalTypeAnnotation decimalLogicalType) {
+ return of(decimal(decimalLogicalType.getPrecision(),
decimalLogicalType.getScale()));
+ }
+ }).orElseThrow(() -> new IllegalArgumentException("illegal type " +
type));
}
@Override
diff --git
a/parquet-arrow/src/test/java/org/apache/parquet/arrow/schema/TestSchemaConverter.java
b/parquet-arrow/src/test/java/org/apache/parquet/arrow/schema/TestSchemaConverter.java
index c962b54..e21f36c 100644
---
a/parquet-arrow/src/test/java/org/apache/parquet/arrow/schema/TestSchemaConverter.java
+++
b/parquet-arrow/src/test/java/org/apache/parquet/arrow/schema/TestSchemaConverter.java
@@ -419,6 +419,26 @@ public class TestSchemaConverter {
Assert.assertEquals(expected,
converter.fromParquet(parquet).getArrowSchema());
}
+ @Test
+ public void testParquetFixedBinaryToArrow() {
+ MessageType parquet = Types.buildMessage()
+
.addField(Types.optional(FIXED_LEN_BYTE_ARRAY).length(12).named("a")).named("root");
+ Schema expected = new Schema(asList(
+ field("a", new ArrowType.Binary())
+ ));
+ Assert.assertEquals(expected,
converter.fromParquet(parquet).getArrowSchema());
+ }
+
+ @Test
+ public void testParquetFixedBinaryToArrowDecimal() {
+ MessageType parquet = Types.buildMessage()
+
.addField(Types.optional(FIXED_LEN_BYTE_ARRAY).length(5).as(DECIMAL).precision(8).scale(2).named("a")).named("root");
+ Schema expected = new Schema(asList(
+ field("a", new ArrowType.Decimal(8, 2))
+ ));
+ Assert.assertEquals(expected,
converter.fromParquet(parquet).getArrowSchema());
+ }
+
@Test(expected = IllegalStateException.class)
public void testParquetInt64TimeMillisToArrow() {
converter.fromParquet(Types.buildMessage()