Skip to content

Antalya 26.8: Iceberg: support external paths in tables - #2381

Open
zvonand wants to merge 4 commits into
antalya-26.8from
feature/antalya-26.8/pr-2268
Open

zvonand wants to merge 4 commits into
antalya-26.8from
feature/antalya-26.8/pr-2268

Conversation

@zvonand

@zvonand zvonand commented Sep 15, 2026

Copy link
Copy Markdown
Member

Auto-ported prerequisites: RelEasy detected that the requested port depended on PR(s) not yet on the target branch and auto-ported them first (1 PR(s) added). Reviewers: please confirm the prereq scope is appropriate.

Changelog category (leave one):

  • Improvement

Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md):

Support Iceberg tables that have files outside table location or on different storage (ClickHouse#90740 by @zvonand).

Cherry-picked from ClickHouse#90740.


Closes ClickHouse#84609

Current logic is that all table files (data files, manifests, manifest lists) shall be "inside" the table location, in the same storage. This PR abandons that logic: now files can be located anywhere, even on a different storage type (e.g. all metadata is on s3, data file in in local storage).

In some cases, that old logic shoots back: even incorrect (non-existing) paths, i.e. with redundant items in a prefix were parsed in such a way that files from another locations were read (/path/to/item was read when the specified location was /path/to/to/item or vice versa) (#2154 by @zvonand, #2268 by @ianton-ru).

CI/CD Options

Exclude tests:

  • Fast test
  • Integration Tests
  • Stateless tests
  • Stateful tests
  • Performance tests
  • All with ASAN
  • All with TSAN
  • All with MSAN
  • All with UBSAN
  • All with Coverage
  • All with Aarch64
  • All Regression
  • Disable CI Cache

Regression jobs to run:

  • Fast suites (mostly <1h)
  • Aggregate Functions (2h)
  • Alter (1.5h)
  • Benchmark (30m)
  • ClickHouse Keeper (1h)
  • Iceberg (2h)
  • LDAP (1h)
  • Parquet (1.5h)
  • RBAC (1.5h)
  • SSL Server (1h)
  • S3 (2h)
  • S3 Export (2h)
  • Swarms (30m)
  • Tiered Storage (2h)

Combined port of 2 PR(s) (group pr-2268). Cherry-picked from #2154, #2268.

zvonand and others added 3 commits September 15, 2026 22:54
…next commit)

---
Original cherry-pick message follows:

Merge pull request #2154 from Altinity/feature/antalya-26.6/ClickHouse-ClickHouse-pr-90740

Antalya 26.6: Iceberg: support external paths in tables
# Conflicts:
#	src/Core/ProtocolDefines.h
#	src/Databases/DataLake/DatabaseDataLake.cpp
#	src/Interpreters/IcebergMetadataLog.cpp
#	src/Storages/ObjectStorage/DataLakes/Iceberg/Compaction.cpp
#	src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergDataObjectInfo.cpp
#	src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergDataObjectInfo.h
#	src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergIterator.cpp
#	src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergIterator.h
#	src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergMetadata.cpp
#	src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergPath.cpp
#	src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergWrites.cpp
#	src/Storages/ObjectStorage/DataLakes/Iceberg/Mutations.cpp
#	src/Storages/ObjectStorage/DataLakes/Iceberg/SnapshotFilesTraversal.cpp
#	src/Storages/ObjectStorage/DataLakes/Iceberg/StatelessMetadataFileGetter.cpp
#	src/Storages/ObjectStorage/DataLakes/Iceberg/Utils.cpp
#	src/Storages/ObjectStorage/IObjectIterator.cpp
#	src/Storages/ObjectStorage/IObjectIterator.h
#	src/Storages/ObjectStorage/ReadBufferIterator.cpp
#	src/Storages/ObjectStorage/StorageObjectStorageSource.cpp
#	src/Storages/ObjectStorage/StorageObjectStorageStableTaskDistributor.cpp
Kept antalya-26.8's structure everywhere it diverged from antalya-26.6 and
re-applied the source PR's changes on top:

* ProtocolDefines: 9 is already taken by ICEBERG_IDENTITY_PARTITION_COLUMNS on
  26.8, so ICEBERG_ABSOLUTE_PATH becomes 10 and the current version points at it.
* IcebergDataObjectInfo: merged the PR's (metadata_path, resolved_storage,
  resolved_key) constructor with 26.8's identity_partition_columns parameter.
* IcebergIterator: 26.8 prefetches manifests and decodes delete manifests
  separately, so the new `secondary_storages` argument was threaded into those
  call sites instead of the 26.6 inline loop / deletes_iterator.
* StableTaskDistributor: 26.8 has the free function `getSchedulingIdentifier`
  instead of `getFileIdentifier`, so the metadata-path branch was applied there.
* ReadBufferIterator / StorageObjectStorageSource: kept 26.8's
  RelativePathWithMetadata probing and lazy-materialization guards, only
  switching the storage to the resolved one.
* IcebergMetadata: 26.8 has no truncate / import-sink / commitImportPartition
  code, so those "theirs" hunks were dropped; drop() keeps 26.8's
  table_root_was_derived guard before the new external-file enumeration.
* SnapshotFilesTraversal: kept 26.8's storage-side version-hint entry
  (fix 1a5e421) instead of re-routing it through the resolver.
* SettingsChangesHistory: uncommented only the row this PR adds
  (object_storage_propagate_credentials_to_other_storages), leaving the
  unrelated commented rows untouched.

Adapted: compactIcebergManifests/writeConsolidatedManifestFile take SecondaryStorages — manifest-only compaction exists on antalya-26.8 and calls the re-signatured getManifestList/getManifestFileEntriesHandle/generateManifestList
Adapted: gtest_storage_object_storage_archive.cpp passes the new ReadTaskIterator table_location argument — that test exists on antalya-26.8
…lision_across_buckets

Fix test_num_rows_cache_no_collision_across_buckets
@zvonand zvonand added releasy Created/managed by RelEasy antalya-26.8 Session label (releasy session config) forwardport This is a frontport of code that existed in previous Antalya versions ai-resolved Port conflict auto-resolved by Claude auto-prereq-added Combined PR includes auto-added prerequisite PR(s) labels Sep 15, 2026
@github-actions

github-actions Bot commented Sep 15, 2026

Copy link
Copy Markdown

Workflow [PR], commit [53fc7e1]

@zvonand zvonand mentioned this pull request Sep 15, 2026
27 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai-resolved Port conflict auto-resolved by Claude antalya-26.8 Session label (releasy session config) auto-prereq-added Combined PR includes auto-added prerequisite PR(s) forwardport This is a frontport of code that existed in previous Antalya versions releasy Created/managed by RelEasy

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants