Skip to content

Antalya 26.6: support external paths in Iceberg tables - #2151

Open
zvonand wants to merge 3 commits into
antalya-26.6from
feature/antalya-26.6/pr-1859
Open

Antalya 26.6: support external paths in Iceberg tables#2151
zvonand wants to merge 3 commits into
antalya-26.6from
feature/antalya-26.6/pr-1859

Conversation

@zvonand

@zvonand zvonand commented Aug 3, 2026

Copy link
Copy Markdown
Member

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 data files outside the table location or on a different object storage. Cherry-picked from ClickHouse#90740 (by @zvonand) (#1859 by @zvonand).

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)

Cherry-picked from #1859.

zvonand added 2 commits August 3, 2026 16:10
…next commit)

---
Original cherry-pick message follows:

Merge pull request #1859 from Altinity/feat/antalya-26.3/90740

Antalya 26.3: support external paths in Iceberg tables
# Conflicts:
#	src/IO/S3/URI.cpp
#	src/IO/S3/URI.h
#	src/Storages/ObjectStorage/DataLakes/Iceberg/Compaction.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/IcebergMetadata.h
#	src/Storages/ObjectStorage/DataLakes/Iceberg/ManifestFileIterator.cpp
#	src/Storages/ObjectStorage/DataLakes/Iceberg/Mutations.cpp
#	src/Storages/ObjectStorage/DataLakes/Iceberg/PositionDeleteTransform.cpp
#	src/Storages/ObjectStorage/DataLakes/Iceberg/Utils.h
#	src/Storages/ObjectStorage/StorageObjectStorageSource.cpp
#	src/Storages/ObjectStorage/StorageObjectStorageSource.h
#	src/Storages/ObjectStorage/StorageObjectStorageStableTaskDistributor.cpp
#	src/Storages/ObjectStorage/Utils.h
Kept antalya-26.6 shapes and re-applied the PR's changes on top:

- S3::URI: appended `enable_url_encoding` after the base-branch
  `S3UriStyle uri_style` parameter and updated the two new call sites in
  Storages/ObjectStorage/Utils.cpp accordingly.
- Iceberg/Compaction.cpp: kept `static` linkage that antalya-26.6 gives
  getOldFiles()/clearOldFiles() while taking the PR's new signatures.
- IcebergIterator: dropped the PR's context-only `table_schema_id` /
  `setFileMetaInfo(DataFileMetaInfo...)` lines which do not exist on
  antalya-26.6; kept only `secondary_storages` and the
  requires_external_storage computation.
- IcebergMetadata: kept `std::move(persistent_components_)` ctor and the
  `getManifestFileEntriesHandle` prefetch call of antalya-26.6, adding
  `*secondary_storages`; kept `const persistent_components`.
- collectRetainedFiles()/collectExpiredFiles() moved out of
  Iceberg/Mutations.cpp into Iceberg/ExpireSnapshotsExecute.cpp on
  antalya-26.6: applied the PR's SecondaryStorages plumbing there, and
  likewise for the parallel helper in Iceberg/SnapshotFilesTraversal.cpp
  and for IcebergMetadata::getFilesForManifest, since
  getManifestList()/getManifestFileEntriesHandle() now require the
  parameter.
- StorageObjectStorageStableTaskDistributor: getFileIdentifier() does not
  exist on antalya-26.6 (the identifier is computed inline), so the PR's
  "prefer the Iceberg metadata path" change was applied at the two inline
  sites.
- StorageObjectStorageSource: kept base-branch `.storage_id` virtual
  column field, ProfileEvents counter, `configuration->compression_method`
  spelling and the process-list time-limit check; took the PR's
  `path_for_virtual_column`, resolved-storage read buffer and
  `resolveIcebergObjectStorageIfNeeded()`.
- SettingsChangesHistory: uncommented the existing
  `s3_propagate_credentials_to_other_storages` row in place and dropped
  the cherry-pick's duplicate row.
@zvonand zvonand added releasy Created/managed by RelEasy antalya-26.6 ai-resolved Port conflict auto-resolved by Claude labels Aug 3, 2026
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

Workflow [PR], commit [05e88b2]

@zvonand zvonand added the forwardport This is a frontport of code that existed in previous Antalya versions label Aug 4, 2026
# Conflicts:
#	src/Storages/ObjectStorage/DataLakes/Iceberg/Utils.h
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.6 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