diff --git a/hive-metastore/src/main/java/org/apache/iceberg/hive/legacy/MergeHiveSchemaWithAvro.java b/hive-metastore/src/main/java/org/apache/iceberg/hive/legacy/MergeHiveSchemaWithAvro.java index 25bc3b4cf8..55018c7d77 100644 --- a/hive-metastore/src/main/java/org/apache/iceberg/hive/legacy/MergeHiveSchemaWithAvro.java +++ b/hive-metastore/src/main/java/org/apache/iceberg/hive/legacy/MergeHiveSchemaWithAvro.java @@ -236,7 +236,9 @@ public Schema hivePrimitiveToAvro(PrimitiveTypeInfo primitive) { return LogicalTypes.date().addToSchema(Schema.create(Schema.Type.INT)); case TIMESTAMP: - return LogicalTypes.timestampMillis().addToSchema(Schema.create(Schema.Type.LONG)); + Schema schema = Schema.create(Schema.Type.LONG); + schema.addProp(AvroSchemaUtil.ADJUST_TO_UTC_PROP, false); + return LogicalTypes.timestampMillis().addToSchema(schema); case DECIMAL: DecimalTypeInfo dti = (DecimalTypeInfo) primitive; diff --git a/hive-metastore/src/test/java/org/apache/iceberg/hive/legacy/TestMergeHiveSchemaWithAvro.java b/hive-metastore/src/test/java/org/apache/iceberg/hive/legacy/TestMergeHiveSchemaWithAvro.java index 5bc62beba7..7ad76dae7a 100644 --- a/hive-metastore/src/test/java/org/apache/iceberg/hive/legacy/TestMergeHiveSchemaWithAvro.java +++ b/hive-metastore/src/test/java/org/apache/iceberg/hive/legacy/TestMergeHiveSchemaWithAvro.java @@ -278,14 +278,18 @@ public void shouldRecoverLogicalType() { optional("fc", Schema.Type.BYTES)); Schema merged = merge(hive, avro); + Schema expectedTimestampSchema = Schema.create(Schema.Type.LONG); + expectedTimestampSchema.addProp(AvroSchemaUtil.ADJUST_TO_UTC_PROP, false); Schema expected = struct("r1", optional("fa", LogicalTypes.date().addToSchema(Schema.create(Schema.Type.INT))), - optional("fb", LogicalTypes.timestampMillis().addToSchema(Schema.create(Schema.Type.LONG))), + optional("fb", LogicalTypes.timestampMillis().addToSchema(expectedTimestampSchema)), optional("fc", LogicalTypes.decimal(4, 2).addToSchema(Schema.create(Schema.Type.BYTES)))); assertSchema(expected, merged); Assert.assertEquals("date", AvroSchemaUtil.fromOption(merged.getField("fa").schema()).getLogicalType().getName()); + // This last line should not throw any exception. + AvroSchemaUtil.toIceberg(merged); } // TODO: tests to retain schema props