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

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

請求在 DynamoDB 中匯出資料表

DynamoDB 資料表匯出可讓您將資料表資料匯出至 Amazon S3 儲存貯體,讓您使用 Athena、 AWS Glue、Amazon SageMaker AIEMR、Amazon 和 等 AWS 其他服務,對資料執行分析和複雜的查詢 AWS Lake Formation。您可以使用 AWS Management Console、 AWS CLI或 DynamoDB 來請求資料表匯出API。

注意

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

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

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

  • 使用增量匯出,您可以將資料從 DynamoDB 資料表匯出,該資料表在PITR視窗內指定的時段之間變更、更新或刪除,並傳送到您的 Amazon S3 儲存貯體。

必要條件

啟用 PITR

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

設定 S3 許可

您可以將資料表資料匯出至您擁有寫入許可的任何 Amazon S3 儲存貯體。目的地儲存貯體不需要位於相同的 AWS 區域,也不需要擁有與來源資料表擁有者相同的擁有者。Your AWS Identity and Access Management (IAM) 政策需要允許您執行 S3 動作 (s3:AbortMultipartUploads3:PutObjects3: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": "amzn-s3-demo-bucket-AllowWrites", "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::your-bucket/*" } ] }

如果您需要寫入另一個帳戶中的 Amazon S3 儲存貯體,或者您沒有寫入的許可,Amazon S3 儲存貯體擁有者必須新增儲存貯體政策,以允許您從 DynamoDB 匯出到該儲存貯體。以下是目標 Amazon 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:::amzn-s3-demo-bucket/*" } ] }

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

注意

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

使用 AWS Management Console請求匯出

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

注意

此程序假設您已啟用 point-in-time復原。若要為MusicCollection資料表啟用它,請在資料表的概觀索引標籤的資料表詳細資訊區段中,選擇啟用 Point-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) 按鈕尋找它。否則,請使用 prefix是選用資料夾,輸入儲存貯URL體的 s3://bucketname/prefix format. ,以協助保持目的地儲存貯體井有條。

  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。如果失敗,狀態會使用 FAILED failure_message和 變更為 failure_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'] )