將資料庫快照資料匯出至 Amazon S3 - Amazon Relational Database Service

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

將資料庫快照資料匯出至 Amazon S3

您可以將資料庫快照資料匯出至 Amazon S3 儲存貯體。匯出程序會在背景執行,不會影響使用中資料庫的效能。

匯出資料庫快照時,Amazon 會從快照RDS擷取資料,並將其存放在 Amazon S3 儲存貯體中。資料會以壓縮且一致的 Apache Parquet 格式存放。

您可以匯出所有類型的資料庫快照,包括手動快照、自動系統快照,以及由服務建立的快照。 AWS Backup 根據預設會匯出快照中的所有資料。但是,您可以選擇匯出特定資料庫、結構描述或資料表集。

匯出資料後,您可以直接透過 Amazon Athena 或 Amazon Redshift Spectrum 等工具分析匯出後的資料。如需使用雅典娜讀取實木地板資料的詳細資訊,請參閱 Amazon Athena 使用者指南 SerDe中的鑲木地板。如需使用 Redshift 頻譜讀取實木地板資料的詳細資訊,請參閱 Amazon Redshift料庫COPY開發人員指南中的單欄式資料格式。

區域和版本可用性

功能可用性和支援會因每個資料庫引擎的特定版本以及 AWS 區域而有所不同。如需具備將快照匯出至 S3 功能的版本和區域可用性的詳細資訊,請參閱 支援的區域和資料庫引擎,可將快照匯出到 Amazon 中的 S3 RDS

限制

將資料庫快照資料匯出至 Amazon S3 時有下列限制:

  • 您無法同時針對相同的資料庫快照執行多個匯出任務。這同時適用於完整和部分匯出。

  • 不支援從使用磁性儲存的資料庫匯出快照。

  • 匯出至 S3 不支援包含冒號 (:) 的 S3 前置詞。

  • 在匯出過程中,S3 檔案路徑中的以下字元將轉換為底線 (_):

    \ ` " (space)
  • 如果資料庫、結構描述或資料表的名稱中包含下列字元以外的字元,則不支援部分匯出。但是,您可以匯出整個資料庫快照。

    • 拉丁字母 (A–Z)

    • 數字 (0–9)

    • 美元符號 ($)

    • 底線 (_)

  • 資料庫資料表資料欄名稱不支援空格 ( ) 和某些字元。資料行名稱中具備下列字元的資料表會在匯出時跳過:

    , ; { } ( ) \n \t = (space)
  • 匯出時會略過名稱中具備斜線 (/) 的表格。

  • RDS對於 Postgre SQL 臨時和未記錄的表在導出過程中被跳過。

  • 如果資料包含接近BLOB或CLOB大於 500 MB 的大型物件 (例如或),則匯出會失敗。

  • 如果資料表包含接近或大於 2 GB 的大型資料列,則在匯出期間會略過該資料表。

  • 對於部分匯出,ExportOnly清單的大小上限為 200 KB。

  • 強烈建議您對每個匯出任務使用唯一的名稱。如果不使用唯一的任務名稱,可能會收到下列錯誤訊息:

    ExportTaskAlreadyExistsFault:呼叫 StartExportTask作業時發生錯誤 (ExportTaskAlreadyExists):具有 ID 的匯出工作 xxxxx 已存在。

  • 您在將快照資料匯出至 S3 時可以刪除該快照,但在匯出任務完成之前,仍會向您收取該快照的儲存費用。

  • 您無法將匯出的快照資料從 S3 還原到新的資料庫執行個體,也無法將快照資料從 S3 匯入現有的資料庫執行個體。

  • 每個最多可以有五個正在進行的並行資料庫快照匯出工作 AWS 帳戶。

  • 若要將資料庫快照匯出到跨帳戶 Amazon S3 儲存貯體,您必須使用 AWS CLI 或. RDS API

匯出快照資料概觀

您可以使用下列程序,將資料庫快照資料匯出至 Amazon S3 儲存貯體。如需詳細資訊,請參閱下列各節。

  1. 識別要匯出的快照

    使用現有的自動或手動快照,或建立資料庫執行個體或異地同步備份資料庫叢集的手動快照。

  2. 設定對 Amazon S3 儲存貯體的存取。

    「儲存貯體」是 Amazon S3 物件或檔案的容器。如要提供存取儲存貯體的資訊,請採取下列步驟:

    1. 識別要匯出快照的目標 S3 儲存貯體。S3 儲存貯體必須與快照位於相同的 AWS 區域。如需詳細資訊,請參閱識別要匯出的 Amazon S3 儲存貯體

    2. 建立 AWS Identity and Access Management (IAM) 角色,授與 S3 儲存貯體的快照匯出任務存取權。如需詳細資訊,請參閱使用IAM角色提供對 Amazon S3 儲存貯體的存取

  3. 建立伺服器端加密 AWS KMS key 的對稱加密。快照匯出工作會使用KMS金鑰,在將匯出資料寫入 S3 時設定 AWS KMS 伺服器端加密。

    KMS金鑰原則必須同時包含kms:CreateGrantkms:DescribeKey權限。如需在 Amazon 中使用KMS金鑰的詳細資訊RDS,請參閱AWS KMS key 管理

    如果您的KMS金鑰原則中有拒絕陳述式,請務必明確排除 AWS 服務主體export.rds.amazonaws.com

    您可以在 AWS 帳戶中使用KMS金鑰,也可以使用跨帳戶KMS金鑰。如需詳細資訊,請參閱使用跨帳戶 AWS KMS key 加密 Amazon S3 匯出

  4. 使用主控台或start-export-taskCLI命令將快照匯出到 Amazon S3。如需詳細資訊,請參閱將資料庫快照匯出至 Amazon S3 儲存貯體

  5. 若要存取 Amazon S3 儲存貯體中您匯出的資料,請參閱《Amazon Simple Storage Service 使用者指南》中的上傳、下載及管理物件

設定對 Amazon S3 儲存貯體的存取權

如要將資料庫快照資料匯出至 Amazon S3 檔案,您首先要給予快照存取 Amazon S3 儲存貯體的許可。然後,您可以建立一個IAM角色,以允許 Amazon RDS 服務寫入 Amazon S3 儲存貯體。

識別要匯出的 Amazon S3 儲存貯體

識別要匯出資料庫快照的目標 Amazon S3 儲存貯體。使用現有的 S3 儲存貯體或建立新的 S3 儲存貯體。

注意

要匯出的 S3 儲存貯體必須與快照位於相同的 AWS 區域。

如需使用 Amazon S3 儲存貯體的詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的下列內容:

使用IAM角色提供對 Amazon S3 儲存貯體的存取

在您將資料庫快照資料匯出至 Amazon S3 前,請給予快照匯出任務對 Amazon S3 儲存貯體的存取許可。

若要授與此權限,請建立可提供值區存取權的IAM原則,然後建立IAM角色並將原則附加至該角色。稍後,您可以將IAM角色指派給快照匯出工作。

重要

如果您打算使 AWS Management Console 用匯出快照,您可以選擇在匯出快照時自動建立IAM原則和角色。如需說明,請參閱 將資料庫快照匯出至 Amazon S3 儲存貯體

給予資料庫快照任務對 Amazon S3 的存取權限
  1. 建立IAM策略。此政策會提供儲存貯體和物件許可,允許您的快照匯出任務存取 Amazon S3。

    在政策中,包含下列必要動作,以允許將檔案從 Amazon 傳輸RDS到 S3 儲存貯體:

    • s3:PutObject*

    • s3:GetObject*

    • s3:ListBucket

    • s3:DeleteObject*

    • s3:GetBucketLocation

    在政策中,包含下列資源,以識別 S3 儲存貯體和該儲存貯體中的物件。以下資源清單顯示了用於訪問 Amazon S3 的亞馬遜資源名稱(ARN)格式。

    • arn:aws:s3:::amzn-s3-demo-bucket

    • arn:aws:s3:::amzn-s3-demo-bucket/*

    如需為 Amazon 建立IAM政策的詳細資訊RDS,請參閱建立並使用 IAM 政策進行 IAM 資料庫存取。另請參閱《IAM使用指南》中的教學課程:建立並附加您的第一個客戶管理政策

    下列 AWS CLI 命令會建立以這些選項命名ExportPolicy的IAM策略。它授予對名為的存儲桶的訪問權限 amzn-s3-demo-bucket.

    注意

    建立原則之後,請記下原則ARN的內容。將原則附加至IAM角色時,您需要執行後續步驟。ARN

    aws iam create-policy --policy-name ExportPolicy --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExportPolicy", "Effect": "Allow", "Action": [ "s3:PutObject*", "s3:ListBucket", "s3:GetObject*", "s3:DeleteObject*", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }'
  2. 建立IAM角色,以便 Amazon 可RDS以代表您擔任此IAM角色,以存取您的 Amazon S3 儲存貯體。如需詳細資訊,請參閱《IAM使用指南》中的建立角色以將權限委派給IAM使用者

    下列範例示範如何使用 AWS CLI 命令建立名為的角色rds-s3-export-role

    aws iam create-role --role-name rds-s3-export-role --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "export.rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'
  3. 將您建立的IAM策略附加到您建立的IAM角色。

    下列 AWS CLI 命令會將先前建立的原則附加至名為的角色rds-s3-export-role。取代your-policy-arn為您在先前步驟中記下的原則ARN。

    aws iam attach-role-policy --policy-arn your-policy-arn --role-name rds-s3-export-role

使用跨帳戶 Amazon S3 儲存貯體

您可以跨 AWS 帳戶使用 Amazon S3 儲存貯體。若要使用跨帳戶儲存貯體,請新增儲存貯體政策以允許存取您用於 S3 匯出的IAM角色。如需詳細資訊,請參閱範例 2:儲存貯體擁有者授予跨帳戶儲存貯體許可

將儲存貯體政策附加至您的儲存貯體,如下列範例所示。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/Admin" }, "Action": [ "s3:PutObject*", "s3:ListBucket", "s3:GetObject*", "s3:DeleteObject*", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-destination-bucket", "arn:aws:s3:::amzn-s3-demo-destination-bucket/*" ] } ] }

使用跨帳戶 AWS KMS key 加密 Amazon S3 匯出

您可以使用跨帳戶 AWS KMS key 來加密 Amazon S3 匯出。首先,您將金鑰原則新增至本機帳戶,然後在外部帳戶中新增原IAM則。如需詳細資訊,請參閱允許其他帳戶中的使用者使用KMS金鑰

使用跨帳戶KMS金鑰
  1. 將金鑰政策新增至本機帳戶。

    下列範例將本機帳戶 123456789012 中的許可給予外部帳戶 444455556666 中的 ExampleRoleExampleUser

    { "Sid": "Allow an external account to use this KMS key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::444455556666:role/ExampleRole", "arn:aws:iam::444455556666:user/ExampleUser" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey", "kms:RetireGrant" ], "Resource": "*" }
  2. 將IAM策略新增至外部帳戶。

    下列範例IAM原則允許主體使用帳戶 123456789012 中的KMS金鑰進行密碼編譯作業。若要提供此許可給帳戶 444455556666 中的 ExampleRoleExampleUser,請在該帳戶中附加政策給他們。

    { "Sid": "Allow use of KMS key in account 123456789012", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey", "kms:RetireGrant" ], "Resource": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" }

將資料庫快照匯出至 Amazon S3 儲存貯體

每個最多可以有五個正在進行的並行資料庫快照匯出工作 AWS 帳戶。

注意

匯出RDS快照可能需要一段時間,具體取決於您的資料庫類型和大小。匯出任務會先還原和擴展整個資料庫,然後再將資料擷取到 Amazon S3。此階段期間的工作進度會顯示為STARTING (開始)。當任務切換到將資料匯出到 S3 時,進度會顯示為 In progress (進行中)

匯出完成所需的時間取決於儲存在資料庫中的資料。例如,如果資料表有分散均勻的數值主索引鍵或索引資料欄,則匯出速度最快。如果資料表不含適合分割的資料欄,或是資料表只在字串型資料欄上有一個索引,則會花更多時間。因為匯出使用較慢的單一執行緒處理序,所以將會耗費更長的時間。

您可以使用 AWS Management Console、或將資料庫快照匯出到 Amazon S3 RDS API。 AWS CLI若要將資料庫快照匯出到跨帳戶 Amazon S3 儲存貯體,請使用 AWS CLI 或. RDS API

如果您使用 Lambda 函式匯出快照集,請將 kms:DescribeKey 動作新增至 Lambda 函式政策。如需詳細資訊,請參閱 AWS Lambda 許可

Export to Amazon S3 (匯出至 Amazon S3) 主控台選項僅會針對可匯出至 Amazon S3 的快照顯示。由於下列原因,快照可能無法匯出:

  • S3 匯出不支援此資料庫引擎。

  • S3 匯出不支援資料庫引擎版本。

  • 建立快照的 AWS 區域不支援 S3 匯出。

匯出資料庫快照
  1. 登錄 AWS Management Console 並在打開 Amazon RDS 控制台https://console.aws.amazon.com/rds/

  2. 在導覽窗格中,選擇 Snapshots (快照)

  3. 從標籤中,選擇您希望匯出的快照類型。

  4. 在快照清單中,選擇您希望匯出的快照。

  5. 針對 Actions (動作),選擇 Export to Amazon S3 (匯出至 Amazon S3)。

    隨即出現 Export to Amazon S3 (匯出至 Amazon S3) 視窗。

  6. 針對 Export identifier (匯出識別符),輸入名稱以識別匯出任務。這個值也會用來做為在 S3 儲存貯體中建立的檔案名稱。

  7. 選擇匯出的資料:

    • 選擇 All (全部) 來匯出快照中的所有資料。

    • 選擇 Partial (部分) 來匯出快照的特定部分。若要識別要匯出的快照部分,請針對 Identifier (識別符) 輸入一或多個資料庫、結構描述或表格,並以空格分隔。

      使用下列格式:

      database[.schema][.table] database2[.schema2][.table2] ... databasen[.scheman][.tablen]

      例如:

      mydatabase mydatabase2.myschema1 mydatabase2.myschema2.mytable1 mydatabase2.myschema2.mytable2
  8. 針對 S3 bucket (S3 儲存貯體),選擇要匯出的儲存貯體。

    如要將匯出資料指派給 S3 儲存貯體中的資料夾路徑,請針對 S3 prefix (S3 字首) 輸入選用的路徑。

  9. 對於IAM角色,請選擇授與您所選 S3 儲存貯體寫入存取權的角色,或建立新角色。

    • 如果您透過遵循 使用IAM角色提供對 Amazon S3 儲存貯體的存取 中的步驟建立了角色,請選擇該角色。

    • 如果您沒有建立授予您所選擇 S3 儲存貯體寫入存取權限的角色,請選擇 Create a new role (建立新角色) 以自動建立角色。接下來,在角色名稱中輸入角IAM色的名稱

  10. 在中 AWS KMS key,輸入用ARN於加密匯出資料的金鑰。

  11. 選擇 Export to Amazon S3 (匯出至 Amazon S3)

若要使用將資料庫快照匯出到 Amazon S3 AWS CLI,請搭配下列必要選項使用start-export-task命令:

  • --export-task-identifier

  • --source-arn

  • --s3-bucket-name

  • --iam-role-arn

  • --kms-key-id

在下列範例中,會命名為快照匯出工作 my-snapshot-export,將快照匯出到名為的 S3 儲存貯體 amzn-s3-demo-bucket.

對於LinuxmacOS、或Unix:

aws rds start-export-task \ --export-task-identifier my-snapshot-export \ --source-arn arn:aws:rds:AWS_Region:123456789012:snapshot:snapshot-name \ --s3-bucket-name amzn-s3-demo-bucket \ --iam-role-arn iam-role \ --kms-key-id my-key

在 Windows 中:

aws rds start-export-task ^ --export-task-identifier my-snapshot-export ^ --source-arn arn:aws:rds:AWS_Region:123456789012:snapshot:snapshot-name ^ --s3-bucket-name amzn-s3-demo-bucket ^ --iam-role-arn iam-role ^ --kms-key-id my-key

範例輸出如下。

{ "Status": "STARTING", "IamRoleArn": "iam-role", "ExportTime": "2019-08-12T01:23:53.109Z", "S3Bucket": "my-export-bucket", "PercentProgress": 0, "KmsKeyId": "my-key", "ExportTaskIdentifier": "my-snapshot-export", "TotalExtractedDataInGB": 0, "TaskStartTime": "2019-11-13T19:46:00.173Z", "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:snapshot-name" }

若要在 S3 儲存貯體中提供快照匯出的資料夾路徑,請在start-export-task命令中包含該--s3-prefix選項。

若要使用 Amazon 將資料庫快照匯出到 Amazon S3 RDSAPI,請使用具有下列必要參數的StartExportTask操作:

  • ExportTaskIdentifier

  • SourceArn

  • S3BucketName

  • IamRoleArn

  • KmsKeyId

監控快照匯出

您可以使用 AWS Management Console、或監視資料庫快照匯出RDSAPI。 AWS CLI

監控資料庫快照匯出
  1. 登錄 AWS Management Console 並在打開 Amazon RDS 控制台https://console.aws.amazon.com/rds/

  2. 在導覽窗格中,選擇 Snapshots (快照)

  3. 如要檢視快照匯出清單,請選擇 Exports in Amazon S3 (Amazon S3 中的匯出) 標籤。

  4. 如要檢視特定快照匯出的相關資訊,請選擇匯出任務。

若要使用監視資料庫快照匯出 AWS CLI,請使用describe-export-tasks指令。

以下範例示範如何顯示您所有快照匯出的目前資訊。

aws rds describe-export-tasks { "ExportTasks": [ { "Status": "CANCELED", "TaskEndTime": "2019-11-01T17:36:46.961Z", "S3Prefix": "something", "ExportTime": "2019-10-24T20:23:48.364Z", "S3Bucket": "amzn-s3-demo-bucket", "PercentProgress": 0, "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/K7MDENG/bPxRfiCYEXAMPLEKEY", "ExportTaskIdentifier": "anewtest", "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3", "TotalExtractedDataInGB": 0, "TaskStartTime": "2019-10-25T19:10:58.885Z", "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:parameter-groups-test" }, { "Status": "COMPLETE", "TaskEndTime": "2019-10-31T21:37:28.312Z", "WarningMessage": "{\"skippedTables\":[],\"skippedObjectives\":[],\"general\":[{\"reason\":\"FAILED_TO_EXTRACT_TABLES_LIST_FOR_DATABASE\"}]}", "S3Prefix": "", "ExportTime": "2019-10-31T06:44:53.452Z", "S3Bucket": "amzn-s3-demo-bucket1", "PercentProgress": 100, "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/2Zp9Utk/h3yCo8nvbEXAMPLEKEY", "ExportTaskIdentifier": "thursday-events-test", "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3", "TotalExtractedDataInGB": 263, "TaskStartTime": "2019-10-31T20:58:06.998Z", "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:rds:example-1-2019-10-31-06-44" }, { "Status": "FAILED", "TaskEndTime": "2019-10-31T02:12:36.409Z", "FailureCause": "The S3 bucket edgcuc-export isn't located in the current AWS Region. Please, review your S3 bucket name and retry the export.", "S3Prefix": "", "ExportTime": "2019-10-30T06:45:04.526Z", "S3Bucket": "amzn-s3-demo-bucket2", "PercentProgress": 0, "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/2Zp9Utk/h3yCo8nvbEXAMPLEKEY", "ExportTaskIdentifier": "wednesday-afternoon-test", "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3", "TotalExtractedDataInGB": 0, "TaskStartTime": "2019-10-30T22:43:40.034Z", "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:rds:example-1-2019-10-30-06-45" } ] }

如要顯示特定快照匯出的相關資訊,請在 --export-task-identifier 命令中包含 describe-export-tasks 選項。如要篩選輸出,請包含 --Filters 選項。如需更多選項,請參閱describe-export-tasks指令。

若要顯示使用 Amazon 進行資料庫快照匯出的相關資訊 RDSAPI,請使用DescribeExportTasks操作。

若要追蹤匯出工作流程的完成或起始其他工作流程,您可以訂閱 Amazon Simple Notification Service 主題。有關 Amazon 的更多信息SNS,請參閱使用 Amazon RDS 事件通知

取消快照匯出任務

您可以使用 AWS Management Console、或取消資料庫快照匯出工作RDSAPI。 AWS CLI

注意

取消快照匯出任務不會移除任何已匯出到 Amazon S3 的資料。如需如何使用主控台刪除資料的資訊,請參閱如何從 S3 儲存貯體刪除物件? 若要使用刪除資料CLI,請使用刪除物件指令。

取消快照匯出任務
  1. 登錄 AWS Management Console 並在打開 Amazon RDS 控制台https://console.aws.amazon.com/rds/

  2. 在導覽窗格中,選擇 Snapshots (快照)

  3. 選擇 Exports in Amazon S3 (Amazon S3 中的匯出) 標籤。

  4. 選擇您希望取消的快照匯出任務。

  5. 選擇 Cancel (取消)

  6. 選擇確認頁面上的 Cancel export task (取消匯出任務)

若要使用取消快照匯出工作 AWS CLI,請使用cancel-export-task指令。命令需要 --export-task-identifier 選項。

aws rds cancel-export-task --export-task-identifier my_export { "Status": "CANCELING", "S3Prefix": "", "ExportTime": "2019-08-12T01:23:53.109Z", "S3Bucket": "amzn-s3-demo-bucket", "PercentProgress": 0, "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/K7MDENG/bPxRfiCYEXAMPLEKEY", "ExportTaskIdentifier": "my_export", "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3", "TotalExtractedDataInGB": 0, "TaskStartTime": "2019-11-13T19:46:00.173Z", "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:export-example-1" }

若要使用 Amazon 取消快照匯出任務 RDSAPI,請搭配ExportTaskIdentifier參數使用該CancelExportTask操作。

Amazon S3 匯出任務的失敗訊息

下表說明 Amazon S3 匯出任務失敗時傳回的訊息。

失敗訊息 描述
發生未知的內部錯誤。

因為不明的錯誤、例外或故障,所以任務失敗。

將匯出任務的中繼資料寫入 S3 儲存貯體 [儲存貯體名稱] 時發生未知的內部錯誤。

因為不明的錯誤、例外或故障,所以任務失敗。

RDS匯出無法寫入匯出工作的中繼資料,因為無法擔任IAM角色 [roleARN]。

匯出任務會假設您的IAM角色來驗證是否允許將中繼資料寫入 S3 儲存貯體。如果工作無法擔任您的IAM角色,就會失敗。

RDS匯出無法使用角色 [IAMrole] 搭配金鑰 [KMS金鑰 ID],將匯出任務的中繼資料寫入 S3 儲存貯體 [儲存貯體名稱]。ARN錯誤代碼:[錯誤代碼]

缺少一或多個許可,因此匯出任務無法存取 S3 儲存貯體。收到下列其中一個錯誤碼時會引發此失敗訊息:

  • AWSSecurityTokenServiceException 和錯誤代碼 AccessDenied

  • AmazonS3Exception 和錯誤代碼 NoSuchBucketAccessDeniedKMS.KMSInvalidStateException403 ForbiddenKMS.DisabledException

這些錯誤碼表示IAM角色、S3 儲存貯體或KMS金鑰的設定設定錯誤。

IAM角色 [角色ARN] 未授權在 S3 儲存貯體 [儲存貯體名稱] 上呼叫 [S3 動作]。檢閱您的許可,然後重試匯出。

IAM原則設定錯誤。缺少 S3 儲存貯體上特定 S3 動作的許可,這會導致匯出任務失敗。

KMS金鑰檢查失敗。請檢查KMS金鑰上的認證,然後再試一次。 KMS金鑰認證檢查失敗。
S3 憑證檢查失敗。檢查 S3 儲存貯體和IAM政策的許可。 S3 憑證檢查失敗。
S3 儲存貯體 [儲存貯體名稱] 無效。可能不是位於目前的 AWS 區域或不存在。檢閱您的 S3 儲存貯體名稱並重試匯出。 S3 儲存貯體無效。
S3 儲存貯體 [儲存貯體名稱] 不在目前 AWS 區域中。檢閱您的 S3 儲存貯體名稱並重試匯出。 S3 儲存貯體位於錯誤的 AWS 區域。

疑難排解後的SQL權限錯誤

將 Postgre SQL 資料庫匯出到 Amazon S3 時,您可能會看到PERMISSIONS_DO_NOT_EXIST錯誤訊息,指出某些表格已略過。當您在建立資料庫時指定的超級使用者沒有存取這些資料表的權限時,通常會發生這個錯誤。

若要修正此錯誤,請執行下列命令:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA schema_name TO superuser_name

如需超級使用者權限的詳細資訊,請參閱主要使用者帳戶權限

檔案命名慣例

特定表格的匯出資料會以 base_prefix/files 的格式儲存,其中基本前綴如下:

export_identifier/database_name/schema_name.table_name/

例如:

export-1234567890123-459/rdststdb/rdststdb.DataInsert_7ADB5D19965123A2/

檔案命名方式有兩種慣例:

  • 目前慣例:

    batch_index/part-partition_index-random_uuid.format-based_extension

    批處理索引是一個序列號,表示從表中讀取的一批數據。如果我們無法將您的表分割成小塊以 parallel 導出,則會有多個批處理索引。如果您的表被分區為多個表,則會發生同樣的情況。將會有多個批次索引,主資料表的每個表格分割區各一個索引。

    如果我們可以將您的表分割成小塊以 parallel 讀取,則只會有批處理索引1文件夾。

    在批處理索引文件夾中,有一個或多個包含表數據的 Parquet 文件。實木複合地板文件名的前綴是part-partition_index。如果您的資料表已分割,則會有多個以分割區索引開頭的檔案00000

    分割區索引序列中可能會有間隙。發生這種情況是因為每個分區都是從表中的範圍查詢中獲得的。如果該分區的範圍內沒有數據,則跳過該序列號。

    例如,假設資料行是id資料表的主索引鍵,而且其最小值和最大值為1001000。當我們嘗試使用九個分區導出此表時,我們使用 parallel 查詢來讀取它,如下所示:

    SELECT * FROM table WHERE id <= 100 AND id < 200 SELECT * FROM table WHERE id <= 200 AND id < 300

    這應該生成九個文件,從part-00000-random_uuid.gz.parquetpart-00008-random_uuid.gz.parquet。但是,如果沒有介於200和IDs之間的行350,則其中一個完成的分區是空的,並且不會為其創建任何文件。在前面的例子中,part-00001-random_uuid.gz.parquet不會創建。

  • 較舊的慣例:

    part-partition_index-random_uuid.format-based_extension

    這與當前約定相同,但沒有前batch_index綴,例如:

    part-00000-c5a881bb-58ff-4ee6-1111-b41ecff340a3-c000.gz.parquet part-00001-d7a881cc-88cc-5ab7-2222-c41ecab340a4-c000.gz.parquet part-00002-f5a991ab-59aa-7fa6-3333-d41eccd340a7-c000.gz.parquet

檔案命名慣例可能會有所變更。因此,在讀取目標資料表時,建議您讀取資料表基本字首內的所有內容。

匯出至 Amazon S3 儲存貯體時的資料轉換

當您將資料庫快照匯出到 Amazon S3 儲存貯體時,Amazon 會RDS將資料轉換為、將資料匯出到,以及以實際複合地板格式存放資料。如需 Parquet 的詳細資訊,請參閱 Apache Parquet 網站。

Parquet 會將所有資料以下列其中一種基本類型存放:

  • BOOLEAN

  • INT32

  • INT64

  • INT96

  • FLOAT

  • DOUBLE

  • BYTE_ ARRAY — 可變長度位元組陣列,也稱為二進位

  • FIXED_ _ LEN BYTE _ ARRAY — 當值具有常數大小時使用的固定長度位元組陣列

Parquet 的資料類型相當少,可減少讀取和寫入格式的複雜性。Parquet 提供擴充基本類型的邏輯類型。「邏輯類型」會實作為標註,並將資料存放在 LogicalType 中繼資料欄位中。邏輯類型標註會說明如何解譯基本類型。

STRING邏輯類型註釋一個BYTE_ARRAY類型時,它表示字節數組應該被解釋為 UTF -8 編碼的字符串。匯出任務完成後,Amazon RDS 會在發生任何字串轉換時通知您。匯出的基礎資料一律與來源資料相同。但是,由於 UTF -8 的編碼差異,在 Athena 等工具中讀取時,某些字符可能會與來源不同。

如需詳細資訊,請參閱 Parquet 文件中的 Parquet Logical Type Definitions

我SQL和 MariaDB 的數據類型映射到實木地板

下表顯示當資料轉換SQL並匯出至 Amazon S3 時,我和 MariaDB 資料類型對映到實木地板資料類型。

來源資料類型 Parquet 基本類型 邏輯類型標註 轉換備註
數值資料類型
BIGINT INT64
BIGINT UNSIGNED FIXED_ LEN _ BYTE _ ARRAY (9) DECIMAL(二零零) Parquet 僅支持帶符號的類型,因此映射需要一個額外的字節(8 加 1)來存儲 BIGINT _ 類UNSIGNED型。
BIT BYTE_ARRAY
DECIMAL INT32 DECIMAL(p, s) 如果來源值小於 2 31,則會儲存為INT32。
INT64 DECIMAL(p, s) 如果來源值為 2 31 或更大,但小於 2 63,則會儲存為INT64。
FIXED_ LEN BYTE _ ARRAY (N) DECIMAL(p, s) 如果來源值為 2 63 或更大,則會儲存為 FIXED LEN _ BYTE _ _ ARRAY (N)。
BYTE_ARRAY STRING Parquet 不支援大於 38 的 Decimal 精確度。Decimal 值被轉換為 BYTE _ ARRAY 類型的字符串,並編碼為UTF8。
DOUBLE DOUBLE
FLOAT DOUBLE
INT INT32
INT UNSIGNED INT64
MEDIUMINT INT32
MEDIUMINT UNSIGNED INT64
NUMERIC INT32 DECIMAL(p, s)

如果來源值小於 2 31,則會儲存為INT32。

INT64 DECIMAL(p, s) 如果來源值為 2 31 或更大,但小於 2 63,則會儲存為INT64。
FIXED_ LEN _ ARRAY (N) DECIMAL(p, s) 如果來源值為 2 63 或更大,則會儲存為 FIXED LEN _ BYTE _ _ ARRAY (N)。
BYTE_ARRAY STRING Parquet 不支援大於 38 的 Numeric 精確度。這個數值被轉換為 BYTE _ ARRAY 類型的字符串,並編碼為UTF8。
SMALLINT INT32
SMALLINT UNSIGNED INT32
TINYINT INT32
TINYINT UNSIGNED INT32
字串資料類型
BINARY BYTE_ARRAY
BLOB BYTE_ARRAY
CHAR BYTE_ARRAY
ENUM BYTE_ARRAY STRING
LINESTRING BYTE_ARRAY
LONGBLOB BYTE_ARRAY
LONGTEXT BYTE_ARRAY STRING
MEDIUMBLOB BYTE_ARRAY
MEDIUMTEXT BYTE_ARRAY STRING
MULTILINESTRING BYTE_ARRAY
SET BYTE_ARRAY STRING
TEXT BYTE_ARRAY STRING
TINYBLOB BYTE_ARRAY
TINYTEXT BYTE_ARRAY STRING
VARBINARY BYTE_ARRAY
VARCHAR BYTE_ARRAY STRING
日期和時間資料類型
DATE BYTE_ARRAY STRING 日期被轉換為 BYTE _ ARRAY 類型的字符串並編碼為UTF8。
DATETIME INT64 TIMESTAMP_MICROS
TIME BYTE_ARRAY STRING TIME類型被轉換為 BYTE _ 中的字符串ARRAY並編碼為UTF8。
TIMESTAMP INT64 TIMESTAMP_MICROS
YEAR INT32
幾何資料類型
GEOMETRY BYTE_ARRAY
GEOMETRYCOLLECTION BYTE_ARRAY
MULTIPOINT BYTE_ARRAY
MULTIPOLYGON BYTE_ARRAY
POINT BYTE_ARRAY
POLYGON BYTE_ARRAY
JSON資料類型
JSON BYTE_ARRAY STRING

下載SQL數據類型映射到鑲木地板

下表顯示當SQL資料轉換並匯出至 Amazon S3 時,從 Postgre 資料類型到實木複合地板資料類型的對應。

後置SQL數據類型 Parquet 基本類型 邏輯類型標註 映射備註
數值資料類型
BIGINT INT64
BIGSERIAL INT64
DECIMAL BYTE_ARRAY STRING DECIMAL類型被轉換為 BYTE _ ARRAY 類型的字符串並編碼為UTF8。

此轉換是為了避免因非數字 (NaN) 而導致的資料精確度和資料值複雜性。

DOUBLE PRECISION DOUBLE
INTEGER INT32
MONEY BYTE_ARRAY STRING
REAL FLOAT
SERIAL INT32
SMALLINT INT32 INT_16
SMALLSERIAL INT32 INT_16
字串和相關資料類型
ARRAY BYTE_ARRAY STRING

數組被轉換為字符串並編碼為BINARY(UTF8)。

此轉換是為了避免因非數字 (NaN) 和時間資料值而導致的資料精確度複雜性。

BIT BYTE_ARRAY STRING
BIT VARYING BYTE_ARRAY STRING
BYTEA BINARY
CHAR BYTE_ARRAY STRING
CHAR(N) BYTE_ARRAY STRING
ENUM BYTE_ARRAY STRING
NAME BYTE_ARRAY STRING
TEXT BYTE_ARRAY STRING
TEXT SEARCH BYTE_ARRAY STRING
VARCHAR(N) BYTE_ARRAY STRING
XML BYTE_ARRAY STRING
日期和時間資料類型
DATE BYTE_ARRAY STRING
INTERVAL BYTE_ARRAY STRING
TIME BYTE_ARRAY STRING
TIME WITH TIME ZONE BYTE_ARRAY STRING
TIMESTAMP BYTE_ARRAY STRING
TIMESTAMP WITH TIME ZONE BYTE_ARRAY STRING
幾何資料類型
BOX BYTE_ARRAY STRING
CIRCLE BYTE_ARRAY STRING
LINE BYTE_ARRAY STRING
LINESEGMENT BYTE_ARRAY STRING
PATH BYTE_ARRAY STRING
POINT BYTE_ARRAY STRING
POLYGON BYTE_ARRAY STRING
JSON資料類型
JSON BYTE_ARRAY STRING
JSONB BYTE_ARRAY STRING
其他資料類型
BOOLEAN BOOLEAN
CIDR BYTE_ARRAY STRING 網路資料類型
COMPOSITE BYTE_ARRAY STRING
DOMAIN BYTE_ARRAY STRING
INET BYTE_ARRAY STRING 網路資料類型
MACADDR BYTE_ARRAY STRING
OBJECT IDENTIFIER N/A
PG_ LSN BYTE_ARRAY STRING
RANGE BYTE_ARRAY STRING
UUID BYTE_ARRAY STRING