請求在 DynamoDB 中匯出資料表 - Amazon DynamoDB

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

請求在 DynamoDB 中匯出資料表

DynamoDB 表格匯出可讓您將表格資料匯出到 Amazon S3 儲存貯體,讓您能夠使用其他 AWS 服務 (例如 Athena、Amazon、Amazon SageMaker、 AWS Glue亞馬遜 EMR 和) 對資料執行分析和複雜查詢。 AWS Lake Formation您可以使用 AWS Management Console、或 DynamoDB API 請求資料表匯出。 AWS CLI

注意

不支援請求者支付 Amazon S3 儲存貯體費用。

DynamoDB 同時支援完整匯出和增量匯出:

  • 透過完整匯出,您可以將表格的完整快照從 point-in-time 復原 (PITR) 時段內的任何時間點匯出到 Amazon S3 儲存貯體。

  • 使用增量匯出時,您可以將 PITR 時段中指定期間內變更、更新或刪除的 DynamoDB 資料表中的資料匯出至 Amazon S3 儲存貯體。

必要條件

啟用 PITR

若要使用匯出至 S3 功能,您必須在表格上啟用 PITR。如需如何啟用 PITR 的詳細資訊,請參閱 P oint-in-time 復原。如果您要求匯出未啟用 PITR 的資料表,您的要求將失敗,並顯示例外狀況訊息:「呼叫ExportTableToPointInTime作業時發生錯誤 (PointInTimeRecoveryUnavailableException):表格 'my-dynamodb-table」未啟用時間點復原。

設定 S3 許可

您可以將資料表資料匯出至您擁有寫入許可的任何 Amazon S3 儲存貯體。目的地值區不需要位於相同的 AWS 區域,也不需要與來源資料表擁有者擁有相同的擁有者。您的 AWS Identity and Access Management (IAM) 政策需要允許您執行 S3 動作 (s3:AbortMultipartUploads3:PutObject、和s3:PutObjectAcl) 和 DynamoDB 匯出動作 (dynamodb:ExportTableToPointInTime)。以下是範例政策範例,該政策將授與您的使用者執行匯出至 S3 儲存貯體的權限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowDynamoDBExportAction", "Effect": "Allow", "Action": "dynamodb:ExportTableToPointInTime", "Resource": "arn:aws:dynamodb:us-east-1:111122223333:table/my-table" }, { "Sid": "AllowWriteToDestinationBucket", "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::your-bucket/*" } ] }

如果您需要寫入另一個帳戶中的 S3 儲存貯體,或者您沒有寫入權限,則 S3 儲存貯體擁有者必須新增儲存貯體政策,以允許您從 DynamoDB 匯出到該儲存貯體。以下是目標 S3 儲存貯體的範例政策。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStatement", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": [ "s3:AbortMultipartUpload", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::awsexamplebucket1/*" } ] }

在匯出過程中撤銷這些許可會產生部分檔案。

注意

如果您要匯出的目標資料表或儲存貯體使用客戶受管金鑰加密,該 KMS 金鑰的政策必須允許 DynamoDB 使用該金鑰。此許可是透過觸發匯出任務的 IAM 使用者/角色授予。如需有關加密及其最佳實務的詳細資訊,請參閱 DynamoDB 如何使用 AWS KMS 以及使用自訂 KMS 金鑰

使用 AWS Management Console請求匯出

以下範例示範如何使用 DynamoDB 主控台匯出名為 MusicCollection 的現有資料表。

注意

此程序假設您已啟用 point-in-time 復原。若要為MusicCollection表格啟用此功能,請在表格的「總覽」頁籤的「表格詳細資訊」段落中,選擇啟用 P oint-in-time 復原功能。

請求資料表匯出
  1. 登入 AWS Management Console 並開啟 DynamoDB 支援主控台,網址為 https://console.aws.amazon.com/dynamodb/。

  2. 在主控台左側的導覽窗格中,選擇 Exports to S3 (匯出至 S3)。

  3. 選取匯出至 S3 按鈕。

  4. 選擇來源資料表和目的地 S3 儲存貯體。如果您的帳戶擁有該目的地儲存貯體,您可以使用 Browse S3 (瀏覽 S3) 按鈕尋找它。如果不是,請使用 s3://bucketname/prefix format. 輸入儲存貯體的 URL;prefix 是有助於您整理目的地儲存貯體的選用資料夾。

  5. 選擇完整匯出增量匯出完整匯出會輸出資料表在您所指定時間點的完整資料表快照。增量匯出會輸出在指定匯出期間對資料表所做的變更。您的輸出已壓縮,因此它僅包含匯出期間內項目的最終狀態。即使項目在同一匯出期間內有多個更新,該項目也只會在匯出中出現一次。

    Full export
    1. 選取您要匯出完整資料表快照的來源時間點。這個時間點可以是 PITR 時段內的任何時間點。或者,您可以選取目前時間以匯出最新快照。

    2. 對於匯出的檔案格式,請選擇 DynamoDB JSONAmazon Ion 兩者之一。根據預設,您的資料表會以 DynamoDB JSON 格式在時間點復原時段中的最近可還原時間匯出,並使用 Amazon S3 金鑰 (SSE-S3) 進行加密。您可以視需要變更這些匯出設定。

      注意

      如果您選擇使用受 AWS Key Management Service (AWS KMS) 保護的金鑰加密匯出,金鑰必須與目的地 S3 儲存貯體位於相同的區域。

    Incremental export
    1. 選取您要匯出增量資料的匯出期間。選擇在 PITR 時段內的開始時間。匯出期間必須至少為 15 分鐘,且不超過 24 小時。匯出期間的開始時間包含在內,結束時間則不包含在內。

    2. 選擇絕對模式相對模式

      1. 絕對模式會依您指定的期間匯出增量資料。

      2. 相對模式會在相對於匯出任務提交時間的匯出期間匯出增量資料。

    3. 對於匯出的檔案格式,請選擇 DynamoDB JSONAmazon Ion 兩者之一。根據預設,您的資料表會以 DynamoDB JSON 格式在時間點復原時段中的最近可還原時間匯出,並使用 Amazon S3 金鑰 (SSE-S3) 進行加密。您可以視需要變更這些匯出設定。

      注意

      如果您選擇使用受 AWS Key Management Service (AWS KMS) 保護的金鑰加密匯出,金鑰必須與目的地 S3 儲存貯體位於相同的區域。

    4. 對於匯出檢視類型,請選取新舊映像僅限新映像。新映像提供項目的最新狀態。舊映像提供項目在指定的「開始日期和時間」之前的狀態。預設設定為新舊映像。如需新映像和舊映像的詳細資訊,請參閱 增量匯出輸出

  6. 選擇「匯出」開始。

匯出的資料在交易上不一致。您的交易操作可以在兩個導出輸出之間切斷。匯出中反映的交易作業可以修改項目子集,而同一筆交易中的另一個修改子集則不會反映在相同的匯出要求中。不過,匯出最後會是一致的。如果交易在匯出期間遭到撕裂,您將會在下一個連續匯出中保留剩餘的交易,而不會有重複項目。用於匯出的期間是以內部系統時鐘為基礎,且可能與您的應用程式本機時鐘相差一分鐘。

獲取有關過去出口的詳細信息 AWS Management Console

您可以選擇導覽側邊欄中的 [匯出至 S3] 區段,找到過去執行的匯出工作的相關資訊。此區段包含您在過去 90 天內建立的所有匯出清單。選取匯出索引標籤中所列工作的 ARN,以擷取有關該匯出的資訊,包括您選擇的任何進階組態設定。請注意,雖然匯出任務中繼資料會在 90 天後過期,也無法在此清單中找到早於該時間的任務,但只要儲存貯體政策允許,S3 儲存貯體中的物件就會保留。DynamoDB 絕不會刪除在匯出時其在您的 S3 儲存貯體中建立的任何物件。

使用 AWS CLI請求匯出

下列範例示範如何使用將名 AWS CLI 為的現有資料表匯出MusicCollection至名為的 S3 儲存貯體ddb-export-musiccollection

注意

此程序假設您已啟用 point-in-time 復原。若要針對 MusicCollection 資料表啟用程序,請執行下列命令。

aws dynamodb update-continuous-backups \ --table-name MusicCollection \ --point-in-time-recovery-specification PointInTimeRecoveryEnabled=True
Full export

以下命令會將 MusicCollection 匯出至名為 ddb-export-musiccollection-9012345678 的 S3 儲存貯體 (字首為 2020-Nov)。資料表資料會以 DynamoDB JSON 格式在時間點復原時段中的特定時間匯出,並使用 Amazon S3 金鑰 (SSE-S3) 進行加密。

注意

如果要求跨帳戶資料表匯出,請務必包含 --s3-bucket-owner 選項。

aws dynamodb export-table-to-point-in-time \ --table-arn arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection \ --s3-bucket ddb-export-musiccollection-9012345678 \ --s3-prefix 2020-Nov \ --export-format DYNAMODB_JSON \ --export-time 1604632434 \ --s3-bucket-owner 9012345678 \ --s3-sse-algorithm AES256
Incremental export

下列命令會藉由提供新的 --export-type--incremental-export-specification 來執行增量匯出。將任何斜體內容替換為您自己的值。時間是以自 epoch 起算的秒數來指定。

aws dynamodb export-table-to-point-in-time \ --table-arn arn:aws:dynamodb:REGION:ACCOUNT:table/TABLENAME \ --s3-bucket BUCKET --s3-prefix PREFIX \ --incremental-export-specification ExportFromTime=1693569600,ExportToTime=1693656000,ExportViewType=NEW_AND_OLD_IMAGES \ --export-type INCREMENTAL_EXPORT
注意

如果您選擇使用受 AWS Key Management Service (AWS KMS) 保護的金鑰加密匯出,金鑰必須與目的地 S3 儲存貯體位於相同的區域。

獲取有關過去出口的詳細信息 AWS CLI

使用 list-exports 命令即可找到您過去曾執行之匯出請求的相關資訊。此命令會傳回您在過去 90 天內建立的所有匯出清單。請注意,雖然匯出任務中繼資料會在 90 天後過期,也無法使用 list-exports 命令傳回早於該時間的任務,但只要儲存貯體政策允許,S3 儲存貯體中的物件就會保留。DynamoDB 絕不會刪除在匯出時其在您的 S3 儲存貯體中建立的任何物件。

在匯出成功或失敗之前,其狀態會是 PENDING。如果成功,狀態會變更為COMPLETED。如果失敗,狀態會變更為FAILEDfailure_messagefailure_reason

在以下範例中,我們使用選用 table-arn 參數,只列出特定資料表的匯出資料。

aws dynamodb list-exports \ --table-arn arn:aws:dynamodb:us-east-1:123456789012:table/ProductCatalog

若要擷取特定匯出任務的詳細資訊 (包括任何進階組態設定),請使用 describe-export 命令。

aws dynamodb describe-export \ --export-arn arn:aws:dynamodb:us-east-1:123456789012:table/ProductCatalog/export/01234567890123-a1b2c3d4

使用 AWS SDK 請求匯出

您可以使用這些程式碼片段,使用您選擇的 AWS SDK 要求匯出資料表。

Python

完整匯出

import boto3 from datetime import datetime # remove endpoint_url for real use client = boto3.client('dynamodb') # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/export_table_to_point_in_time.html client.export_table_to_point_in_time( TableArn='arn:aws:dynamodb:us-east-1:0123456789:table/TABLE', ExportTime=datetime(2023, 9, 20, 12, 0, 0), S3Bucket='bucket', S3Prefix='prefix', S3SseAlgorithm='AES256', ExportFormat='DYNAMODB_JSON' )

增量匯出

import boto3 from datetime import datetime client = boto3.client('dynamodb') client.export_table_to_point_in_time( TableArn='arn:aws:dynamodb:us-east-1:0123456789:table/TABLE', IncrementalExportSpecification={ 'ExportFromTime': datetime(2023, 9, 20, 12, 0, 0), 'ExportToTime': datetime(2023, 9, 20, 13, 0, 0), 'ExportViewType': 'NEW_AND_OLD_IMAGES' }, ExportType='INCREMENTAL_EXPORT', S3Bucket='bucket', S3Prefix='prefix', S3SseAlgorithm='AES256', ExportFormat='DYNAMODB_JSON' )

使用 AWS SDK 獲取有關過去導出的詳細信息

您可以使用這些程式碼片段,取得有關使用您選擇的 AWS SDK 過去表格匯出的詳細資訊。

Python

完整匯出

import boto3 client = boto3.client('dynamodb') # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/list_exports.html print( client.list_exports( TableArn='arn:aws:dynamodb:us-east-1:0123456789:table/TABLE', ) )

增量匯出

import boto3 client = boto3.client('dynamodb') # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/describe_export.html print( client.describe_export( ExportArn='arn:aws:dynamodb:us-east-1:0123456789:table/TABLE/export/01695353076000-06e2188f', )['ExportDescription'] )