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 <[email protected]>
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