本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Apache Iceberg V3
Apache Iceberg 第 3 版 (V3) 是 Apache Iceberg 資料表格式規格的最新版本,引入了進階功能,可建置 PB 級資料湖,以改善效能並減少營運開銷。V3 解決了第 2 版 (V2) 常見的效能瓶頸,特別是在批次更新和合規刪除方面。
AWS 支援 Apache Iceberg 第 3 版 (V3) 規格中定義的刪除向量、資料列歷程和變體資料類型。您可以在 Amazon EMR、AWS Glue ETL、Amazon SageMaker Unified Studio 筆記本和 AWS Glue Data Catalog 中的 Apache Iceberg 資料表上使用這些功能,包括 Amazon S3 資料表
V3 中的主要功能
- 刪除向量
-
以儲存為 Puffin 檔案的有效二進位格式取代 V2 的位置刪除檔案。這可消除隨機批次更新和 GDPR 合規刪除的寫入放大,大幅降低維護新資料的額外負荷。處理高頻率更新的組織將立即改善寫入效能,並從較少的小型檔案降低儲存成本。
- 資料列線性
-
在資料列層級啟用精確的變更追蹤。您的下游系統可以逐步處理變更,加速資料管道並降低變更資料擷取 (CDC) 工作流程的運算成本。此內建功能不需要自訂變更追蹤實作。
- 變體資料類型
-
使用變體資料類型,您可以直接在 Iceberg 資料表中寫入 JSON 等半結構化資料,而無需事先定義固定結構描述。V3 相容引擎會在寫入時將半結構化資料分割成隱藏的資料欄,產生查詢引擎用於最佳化的 Parquet 資料欄統計資料,例如檔案刪除。這可減少分析查詢掃描的資料。S3 Tables 為變體資料欄提供持續的資料表維護,包括壓縮,因此您可以將來自半結構化來源的資料合併到 Iceberg 引擎可以有效讀取的大型檔案中。
版本相容性
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' )
這些設定可確保更新、刪除和合併操作會建立刪除向量檔案,而不是重寫整個資料檔案。
利用 Row-lineage 進行變更追蹤
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 管道
-
僅處理變更以降低運算成本
使用變體資料類型
重要
變體資料類型僅適用於特定 AWS 區域。如需支援區域的完整清單,請參閱 可用性。
使用變體資料類型,您可以直接在 Iceberg 資料表中寫入 JSON 等半結構化資料,而無需事先定義固定結構描述。您可以更快速地寫入資料,同時仍能獲得高效率的分析查詢效能。Iceberg V3 相容引擎會在您寫入時將半結構化資料分割成隱藏的資料欄。這些隱藏的資料欄會產生查詢引擎用於最佳化的 Parquet 資料欄統計資料,例如檔案刪除。
使用 Spark SQL 建立具有變體資料欄的資料表:
CREATE TABLE IF NOT EXISTS myns.events ( event_id bigint, event_timestamp timestamp, source string, event_data VARIANT ) USING iceberg TBLPROPERTIES ( 'format-version' = '3' )
將半結構化資料插入變體資料欄:
INSERT INTO myns.events VALUES ( 1, current_timestamp(), 'web-app', PARSE_JSON('{"user_id": "u-1234", "action": "page_view", "page": "/products", "duration_ms": 350}') ); INSERT INTO myns.events VALUES ( 2, current_timestamp(), 'mobile-app', PARSE_JSON('{"user_id": "u-5678", "action": "purchase", "items": [{"sku": "A100", "qty": 2}], "total": 49.99}') );
使用 S3 Tables,變體資料欄的資料表維護,包括壓縮,會自動執行。壓縮會將來自小型檔案的半結構化來源資料合併為更大的檔案,Iceberg 引擎可以更有效率地讀取這些檔案,進而改善查詢效能。
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指標的監控儀表板
壓縮的考量事項
根據預設,壓縮會寫入碎片變體 Parquet 檔案。不支援碎片的較舊讀取器可能無法讀取壓縮的檔案。您可以透過設定資料表屬性 來停用碎片write.variant.shredding.enabled=false。
疑難排解
常見問題
- 錯誤:「不支援 格式版本 3」
-
-
檢查您的查詢引擎目錄是否與 Iceberg V3 相容。
-
請確定您使用的是最新的 AWS 服務版本。
-
確認您的引擎版本支援 V3
Amazon AWS 服務的 V3 支援如下所示:
服務 V3 支援 V3 變體支援 EMR Spark 7.12+ 版 8.0+ 版 AWS Glue ETL 是 否 Amazon SageMaker Unified Studio 筆記本 是 否 AWS Glue:Iceberg REST API、資料表維護 是 否 Amazon S3 資料表:Iceberg REST API、資料表維護 是 是* Amazon Athena (Trino) 否 否 *部分區域可用性
-
- 升級後效能降低
-
-
確認沒有壓縮失敗。如需詳細資訊,請參閱記錄和監控 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 資料表:儲存和請求定價
可用性
Amazon EMR、 AWS Glue Data Catalog、 AWS Glue ETL 和 SV3 Apache Iceberg V3 刪除向量和資料列譜。 AWS S3
S3 Tables 中的變體資料類型適用於下列 AWS 區域:美國東部 (維吉尼亞北部)、美國東部 (俄亥俄)、美國西部 (奧勒岡)、亞太區域 (孟買)、亞太區域 (首爾)、亞太區域 (新加坡)、亞太區域 (雪梨)、亞太區域 (東京)、加拿大 (中部)、歐洲 (法蘭克福)、歐洲 (愛爾蘭)、歐洲 (倫敦)、歐洲 (巴黎)、歐洲 (斯德哥爾摩) 和南美洲 (聖保羅)。