本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Apache Iceberg V3
Apache Iceberg 第 3 版 (V3) 是 Apache Iceberg 資料表格式規格的最新版本,引入了進階功能,可建置 PB 級資料湖,以改善效能並減少營運開銷。V3 解決 V2 常見的效能瓶頸,特別是在批次更新和合規刪除方面。
AWS 支援 Apache Iceberg 第 3 版 (V3) 規格中定義的刪除向量和資料列歷程。這些功能適用於 Amazon EMR 7.12 上的 Apache Spark、AWS Glue ETL、Amazon SageMaker Unified Studio 筆記本,以及 AWS Glue Data Catalog 中的 Apache Iceberg 資料表,包括 Amazon S3 資料表
V3 中的主要功能
- 刪除向量
-
以儲存為 Puffin 檔案的有效二進位格式取代 V2 的位置刪除檔案。這可消除隨機批次更新和 GDPR 合規刪除的寫入放大,大幅降低維護新資料的額外負荷。處理高頻率更新的組織將立即改善寫入效能,並從較少的小型檔案降低儲存成本。
- 資料列線性
-
在資料列層級啟用精確的變更追蹤。您的下游系統可以逐步處理變更,加速資料管道並降低變更資料擷取 (CDC) 工作流程的運算成本。此內建功能不需要自訂變更追蹤實作。
版本相容性
V3 與 V2 資料表保持回溯相容性。 AWS 服務同時支援 V2 和 V3 資料表,可讓您:
-
跨 V2 和 V3 資料表執行查詢
-
將現有的 V2 資料表升級至 V3,無需重新寫入資料
-
執行跨越 V2 和 V3 快照的時間歷程查詢
-
跨資料表版本使用結構描述演變和隱藏分割
重要
V3 是單向升級。一旦資料表從 V2 升級至 V3,就無法透過標準操作降級回 V2。
V3 入門
先決條件
使用 V3 資料表之前,請確定您有:
-
具有適當 IAM 許可 AWS 的帳戶
-
存取一或多個 AWS 分析服務 (EMR、Glue、Amazon SageMaker Unified Studio 筆記本或 S3 資料表)
-
用於儲存資料表資料和中繼資料的 S3 儲存貯體
-
如果您要建置自己的 Iceberg 基礎設施,可使用 S3 Tables 或一般用途 S3 儲存貯體的資料表儲存貯體
-
AWS 已設定的 Glue 目錄
建立 V3 資料表
建立新的 V3 資料表
若要建立新的 Iceberg V3 資料表,請將 format-version 資料表屬性設定為 3。
使用 Spark SQL:
CREATE TABLE IF NOT EXISTS myns.orders_v3 ( order_id bigint, customer_id string, order_date date, total_amount decimal(10,2), status string, created_at timestamp ) USING iceberg TBLPROPERTIES ( 'format-version' = '3' )
將 V2 資料表升級至 V3
您可以將現有的 V2 資料表以原子方式升級至 V3,而無需重寫資料。
使用 Spark SQL:
ALTER TABLE myns.existing_table SET TBLPROPERTIES ('format-version' = '3')
重要
V3 是單向升級。一旦資料表從 V2 升級至 V3,就無法透過標準操作降級回 V2。
升級期間會發生什麼情況:
-
會以原子方式建立新的中繼資料快照
-
重複使用現有的 Parquet 資料檔案
-
資料列線性欄位會新增至資料表中繼資料
-
下一個壓縮動作會移除舊的 V2 刪除檔案
-
新的修改將使用 V3 的刪除向量檔案
-
升級不會執行資料列列變更追蹤記錄的歷史回填
啟用刪除向量
若要利用刪除向量進行更新、刪除和合併,請設定您的寫入模式。
使用 Spark SQL:
ALTER TABLE myns.orders_v3 SET TBLPROPERTIES ('format-version' = '3', 'write.delete.mode' = 'merge-on-read', 'write.update.mode' = 'merge-on-read', 'write.merge.mode' = 'merge-on-read' )
這些設定可確保更新、刪除和合併操作會建立刪除向量檔案,而不是重寫整個資料檔案。
利用資料列線性進行變更追蹤
V3 會自動新增資料列中繼資料欄位以追蹤變更。
使用 Spark SQL:
# Query with parameter value provided last_processed_sequence = 47 SELECT id, data, _row_id, _last_updated_sequence_number FROM myns.orders_v3 WHERE _last_updated_sequence_number > :last_processed_sequence
_row_id 欄位可唯一識別每一列,而 _last_updated_sequence_number 則會追蹤列上次修改的時間。使用這些欄位來:
-
識別變更的資料列以進行增量處理
-
追蹤資料譜系的合規性
-
最佳化 CDC 管道
-
僅處理變更以降低運算成本
V3 的最佳實務
何時使用 V3
在下列情況下,請考慮升級至 V3 或從 V3 開始:
-
您執行頻繁的批次更新或刪除
-
您需要符合 GDPR 或合規刪除要求
-
您的工作負載涉及高頻率 upsert
-
您需要有效率的 CDC 工作流程
-
您想要降低小型檔案的儲存成本
-
您需要更好的變更追蹤功能
最佳化寫入效能
-
為繁重的更新工作負載啟用刪除向量:
SET TBLPROPERTIES ( 'write.delete.mode' = 'merge-on-read', 'write.update.mode' = 'merge-on-read', 'write.merge.mode' = 'merge-on-read' ) -
設定適當的檔案大小:
SET TBLPROPERTIES ( 'write.target-file-size-bytes' = '536870912' — 512 MB )
最佳化讀取效能
-
利用資料列線性進行增量處理
-
使用時間歷程來存取歷史資料,無需複製
-
啟用統計資料收集,以便更好地規劃查詢
遷移策略
從 V2 遷移至 V3 時:
-
先在非生產環境中測試 - 驗證升級程序和效能
-
在低活動期間升級 - 將對並行操作的影響降至最低
-
監控初始效能 - 升級後追蹤指標
-
執行壓縮 - 升級後合併刪除檔案
-
更新文件 - 反映團隊文件中的 V3 功能
相容性考量事項
-
引擎版本 - 確保所有存取資料表的引擎都支援 V3
-
第三方工具 - 升級前驗證 V3 相容性
-
備份策略 - 測試快照型復原程序
-
監控 - 更新 V3-specific指標的監控儀表板
疑難排解
常見問題
- 錯誤:「不支援 格式版本 3」
-
-
確認您的引擎版本支援 V3
Amazon AWS 服務的 V3 支援如下所示:
服務 V3 支援 EMR Spark 7.12+ 版 AWS Glue ETL 是 Amazon SageMaker Unified Studio 筆記本 是 AWS Glue:Iceberg REST API、資料表維護 是 Amazon S3 資料表:Iceberg REST API、資料表維護 是 Amazon Athena (Trino) 否 -
檢查目錄相容性
-
確保最新的 AWS 服務版本
-
- 升級後效能降低
-
-
確認沒有壓縮失敗。如需詳細資訊,請參閱記錄和監控 S3 資料表。
-
檢查是否已啟用刪除向量。確定已設定下列屬性:
SET TBLPROPERTIES ( 'write.delete.mode' = 'merge-on-read', 'write.update.mode' = 'merge-on-read', 'write.merge.mode' = 'merge-on-read' ) -
您可以使用下列程式碼驗證資料表屬性:
DESCRIBE FORMATTED myns.orders_v3 -
檢閱分割區策略。過度分割可能會導致小型檔案。執行以下查詢以取得資料表的平均檔案大小:
SELECT avg(file_size_in_bytes) as avg_file_size_bytes FROM myns.orders_v3.files
-
- 與第三方工具不相容
-
-
驗證工具支援 V3 規格
-
考慮維護不支援工具的 V2 資料表
-
V3 支援時間表的聯絡工具廠商
-
取得說明
-
AWS 支援:聯絡 AWS Support 了解服務特有的問題
-
Apache Iceberg 社群:Iceberg Slack
-
AWS 文件: AWS 分析文件
定價
-
Amazon EMR:運算和儲存定價
-
AWS Glue:任務執行和 Data Catalog 定價
-
S3 資料表:儲存和請求定價
可用性
Apache Iceberg V3 支援適用於 Amazon EMR、 AWS Glue Data Catalog、 AWS Glue ETL 和 S3 Tables 運作的所有 AWS 區域。