HIVE-29803: [Iceberg] Support ANCESTORS_OF snapshot lineage command - #6681
HIVE-29803: [Iceberg] Support ANCESTORS_OF snapshot lineage command#6681Aggarwal-Raghav wants to merge 1 commit into
Conversation
d0da950 to
93b0d5b
Compare
|
Rebased to resolve merge conflicts |
|
@Aggarwal-Raghav |
thanks a lot @okumin , for replying and you are correct. Its read-only operation, I had a doubt in back of my mind along the same lines but hive exposes iceberg procedures using ALTER hence this current implementation. I'm open to suggestions, maybe as UDF if I can expose is that ok, Just food for thought |
93b0d5b to
bfd3829
Compare
| Hive.get(hiveConf).getTable(tableNameStr); | ||
| Table table = IcebergTableUtil.getTable(hiveConf, hiveTable.getTTable()); | ||
|
|
||
| this.serializedTable = SerializationUtil.serializeToBase64(SerializableTable.copyOf(table)); |
There was a problem hiding this comment.
Serialization to Base64 is explicitly done because of this kryo5 error
Caused by: org.apache.hive.com.esotericsoftware.kryo.kryo5.KryoException: java.lang.UnsupportedOperationException: can't get field offset on a hidden class: private final org.apache.iceberg.mr.hive.HiveTableUtil$NonSerializingConfig org.apache.iceberg.mr.hive.HiveTableUtil$$Lambda/0x0000000801d8ec70.arg$1
Serialization trace:
hadoopConf (org.apache.iceberg.hadoop.HadoopFileIO)
io (org.apache.iceberg.SerializableTable)
icebergTable (org.apache.iceberg.mr.hive.udf.GenericUDTFIcebergAncestorsOf)
genericUDTF (org.apache.hadoop.hive.ql.plan.UDTFDesc)
conf (org.apache.hadoop.hive.ql.exec.UDTFOperator)
childOperators (org.apache.hadoop.hive.ql.exec.SelectOperator)
childOperators (org.apache.hadoop.hive.ql.exec.LimitOperator)
reducer (org.apache.hadoop.hive.ql.plan.ReduceWork)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.ReflectField.write(ReflectField.java:102)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.FieldSerializer.write(FieldSerializer.java:108)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.Kryo.writeObject(Kryo.java:642)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.ReflectField.write(ReflectField.java:71)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.FieldSerializer.write(FieldSerializer.java:108)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.Kryo.writeObject(Kryo.java:642)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.ReflectField.write(ReflectField.java:71)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.FieldSerializer.write(FieldSerializer.java:108)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.Kryo.writeObject(Kryo.java:642)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.ReflectField.write(ReflectField.java:71)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.FieldSerializer.write(FieldSerializer.java:108)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.Kryo.writeObject(Kryo.java:642)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.ReflectField.write(ReflectField.java:71)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.FieldSerializer.write(FieldSerializer.java:108)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.Kryo.writeObject(Kryo.java:642)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.CollectionSerializer.write(CollectionSerializer.java:155)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.CollectionSerializer.write(CollectionSerializer.java:44)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.Kryo.writeObject(Kryo.java:642)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.ReflectField.write(ReflectField.java:71)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.FieldSerializer.write(FieldSerializer.java:108)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.Kryo.writeObject(Kryo.java:642)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.CollectionSerializer.write(CollectionSerializer.java:155)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.CollectionSerializer.write(CollectionSerializer.java:44)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.Kryo.writeObject(Kryo.java:642)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.ReflectField.write(ReflectField.java:71)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.FieldSerializer.write(FieldSerializer.java:108)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.Kryo.writeObject(Kryo.java:642)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.ReflectField.write(ReflectField.java:71)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.FieldSerializer.write(FieldSerializer.java:108)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.Kryo.writeObject(Kryo.java:627)
at org.apache.hadoop.hive.ql.exec.SerializationUtilities.serializeObjectByKryo(SerializationUtilities.java:833)
at org.apache.hadoop.hive.ql.exec.SerializationUtilities.serializePlan(SerializationUtilities.java:720)
at org.apache.hadoop.hive.ql.exec.Utilities.setBaseWork(Utilities.java:595)
... 31 more
Caused by: java.lang.UnsupportedOperationException: can't get field offset on a hidden class: private final org.apache.iceberg.mr.hive.HiveTableUtil$NonSerializingConfig org.apache.iceberg.mr.hive.HiveTableUtil$$Lambda/0x0000000801d8ec70.arg$1
at jdk.unsupported/sun.misc.Unsafe.objectFieldOffset(Unsafe.java:652)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.UnsafeField.<init>(UnsafeField.java:38)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.CachedFields.newUnsafeField(CachedFields.java:211)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.CachedFields.addField(CachedFields.java:156)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.CachedFields.rebuild(CachedFields.java:99)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.FieldSerializer.<init>(FieldSerializer.java:82)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.SerializerFactory$FieldSerializerFactory.newSerializer(SerializerFactory.java:124)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.SerializerFactory$FieldSerializerFactory.newSerializer(SerializerFactory.java:108)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.Kryo.newDefaultSerializer(Kryo.java:469)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.Kryo.getDefaultSerializer(Kryo.java:454)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.util.DefaultClassResolver.registerImplicit(DefaultClassResolver.java:89)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.Kryo.getRegistration(Kryo.java:581)
at org.apache.hadoop.hive.ql.exec.SerializationUtilities$KryoWithHooks.getRegistration(SerializationUtilities.java:250)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.util.DefaultClassResolver.writeClass(DefaultClassResolver.java:112)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.Kryo.writeClass(Kryo.java:613)
at org.apache.hive.com.esotericsoftware.kryo.kryo5.serializers.ReflectField.write(ReflectField.java:68)
... 63 more
bfd3829 to
da6e5ed
Compare
|
|
@okumin, any suggestions on the new approach? |





What changes were proposed in this pull request?
Introduce,
ANCESTORS_OFcommand for Iceberg tables, allowing users to inspect the snapshot history and rollback lineage natively in Hive.Why are the changes needed?
To improve Iceberg metadata visibility. This brings Hive closer to feature parity with Spark, which natively support inspecting Iceberg snapshot history and lineage chains.
Does this PR introduce any user-facing change?
Yes, New DDL
How was this patch tested?
On local setup