This is an automated email from the ASF dual-hosted git repository. szita pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push: new 39eba3b948 HIVE-26189: Iceberg metadata query throws exceptions after partition evolution (#3258) (Adam Szita, reviewed by Peter Vary) 39eba3b948 is described below commit 39eba3b948ec38ea99c8c51449342e973f431a24 Author: Adam Szita <40628386+sz...@users.noreply.github.com> AuthorDate: Mon May 2 11:22:21 2022 +0200 HIVE-26189: Iceberg metadata query throws exceptions after partition evolution (#3258) (Adam Szita, reviewed by Peter Vary) --- .../mr/mapreduce/IcebergInternalRecordWrapper.java | 4 +- .../query_iceberg_metadata_of_partitioned_table.q | 13 +++++ ...ery_iceberg_metadata_of_partitioned_table.q.out | 57 ++++++++++++++++++++++ 3 files changed, 73 insertions(+), 1 deletion(-) diff --git a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/mapreduce/IcebergInternalRecordWrapper.java b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/mapreduce/IcebergInternalRecordWrapper.java index 0d53924b93..241c12a2d3 100644 --- a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/mapreduce/IcebergInternalRecordWrapper.java +++ b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/mapreduce/IcebergInternalRecordWrapper.java @@ -66,7 +66,7 @@ public class IcebergInternalRecordWrapper implements Record, StructLike { @Override public <T> T get(int pos, Class<T> javaClass) { - if (transforms[pos] != null) { + if (transforms[pos] != null && values[pos] != null) { return javaClass.cast(transforms[pos].apply(values[pos])); } return javaClass.cast(values[pos]); @@ -143,6 +143,8 @@ public class IcebergInternalRecordWrapper implements Record, StructLike { switch (type.typeId()) { case TIMESTAMP: return timestamp -> DateTimeUtil.timestamptzFromMicros((Long) timestamp); + case DATE: + return date -> DateTimeUtil.dateFromDays((Integer) date); case STRUCT: IcebergInternalRecordWrapper wrapper = new IcebergInternalRecordWrapper(type.asStructType(), type.asStructType()); diff --git a/iceberg/iceberg-handler/src/test/queries/positive/query_iceberg_metadata_of_partitioned_table.q b/iceberg/iceberg-handler/src/test/queries/positive/query_iceberg_metadata_of_partitioned_table.q index 1c1ef7a1d1..5408ec6dbd 100644 --- a/iceberg/iceberg-handler/src/test/queries/positive/query_iceberg_metadata_of_partitioned_table.q +++ b/iceberg/iceberg-handler/src/test/queries/positive/query_iceberg_metadata_of_partitioned_table.q @@ -73,3 +73,16 @@ select partition_summaries from default.ice_meta_3.manifests where partition_sum drop table ice_meta_2; drop table ice_meta_3; + + +CREATE EXTERNAL TABLE `partevv`( `id` int, `ts` timestamp, `ts2` timestamp) STORED BY ICEBERG STORED AS ORC TBLPROPERTIES ('format-version'='1'); + +ALTER TABLE partevv SET PARTITION SPEC (id); +INSERT INTO partevv VALUES (1, current_timestamp(), current_timestamp()); +INSERT INTO partevv VALUES (2, current_timestamp(), current_timestamp()); + + +ALTER TABLE partevv SET PARTITION SPEC (day(ts)); +INSERT INTO partevv VALUES (100, current_timestamp(), current_timestamp()); + +select * from default.partevv.partitions; \ No newline at end of file diff --git a/iceberg/iceberg-handler/src/test/results/positive/query_iceberg_metadata_of_partitioned_table.q.out b/iceberg/iceberg-handler/src/test/results/positive/query_iceberg_metadata_of_partitioned_table.q.out index 4f7a0f90cd..6fdf0c8190 100644 --- a/iceberg/iceberg-handler/src/test/results/positive/query_iceberg_metadata_of_partitioned_table.q.out +++ b/iceberg/iceberg-handler/src/test/results/positive/query_iceberg_metadata_of_partitioned_table.q.out @@ -526,3 +526,60 @@ POSTHOOK: query: drop table ice_meta_3 POSTHOOK: type: DROPTABLE POSTHOOK: Input: default@ice_meta_3 POSTHOOK: Output: default@ice_meta_3 +PREHOOK: query: CREATE EXTERNAL TABLE `partevv`( `id` int, `ts` timestamp, `ts2` timestamp) STORED BY ICEBERG STORED AS ORC TBLPROPERTIES ('format-version'='1') +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@partevv +POSTHOOK: query: CREATE EXTERNAL TABLE `partevv`( `id` int, `ts` timestamp, `ts2` timestamp) STORED BY ICEBERG STORED AS ORC TBLPROPERTIES ('format-version'='1') +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@partevv +PREHOOK: query: ALTER TABLE partevv SET PARTITION SPEC (id) +PREHOOK: type: ALTERTABLE_SETPARTSPEC +PREHOOK: Input: default@partevv +POSTHOOK: query: ALTER TABLE partevv SET PARTITION SPEC (id) +POSTHOOK: type: ALTERTABLE_SETPARTSPEC +POSTHOOK: Input: default@partevv +POSTHOOK: Output: default@partevv +PREHOOK: query: INSERT INTO partevv VALUES (1, current_timestamp(), current_timestamp()) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@partevv +POSTHOOK: query: INSERT INTO partevv VALUES (1, current_timestamp(), current_timestamp()) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@partevv +PREHOOK: query: INSERT INTO partevv VALUES (2, current_timestamp(), current_timestamp()) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@partevv +POSTHOOK: query: INSERT INTO partevv VALUES (2, current_timestamp(), current_timestamp()) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@partevv +PREHOOK: query: ALTER TABLE partevv SET PARTITION SPEC (day(ts)) +PREHOOK: type: ALTERTABLE_SETPARTSPEC +PREHOOK: Input: default@partevv +POSTHOOK: query: ALTER TABLE partevv SET PARTITION SPEC (day(ts)) +POSTHOOK: type: ALTERTABLE_SETPARTSPEC +POSTHOOK: Input: default@partevv +POSTHOOK: Output: default@partevv +PREHOOK: query: INSERT INTO partevv VALUES (100, current_timestamp(), current_timestamp()) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@partevv +POSTHOOK: query: INSERT INTO partevv VALUES (100, current_timestamp(), current_timestamp()) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@partevv +PREHOOK: query: select * from default.partevv.partitions +PREHOOK: type: QUERY +PREHOOK: Input: default@partevv +PREHOOK: Output: hdfs://### HDFS PATH ### +POSTHOOK: query: select * from default.partevv.partitions +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partevv +POSTHOOK: Output: hdfs://### HDFS PATH ### +{"id":1,"ts_day":null} 1 1 +{"id":2,"ts_day":null} 1 1 +{"id":null,"ts_day":"2022-04-29"} 1 1