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

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

請求在 DynamoDB 中匯出資料表

DynamoDB 表格匯出可讓您將表格資料匯出到 Amazon S3 儲存貯體,讓您能夠使用其他儲存貯體對資料執行分析和複雜查詢 AWS 服務,如 Athena, AWS Glue,Amazon SageMakerEMR,Amazon 和 AWS Lake Formation。 您可以使用 AWS Management Console,該 AWS CLI,或動 DynamoDB API。

注意

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

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

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

  • 透過增量匯出,您可以將在指定時段內變更、更新或刪除的 DynamoDB 表格中的PITR資料匯出到 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) 按鈕尋找它。否則,請使用「prefix是選擇性資料夾」s3://bucketname/prefix format. 輸入值區,以協助您保持目URL的地值區井然有序。

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

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

    2. 對於匯出的檔案格式,請在 DynamoDB JSONAmazon 離子之間進行選擇。依預設,您的表格將以 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 離子之間進行選擇。依預設,您的表格將以 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 以匯出名為的 S3 儲存貯體MusicCollection的現有資料表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'] )