From 08cbb8e40250a993d64ed6cb3854c6cf3ca3c7ca Mon Sep 17 00:00:00 2001 From: Junjie Chen Date: Fri, 19 Jun 2020 21:10:16 +0800 Subject: [PATCH 1/4] Fix parquet name mapping unit test --- .../org/apache/iceberg/parquet/RemoveIds.java | 180 ++++++++++++++++++ .../parquet/TestParquetSchemaUtil.java | 2 +- 2 files changed, 181 insertions(+), 1 deletion(-) create mode 100644 parquet/src/main/java/org/apache/iceberg/parquet/RemoveIds.java diff --git a/parquet/src/main/java/org/apache/iceberg/parquet/RemoveIds.java b/parquet/src/main/java/org/apache/iceberg/parquet/RemoveIds.java new file mode 100644 index 000000000000..f1dd57aee4e4 --- /dev/null +++ b/parquet/src/main/java/org/apache/iceberg/parquet/RemoveIds.java @@ -0,0 +1,180 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.iceberg.parquet; + +import org.apache.iceberg.avro.AvroSchemaUtil; +import org.apache.iceberg.types.Type.PrimitiveType; +import org.apache.iceberg.types.TypeUtil; +import org.apache.iceberg.types.Types.ListType; +import org.apache.iceberg.types.Types.MapType; +import org.apache.iceberg.types.Types.NestedField; +import org.apache.iceberg.types.Types.StructType; +import org.apache.iceberg.types.Types.TimestampType; +import org.apache.parquet.schema.GroupType; +import org.apache.parquet.schema.LogicalTypeAnnotation; +import org.apache.parquet.schema.MessageType; +import org.apache.parquet.schema.Type; +import org.apache.parquet.schema.Types; + +import static org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName.BINARY; +import static org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName.BOOLEAN; +import static org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName.DOUBLE; +import static org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName.FIXED_LEN_BYTE_ARRAY; +import static org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName.FLOAT; +import static org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName.INT32; +import static org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName.INT64; + +public class RemoveIds { + public static final int DECIMAL_INT32_MAX_DIGITS = 9; + public static final int DECIMAL_INT64_MAX_DIGITS = 18; + private static final LogicalTypeAnnotation STRING = LogicalTypeAnnotation.stringType(); + private static final LogicalTypeAnnotation DATE = LogicalTypeAnnotation.dateType(); + private static final LogicalTypeAnnotation TIME_MICROS = LogicalTypeAnnotation + .timeType(false /* not adjusted to UTC */, LogicalTypeAnnotation.TimeUnit.MICROS); + private static final LogicalTypeAnnotation TIMESTAMP_MICROS = LogicalTypeAnnotation + .timestampType(false /* not adjusted to UTC */, LogicalTypeAnnotation.TimeUnit.MICROS); + private static final LogicalTypeAnnotation TIMESTAMPTZ_MICROS = LogicalTypeAnnotation + .timestampType(true /* adjusted to UTC */, LogicalTypeAnnotation.TimeUnit.MICROS); + + GroupType struct(StructType struct, Type.Repetition repetition, String name) { + Types.GroupBuilder builder = Types.buildGroup(repetition); + + for (NestedField field : struct.fields()) { + builder.addField(field(field)); + } + + return builder.named(AvroSchemaUtil.makeCompatibleName(name)); + } + + GroupType list(ListType list, Type.Repetition repetition, String name) { + NestedField elementField = list.fields().get(0); + return Types.list(repetition) + .element(field(elementField)) + .named(AvroSchemaUtil.makeCompatibleName(name)); + } + + GroupType map(MapType map, Type.Repetition repetition, String name) { + NestedField keyField = map.fields().get(0); + NestedField valueField = map.fields().get(1); + return Types.map(repetition) + .key(field(keyField)) + .value(field(valueField)) + .named(AvroSchemaUtil.makeCompatibleName(name)); + } + + Type primitive(PrimitiveType primitive, Type.Repetition repetition, String originalName) { + String name = AvroSchemaUtil.makeCompatibleName(originalName); + switch (primitive.typeId()) { + case BOOLEAN: + return Types.primitive(BOOLEAN, repetition).named(name); + case INTEGER: + return Types.primitive(INT32, repetition).named(name); + case LONG: + return Types.primitive(INT64, repetition).named(name); + case FLOAT: + return Types.primitive(FLOAT, repetition).named(name); + case DOUBLE: + return Types.primitive(DOUBLE, repetition).named(name); + case DATE: + return Types.primitive(INT32, repetition).as(DATE).named(name); + case TIME: + return Types.primitive(INT64, repetition).as(TIME_MICROS).named(name); + case TIMESTAMP: + if (((TimestampType) primitive).shouldAdjustToUTC()) { + return Types.primitive(INT64, repetition).as(TIMESTAMPTZ_MICROS).named(name); + } else { + return Types.primitive(INT64, repetition).as(TIMESTAMP_MICROS).named(name); + } + case STRING: + return Types.primitive(BINARY, repetition).as(STRING).named(name); + case BINARY: + return Types.primitive(BINARY, repetition).named(name); + case FIXED: + org.apache.iceberg.types.Types.FixedType fixed = (org.apache.iceberg.types.Types.FixedType) primitive; + + return Types.primitive(FIXED_LEN_BYTE_ARRAY, repetition).length(fixed.length()).named(name); + + case DECIMAL: + org.apache.iceberg.types.Types.DecimalType decimal = (org.apache.iceberg.types.Types.DecimalType) primitive; + + if (decimal.precision() <= DECIMAL_INT32_MAX_DIGITS) { + // store as an int + return Types.primitive(INT32, repetition) + .as(decimalAnnotation(decimal.precision(), decimal.scale())) + .named(name); + + } else if (decimal.precision() <= DECIMAL_INT64_MAX_DIGITS) { + // store as a long + return Types.primitive(INT64, repetition) + .as(decimalAnnotation(decimal.precision(), decimal.scale())) + .named(name); + + } else { + // store as a fixed-length array + int minLength = TypeUtil.decimalRequiredBytes(decimal.precision()); + return Types.primitive(FIXED_LEN_BYTE_ARRAY, repetition).length(minLength) + .as(decimalAnnotation(decimal.precision(), decimal.scale())) + .named(name); + } + + case UUID: + return Types.primitive(FIXED_LEN_BYTE_ARRAY, repetition).length(16).named(name); + + default: + throw new UnsupportedOperationException("Unsupported type for Parquet: " + primitive); + } + } + + Type field(org.apache.iceberg.types.Types.NestedField field) { + Type.Repetition repetition = field.isOptional() ? + Type.Repetition.OPTIONAL : Type.Repetition.REQUIRED; + String name = field.name(); + + if (field.type().isPrimitiveType()) { + return primitive(field.type().asPrimitiveType(), repetition, name); + + } else { + org.apache.iceberg.types.Type.NestedType nested = field.type().asNestedType(); + if (nested.isStructType()) { + return struct(nested.asStructType(), repetition, name); + } else if (nested.isMapType()) { + return map(nested.asMapType(), repetition, name); + } else if (nested.isListType()) { + return list(nested.asListType(), repetition, name); + } + throw new UnsupportedOperationException("Can't convert unknown type: " + nested); + } + } + + private static LogicalTypeAnnotation decimalAnnotation(int precision, int scale) { + return LogicalTypeAnnotation.decimalType(scale, precision); + } + + public MessageType removeIds(org.apache.iceberg.Schema schema, String name) { + Types.MessageTypeBuilder builder = Types.buildMessage(); + + for (org.apache.iceberg.types.Types.NestedField field : schema.columns()) { + builder.addField(field(field)); + } + + return builder.named(AvroSchemaUtil.makeCompatibleName(name)); + } + +} diff --git a/parquet/src/test/java/org/apache/iceberg/parquet/TestParquetSchemaUtil.java b/parquet/src/test/java/org/apache/iceberg/parquet/TestParquetSchemaUtil.java index f61ca5ebff5c..dde0f17be664 100644 --- a/parquet/src/test/java/org/apache/iceberg/parquet/TestParquetSchemaUtil.java +++ b/parquet/src/test/java/org/apache/iceberg/parquet/TestParquetSchemaUtil.java @@ -86,7 +86,7 @@ public void testAssignIdsByNameMapping() { Schema schema = new Schema(TypeUtil.assignFreshIds(structType, new AtomicInteger(0)::incrementAndGet) .asStructType().fields()); NameMapping nameMapping = MappingUtil.create(schema); - MessageType messageType = ParquetSchemaUtil.convert(schema, "complex_schema"); + MessageType messageType = new RemoveIds().removeIds(schema, "complex_schema"); MessageType typeWithIdsFromNameMapping = ParquetSchemaUtil.applyNameMapping(messageType, nameMapping); Schema newSchema = ParquetSchemaUtil.convert(typeWithIdsFromNameMapping); From eb8154ba66e902262d60f48d0612fa95b57f929f Mon Sep 17 00:00:00 2001 From: Junjie Chen Date: Sat, 20 Jun 2020 11:20:06 +0800 Subject: [PATCH 2/4] use parquet type visitor --- .../org/apache/iceberg/parquet/RemoveIds.java | 177 ++++-------------- .../parquet/TestParquetSchemaUtil.java | 8 +- 2 files changed, 43 insertions(+), 142 deletions(-) diff --git a/parquet/src/main/java/org/apache/iceberg/parquet/RemoveIds.java b/parquet/src/main/java/org/apache/iceberg/parquet/RemoveIds.java index f1dd57aee4e4..b68b5c00d9dd 100644 --- a/parquet/src/main/java/org/apache/iceberg/parquet/RemoveIds.java +++ b/parquet/src/main/java/org/apache/iceberg/parquet/RemoveIds.java @@ -19,162 +19,63 @@ package org.apache.iceberg.parquet; -import org.apache.iceberg.avro.AvroSchemaUtil; -import org.apache.iceberg.types.Type.PrimitiveType; -import org.apache.iceberg.types.TypeUtil; -import org.apache.iceberg.types.Types.ListType; -import org.apache.iceberg.types.Types.MapType; -import org.apache.iceberg.types.Types.NestedField; -import org.apache.iceberg.types.Types.StructType; -import org.apache.iceberg.types.Types.TimestampType; +import java.util.List; import org.apache.parquet.schema.GroupType; -import org.apache.parquet.schema.LogicalTypeAnnotation; import org.apache.parquet.schema.MessageType; +import org.apache.parquet.schema.PrimitiveType; import org.apache.parquet.schema.Type; import org.apache.parquet.schema.Types; -import static org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName.BINARY; -import static org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName.BOOLEAN; -import static org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName.DOUBLE; -import static org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName.FIXED_LEN_BYTE_ARRAY; -import static org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName.FLOAT; -import static org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName.INT32; -import static org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName.INT64; +public class RemoveIds extends ParquetTypeVisitor { + private final String name; -public class RemoveIds { - public static final int DECIMAL_INT32_MAX_DIGITS = 9; - public static final int DECIMAL_INT64_MAX_DIGITS = 18; - private static final LogicalTypeAnnotation STRING = LogicalTypeAnnotation.stringType(); - private static final LogicalTypeAnnotation DATE = LogicalTypeAnnotation.dateType(); - private static final LogicalTypeAnnotation TIME_MICROS = LogicalTypeAnnotation - .timeType(false /* not adjusted to UTC */, LogicalTypeAnnotation.TimeUnit.MICROS); - private static final LogicalTypeAnnotation TIMESTAMP_MICROS = LogicalTypeAnnotation - .timestampType(false /* not adjusted to UTC */, LogicalTypeAnnotation.TimeUnit.MICROS); - private static final LogicalTypeAnnotation TIMESTAMPTZ_MICROS = LogicalTypeAnnotation - .timestampType(true /* adjusted to UTC */, LogicalTypeAnnotation.TimeUnit.MICROS); - - GroupType struct(StructType struct, Type.Repetition repetition, String name) { - Types.GroupBuilder builder = Types.buildGroup(repetition); - - for (NestedField field : struct.fields()) { - builder.addField(field(field)); - } - - return builder.named(AvroSchemaUtil.makeCompatibleName(name)); - } - - GroupType list(ListType list, Type.Repetition repetition, String name) { - NestedField elementField = list.fields().get(0); - return Types.list(repetition) - .element(field(elementField)) - .named(AvroSchemaUtil.makeCompatibleName(name)); + public RemoveIds(String name) { + this.name = name; } - GroupType map(MapType map, Type.Repetition repetition, String name) { - NestedField keyField = map.fields().get(0); - NestedField valueField = map.fields().get(1); - return Types.map(repetition) - .key(field(keyField)) - .value(field(valueField)) - .named(AvroSchemaUtil.makeCompatibleName(name)); - } - - Type primitive(PrimitiveType primitive, Type.Repetition repetition, String originalName) { - String name = AvroSchemaUtil.makeCompatibleName(originalName); - switch (primitive.typeId()) { - case BOOLEAN: - return Types.primitive(BOOLEAN, repetition).named(name); - case INTEGER: - return Types.primitive(INT32, repetition).named(name); - case LONG: - return Types.primitive(INT64, repetition).named(name); - case FLOAT: - return Types.primitive(FLOAT, repetition).named(name); - case DOUBLE: - return Types.primitive(DOUBLE, repetition).named(name); - case DATE: - return Types.primitive(INT32, repetition).as(DATE).named(name); - case TIME: - return Types.primitive(INT64, repetition).as(TIME_MICROS).named(name); - case TIMESTAMP: - if (((TimestampType) primitive).shouldAdjustToUTC()) { - return Types.primitive(INT64, repetition).as(TIMESTAMPTZ_MICROS).named(name); - } else { - return Types.primitive(INT64, repetition).as(TIMESTAMP_MICROS).named(name); - } - case STRING: - return Types.primitive(BINARY, repetition).as(STRING).named(name); - case BINARY: - return Types.primitive(BINARY, repetition).named(name); - case FIXED: - org.apache.iceberg.types.Types.FixedType fixed = (org.apache.iceberg.types.Types.FixedType) primitive; - - return Types.primitive(FIXED_LEN_BYTE_ARRAY, repetition).length(fixed.length()).named(name); - - case DECIMAL: - org.apache.iceberg.types.Types.DecimalType decimal = (org.apache.iceberg.types.Types.DecimalType) primitive; - - if (decimal.precision() <= DECIMAL_INT32_MAX_DIGITS) { - // store as an int - return Types.primitive(INT32, repetition) - .as(decimalAnnotation(decimal.precision(), decimal.scale())) - .named(name); - - } else if (decimal.precision() <= DECIMAL_INT64_MAX_DIGITS) { - // store as a long - return Types.primitive(INT64, repetition) - .as(decimalAnnotation(decimal.precision(), decimal.scale())) - .named(name); - - } else { - // store as a fixed-length array - int minLength = TypeUtil.decimalRequiredBytes(decimal.precision()); - return Types.primitive(FIXED_LEN_BYTE_ARRAY, repetition).length(minLength) - .as(decimalAnnotation(decimal.precision(), decimal.scale())) - .named(name); - } - - case UUID: - return Types.primitive(FIXED_LEN_BYTE_ARRAY, repetition).length(16).named(name); - - default: - throw new UnsupportedOperationException("Unsupported type for Parquet: " + primitive); + @Override + public Type message(MessageType message, List fields) { + Types.MessageTypeBuilder builder = Types.buildMessage(); + for (Type field : struct(message.asGroupType(), fields).asGroupType().getFields()) { + builder.addField(field); } + return builder.named(name); } - Type field(org.apache.iceberg.types.Types.NestedField field) { - Type.Repetition repetition = field.isOptional() ? - Type.Repetition.OPTIONAL : Type.Repetition.REQUIRED; - String name = field.name(); - - if (field.type().isPrimitiveType()) { - return primitive(field.type().asPrimitiveType(), repetition, name); - - } else { - org.apache.iceberg.types.Type.NestedType nested = field.type().asNestedType(); - if (nested.isStructType()) { - return struct(nested.asStructType(), repetition, name); - } else if (nested.isMapType()) { - return map(nested.asMapType(), repetition, name); - } else if (nested.isListType()) { - return list(nested.asListType(), repetition, name); - } - throw new UnsupportedOperationException("Can't convert unknown type: " + nested); + @Override + public Type struct(GroupType struct, List fields) { + Types.GroupBuilder builder = Types.buildGroup(struct.getRepetition()); + for (Type field : fields) { + builder.addField(field); } + return builder.named(struct.getName()); } - private static LogicalTypeAnnotation decimalAnnotation(int precision, int scale) { - return LogicalTypeAnnotation.decimalType(scale, precision); + @Override + public Type list(GroupType array, Type item) { + return Types.list(array.getRepetition()) + .element(item) + .named(array.getName()); } - public MessageType removeIds(org.apache.iceberg.Schema schema, String name) { - Types.MessageTypeBuilder builder = Types.buildMessage(); + @Override + public Type map(GroupType map, Type key, Type value) { + return Types.map(map.getRepetition()) + .key(key) + .value(value) + .named(map.getName()); + } - for (org.apache.iceberg.types.Types.NestedField field : schema.columns()) { - builder.addField(field(field)); - } + @Override + public Type primitive(PrimitiveType primitive) { + return Types.primitive(primitive.getPrimitiveTypeName(), primitive.getRepetition()) + .length(primitive.getTypeLength()) + .as(primitive.getLogicalTypeAnnotation()) + .named(primitive.getName()); + } - return builder.named(AvroSchemaUtil.makeCompatibleName(name)); + public static MessageType removeIds(org.apache.iceberg.Schema schema, String name) { + return (MessageType) ParquetTypeVisitor.visit(ParquetSchemaUtil.convert(schema, name), new RemoveIds(name)); } } diff --git a/parquet/src/test/java/org/apache/iceberg/parquet/TestParquetSchemaUtil.java b/parquet/src/test/java/org/apache/iceberg/parquet/TestParquetSchemaUtil.java index dde0f17be664..6d769a61a92f 100644 --- a/parquet/src/test/java/org/apache/iceberg/parquet/TestParquetSchemaUtil.java +++ b/parquet/src/test/java/org/apache/iceberg/parquet/TestParquetSchemaUtil.java @@ -86,10 +86,10 @@ public void testAssignIdsByNameMapping() { Schema schema = new Schema(TypeUtil.assignFreshIds(structType, new AtomicInteger(0)::incrementAndGet) .asStructType().fields()); NameMapping nameMapping = MappingUtil.create(schema); - MessageType messageType = new RemoveIds().removeIds(schema, "complex_schema"); - MessageType typeWithIdsFromNameMapping = ParquetSchemaUtil.applyNameMapping(messageType, nameMapping); - Schema newSchema = ParquetSchemaUtil.convert(typeWithIdsFromNameMapping); + MessageType messageTypeWithIds = ParquetSchemaUtil.convert(schema, "parquet_type"); + MessageType messageTypeWithIdsFromNameMapping = ParquetSchemaUtil + .applyNameMapping(RemoveIds.removeIds(schema, "parquet_type"), nameMapping); - Assert.assertEquals(schema.asStruct(), newSchema.asStruct()); + Assert.assertEquals(messageTypeWithIds, messageTypeWithIdsFromNameMapping); } } From 24d0f3bb99c88811a101b33fd6244cc9a9d569c3 Mon Sep 17 00:00:00 2001 From: Junjie Chen Date: Tue, 23 Jun 2020 07:41:20 +0800 Subject: [PATCH 3/4] address comments --- .../java/org/apache/iceberg/parquet/RemoveIds.java | 11 +++-------- .../apache/iceberg/parquet/TestParquetSchemaUtil.java | 2 +- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/parquet/src/main/java/org/apache/iceberg/parquet/RemoveIds.java b/parquet/src/main/java/org/apache/iceberg/parquet/RemoveIds.java index b68b5c00d9dd..0db22bbf7b75 100644 --- a/parquet/src/main/java/org/apache/iceberg/parquet/RemoveIds.java +++ b/parquet/src/main/java/org/apache/iceberg/parquet/RemoveIds.java @@ -27,11 +27,6 @@ import org.apache.parquet.schema.Types; public class RemoveIds extends ParquetTypeVisitor { - private final String name; - - public RemoveIds(String name) { - this.name = name; - } @Override public Type message(MessageType message, List fields) { @@ -39,7 +34,7 @@ public Type message(MessageType message, List fields) { for (Type field : struct(message.asGroupType(), fields).asGroupType().getFields()) { builder.addField(field); } - return builder.named(name); + return builder.named(message.getName()); } @Override @@ -74,8 +69,8 @@ public Type primitive(PrimitiveType primitive) { .named(primitive.getName()); } - public static MessageType removeIds(org.apache.iceberg.Schema schema, String name) { - return (MessageType) ParquetTypeVisitor.visit(ParquetSchemaUtil.convert(schema, name), new RemoveIds(name)); + public static MessageType removeIds(MessageType type, String name) { + return (MessageType) ParquetTypeVisitor.visit(type, new RemoveIds()); } } diff --git a/parquet/src/test/java/org/apache/iceberg/parquet/TestParquetSchemaUtil.java b/parquet/src/test/java/org/apache/iceberg/parquet/TestParquetSchemaUtil.java index 6d769a61a92f..f72a5157231c 100644 --- a/parquet/src/test/java/org/apache/iceberg/parquet/TestParquetSchemaUtil.java +++ b/parquet/src/test/java/org/apache/iceberg/parquet/TestParquetSchemaUtil.java @@ -88,7 +88,7 @@ public void testAssignIdsByNameMapping() { NameMapping nameMapping = MappingUtil.create(schema); MessageType messageTypeWithIds = ParquetSchemaUtil.convert(schema, "parquet_type"); MessageType messageTypeWithIdsFromNameMapping = ParquetSchemaUtil - .applyNameMapping(RemoveIds.removeIds(schema, "parquet_type"), nameMapping); + .applyNameMapping(RemoveIds.removeIds(messageTypeWithIds, "parquet_type"), nameMapping); Assert.assertEquals(messageTypeWithIds, messageTypeWithIdsFromNameMapping); } From 208a9d2e8820eb5a5de800c00db079bd6ce4c267 Mon Sep 17 00:00:00 2001 From: "Chen, Junjie" Date: Tue, 23 Jun 2020 08:35:53 +0800 Subject: [PATCH 4/4] address comments --- parquet/src/main/java/org/apache/iceberg/parquet/RemoveIds.java | 2 +- .../java/org/apache/iceberg/parquet/TestParquetSchemaUtil.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/parquet/src/main/java/org/apache/iceberg/parquet/RemoveIds.java b/parquet/src/main/java/org/apache/iceberg/parquet/RemoveIds.java index 0db22bbf7b75..6096f0f5b1dc 100644 --- a/parquet/src/main/java/org/apache/iceberg/parquet/RemoveIds.java +++ b/parquet/src/main/java/org/apache/iceberg/parquet/RemoveIds.java @@ -69,7 +69,7 @@ public Type primitive(PrimitiveType primitive) { .named(primitive.getName()); } - public static MessageType removeIds(MessageType type, String name) { + public static MessageType removeIds(MessageType type) { return (MessageType) ParquetTypeVisitor.visit(type, new RemoveIds()); } diff --git a/parquet/src/test/java/org/apache/iceberg/parquet/TestParquetSchemaUtil.java b/parquet/src/test/java/org/apache/iceberg/parquet/TestParquetSchemaUtil.java index f72a5157231c..80353f1b265a 100644 --- a/parquet/src/test/java/org/apache/iceberg/parquet/TestParquetSchemaUtil.java +++ b/parquet/src/test/java/org/apache/iceberg/parquet/TestParquetSchemaUtil.java @@ -88,7 +88,7 @@ public void testAssignIdsByNameMapping() { NameMapping nameMapping = MappingUtil.create(schema); MessageType messageTypeWithIds = ParquetSchemaUtil.convert(schema, "parquet_type"); MessageType messageTypeWithIdsFromNameMapping = ParquetSchemaUtil - .applyNameMapping(RemoveIds.removeIds(messageTypeWithIds, "parquet_type"), nameMapping); + .applyNameMapping(RemoveIds.removeIds(messageTypeWithIds), nameMapping); Assert.assertEquals(messageTypeWithIds, messageTypeWithIdsFromNameMapping); }