This is an automated email from the ASF dual-hosted git repository.
zhangzc pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-gluten.git
The following commit(s) were added to refs/heads/main by this push:
new 82d182c592 [GLUTEN-8846][CH][Part 2] Add the test case for the iceberg
MOR table with the equality deletion and the position deletion (#8992)
82d182c592 is described below
commit 82d182c59271dcb64f8c592d22f7a6478efb2385
Author: Zhichao Zhang <[email protected]>
AuthorDate: Fri Mar 14 18:49:19 2025 +0800
[GLUTEN-8846][CH][Part 2] Add the test case for the iceberg MOR table with
the equality deletion and the position deletion (#8992)
[CH][Part 2] Add the test case for the iceberg MOR table with the equality
deletion and the position deletion:
1. ClickHouseIcebergMOREqualityDeletionSuite.scala for the equality
deletion, the test table was generated by the Flink + Iceberg
2. ClickHouseIcebergSuite.scala for the position deletion
---
...ClickHouseIcebergMOREqualityDeletionSuite.scala | 73 +++++++
.../execution/iceberg/ClickHouseIcebergSuite.scala | 227 +++++++++++++++++++--
...6-db12-4e82-b7c7-ab4adfa40de9-00001.parquet.crc | Bin 0 -> 16 bytes
...6-db12-4e82-b7c7-ab4adfa40de9-00002.parquet.crc | Bin 0 -> 12 bytes
...c-e03e-4709-b9fc-f7ef771a7c19-00001.parquet.crc | Bin 0 -> 16 bytes
...c-e03e-4709-b9fc-f7ef771a7c19-00002.parquet.crc | Bin 0 -> 12 bytes
...ee376-db12-4e82-b7c7-ab4adfa40de9-00001.parquet | Bin 0 -> 917 bytes
...ee376-db12-4e82-b7c7-ab4adfa40de9-00002.parquet | Bin 0 -> 440 bytes
...9cf6c-e03e-4709-b9fc-f7ef771a7c19-00001.parquet | Bin 0 -> 904 bytes
...9cf6c-e03e-4709-b9fc-f7ef771a7c19-00002.parquet | Bin 0 -> 448 bytes
...5f5d7ba-1dad-42be-9a6a-fb30179fd803-m0.avro.crc | Bin 0 -> 64 bytes
...5f5d7ba-1dad-42be-9a6a-fb30179fd803-m1.avro.crc | Bin 0 -> 64 bytes
...667f02f-4d6c-4a67-bf20-4aec7179400a-m0.avro.crc | Bin 0 -> 64 bytes
...667f02f-4d6c-4a67-bf20-4aec7179400a-m1.avro.crc | Bin 0 -> 64 bytes
...1-7667f02f-4d6c-4a67-bf20-4aec7179400a.avro.crc | Bin 0 -> 44 bytes
...1-55f5d7ba-1dad-42be-9a6a-fb30179fd803.avro.crc | Bin 0 -> 44 bytes
.../metadata/.v1.metadata.json.crc | Bin 0 -> 20 bytes
.../metadata/.v2.metadata.json.crc | Bin 0 -> 32 bytes
.../metadata/.v3.metadata.json.crc | Bin 0 -> 40 bytes
.../metadata/.version-hint.text.crc | Bin 0 -> 12 bytes
.../55f5d7ba-1dad-42be-9a6a-fb30179fd803-m0.avro | Bin 0 -> 6794 bytes
.../55f5d7ba-1dad-42be-9a6a-fb30179fd803-m1.avro | Bin 0 -> 6765 bytes
.../7667f02f-4d6c-4a67-bf20-4aec7179400a-m0.avro | Bin 0 -> 6797 bytes
.../7667f02f-4d6c-4a67-bf20-4aec7179400a-m1.avro | Bin 0 -> 6766 bytes
...257-1-7667f02f-4d6c-4a67-bf20-4aec7179400a.avro | Bin 0 -> 4352 bytes
...384-1-55f5d7ba-1dad-42be-9a6a-fb30179fd803.avro | Bin 0 -> 4268 bytes
.../db/test_upsert_query/metadata/v1.metadata.json | 53 +++++
.../db/test_upsert_query/metadata/v2.metadata.json | 89 ++++++++
.../db/test_upsert_query/metadata/v3.metadata.json | 121 +++++++++++
.../test_upsert_query/metadata/version-hint.text | 1 +
30 files changed, 544 insertions(+), 20 deletions(-)
diff --git
a/backends-clickhouse/src-iceberg/test/scala/org/apache/gluten/execution/iceberg/ClickHouseIcebergMOREqualityDeletionSuite.scala
b/backends-clickhouse/src-iceberg/test/scala/org/apache/gluten/execution/iceberg/ClickHouseIcebergMOREqualityDeletionSuite.scala
new file mode 100644
index 0000000000..17a2c991ff
--- /dev/null
+++
b/backends-clickhouse/src-iceberg/test/scala/org/apache/gluten/execution/iceberg/ClickHouseIcebergMOREqualityDeletionSuite.scala
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.gluten.execution.iceberg
+
+import org.apache.commons.io.FileUtils
+import
org.apache.gluten.execution.{GlutenClickHouseWholeStageTransformerSuite,
IcebergScanTransformer}
+import org.apache.spark.SparkConf
+
+import java.io.File
+
+class ClickHouseIcebergMOREqualityDeletionSuite extends
GlutenClickHouseWholeStageTransformerSuite {
+
+ protected val ICEBERG_GENERATED_PATH = "junit6640909127060857423"
+ protected val ICEBERG_WAREHOUSE = s"/tmp/$ICEBERG_GENERATED_PATH"
+ protected val equalityDeletedDataPath: String =
+ "../../../../gluten-iceberg/src-iceberg/test/resources"
+
+ override protected def sparkConf: SparkConf = {
+ super.sparkConf
+ .set("spark.shuffle.manager",
"org.apache.spark.shuffle.sort.ColumnarShuffleManager")
+ .set("spark.sql.adaptive.enabled", "true")
+ .set("spark.sql.shuffle.partitions", "2")
+ .set("spark.memory.offHeap.size", "2g")
+ .set("spark.unsafe.exceptionOnMemoryLeak", "true")
+ .set("spark.sql.autoBroadcastJoinThreshold", "-1")
+ .set(
+ "spark.sql.extensions",
+ "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")
+ .set("spark.sql.catalog.local", "org.apache.iceberg.spark.SparkCatalog")
+ .set("spark.sql.catalog.local.type", "hadoop")
+ .set("spark.sql.catalog.local.warehouse",
s"file://$ICEBERG_WAREHOUSE/default")
+ }
+
+ override def beforeAll(): Unit = {
+ super.beforeAll()
+
+ val icebergPathDir = new File(ICEBERG_WAREHOUSE)
+ if (icebergPathDir.exists()) {
+ FileUtils.forceDelete(icebergPathDir)
+ }
+ FileUtils.forceMkdir(icebergPathDir)
+ val equalityDeletedData =
+ new File(s"$rootPath$equalityDeletedDataPath/$ICEBERG_GENERATED_PATH")
+ FileUtils.copyDirectory(equalityDeletedData, icebergPathDir)
+ }
+
+ testWithSpecifiedSparkVersion(
+ "iceberg read mor table with equality deletion", Array("3.3", "3.5")) {
+ // The table 'test_upsert_query' was generated by Flink + Iceberg from the
iceberg ut,
+ // the root path must be the '/tmp/junit6640909127060857423/default'
+ val testTableName = "local.db.test_upsert_query"
+ runQueryAndCompare(
+ s"""
+ |select * from $testTableName;
+ |""".stripMargin) {
+ checkGlutenOperatorMatch[IcebergScanTransformer]
+ }
+ }
+}
diff --git
a/backends-clickhouse/src-iceberg/test/scala/org/apache/gluten/execution/iceberg/ClickHouseIcebergSuite.scala
b/backends-clickhouse/src-iceberg/test/scala/org/apache/gluten/execution/iceberg/ClickHouseIcebergSuite.scala
index 38c1e606cb..3e44047b74 100644
---
a/backends-clickhouse/src-iceberg/test/scala/org/apache/gluten/execution/iceberg/ClickHouseIcebergSuite.scala
+++
b/backends-clickhouse/src-iceberg/test/scala/org/apache/gluten/execution/iceberg/ClickHouseIcebergSuite.scala
@@ -222,6 +222,166 @@ class ClickHouseIcebergSuite extends
GlutenClickHouseWholeStageTransformerSuite
}
}
+ testWithSpecifiedSparkVersion("iceberg bucketed join partition value not
exists",
+ Array("3.4", "3.5")) {
+ val leftTable = "p_str_tb"
+ val rightTable = "p_int_tb"
+ withTable(leftTable, rightTable) {
+ withSQLConf(GlutenConfig.GLUTEN_ENABLED.key -> "false") {
+ // Gluten does not support write iceberg table.
+ spark.sql(
+ s"""
+ |create table $leftTable(id int, name string, p string)
+ |using iceberg
+ |partitioned by (bucket(4, id));
+ |""".stripMargin)
+ spark.sql(
+ s"""
+ |insert into table $leftTable values
+ |(4, 'a5', 'p4'),
+ |(1, 'a1', 'p1'),
+ |(1, 'a2', 'p1'),
+ |(1, 'a2', 'p1'),
+ |(1, 'a2', 'p1'),
+ |(1, 'a2', 'p1'),
+ |(1, 'a2', 'p1'),
+ |(1, 'a2', 'p1'),
+ |(1, 'a2', 'p1'),
+ |(1, 'a2', 'p1'),
+ |(2, 'a3', 'p2'),
+ |(1, 'a2', 'p1'),
+ |(3, 'a4', 'p3'),
+ |(10, 'a4', 'p3');
+ |""".stripMargin
+ )
+ spark.sql(
+ s"""
+ |create table $rightTable(id int, name string, p int)
+ |using iceberg
+ |partitioned by (bucket(4, id));
+ |""".stripMargin)
+ spark.sql(
+ s"""
+ |insert into table $rightTable values
+ |(3, 'b4', 23),
+ |(1, 'b1', 21);
+ |""".stripMargin
+ )
+ }
+
+ withSQLConf(
+ "spark.sql.sources.v2.bucketing.enabled" -> "true",
+ "spark.sql.requireAllClusterKeysForCoPartition" -> "false",
+ "spark.sql.adaptive.enabled" -> "false",
+ "spark.sql.iceberg.planning.preserve-data-grouping" -> "true",
+ "spark.sql.autoBroadcastJoinThreshold" -> "-1",
+ "spark.sql.sources.v2.bucketing.pushPartValues.enabled" -> "true",
+
"spark.sql.sources.v2.bucketing.partiallyClusteredDistribution.enabled" ->
"false"
+ ) {
+ runQueryAndCompare(
+ s"""
+ |select s.id, s.name, i.name, i.p
+ | from $leftTable s inner join $rightTable i
+ | on s.id = i.id;
+ |""".stripMargin) {
+ df => {
+ assert(
+ getExecutedPlan(df).count(
+ plan => {
+ plan.isInstanceOf[IcebergScanTransformer]
+ }) == 2)
+ getExecutedPlan(df).map {
+ case plan: IcebergScanTransformer =>
+ assert(plan.getKeyGroupPartitioning.isDefined)
+ assert(plan.getSplitInfosWithIndex.length == 3)
+ case _ => // do nothing
+ }
+ }
+ }
+ }
+ }
+ }
+
+ testWithSpecifiedSparkVersion(
+ "iceberg bucketed join partition value not exists partial cluster",
Array("3.4", "3.5")) {
+ val leftTable = "p_str_tb"
+ val rightTable = "p_int_tb"
+ withTable(leftTable, rightTable) {
+ withSQLConf(GlutenConfig.GLUTEN_ENABLED.key -> "false") {
+ // Gluten does not support write iceberg table.
+ spark.sql(
+ s"""
+ |create table $leftTable(id int, name string, p string)
+ |using iceberg
+ |partitioned by (bucket(4, id));
+ |""".stripMargin)
+ spark.sql(
+ s"""
+ |insert into table $leftTable values
+ |(4, 'a5', 'p4'),
+ |(1, 'a1', 'p1'),
+ |(1, 'a2', 'p1'),
+ |(1, 'a2', 'p1'),
+ |(1, 'a2', 'p1'),
+ |(1, 'a2', 'p1'),
+ |(1, 'a2', 'p1'),
+ |(1, 'a2', 'p1'),
+ |(1, 'a2', 'p1'),
+ |(1, 'a2', 'p1'),
+ |(2, 'a3', 'p2'),
+ |(1, 'a2', 'p1'),
+ |(3, 'a4', 'p3'),
+ |(10, 'a4', 'p3');
+ |""".stripMargin
+ )
+ spark.sql(
+ s"""
+ |create table $rightTable(id int, name string, p int)
+ |using iceberg
+ |partitioned by (bucket(4, id));
+ |""".stripMargin)
+ spark.sql(
+ s"""
+ |insert into table $rightTable values
+ |(3, 'b4', 23),
+ |(1, 'b1', 21);
+ |""".stripMargin
+ )
+ }
+
+ withSQLConf(
+ "spark.sql.sources.v2.bucketing.enabled" -> "true",
+ "spark.sql.requireAllClusterKeysForCoPartition" -> "false",
+ "spark.sql.adaptive.enabled" -> "false",
+ "spark.sql.iceberg.planning.preserve-data-grouping" -> "true",
+ "spark.sql.autoBroadcastJoinThreshold" -> "-1",
+ "spark.sql.sources.v2.bucketing.pushPartValues.enabled" -> "true",
+
"spark.sql.sources.v2.bucketing.partiallyClusteredDistribution.enabled" ->
"true"
+ ) {
+ runQueryAndCompare(
+ s"""
+ |select s.id, s.name, i.name, i.p
+ | from $leftTable s inner join $rightTable i
+ | on s.id = i.id;
+ |""".stripMargin) {
+ df => {
+ assert(
+ getExecutedPlan(df).count(
+ plan => {
+ plan.isInstanceOf[IcebergScanTransformer]
+ }) == 2)
+ getExecutedPlan(df).map {
+ case plan: IcebergScanTransformer =>
+ assert(plan.getKeyGroupPartitioning.isDefined)
+ assert(plan.getSplitInfosWithIndex.length == 3)
+ case _ => // do nothing
+ }
+ }
+ }
+ }
+ }
+ }
+
testWithSpecifiedSparkVersion(
"iceberg bucketed join with partition filter", Array("3.3", "3.5")) {
val leftTable = "p_str_tb"
@@ -348,12 +508,12 @@ class ClickHouseIcebergSuite extends
GlutenClickHouseWholeStageTransformerSuite
}
}
- test("iceberg read mor table - delete and update") {
- withTable("iceberg_mor_tb") {
+ test("iceberg read cow table - delete and update") {
+ withTable("iceberg_cow_tb") {
withSQLConf(GlutenConfig.GLUTEN_ENABLED.key -> "false") {
spark.sql(
"""
- |create table iceberg_mor_tb (
+ |create table iceberg_cow_tb (
| id int,
| name string,
| p string
@@ -367,7 +527,7 @@ class ClickHouseIcebergSuite extends
GlutenClickHouseWholeStageTransformerSuite
// Insert some test rows.
spark.sql(
"""
- |insert into table iceberg_mor_tb
+ |insert into table iceberg_cow_tb
|values (1, 'a1', 'p1'), (2, 'a2', 'p1'), (3, 'a3', 'p2'),
| (4, 'a4', 'p1'), (5, 'a5', 'p2'), (6, 'a6', 'p1');
|""".stripMargin)
@@ -375,33 +535,32 @@ class ClickHouseIcebergSuite extends
GlutenClickHouseWholeStageTransformerSuite
// Delete row.
spark.sql(
"""
- |delete from iceberg_mor_tb where name = 'a1';
+ |delete from iceberg_cow_tb where name = 'a1';
|""".stripMargin
)
// Update row.
spark.sql(
"""
- |update iceberg_mor_tb set name = 'new_a2' where id = 'a2';
+ |update iceberg_cow_tb set name = 'new_a2' where id = 'a2';
|""".stripMargin
)
// Delete row again.
spark.sql(
"""
- |delete from iceberg_mor_tb where id = 6;
+ |delete from iceberg_cow_tb where id = 6;
|""".stripMargin
)
}
runQueryAndCompare(
"""
- |select * from iceberg_mor_tb;
+ |select * from iceberg_cow_tb;
|""".stripMargin) {
checkGlutenOperatorMatch[IcebergScanTransformer]
}
}
}
- // TODO: support merge-on-read mode
- ignore("iceberg read mor table - delete and update with merge-on-read mode")
{
+ test("iceberg read mor table - delete and update") {
withTable("iceberg_mor_tb") {
withSQLConf(GlutenConfig.GLUTEN_ENABLED.key -> "false") {
spark.sql(
@@ -456,12 +615,12 @@ class ClickHouseIcebergSuite extends
GlutenClickHouseWholeStageTransformerSuite
}
}
- test("iceberg read mor table - merge into") {
- withTable("iceberg_mor_tb", "merge_into_source_tb") {
+ test("iceberg read cow table - merge into") {
+ withTable("iceberg_cow_tb", "merge_into_source_tb") {
withSQLConf(GlutenConfig.GLUTEN_ENABLED.key -> "false") {
spark.sql(
"""
- |create table iceberg_mor_tb (
+ |create table iceberg_cow_tb (
| id int,
| name string,
| p string
@@ -483,7 +642,7 @@ class ClickHouseIcebergSuite extends
GlutenClickHouseWholeStageTransformerSuite
// Insert some test rows.
spark.sql(
"""
- |insert into table iceberg_mor_tb
+ |insert into table iceberg_cow_tb
|values (1, 'a1', 'p1'), (2, 'a2', 'p1'), (3, 'a3', 'p2');
|""".stripMargin)
spark.sql(
@@ -496,20 +655,20 @@ class ClickHouseIcebergSuite extends
GlutenClickHouseWholeStageTransformerSuite
// Delete row.
spark.sql(
"""
- |delete from iceberg_mor_tb where name = 'a1';
+ |delete from iceberg_cow_tb where name = 'a1';
|""".stripMargin
)
// Update row.
spark.sql(
"""
- |update iceberg_mor_tb set name = 'new_a2' where id = 'a2';
+ |update iceberg_cow_tb set name = 'new_a2' where id = 'a2';
|""".stripMargin
)
// Merge into.
spark.sql(
"""
- |merge into iceberg_mor_tb t
+ |merge into iceberg_cow_tb t
|using (select * from merge_into_source_tb) s
|on t.id = s.id
|when matched then
@@ -521,15 +680,14 @@ class ClickHouseIcebergSuite extends
GlutenClickHouseWholeStageTransformerSuite
}
runQueryAndCompare(
"""
- |select * from iceberg_mor_tb;
+ |select * from iceberg_cow_tb;
|""".stripMargin) {
checkGlutenOperatorMatch[IcebergScanTransformer]
}
}
}
- // TODO: support merge-on-read mode
- ignore("iceberg read mor table - merge into with merge-on-read mode") {
+ test("iceberg read mor table - merge into with merge-on-read mode") {
withTable("iceberg_mor_tb", "merge_into_source_tb") {
withSQLConf(GlutenConfig.GLUTEN_ENABLED.key -> "false") {
spark.sql(
@@ -637,4 +795,33 @@ class ClickHouseIcebergSuite extends
GlutenClickHouseWholeStageTransformerSuite
}
}
}
+
+ test("test read v1 iceberg with partition drop") {
+ val testTable = "test_table_with_partition"
+ withTable(testTable) {
+ spark.sql(
+ s"""
+ |CREATE TABLE $testTable (id INT, data STRING, p1 STRING, p2 STRING)
+ |USING iceberg
+ |tblproperties (
+ | 'format-version' = '1'
+ |)
+ |PARTITIONED BY (p1, p2);
+ |""".stripMargin)
+ spark.sql(
+ s"""
+ |INSERT INTO $testTable VALUES
+ |(1, 'test_data', 'test_p1', 'test_p2');
+ |""".stripMargin)
+ spark.sql(
+ s"""
+ |ALTER TABLE $testTable DROP PARTITION FIELD p2
+ |""".stripMargin)
+ val resultDf = spark.sql(s"SELECT id, data, p1, p2 FROM $testTable")
+ val result = resultDf.collect()
+
+ assert(result.length == 1)
+ assert(result.head.getString(3) == "test_p2")
+ }
+ }
}
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/.00000-0-5dbee376-db12-4e82-b7c7-ab4adfa40de9-00001.parquet.crc
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/.00000-0-5dbee376-db12-4e82-b7c7-ab4adfa40de9-00001.parquet.crc
new file mode 100644
index 0000000000..4d30e8c263
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/.00000-0-5dbee376-db12-4e82-b7c7-ab4adfa40de9-00001.parquet.crc
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/.00000-0-5dbee376-db12-4e82-b7c7-ab4adfa40de9-00002.parquet.crc
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/.00000-0-5dbee376-db12-4e82-b7c7-ab4adfa40de9-00002.parquet.crc
new file mode 100644
index 0000000000..e53b37a216
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/.00000-0-5dbee376-db12-4e82-b7c7-ab4adfa40de9-00002.parquet.crc
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/.00000-0-6bd9cf6c-e03e-4709-b9fc-f7ef771a7c19-00001.parquet.crc
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/.00000-0-6bd9cf6c-e03e-4709-b9fc-f7ef771a7c19-00001.parquet.crc
new file mode 100644
index 0000000000..10cf58cf07
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/.00000-0-6bd9cf6c-e03e-4709-b9fc-f7ef771a7c19-00001.parquet.crc
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/.00000-0-6bd9cf6c-e03e-4709-b9fc-f7ef771a7c19-00002.parquet.crc
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/.00000-0-6bd9cf6c-e03e-4709-b9fc-f7ef771a7c19-00002.parquet.crc
new file mode 100644
index 0000000000..dcbbbe566e
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/.00000-0-6bd9cf6c-e03e-4709-b9fc-f7ef771a7c19-00002.parquet.crc
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/00000-0-5dbee376-db12-4e82-b7c7-ab4adfa40de9-00001.parquet
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/00000-0-5dbee376-db12-4e82-b7c7-ab4adfa40de9-00001.parquet
new file mode 100644
index 0000000000..9374a747e0
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/00000-0-5dbee376-db12-4e82-b7c7-ab4adfa40de9-00001.parquet
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/00000-0-5dbee376-db12-4e82-b7c7-ab4adfa40de9-00002.parquet
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/00000-0-5dbee376-db12-4e82-b7c7-ab4adfa40de9-00002.parquet
new file mode 100644
index 0000000000..260c9eb19d
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/00000-0-5dbee376-db12-4e82-b7c7-ab4adfa40de9-00002.parquet
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/00000-0-6bd9cf6c-e03e-4709-b9fc-f7ef771a7c19-00001.parquet
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/00000-0-6bd9cf6c-e03e-4709-b9fc-f7ef771a7c19-00001.parquet
new file mode 100644
index 0000000000..a3ae6a6dfc
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/00000-0-6bd9cf6c-e03e-4709-b9fc-f7ef771a7c19-00001.parquet
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/00000-0-6bd9cf6c-e03e-4709-b9fc-f7ef771a7c19-00002.parquet
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/00000-0-6bd9cf6c-e03e-4709-b9fc-f7ef771a7c19-00002.parquet
new file mode 100644
index 0000000000..a653c4e61d
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/data/00000-0-6bd9cf6c-e03e-4709-b9fc-f7ef771a7c19-00002.parquet
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.55f5d7ba-1dad-42be-9a6a-fb30179fd803-m0.avro.crc
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.55f5d7ba-1dad-42be-9a6a-fb30179fd803-m0.avro.crc
new file mode 100644
index 0000000000..31e3440b7b
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.55f5d7ba-1dad-42be-9a6a-fb30179fd803-m0.avro.crc
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.55f5d7ba-1dad-42be-9a6a-fb30179fd803-m1.avro.crc
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.55f5d7ba-1dad-42be-9a6a-fb30179fd803-m1.avro.crc
new file mode 100644
index 0000000000..f44fdfd54c
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.55f5d7ba-1dad-42be-9a6a-fb30179fd803-m1.avro.crc
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.7667f02f-4d6c-4a67-bf20-4aec7179400a-m0.avro.crc
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.7667f02f-4d6c-4a67-bf20-4aec7179400a-m0.avro.crc
new file mode 100644
index 0000000000..b5248118f9
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.7667f02f-4d6c-4a67-bf20-4aec7179400a-m0.avro.crc
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.7667f02f-4d6c-4a67-bf20-4aec7179400a-m1.avro.crc
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.7667f02f-4d6c-4a67-bf20-4aec7179400a-m1.avro.crc
new file mode 100644
index 0000000000..591b07dbee
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.7667f02f-4d6c-4a67-bf20-4aec7179400a-m1.avro.crc
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.snap-6031039455377193257-1-7667f02f-4d6c-4a67-bf20-4aec7179400a.avro.crc
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.snap-6031039455377193257-1-7667f02f-4d6c-4a67-bf20-4aec7179400a.avro.crc
new file mode 100644
index 0000000000..f3a0cfed2d
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.snap-6031039455377193257-1-7667f02f-4d6c-4a67-bf20-4aec7179400a.avro.crc
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.snap-8248577847462459384-1-55f5d7ba-1dad-42be-9a6a-fb30179fd803.avro.crc
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.snap-8248577847462459384-1-55f5d7ba-1dad-42be-9a6a-fb30179fd803.avro.crc
new file mode 100644
index 0000000000..55b24b4db4
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.snap-8248577847462459384-1-55f5d7ba-1dad-42be-9a6a-fb30179fd803.avro.crc
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.v1.metadata.json.crc
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.v1.metadata.json.crc
new file mode 100644
index 0000000000..1506df72b9
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.v1.metadata.json.crc
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.v2.metadata.json.crc
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.v2.metadata.json.crc
new file mode 100644
index 0000000000..d4d5366c10
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.v2.metadata.json.crc
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.v3.metadata.json.crc
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.v3.metadata.json.crc
new file mode 100644
index 0000000000..b4a057d627
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.v3.metadata.json.crc
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.version-hint.text.crc
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.version-hint.text.crc
new file mode 100644
index 0000000000..65f9819238
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/.version-hint.text.crc
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/55f5d7ba-1dad-42be-9a6a-fb30179fd803-m0.avro
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/55f5d7ba-1dad-42be-9a6a-fb30179fd803-m0.avro
new file mode 100644
index 0000000000..d99fcbcce9
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/55f5d7ba-1dad-42be-9a6a-fb30179fd803-m0.avro
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/55f5d7ba-1dad-42be-9a6a-fb30179fd803-m1.avro
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/55f5d7ba-1dad-42be-9a6a-fb30179fd803-m1.avro
new file mode 100644
index 0000000000..815a883f8f
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/55f5d7ba-1dad-42be-9a6a-fb30179fd803-m1.avro
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/7667f02f-4d6c-4a67-bf20-4aec7179400a-m0.avro
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/7667f02f-4d6c-4a67-bf20-4aec7179400a-m0.avro
new file mode 100644
index 0000000000..2ce63d969b
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/7667f02f-4d6c-4a67-bf20-4aec7179400a-m0.avro
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/7667f02f-4d6c-4a67-bf20-4aec7179400a-m1.avro
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/7667f02f-4d6c-4a67-bf20-4aec7179400a-m1.avro
new file mode 100644
index 0000000000..e6191207c3
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/7667f02f-4d6c-4a67-bf20-4aec7179400a-m1.avro
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/snap-6031039455377193257-1-7667f02f-4d6c-4a67-bf20-4aec7179400a.avro
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/snap-6031039455377193257-1-7667f02f-4d6c-4a67-bf20-4aec7179400a.avro
new file mode 100644
index 0000000000..4817c65be9
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/snap-6031039455377193257-1-7667f02f-4d6c-4a67-bf20-4aec7179400a.avro
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/snap-8248577847462459384-1-55f5d7ba-1dad-42be-9a6a-fb30179fd803.avro
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/snap-8248577847462459384-1-55f5d7ba-1dad-42be-9a6a-fb30179fd803.avro
new file mode 100644
index 0000000000..b9fd0ece61
Binary files /dev/null and
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/snap-8248577847462459384-1-55f5d7ba-1dad-42be-9a6a-fb30179fd803.avro
differ
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/v1.metadata.json
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/v1.metadata.json
new file mode 100644
index 0000000000..680712659e
--- /dev/null
+++
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/v1.metadata.json
@@ -0,0 +1,53 @@
+{
+ "format-version" : 2,
+ "table-uuid" : "5b15ea92-d590-427a-8b55-11e3c13d79a7",
+ "location" :
"file:///tmp/junit6640909127060857423/default/db/test_upsert_query",
+ "last-sequence-number" : 0,
+ "last-updated-ms" : 1736318557891,
+ "last-column-id" : 3,
+ "current-schema-id" : 0,
+ "schemas" : [ {
+ "type" : "struct",
+ "schema-id" : 0,
+ "identifier-field-ids" : [ 1 ],
+ "fields" : [ {
+ "id" : 1,
+ "name" : "id",
+ "required" : true,
+ "type" : "int"
+ }, {
+ "id" : 2,
+ "name" : "name",
+ "required" : true,
+ "type" : "string"
+ }, {
+ "id" : 3,
+ "name" : "dt",
+ "required" : false,
+ "type" : "date"
+ } ]
+ } ],
+ "default-spec-id" : 0,
+ "partition-specs" : [ {
+ "spec-id" : 0,
+ "fields" : [ ]
+ } ],
+ "last-partition-id" : 999,
+ "default-sort-order-id" : 0,
+ "sort-orders" : [ {
+ "order-id" : 0,
+ "fields" : [ ]
+ } ],
+ "properties" : {
+ "write.format.default" : "PARQUET",
+ "write.parquet.compression-codec" : "zstd",
+ "write.upsert.enabled" : "true"
+ },
+ "current-snapshot-id" : -1,
+ "refs" : { },
+ "snapshots" : [ ],
+ "statistics" : [ ],
+ "partition-statistics" : [ ],
+ "snapshot-log" : [ ],
+ "metadata-log" : [ ]
+}
\ No newline at end of file
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/v2.metadata.json
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/v2.metadata.json
new file mode 100644
index 0000000000..52ff0e8257
--- /dev/null
+++
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/v2.metadata.json
@@ -0,0 +1,89 @@
+{
+ "format-version" : 2,
+ "table-uuid" : "5b15ea92-d590-427a-8b55-11e3c13d79a7",
+ "location" :
"file:///tmp/junit6640909127060857423/default/db/test_upsert_query",
+ "last-sequence-number" : 1,
+ "last-updated-ms" : 1736318559827,
+ "last-column-id" : 3,
+ "current-schema-id" : 0,
+ "schemas" : [ {
+ "type" : "struct",
+ "schema-id" : 0,
+ "identifier-field-ids" : [ 1 ],
+ "fields" : [ {
+ "id" : 1,
+ "name" : "id",
+ "required" : true,
+ "type" : "int"
+ }, {
+ "id" : 2,
+ "name" : "name",
+ "required" : true,
+ "type" : "string"
+ }, {
+ "id" : 3,
+ "name" : "dt",
+ "required" : false,
+ "type" : "date"
+ } ]
+ } ],
+ "default-spec-id" : 0,
+ "partition-specs" : [ {
+ "spec-id" : 0,
+ "fields" : [ ]
+ } ],
+ "last-partition-id" : 999,
+ "default-sort-order-id" : 0,
+ "sort-orders" : [ {
+ "order-id" : 0,
+ "fields" : [ ]
+ } ],
+ "properties" : {
+ "write.format.default" : "PARQUET",
+ "write.parquet.compression-codec" : "zstd",
+ "write.upsert.enabled" : "true"
+ },
+ "current-snapshot-id" : 8248577847462459384,
+ "refs" : {
+ "main" : {
+ "snapshot-id" : 8248577847462459384,
+ "type" : "branch"
+ }
+ },
+ "snapshots" : [ {
+ "sequence-number" : 1,
+ "snapshot-id" : 8248577847462459384,
+ "timestamp-ms" : 1736318559827,
+ "summary" : {
+ "operation" : "overwrite",
+ "flink.operator-id" : "e883208d19e3c34f8aaf2a3168a63337",
+ "flink.job-id" : "59611ef0235ae2abaa4fa46f390acc4a",
+ "flink.max-committed-checkpoint-id" : "9223372036854775807",
+ "added-data-files" : "1",
+ "added-equality-delete-files" : "1",
+ "added-delete-files" : "1",
+ "added-records" : "4",
+ "added-files-size" : "1352",
+ "added-equality-deletes" : "4",
+ "changed-partition-count" : "1",
+ "total-records" : "4",
+ "total-files-size" : "1352",
+ "total-data-files" : "1",
+ "total-delete-files" : "1",
+ "total-position-deletes" : "0",
+ "total-equality-deletes" : "4"
+ },
+ "manifest-list" :
"file:/tmp/junit6640909127060857423/default/db/test_upsert_query/metadata/snap-8248577847462459384-1-55f5d7ba-1dad-42be-9a6a-fb30179fd803.avro",
+ "schema-id" : 0
+ } ],
+ "statistics" : [ ],
+ "partition-statistics" : [ ],
+ "snapshot-log" : [ {
+ "timestamp-ms" : 1736318559827,
+ "snapshot-id" : 8248577847462459384
+ } ],
+ "metadata-log" : [ {
+ "timestamp-ms" : 1736318557891,
+ "metadata-file" :
"file:/tmp/junit6640909127060857423/default/db/test_upsert_query/metadata/v1.metadata.json"
+ } ]
+}
\ No newline at end of file
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/v3.metadata.json
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/v3.metadata.json
new file mode 100644
index 0000000000..747864c43e
--- /dev/null
+++
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/v3.metadata.json
@@ -0,0 +1,121 @@
+{
+ "format-version" : 2,
+ "table-uuid" : "5b15ea92-d590-427a-8b55-11e3c13d79a7",
+ "location" :
"file:///tmp/junit6640909127060857423/default/db/test_upsert_query",
+ "last-sequence-number" : 2,
+ "last-updated-ms" : 1736318560089,
+ "last-column-id" : 3,
+ "current-schema-id" : 0,
+ "schemas" : [ {
+ "type" : "struct",
+ "schema-id" : 0,
+ "identifier-field-ids" : [ 1 ],
+ "fields" : [ {
+ "id" : 1,
+ "name" : "id",
+ "required" : true,
+ "type" : "int"
+ }, {
+ "id" : 2,
+ "name" : "name",
+ "required" : true,
+ "type" : "string"
+ }, {
+ "id" : 3,
+ "name" : "dt",
+ "required" : false,
+ "type" : "date"
+ } ]
+ } ],
+ "default-spec-id" : 0,
+ "partition-specs" : [ {
+ "spec-id" : 0,
+ "fields" : [ ]
+ } ],
+ "last-partition-id" : 999,
+ "default-sort-order-id" : 0,
+ "sort-orders" : [ {
+ "order-id" : 0,
+ "fields" : [ ]
+ } ],
+ "properties" : {
+ "write.format.default" : "PARQUET",
+ "write.parquet.compression-codec" : "zstd",
+ "write.upsert.enabled" : "true"
+ },
+ "current-snapshot-id" : 6031039455377193257,
+ "refs" : {
+ "main" : {
+ "snapshot-id" : 6031039455377193257,
+ "type" : "branch"
+ }
+ },
+ "snapshots" : [ {
+ "sequence-number" : 1,
+ "snapshot-id" : 8248577847462459384,
+ "timestamp-ms" : 1736318559827,
+ "summary" : {
+ "operation" : "overwrite",
+ "flink.operator-id" : "e883208d19e3c34f8aaf2a3168a63337",
+ "flink.job-id" : "59611ef0235ae2abaa4fa46f390acc4a",
+ "flink.max-committed-checkpoint-id" : "9223372036854775807",
+ "added-data-files" : "1",
+ "added-equality-delete-files" : "1",
+ "added-delete-files" : "1",
+ "added-records" : "4",
+ "added-files-size" : "1352",
+ "added-equality-deletes" : "4",
+ "changed-partition-count" : "1",
+ "total-records" : "4",
+ "total-files-size" : "1352",
+ "total-data-files" : "1",
+ "total-delete-files" : "1",
+ "total-position-deletes" : "0",
+ "total-equality-deletes" : "4"
+ },
+ "manifest-list" :
"file:/tmp/junit6640909127060857423/default/db/test_upsert_query/metadata/snap-8248577847462459384-1-55f5d7ba-1dad-42be-9a6a-fb30179fd803.avro",
+ "schema-id" : 0
+ }, {
+ "sequence-number" : 2,
+ "snapshot-id" : 6031039455377193257,
+ "parent-snapshot-id" : 8248577847462459384,
+ "timestamp-ms" : 1736318560089,
+ "summary" : {
+ "operation" : "overwrite",
+ "flink.operator-id" : "e883208d19e3c34f8aaf2a3168a63337",
+ "flink.job-id" : "74b0ee1b89537031ad64ceb5bb73fa11",
+ "flink.max-committed-checkpoint-id" : "9223372036854775807",
+ "added-data-files" : "1",
+ "added-equality-delete-files" : "1",
+ "added-delete-files" : "1",
+ "added-records" : "2",
+ "added-files-size" : "1357",
+ "added-equality-deletes" : "2",
+ "changed-partition-count" : "1",
+ "total-records" : "6",
+ "total-files-size" : "2709",
+ "total-data-files" : "2",
+ "total-delete-files" : "2",
+ "total-position-deletes" : "0",
+ "total-equality-deletes" : "6"
+ },
+ "manifest-list" :
"file:/tmp/junit6640909127060857423/default/db/test_upsert_query/metadata/snap-6031039455377193257-1-7667f02f-4d6c-4a67-bf20-4aec7179400a.avro",
+ "schema-id" : 0
+ } ],
+ "statistics" : [ ],
+ "partition-statistics" : [ ],
+ "snapshot-log" : [ {
+ "timestamp-ms" : 1736318559827,
+ "snapshot-id" : 8248577847462459384
+ }, {
+ "timestamp-ms" : 1736318560089,
+ "snapshot-id" : 6031039455377193257
+ } ],
+ "metadata-log" : [ {
+ "timestamp-ms" : 1736318557891,
+ "metadata-file" :
"file:/tmp/junit6640909127060857423/default/db/test_upsert_query/metadata/v1.metadata.json"
+ }, {
+ "timestamp-ms" : 1736318559827,
+ "metadata-file" :
"file:/tmp/junit6640909127060857423/default/db/test_upsert_query/metadata/v2.metadata.json"
+ } ]
+}
\ No newline at end of file
diff --git
a/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/version-hint.text
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/version-hint.text
new file mode 100644
index 0000000000..e440e5c842
--- /dev/null
+++
b/gluten-iceberg/src-iceberg/test/resources/junit6640909127060857423/default/db/test_upsert_query/metadata/version-hint.text
@@ -0,0 +1 @@
+3
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]