View a markdown version of this page

資料表的維護 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

資料表的維護

S3 Tables 提供維護操作,以增強個別資料表的管理效率和效能。所有資料表儲存貯體中的資料表預設會啟用下列選項。您可以透過指定 S3 資料表的維護組態檔案來編輯或停用這些檔案。

編輯此組態需要 s3tables:GetTableMaintenanceConfigurations3tables:PutTableMaintenanceConfiguration 許可。

注意

您可以透過 CloudTrail 日誌追蹤資料表上的 S3 Tables 自動化維護操作,如需詳細資訊,請參閱 適用於 S3 Tables 維護的 CloudTrail 管理事件

壓縮

在資料表層級設定壓縮,並將多個較小的物件合併為較少但較大的物件,以改善 Apache Iceberg 查詢效能。合併物件時,壓縮也會套用資料表中資料列層級刪除的效果。

所有資料表都預設啟用壓縮,且預設目標檔案大小為 512 MB,或者您可以指定介於 64MB 到 512MB 之間的自訂值。系統會將經壓縮的檔案寫入為資料表的最新快照。

注意

壓縮支援 Apache Parquet、Avro 和 ORC 檔案類型。

壓縮策略

您可以從多個壓縮策略中選擇,並可根據您的查詢模式和資料表排序順序進一步提高查詢效能。

S3 Tables 支援這些資料表的壓縮策略:

  • 自動 (預設)

    • Amazon S3 會根據資料表排序順序選取最佳壓縮策略。這是所有資料表的預設壓縮策略。

    • 對於中繼資料中具有已定義排序順序的資料表,auto 會自動套用 sort 壓縮。

    • 對於沒有排序順序的資料表,auto 會預設為使用 binpack 壓縮。

  • Binpack

    • 將小型檔案合併為較大的檔案,通常以大小超過 100 MB 為目標,同時套用任何待定的刪除。這是未排序資料表的預設壓縮策略。

  • 排序

    • 根據在壓縮期間自動以階層方式排序的所指定資料欄來組織資料,從而改善篩選操作的查詢效能。在您的查詢經常篩選特定資料欄時,建議使用此策略。當您使用此策略,在資料表屬性中定義 sort_order 時,S3 Tables 會自動針對直欄套用階層排序。

  • Z 順序

    • 透過將多個屬性混合到可用於排序的單一純量值來最佳化資料組織,從而實現跨多個維度的有效查詢。在您需要同時查詢多個維度的資料時,建議使用此策略。此策略要求您先使用 sort_order 資料表屬性在 Iceberg 資料表屬性中定義排序順序。

壓縮會產生額外費用。z-ordersort 壓縮策略的成本可能會高於 binpack。如需詳細資訊,請參閱 Amazon S3 定價中的定價資訊。

壓縮範例

下列範例示範資料表壓縮的組態。

使用 設定壓縮目標檔案大小 AWS CLI

目標壓縮檔案大小下限為 64MB,上限為 512MB。

下列範例會使用 PutTableMaintenanceConfiguration API,將目標檔案大小變更為 256 MB。

aws s3tables put-table-maintenance-configuration \ --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket1 \ --type icebergCompaction \ --namespace mynamespace \ --name testtable \ --value='{"status":"enabled","settings":{"icebergCompaction":{"targetFileSizeMB":256}}}'

如需詳細資訊,請參閱《AWS CLI 命令參考》中的 put-table-maintenance-configuration

使用 設定壓縮策略 AWS CLI

下列範例會使用 PutTableMaintenanceConfiguration API,將壓縮策略變更為 sort。設定壓縮時,您可以從下列壓縮策略中做選擇:autobinpacksortz-order

注意

若要將壓縮策略設定為 sortz-order,您需要下列先決條件:

  • 在 Iceberg 資料表屬性中定義的排序順序。

  • s3tables:GetTableData 許可。

aws s3tables put-table-maintenance-configuration \ --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket \ --type icebergCompaction \ --namespace mynamespace \ --name testtable \ --value='{"status":"enabled","settings":{"icebergCompaction":{"strategy":"sort"}}}'

如需詳細資訊,請參閱《AWS CLI 命令參考》中的 put-table-maintenance-configuration

使用 停用壓縮 AWS CLI

下列範例將使用 PutTableMaintenanceConfiguration API 停用壓縮。

aws s3tables put-table-maintenance-configuration \ --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket \ --type icebergCompaction \ --namespace mynamespace \ --name testtable \ --value='{"status":"disabled","settings":{"icebergCompaction":{"targetFileSizeMB":256}}}'

如需詳細資訊,請參閱《AWS CLI 命令參考》中的 put-table-maintenance-configuration

快照管理

快照管理會決定資料表的作用中快照數量。這是以 MinimumSnapshots (預設為 1) 和 MaximumSnapshotAge (預設為 120 小時) 為基礎。快照管理會根據這些組態將資料表快照過期並加以移除。

當快照過期時,Amazon S3 會將僅由該快照參考的任何物件標記為非最新物件。這些非最新物件會在未參考檔案移除政策中 NoncurrentDays 屬性指定的天數之後刪除。

注意

刪除非最新物件會永久性刪除這些物件,而且無法加以復原。

若要檢視或復原標示為非最新物件的物件,您必須聯絡 AWS 支援。如需聯絡的相關資訊 AWS 支援,請參閱聯絡 AWSAWS 支援 文件

快照管理會決定要從資料表中刪除的物件,並僅會參考該資料表。從資料表外對這些物件的參考,無法阻止快照管理刪除物件。

注意

快照管理不支援您在 metadata.json 檔案中或透過 ALTER TABLE SET TBLPROPERTIES SQL 命令將 設定為Apache Iceberg資料表屬性的保留值。如果存在以下任何條件,則整個資料表的快照管理將會失敗,Amazon S3 也不會過期或移除任何快照:

  • 使用者定義的標籤或分支 – 如果資料表上存在任何使用者定義的標籤或分支,則整個資料表的快照管理將會失敗。即使標籤或分支的保留期間很短,這也適用。若要還原自動快照過期,請從資料表中移除所有使用者定義的標籤和分支。

  • Iceberg 快照保留資料表屬性 – 如果 history.expire.max-snapshot-age-mshistory.expire.min-snapshots-to-keep 屬性設定為Apache Iceberg資料表屬性,則無論設定的值為何,整個資料表的快照管理都會失敗。若要還原自動快照過期,請移除這些屬性:

    ALTER TABLE mydb.mytable UNSET TBLPROPERTIES ('history.expire.max-snapshot-age-ms'); ALTER TABLE mydb.mytable UNSET TBLPROPERTIES ('history.expire.min-snapshots-to-keep');

若要診斷快照管理失敗,請使用 GetTableMaintenanceJobStatus API 或執行下列 AWS CLI 命令。如果快照管理失敗,回應會包含FAILED狀態,其中包含說明失敗原因的訊息。

aws s3tables get-table-maintenance-job-status \ --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket \ --namespace my_namespace \ --name my_table

您只能在資料表層級設定快照管理。如需詳細資訊,請參閱 Amazon S3 定價中的定價資訊。

快照管理範例

下列範例示範資料表快照管理的組態。

使用 設定快照管理 AWS CLI

下列範例會使用 PutTableMaintenanceConfiguration API 將 MinimumSnapshots 設定為 10,並將 MaximumSnapshotAge 設定為 2500 小時。

aws s3tables put-table-maintenance-configuration \ --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket \ --namespace my_namespace \ --name my_table \ --type icebergSnapshotManagement \ --value '{"status":"enabled","settings":{"icebergSnapshotManagement":{"minSnapshotsToKeep":10,"maxSnapshotAgeHours":2500}}}'
使用 停用快照管理 AWS CLI

下列範例會使用 PutTableMaintenanceConfiguration API 停用快照管理。

aws s3tables put-table-maintenance-configuration \ --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket \ --namespace my_namespace \ --name my_table \ --type icebergSnapshotManagement \ --value '{"status":"disabled","settings":{"icebergSnapshotManagement":{"minSnapshotsToKeep":1,"maxSnapshotAgeHours":120}}}'

如需詳細資訊,請參閱《AWS CLI 命令參考》中的 put-table-maintenance-configuration

考量與限制

若要進一步了解壓縮和快照管理的其他考量和限制,請參閱維護任務的考量和限制

注意

S3 Tables 會套用 128 MB 的 parquets row-group-default 大小。