This is an automated email from the ASF dual-hosted git repository.
fokko pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg.git
The following commit(s) were added to refs/heads/main by this push:
new b7de28e72e OpenAPI: Deprecate `snapshot-id` of `SetStatisticsUpdate`
(#12010)
b7de28e72e is described below
commit b7de28e72ef8134f90105b869acb5f89b16803f0
Author: Christian <[email protected]>
AuthorDate: Mon Jan 27 13:03:30 2025 +0100
OpenAPI: Deprecate `snapshot-id` of `SetStatisticsUpdate` (#12010)
* Deprecate snapshot-id of SetStatisticsUpdate
* update rest spec py
* Update api/src/main/java/org/apache/iceberg/UpdateStatistics.java
Co-authored-by: Eduard Tudenhoefner <[email protected]>
* Fix typo, remove revapi change
* Address comments
* spotless
* extend docstring
---------
Co-authored-by: Eduard Tudenhoefner <[email protected]>
---
.../main/java/org/apache/iceberg/UpdateStatistics.java | 13 +++++++++++++
.../main/java/org/apache/iceberg/MetadataUpdate.java | 17 +++++++++++++----
.../java/org/apache/iceberg/MetadataUpdateParser.java | 3 +--
.../src/main/java/org/apache/iceberg/SetStatistics.java | 15 ++++++++++++++-
.../src/main/java/org/apache/iceberg/TableMetadata.java | 15 ++++++++++++++-
.../org/apache/iceberg/TestMetadataUpdateParser.java | 1 -
open-api/rest-catalog-open-api.py | 6 +++++-
open-api/rest-catalog-open-api.yaml | 5 ++++-
8 files changed, 64 insertions(+), 11 deletions(-)
diff --git a/api/src/main/java/org/apache/iceberg/UpdateStatistics.java
b/api/src/main/java/org/apache/iceberg/UpdateStatistics.java
index 6e367122dc..c595b16708 100644
--- a/api/src/main/java/org/apache/iceberg/UpdateStatistics.java
+++ b/api/src/main/java/org/apache/iceberg/UpdateStatistics.java
@@ -27,9 +27,22 @@ public interface UpdateStatistics extends
PendingUpdate<List<StatisticsFile>> {
* the snapshot if any exists.
*
* @return this for method chaining
+ * @deprecated since 1.8.0, will be removed 1.9.0 or 2.0.0, use {@link
+ * #setStatistics(StatisticsFile)}.
*/
+ @Deprecated
UpdateStatistics setStatistics(long snapshotId, StatisticsFile
statisticsFile);
+ /**
+ * Set the table's statistics file for given snapshot, replacing the
previous statistics file for
+ * the snapshot if any exists. The snapshot id of the statistics file will
be used.
+ *
+ * @return this for method chaining
+ */
+ default UpdateStatistics setStatistics(StatisticsFile statisticsFile) {
+ throw new UnsupportedOperationException("Setting statistics is not
supported");
+ }
+
/**
* Remove the table's statistics file for given snapshot.
*
diff --git a/core/src/main/java/org/apache/iceberg/MetadataUpdate.java
b/core/src/main/java/org/apache/iceberg/MetadataUpdate.java
index ff008c9d43..b76fcf9f01 100644
--- a/core/src/main/java/org/apache/iceberg/MetadataUpdate.java
+++ b/core/src/main/java/org/apache/iceberg/MetadataUpdate.java
@@ -231,16 +231,25 @@ public interface MetadataUpdate extends Serializable {
}
class SetStatistics implements MetadataUpdate {
- private final long snapshotId;
private final StatisticsFile statisticsFile;
+ /**
+ * Set statistics for a snapshot.
+ *
+ * @deprecated since 1.8.0, will be removed in 1.9.0 or 2.0.0, use
+ * SetStatistics(statisticsFile).
+ */
+ @Deprecated
public SetStatistics(long snapshotId, StatisticsFile statisticsFile) {
- this.snapshotId = snapshotId;
+ this.statisticsFile = statisticsFile;
+ }
+
+ public SetStatistics(StatisticsFile statisticsFile) {
this.statisticsFile = statisticsFile;
}
public long snapshotId() {
- return snapshotId;
+ return statisticsFile.snapshotId();
}
public StatisticsFile statisticsFile() {
@@ -249,7 +258,7 @@ public interface MetadataUpdate extends Serializable {
@Override
public void applyTo(TableMetadata.Builder metadataBuilder) {
- metadataBuilder.setStatistics(snapshotId, statisticsFile);
+ metadataBuilder.setStatistics(statisticsFile);
}
}
diff --git a/core/src/main/java/org/apache/iceberg/MetadataUpdateParser.java
b/core/src/main/java/org/apache/iceberg/MetadataUpdateParser.java
index 08d4b3398f..6a6a34c92d 100644
--- a/core/src/main/java/org/apache/iceberg/MetadataUpdateParser.java
+++ b/core/src/main/java/org/apache/iceberg/MetadataUpdateParser.java
@@ -512,10 +512,9 @@ public class MetadataUpdateParser {
}
private static MetadataUpdate readSetStatistics(JsonNode node) {
- long snapshotId = JsonUtil.getLong(SNAPSHOT_ID, node);
JsonNode statisticsFileNode = JsonUtil.get(STATISTICS, node);
StatisticsFile statisticsFile =
StatisticsFileParser.fromJson(statisticsFileNode);
- return new MetadataUpdate.SetStatistics(snapshotId, statisticsFile);
+ return new MetadataUpdate.SetStatistics(statisticsFile);
}
private static MetadataUpdate readRemoveStatistics(JsonNode node) {
diff --git a/core/src/main/java/org/apache/iceberg/SetStatistics.java
b/core/src/main/java/org/apache/iceberg/SetStatistics.java
index 41c7254d6c..b5ec801e0a 100644
--- a/core/src/main/java/org/apache/iceberg/SetStatistics.java
+++ b/core/src/main/java/org/apache/iceberg/SetStatistics.java
@@ -32,10 +32,23 @@ public class SetStatistics implements UpdateStatistics {
this.ops = ops;
}
+ /**
+ * Set the statistics file for a snapshot.
+ *
+ * @deprecated since 1.8.0, will be removed in 1.9.0 or 2.0.0, use {@link
+ * #setStatistics(StatisticsFile)}.
+ */
+ @Deprecated
@Override
public UpdateStatistics setStatistics(long snapshotId, StatisticsFile
statisticsFile) {
Preconditions.checkArgument(snapshotId == statisticsFile.snapshotId());
- statisticsToSet.put(snapshotId, Optional.of(statisticsFile));
+ statisticsToSet.put(statisticsFile.snapshotId(),
Optional.of(statisticsFile));
+ return this;
+ }
+
+ @Override
+ public UpdateStatistics setStatistics(StatisticsFile statisticsFile) {
+ statisticsToSet.put(statisticsFile.snapshotId(),
Optional.of(statisticsFile));
return this;
}
diff --git a/core/src/main/java/org/apache/iceberg/TableMetadata.java
b/core/src/main/java/org/apache/iceberg/TableMetadata.java
index 4ba3bdf8d7..a532ff00ee 100644
--- a/core/src/main/java/org/apache/iceberg/TableMetadata.java
+++ b/core/src/main/java/org/apache/iceberg/TableMetadata.java
@@ -1319,6 +1319,12 @@ public class TableMetadata implements Serializable {
return this;
}
+ /**
+ * Set a statistics file for a snapshot.
+ *
+ * @deprecated since 1.8.0, will be removed 1.9.0 or 2.0.0, use
setStatistics(statisticsFile).
+ */
+ @Deprecated
public Builder setStatistics(long snapshotId, StatisticsFile
statisticsFile) {
Preconditions.checkNotNull(statisticsFile, "statisticsFile is null");
Preconditions.checkArgument(
@@ -1327,7 +1333,14 @@ public class TableMetadata implements Serializable {
snapshotId,
statisticsFile.snapshotId());
statisticsFiles.put(statisticsFile.snapshotId(),
ImmutableList.of(statisticsFile));
- changes.add(new MetadataUpdate.SetStatistics(snapshotId,
statisticsFile));
+ changes.add(new MetadataUpdate.SetStatistics(statisticsFile));
+ return this;
+ }
+
+ public Builder setStatistics(StatisticsFile statisticsFile) {
+ Preconditions.checkNotNull(statisticsFile, "statisticsFile is null");
+ statisticsFiles.put(statisticsFile.snapshotId(),
ImmutableList.of(statisticsFile));
+ changes.add(new MetadataUpdate.SetStatistics(statisticsFile));
return this;
}
diff --git
a/core/src/test/java/org/apache/iceberg/TestMetadataUpdateParser.java
b/core/src/test/java/org/apache/iceberg/TestMetadataUpdateParser.java
index 6a65bf7628..1ce319a34e 100644
--- a/core/src/test/java/org/apache/iceberg/TestMetadataUpdateParser.java
+++ b/core/src/test/java/org/apache/iceberg/TestMetadataUpdateParser.java
@@ -783,7 +783,6 @@ public class TestMetadataUpdateParser {
long snapshotId = 1940541653261589030L;
MetadataUpdate expected =
new MetadataUpdate.SetStatistics(
- snapshotId,
new GenericStatisticsFile(
snapshotId,
"s3://bucket/warehouse/stats.puffin",
diff --git a/open-api/rest-catalog-open-api.py
b/open-api/rest-catalog-open-api.py
index f5632ad3ff..bd82d9be09 100644
--- a/open-api/rest-catalog-open-api.py
+++ b/open-api/rest-catalog-open-api.py
@@ -1028,7 +1028,11 @@ class Term(BaseModel):
class SetStatisticsUpdate(BaseUpdate):
action: str = Field('set-statistics', const=True)
- snapshot_id: int = Field(..., alias='snapshot-id')
+ snapshot_id: Optional[int] = Field(
+ None,
+ alias='snapshot-id',
+ description='This optional field is **DEPRECATED for REMOVAL** since
it contains redundant information. Clients should use the
`statistics.snapshot-id` field instead.',
+ )
statistics: StatisticsFile
diff --git a/open-api/rest-catalog-open-api.yaml
b/open-api/rest-catalog-open-api.yaml
index 6a651d2b06..5994961adb 100644
--- a/open-api/rest-catalog-open-api.yaml
+++ b/open-api/rest-catalog-open-api.yaml
@@ -2886,7 +2886,6 @@ components:
allOf:
- $ref: '#/components/schemas/BaseUpdate'
required:
- - snapshot-id
- statistics
properties:
action:
@@ -2895,6 +2894,10 @@ components:
snapshot-id:
type: integer
format: int64
+ deprecated: true
+ description:
+ This optional field is **DEPRECATED for REMOVAL** since it
contains redundant information.
+ Clients should use the `statistics.snapshot-id` field instead.
statistics:
$ref: '#/components/schemas/StatisticsFile'