Skip to content

Commit 559a951

Browse files
authored
Upgrade Iceberg to 1.9.2 and Avro to 1.12.0 (#784)
* upgrade to iceberg 1.10.1 * api changes * use best available iceberg-hive-runtime * upgrade avro version * to run with java 17 * tests * fix avro * dont change notebook * fix tests * use iceberg 1.9.2 * unnecessary changes * address ci issue * fix version in LICENSE * try revert * add back avro schema change * fix ci concurrency * mvn spotless:apply
1 parent b8fce01 commit 559a951

12 files changed

Lines changed: 55 additions & 41 deletions

File tree

pom.xml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
<project.build.outputTimestamp>2025-01-01T00:00:00Z</project.build.outputTimestamp>
6464
<maven.compiler.target>8</maven.compiler.target>
6565
<maven-compiler-plugin.version>3.13.0</maven-compiler-plugin.version>
66-
<avro.version>1.11.4</avro.version>
66+
<avro.version>1.12.0</avro.version>
6767
<log4j.version>2.22.0</log4j.version>
6868
<junit.version>5.11.4</junit.version>
6969
<junit.platform.runner.version>1.11.4</junit.platform.runner.version>
@@ -87,7 +87,8 @@
8787
<scala.binary.version>2.12</scala.binary.version>
8888
<spark.version>3.4.2</spark.version>
8989
<spark.version.prefix>3.4</spark.version.prefix>
90-
<iceberg.version>1.4.2</iceberg.version>
90+
<iceberg.version>1.9.2</iceberg.version>
91+
<iceberg.hive.runtime.version>1.7.2</iceberg.hive.runtime.version>
9192
<delta.version>2.4.0</delta.version>
9293
<paimon.version>1.3.1</paimon.version>
9394
<jackson.version>2.18.2</jackson.version>
@@ -315,7 +316,7 @@
315316
<dependency>
316317
<groupId>org.apache.iceberg</groupId>
317318
<artifactId>iceberg-hive-runtime</artifactId>
318-
<version>${iceberg.version}</version>
319+
<version>${iceberg.hive.runtime.version}</version>
319320
</dependency>
320321

321322
<!-- Delta -->

xtable-aws/src/main/resources/META-INF/LICENSE-bundled

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ com.google.guava:guava:32.1.3-jre
217217
com.lmax:disruptor:3.4.2
218218
io.delta:delta-core_2.12:2.4.0
219219
io.delta:delta-storage:2.4.0
220-
org.apache.avro:avro:1.11.4
220+
org.apache.avro:avro:1.12.0
221221
org.apache.hbase:hbase-client:2.4.9
222222
org.apache.hbase:hbase-common:2.4.9
223223
org.apache.hbase:hbase-server:2.4.9
@@ -226,8 +226,8 @@ org.apache.httpcomponents:fluent-hc:4.4.1
226226
org.apache.hudi:hudi-common:0.14.0
227227
org.apache.hudi:hudi-java-client:0.14.0
228228
org.apache.hudi:hudi-timeline-service:0.14.0
229-
org.apache.iceberg:iceberg-api:1.4.2
230-
org.apache.iceberg:iceberg-core:1.4.2
229+
org.apache.iceberg:iceberg-api:1.9.2
230+
org.apache.iceberg:iceberg-core:1.9.2
231231
org.apache.logging.log4j:log4j-1.2-api:2.22.0
232232
org.apache.logging.log4j:log4j-api:2.22.0
233233
org.javassist:javassist:3.25.0-GA

xtable-core/src/main/java/org/apache/xtable/hudi/HudiFileStatsExtractor.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -203,14 +203,18 @@ private static ColumnStat getColumnStatFromHudiStat(
203203
if (field.getSchema().getDataType() == InternalType.DECIMAL) {
204204
int scale =
205205
(int) field.getSchema().getMetadata().get(InternalSchema.MetadataKey.DECIMAL_SCALE);
206-
minValue =
207-
minValue instanceof ByteBuffer
208-
? convertBytesToBigDecimal((ByteBuffer) minValue, scale)
209-
: ((BigDecimal) minValue).setScale(scale, RoundingMode.UNNECESSARY);
210-
maxValue =
211-
maxValue instanceof ByteBuffer
212-
? convertBytesToBigDecimal((ByteBuffer) maxValue, scale)
213-
: ((BigDecimal) maxValue).setScale(scale, RoundingMode.UNNECESSARY);
206+
if (minValue != null) {
207+
minValue =
208+
minValue instanceof ByteBuffer
209+
? convertBytesToBigDecimal((ByteBuffer) minValue, scale)
210+
: ((BigDecimal) minValue).setScale(scale, RoundingMode.UNNECESSARY);
211+
}
212+
if (maxValue != null) {
213+
maxValue =
214+
maxValue instanceof ByteBuffer
215+
? convertBytesToBigDecimal((ByteBuffer) maxValue, scale)
216+
: ((BigDecimal) maxValue).setScale(scale, RoundingMode.UNNECESSARY);
217+
}
214218
}
215219
return getColumnStatFromValues(
216220
minValue,

xtable-core/src/test/java/org/apache/xtable/TestIcebergTable.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ private DataFile writeAndGetDataFile(List<Record> records, StructLike partitionK
371371
DataWriter<Record> dataWriter =
372372
Parquet.writeData(file)
373373
.schema(icebergTable.schema())
374-
.createWriterFunc(GenericParquetWriter::buildWriter)
374+
.createWriterFunc(GenericParquetWriter::create)
375375
.overwrite()
376376
.withSpec(icebergTable.spec())
377377
.withPartition(partitionKey)

xtable-core/src/test/java/org/apache/xtable/iceberg/ITIcebergConversionSource.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
import org.junit.jupiter.api.BeforeEach;
4242
import org.junit.jupiter.api.Test;
4343
import org.junit.jupiter.api.io.TempDir;
44+
import org.junit.jupiter.api.parallel.Execution;
45+
import org.junit.jupiter.api.parallel.ExecutionMode;
4446
import org.junit.jupiter.params.ParameterizedTest;
4547
import org.junit.jupiter.params.provider.ValueSource;
4648

@@ -62,6 +64,7 @@
6264
import org.apache.xtable.model.storage.DataLayoutStrategy;
6365
import org.apache.xtable.model.storage.TableFormat;
6466

67+
@Execution(ExecutionMode.SAME_THREAD)
6568
public class ITIcebergConversionSource {
6669
private static final Configuration hadoopConf = new Configuration();
6770

xtable-core/src/test/java/org/apache/xtable/iceberg/TestIcebergConversionSource.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
import org.junit.jupiter.api.BeforeEach;
3838
import org.junit.jupiter.api.Test;
3939
import org.junit.jupiter.api.io.TempDir;
40+
import org.junit.jupiter.api.parallel.Execution;
41+
import org.junit.jupiter.api.parallel.ExecutionMode;
4042

4143
import org.apache.iceberg.*;
4244
import org.apache.iceberg.data.GenericRecord;
@@ -61,6 +63,7 @@
6163
import org.apache.xtable.model.storage.FileFormat;
6264
import org.apache.xtable.model.storage.InternalDataFile;
6365

66+
@Execution(ExecutionMode.SAME_THREAD)
6467
class TestIcebergConversionSource {
6568

6669
private IcebergTableManager tableManager;
@@ -432,7 +435,7 @@ private DataFile generateTestDataFile(int partition, Table table, String filePat
432435
DataWriter<GenericRecord> dataWriter =
433436
Parquet.writeData(table.io().newOutputFile(filePath))
434437
.schema(csSchema)
435-
.createWriterFunc(GenericParquetWriter::buildWriter)
438+
.createWriterFunc(GenericParquetWriter::create)
436439
.overwrite()
437440
.withSpec(table.spec())
438441
.withPartition(partitionInfo)

xtable-core/src/test/java/org/apache/xtable/iceberg/TestIcebergDataHelper.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -333,11 +333,7 @@ private Object generateRandomValueForType(
333333
case STRUCT:
334334
return generateInsertRecord(timeLowerBound, timeUpperBound, fieldType.asStructType());
335335
case UUID:
336-
UUID uuid = UUID.randomUUID();
337-
ByteBuffer byteBuffer = ByteBuffer.wrap(new byte[16]);
338-
byteBuffer.putLong(uuid.getMostSignificantBits());
339-
byteBuffer.putLong(uuid.getLeastSignificantBits());
340-
return byteBuffer.array();
336+
return UUID.randomUUID();
341337
case LIST:
342338
Types.ListType listType = (Types.ListType) fieldType;
343339
int listSize = RANDOM.nextInt(5) + 1;

xtable-core/src/test/java/org/apache/xtable/iceberg/TestIcebergSchemaSync.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ public void testUpdateListElement() {
181181

182182
verify(mockUpdateSchema).deleteColumn("array_field.element.element_string");
183183
verify(mockUpdateSchema)
184-
.addColumn("array_field.element", "element_double", Types.DoubleType.get(), null);
184+
.addColumn("array_field.element", "element_double", Types.DoubleType.get(), (String) null);
185185
verify(mockUpdateSchema).commit();
186186
}
187187

@@ -194,7 +194,8 @@ public void testUpdateMapValue() {
194194

195195
verify(mockUpdateSchema).deleteColumn("map_field.value.value_string");
196196
verify(mockUpdateSchema)
197-
.addRequiredColumn("map_field.value", "value_double", Types.DoubleType.get(), null);
197+
.addRequiredColumn(
198+
"map_field.value", "value_double", Types.DoubleType.get(), (String) null);
198199
verify(mockUpdateSchema).commit();
199200
}
200201

xtable-core/src/test/java/org/apache/xtable/iceberg/TestIcebergSync.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@
5959
import org.junit.jupiter.api.BeforeEach;
6060
import org.junit.jupiter.api.Test;
6161
import org.junit.jupiter.api.io.TempDir;
62+
import org.junit.jupiter.api.parallel.Execution;
63+
import org.junit.jupiter.api.parallel.ExecutionMode;
6264
import org.mockito.ArgumentCaptor;
6365
import org.mockito.Mockito;
6466

@@ -106,6 +108,7 @@
106108
* Validates that the metadata for the table is properly created/updated. {@link
107109
* ITConversionController} validates that the table and its data can be properly read.
108110
*/
111+
@Execution(ExecutionMode.SAME_THREAD)
109112
public class TestIcebergSync {
110113
private static final Random RANDOM = new Random();
111114
private static final Instant LAST_COMMIT_TIME = Instant.ofEpochSecond(1000);

xtable-core/src/test/resources/schemas/basic_schema.avsc

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -72,20 +72,23 @@
7272
},
7373
{
7474
"name": "bytes_field",
75-
"type": "bytes",
76-
"default": ""
75+
"type": ["null", "bytes"],
76+
"default": null
7777
},
7878
{
7979
"name": "decimal_field",
80-
"type": {
81-
"type": "fixed",
82-
"name": "decimal_field_testing",
83-
"size": 10,
84-
"logicalType": "decimal",
85-
"precision": 20,
86-
"scale": 2
87-
},
88-
"default": "\u0000"
80+
"type": [
81+
"null",
82+
{
83+
"type": "fixed",
84+
"name": "decimal_field_testing",
85+
"size": 10,
86+
"logicalType": "decimal",
87+
"precision": 20,
88+
"scale": 2
89+
}
90+
],
91+
"default": null
8992
},
9093
{
9194
"name": "nested_record",

0 commit comments

Comments
 (0)