Hacktoberfest 2026:維護者為十月標記出來的 issue,仍然開放、適合新手。 瀏覽 Hacktoberfest issue

feat: implement ReplacePartitions (two-PR plan)

未關閉
#775 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

維護者通常 2 天內回覆

還沒有人認領這個 Issue。

評估

難度
4/5
預估耗時
3-5 天
新手友好度
58/100
Issue 類型
功能
描述清晰度
描述清楚
活躍度
冷清
技術堆疊
cpp

研究方向

先閱讀現有的 FastAppend 和 SnapshotUpdate 實作,然後檢查列出的 snapshot、manifest、table 和 transaction 檔案。使用規劃中的 replace_partitions_test.cc 及其在 CMake 中的註冊,驗證分割區替換、未分割區行為、operation 和 summary 中繼資料,以及新的 table 和 transaction API 都已涵蓋。

由索引模型根據 Issue 內容生成。

描述

Overview

This issue tracks the implementation of ReplacePartitions in C++, assigned in #637.

ReplacePartitions performs dynamic partition overwrite: each file added to the operation marks its entire partition for deletion, and on commit, existing files in those partitions are atomically replaced. The resulting snapshot uses operation="overwrite" and summary property "replace-partitions"="true".

Implementation Plan

PR 1 — Core implementation

New files:

  • src/iceberg/update/replace_partitions.h
  • src/iceberg/update/replace_partitions.cc

Modified files:

  • src/iceberg/snapshot.h — add kReplacePartitions constant to SnapshotSummaryFields
  • src/iceberg/type_fwd.h — add class ReplacePartitions;
  • src/iceberg/CMakeLists.txt — register new source
PR 2 — Table/Transaction API surface + tests

Modified files:

  • src/iceberg/table.h / table.cc — add NewReplacePartitions()
  • src/iceberg/transaction.h / transaction.cc — add NewReplacePartitions()

New files:

  • src/iceberg/test/replace_partitions_test.cc
  • src/iceberg/test/CMakeLists.txt — register test

Design

ReplacePartitions extends SnapshotUpdate (same pattern as FastAppend) and uses ManifestFilterManager to mark existing partition files as DELETED:

  • AddFile(file): calls filter_manager_.DropPartition(spec_id, partition), accumulates new file in new_data_files_by_spec_
  • ValidateAppendOnly(): calls filter_manager_.FailAnyDelete()
  • Apply(): for unpartitioned tables calls filter_manager_.DeleteByRowFilter(AlwaysTrue); calls FilterManifests() on existing snapshot, then prepends new manifests
  • operation(): returns DataOperation::kOverwrite
  • Summary(): sets "replace-partitions"="true"

Relates to: #637

主要語言
C++
星號
228
分支
136
平均合併
5 天 19 小時
30 天內合併 PR
53

環境準備

這個專案沒有提供開發容器、Dockerfile 或貢獻指南,環境需要你自己搭建:先看它的 README,通用步驟見我們的新手貢獻指南。

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

apache/iceberg-cpp 的其他 Issue

查看 apache/iceberg-cpp 的全部 Issue

相似的 Issue

更多 C++ Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。