本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon S3 做為 的目標 AWS Database Migration Service
您可以從 AWS DMS 任何支援的資料庫來源,使用 將資料遷移至 Amazon S3。在 AWS DMS 任務中使用 Amazon S3 做為目標時,完全載入和變更資料擷取 (CDC) 資料預設會寫入逗號分隔值 (.csv) 格式。若要使用更精簡的儲存和更快速的查詢選項,您也可以選擇以 Apache Parquet (.parquet) 格式寫入資料。
AWS DMS 使用增量十六進位計數器命名在完全載入期間建立的檔案,例如 LOAD00001.csv、LOAD00002...、LOAD00009, LOAD0000A 等,適用於使用時間戳記的 .csv files. AWS DMS names CDC 檔案,例如 20141029-1134010000.csv。對於包含記錄的每個來源資料表, 會在指定的目標資料夾 (如果來源資料表不是空的) 下 AWS DMS 建立資料夾。 會將所有完全載入和 CDC 檔案 AWS DMS 寫入指定的 Amazon S3 儲存貯體。您可以使用 MaxFileSize 端點設定來控制 AWS DMS 建立的檔案大小。
參數 bucketFolder
包含 .csv 或 .parquet 檔案上傳到 S3 儲存貯體之前的儲存位置。就 .csv 檔案而言,資料表資料使用以下格式儲存在 S3 儲存貯體中,並顯示完全載入檔案。
database_schema_name
/table_name
/LOAD00000001.csvdatabase_schema_name
/table_name
/LOAD00000002.csv ...database_schema_name
/table_name
/LOAD00000009.csvdatabase_schema_name
/table_name
/LOAD0000000A.csvdatabase_schema_name
/table_name
/LOAD0000000B.csv ...database_schema_name
/table_name
/LOAD0000000F.csvdatabase_schema_name
/table_name
/LOAD00000010.csv ...
您可以使用額外的連線屬性指定資料行分隔符號、資料列分隔符號和其他參數。有關額外連線屬性的詳細資訊,請參閱本節最後的使用 Amazon S3 做為 目標時的端點設定 AWS DMS。
您可以使用 ExpectedBucketOwner
Amazon S3 端點設定指定儲存貯體擁有者並防止惡意攻擊,如下所示。然後,當您提出測試連線或執行遷移請求時,S3 會根據指定參數檢查儲存貯體擁有者的帳戶識別碼。
--s3-settings='{"ExpectedBucketOwner": "AWS_Account_ID"}'
當您使用 AWS DMS 複寫使用 CDC 任務的資料變更時,.csv 或 .parquet 輸出檔案的第一欄會指出資料列資料如何變更,如下列 .csv 檔案所示。
I,101,Smith,Bob,4-Jun-14,New York U,101,Smith,Bob,8-Oct-15,Los Angeles U,101,Smith,Bob,13-Mar-17,Dallas D,101,Smith,Bob,13-Mar-17,Dallas
在此範例中,假設來源資料庫中有一個EMPLOYEE
資料表。 會將資料 AWS DMS 寫入 .csv 或 .parquet 檔案,以回應下列事件:
-
2014 年 6 月 4 日紐約辦公室聘雇的新員工 (Bob Smith,員工 ID 101)。在 .csv 或 .parquet 檔案中,第一欄的
I
指出新資料列INSERT
到來源資料庫中的 EMPLOYEE 資料表。 -
Bob 於 2015 年 10 月 8 日調到洛杉磯辦公室。在 .csv 或 .parquet 檔案中,
U
指出 EMPLOYEE 資料表的對應資料列已UPDATE
,以反映 Bob 的新辦公室位置。行中其他部分反映UPDATE
後的 EMPLOYEE 資料表資料列。 -
Bob 於 2017 年 3 月 13 日再次調到達拉斯辦公室。在 .csv 或 .parquet 檔案中,
U
指出此資料列再次UPDATE
。行中其他部分反映UPDATE
後的 EMPLOYEE 資料表資料列。 -
在達拉斯工作一段時間後,Bob 離開了公司。在 .csv 或 .parquet 檔案中,
D
指出來源資料表已DELETE
此資料列。行中其他部分反映刪除前的 EMPLOYEE 資料表資料列內容。
請注意,對於 CDC, 預設會 AWS DMS 儲存每個資料庫資料表的資料列變更,而不考慮交易順序。如果您想要將資料列變更依交易順序儲存至 CDC 檔案中,則需要使用 S3 端點設定來指定此項目,以及 S3 目標上儲存 CDC 交易檔案的資料夾路徑。如需詳細資訊,請參閱在 S3 目標上包含交易順序之擷取資料變更 (CDC)。
若要控制在資料複寫任務期間寫入 Amazon S3 目標的頻率,您可以設定額外的連線屬性 cdcMaxBatchInterval
和 cdcMinFileSize
。在沒有任何額外負荷操作的情況下分析資料時,此設定可使效能提升。如需詳細資訊,請參閱 使用 Amazon S3 做為 目標時的端點設定 AWS DMS
主題
使用 Amazon S3 作為目標的事前準備
使用 Amazon S3 作為目標之前,請檢查下列條件為真:
-
您用作目標的 S3 儲存貯體與您用於遷移資料的 DMS 複寫執行個體位於相同 AWS 區域。
-
您用於遷移 AWS 的帳戶具有 IAM 角色,具有寫入和刪除您用作目標之 S3 儲存貯體的存取權。
-
此角色具有標記存取,因此您可以標記任何寫入到目標儲存貯體的 S3 物件。
-
IAM 角色具有已新增為受信任實體的 DMS (dms.amazonaws.com)。
對於 3.4.7 版和更新 AWS DMS 版本,DMS 必須透過 VPC 端點或公有路由存取來源儲存貯體。如需 VPC 端點的資訊,請參閱 將 VPC 端點設定為 AWS DMS 來源和目標端點。
若要設定此帳戶存取,對於用來建立遷移任務的使用者帳戶,請確定指派給此帳戶的角色具有以下許可集。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:DeleteObject", "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::buckettest2/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::buckettest2" ] } ] }
如需使用驗證搭配 S3 作為目標的先決條件,請參閱 S3 目標驗證先決條件。
使用 Amazon S3 作為目標的限制
使用 Amazon S3 作為目標時,有下列限制:
-
請勿為 S3 啟用版本控制。如果您需要 S3 版本控制,請使用生命週期政策以主動刪除舊版本。否則,您可能會因 S3
list-object
呼叫逾時而遭遇端點測試連線失敗。若要建立 S3 儲存貯體的生命週期政策,請參閱管理儲存生命週期。若要刪除 S3 物件的版本,請參閱刪除啟用版本控制功能之儲存貯體中的物件。 -
3.4.7 及更新版本支援啟用 VPC (閘道 VPC) 的 S3 儲存貯體。
-
變更資料擷取 (CDC) 支援下列資料定義語言 (DDL) 命令:截斷資料表、刪除資料表、建立資料表、重新命名資料表、新增資料欄、刪除資料欄、重新命名資料欄和變更資料欄資料類型。請注意,在來源資料庫中新增、捨棄或重新命名資料欄時,目標 S3 儲存貯體中不會記錄 ALTER 陳述式, AWS DMS 也不會變更先前建立的記錄以符合新結構。變更之後, 會使用新的資料表結構來 AWS DMS 建立新的記錄。
注意
截斷 DDL 操作會移除 S3 儲存貯體中的所有檔案以及相應的資料表資料夾。您可以使用任務設定停用該行為,並設定 DMS 在變更資料擷取 (CDC) 期間處理 DDL 行為的方式。如需詳細資訊,請參閱變更處理 DDL 處理的任務設定。
-
不支援完全的 LOB 模式。
-
不支援在完全載入階段變更來源資料表結構。支援在完全載入階段變更資料。
-
將同一來源資料表中的資料複寫到相同目標 S3 端點儲存貯體的多項任務,會讓這些任務寫入相同的檔案。如果您的資料來源為相同的資料表,建議您指定不同的目標端點 (儲存貯體)。
-
S3 端點不支援
BatchApply
。對 S3 目標使用批次套用 (例如BatchApplyEnabled
目標中繼資料任務設定) 可能會導致資料遺失。 -
DatePartitionEnabled
和addColumnName
無法搭配PreserveTransactions
或CdcPath
一起使用。 -
AWS DMS 不支援使用轉換規則將多個來源資料表重新命名為相同的目標資料夾。
-
如果在完全載入階段需要大量寫入來源資料表,DMS 可能會將重複的記錄寫入 S3 儲存貯體或快取的變更。
-
如果您使用
TargetTablePrepMode
為DO_NOTHING
來設定任務,任務若在完全載入階段突然停止,然後繼續執行,此時 DMS 可能會將重複的記錄寫入 S3 儲存貯體。 -
如果您使用
PreserveTransactions
設定值為true
來設定目標端點,則重新載入資料表並不會清除先前產生的 CDC 檔案。如需詳細資訊,請參閱在 S3 目標上包含交易順序之擷取資料變更 (CDC)。
如需了解使用驗證搭配 S3 作為目標的限制,請參閱 使用 S3 目標驗證的限制。
安全
若要使用 Amazon S3 作為目標,用於遷移的帳戶必須擁有目標 Amazon S3 儲存貯體的寫入和刪除存取權。指定具有存取 Amazon S3 所需許可的 IAM 角色的 Amazon Resource Name (ARN)。
AWS DMS 支援一組預先定義的 Amazon S3 授予,稱為固定存取控制清單 ACLs)。每個標準 ACL 都有一組承授者和許可,供您用來設定 Amazon S3 儲存貯體的許可。您可以在您 S3 目標端點的連線字串屬性中使用 cannedAclForObjects
指定固定 ACL。如需有關使用額外連線屬性 cannedAclForObjects
的詳細資訊,請參閱使用 Amazon S3 做為 目標時的端點設定 AWS DMS。如需 Amazon S3 固定 ACL 的詳細資訊,請參閱固定 ACL。
用於遷移的 IAM 角色必須能夠執行 s3:PutObjectAcl
API 操作。
使用 Apache Parquet 儲存 Amazon S3 物件
逗號分隔值 (.csv) 格式是 Amazon S3 目標物件的預設儲存格式。若要使用更精簡的儲存和更快速的查詢,您可以改用 Apache Parquet (.parquet) 做為儲存格式。
Apache Parquet 是原本專為 Hadoop 設計的開放原始碼檔案儲存格式。如需 Apache Parquet 的詳細資訊,請參閱 https://parquet.apache.org/
若要將 .parquet 設定為您遷移的 S3 目標物件的儲存格式,您可以使用以下機制:
-
當您使用 AWS CLI 或 API for AWS DMS建立端點時,您提供做為 JSON 物件參數的端點設定。如需詳細資訊,請參閱在您的 Amazon S3 目標上使用資料加密、parquet 檔案和 CDC。
-
當您建立端點時,您提供做為分號區隔清單的額外連線屬性。如需詳細資訊,請參閱使用 Amazon S3 做為 目標時的端點設定 AWS DMS。
Amazon S3 物件標記
您可以在任務-資料表映射規則中指定適當的 JSON 物件,以標記複寫執行個體建立的 Amazon S3 物件。如需 S3 物件標記的需求和選項的詳細資訊 (包括有效標籤名稱),請參閱《Amazon Simple Storage Service 使用者指南》中的「物件標記」。如需有關使用 JSON 來映射資料表的詳細資訊,請參閱 使用 JSON 指定資料表選擇及轉換。
對於為指定的資料表和結構描述建立的 S3 物件,請使用 selection
規則類型的一或多個 JSON 物件來這些標記 S3 物件。然後,在此 selection
物件 (或多個物件) 後面,加上具有 post-processing
規則類型和 add-tag
動作的一或多個 JSON 物件。這些後續處理規則識別您要標記的 S3 物件,並針對您要新增到這些 S3 物件的標籤,指定其名稱和值。
在以下資料表中,您可以找到在 post-processing
規則類型的 JSON 物件中指定的參數。
參數 | 可能的值 | 描述 |
---|---|---|
rule-type |
post-processing |
此值將後續處理動作套用到產生的目標物件。您可以指定一或多個後續處理規則,以標記選取的 S3 物件。 |
rule-id |
數值。 | 識別規則的唯一數值。 |
rule-name |
英數值。 | 識別規則的唯一名稱。 |
rule-action |
add-tag |
您想要套用到 S3 物件的後續處理動作。對於 add-tag 動作,您可以使用單一 JSON 後續處理物件來新增一或多個標籤。 |
object-locator |
|
每個要套用規則的結構描述和資料表的名稱。您可以使用 "%" 百分比符號做為萬用字元,以代表每個
|
tag-set |
|
在符合所指定 對於標籤的 注意重要如果您為 |
當您指定多個 post-processing
規則類型來標記一組 S3 物件時,將會從一個後續處理規則中只使用一個 tag-set
物件來標記每個 S3 物件。如果後續處理規則相關聯的物件定位器最符合某個 S3 物件,則會使用此規則中的特定標籤組來標記該 S3 物件。
例如,假設兩個後續處理規則識別相同的 S3 物件。也假設其中一個規則的物件定位器使用萬用字元,而另一個規則的物件定位器使用完全相符來識別 S3 物件 (不含萬用字元)。在這種情況下,與採用完全相符的後續處理規則相關聯的標籤組會用來標記 S3 物件。如果多個後續處理規則都同樣符合指定的 S3 物件,則會使用與第一個後續處理規則相關聯的標籤組來標記物件。
範例 將靜態標籤新增到為單一資料表和結構描述建立的 S3 物件
以下選擇規則和後續處理規則將三個標籤 (tag_1
、tag_2
和 tag_3
連同對應的靜態值 value_1
、value_2
和 value_3
) 新增到建立的 S3 物件。此 S3 物件對應到名為 STOCK
的來源和名為 aat2
的結構描述中的單一資料表。
{ "rules": [ { "rule-type": "selection", "rule-id": "5", "rule-name": "5", "object-locator": { "schema-name": "aat2", "table-name": "STOCK" }, "rule-action": "include" }, { "rule-type": "post-processing", "rule-id": "41", "rule-name": "41", "rule-action": "add-tag", "object-locator": { "schema-name": "aat2", "table-name": "STOCK" }, "tag-set": [ { "key": "tag_1", "value": "value_1" }, { "key": "tag_2", "value": "value_2" }, { "key": "tag_3", "value": "value_3" } ] } ] }
範例 將靜態和動態標籤新增到為多個資料表和結構描述建立的 S3 物件
以下範例有一個選擇規則和兩個後續處理規則,其中,來源的輸入包含所有資料表及其所有結構描述。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "post-processing", "rule-id": "21", "rule-name": "21", "rule-action": "add-tag", "object-locator": { "schema-name": "%", "table-name": "%", }, "tag-set": [ { "key": "dw-schema-name", "value":"${schema-name}" }, { "key": "dw-schema-table", "value": "my_prefix_${table-name}" } ] }, { "rule-type": "post-processing", "rule-id": "41", "rule-name": "41", "rule-action": "add-tag", "object-locator": { "schema-name": "aat", "table-name": "ITEM", }, "tag-set": [ { "key": "tag_1", "value": "value_1" }, { "key": "tag_2", "value": "value_2" } ] } ] }
第一個後續處理規則將兩個標籤 (dw-schema-name
和 dw-schema-table
) 連同對應的動態值 (${schema-name}
和 my_prefix_${table-name}
),新增到幾乎所有在目標中建立的 S3 物件。例外的是以第二個後續處理規則所識別和標記的 S3 物件。因此,對於萬用字元物件定位器所識別的每個目標 S3 物件,用來建立物件的標籤會識別物件在來源中對應的結構描述和資料表。
第二個後續處理規則將 tag_1
和 tag_2
連同對應的靜態值 value_1
和 value_2
,新增到完全相符物件定位器識別的所建立 S3 物件。這個建立的 S3 物件對應到名為 ITEM
的來源和名為 aat
的結構描述中的單一資料表。因為是完全相符,這些標籤在此物件上會取代從第一個後續處理規則新增的任何標籤,而此規則僅以萬用字元比對 S3 物件。
範例 將動態標籤名稱和值新增至 S3 物件
以下範例有兩個選擇規則和一個後續處理規則。其中,來源的輸入只在 retail
或 wholesale
結構描述中包含 ITEM
資料表。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "retail", "table-name": "ITEM" }, "rule-action": "include" }, { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "wholesale", "table-name": "ITEM" }, "rule-action": "include" }, { "rule-type": "post-processing", "rule-id": "21", "rule-name": "21", "rule-action": "add-tag", "object-locator": { "schema-name": "%", "table-name": "ITEM", }, "tag-set": [ { "key": "dw-schema-name", "value":"${schema-name}" }, { "key": "dw-schema-table", "value": "my_prefix_ITEM" }, { "key": "${schema-name}_ITEM_tag_1", "value": "value_1" }, { "key": "${schema-name}_ITEM_tag_2", "value": "value_2" } ] ] }
後續處理規則的標籤組將兩個標籤 (dw-schema-name
和 dw-schema-table
) 新增到目標中為 ITEM
資料表建立的所有 S3 物件。第一個標籤有動態值 "${schema-name}"
,第二個標籤有靜態值 "my_prefix_ITEM"
。因此,對於每個目標 S3 物件,用來建立物件的標籤會識別物件在來源中對應的結構描述和資料表。
此外,標籤組還以動態名稱 (${schema-name}_ITEM_tag_1
和 "${schema-name}_ITEM_tag_2"
) 新增兩個額外的標籤。這些具有對應的靜態值 value_1
和 value_2
。因此,這些標籤將各以目前結構描述 retail
或 wholesale
來命名。您無法在此物件中建立重複的動態標籤名稱,因為每個物件是針對單一唯一結構描述名稱而建立。結構描述名稱用於建立其他唯一的標籤名稱。
建立 AWS KMS 金鑰來加密 Amazon S3 目標物件
您可以建立並使用自訂 AWS KMS 金鑰來加密 Amazon S3 目標物件。在建立 KMS 金鑰之後,當您建立 S3 目標端點時,您可以使用以下其中一個方法,以此金鑰來加密物件:
-
當您使用 AWS CLI執行
create-endpoint
命令時,對 S3 目標物件 (使用預設 .csv 檔案儲存格式) 使用以下選項。--s3-settings '{"ServiceAccessRoleArn": "
your-service-access-ARN
", "CsvRowDelimiter": "\n", "CsvDelimiter": ",", "BucketFolder": "your-bucket-folder
", "BucketName": "your-bucket-name
", "EncryptionMode": "SSE_KMS", "ServerSideEncryptionKmsKeyId": "your-KMS-key-ARN
"}'其中,
是 KMS 金鑰的 Amazon Resource Name (ARN)。如需詳細資訊,請參閱在您的 Amazon S3 目標上使用資料加密、parquet 檔案和 CDC。your-KMS-key-ARN
-
將額外連線屬性
encryptionMode
設定為值SSE_KMS
,將額外連線屬性serverSideEncryptionKmsKeyId
設定為 KMS 金鑰的 ARN。如需詳細資訊,請參閱使用 Amazon S3 做為 目標時的端點設定 AWS DMS。
若要使用 KMS 金鑰加密 Amazon S3 目標物件,您需要一個具備 Amazon S3 儲存貯體存取許可的 IAM 角色。將政策 (金鑰政策) 連接到您建立的加密金鑰,然後在該政策中存取此 IAM 角色。若要這麼做,您可以在 IAM 主控台建立下列項目:
-
具備 Amazon S3 儲存貯體存取許可的政策。
-
搭配此政策的 IAM 角色。
-
KMS 金鑰加密金鑰搭配參考此角色的金鑰政策。
下列程序說明作法。
建立具備 Amazon S3 儲存貯體存取許可的 IAM 政策
開啟位於 https://console.aws.amazon.com/iam/
的 IAM 主控台。 -
在導覽窗格中,選擇 Policies (政策)。Policies (政策) 頁面隨即開啟。
-
選擇 建立政策。Create policy (建立政策) 頁面隨即開啟。
-
選擇 Service (服務),然後選擇 S3。將出現動作許可清單。
-
選擇 Expand all (全部展開) 來展開清單,然後至少選擇以下許可:
-
ListBucket
-
PutObject
-
DeleteObject
選擇您需要的任何其他許可,然後選擇 Collapse all (全部折疊) 來折疊清單。
-
-
選擇 Resources (資源) 以指定想要存取的資源。至少選擇所有資源,以提供一般 Amazon S3 資源存取。
-
新增您需要的任何其他條件或許可,然後選擇 Review policy (檢閱政策)。在 Review policy (檢閱政策) 頁面檢查您的結果。
-
確認是您需要的設定後,輸入政策的名稱 (例如,
DMS-S3-endpoint-access
) 和任何描述,然後選擇 Create policy (建立政策)。Policies (政策) 頁面隨即開啟,並以訊息指出已建立您的政策。 -
在 Policies (政策) 清單中搜尋並選擇政策名稱。將會出現 Summary (總結) 頁面,其中顯示類似以下的政策 JSON。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:ListBucket", "s3:DeleteObject" ], "Resource": "*" } ] }
現在,您已經以指定的名稱建立新政策來存取要加密的 Amazon S3 資源,例如 DMS-S3-endpoint-access
。
建立搭配此政策的 IAM 角色
-
在 IAM 主控台的導覽窗格中,選擇角色。Roles (角色) 詳細資訊頁面隨即開啟。
-
選擇建立角色。Create role (建立角色) 頁面隨即開啟。
-
選擇 AWS 服務做為信任的實體時,選擇 DMS 做為要使用 IAM 角色的服務。
-
選擇下一步:許可。建立角色頁面中隨即出現連接許可政策檢視。
-
尋找並選取您在之前程序中 (
DMS-S3-endpoint-access
) 建立 IAM 角色的 IAM 政策。 -
選擇下一步:標籤。建立角色頁面中隨即顯示新增標籤檢視。在此,可以增加您想要的任何標籤。
-
選擇下一步:檢閱。建立角色頁面中隨即顯示檢閱檢視。您可以在這裡驗證結果。
-
確認是您需要的設定後,輸入角色的名稱 (必要,例如
DMS-S3-endpoint-access-role
) 和任何額外的描述,然後選擇 Create role (建立角色)。Roles (角色) 詳細資訊頁面隨即開啟,並以訊息指出已建立您的角色。
現在,您已經以指定的名稱建立新角色,用於存取要加密的 Amazon S3 資源,例如 DMS-S3-endpoint-access-role
。
搭配參考 IAM 角色的金鑰政策來建立 KMS 金鑰加密金鑰
注意
如需如何使用 AWS DMS AWS KMS 加密金鑰的詳細資訊,請參閱設定加密金鑰並指定 AWS KMS 許可。
-
登入 AWS Management Console ,並在 https://https://console.aws.amazon.com/kms
開啟 AWS Key Management Service (AWS KMS) 主控台。 -
若要變更 AWS 區域,請使用頁面右上角的區域選擇器。
-
在導覽窗格中,選擇 Customer managed keys (客戶受管金鑰)。
-
選擇建立金鑰。Configure key (設定金鑰) 頁面隨即開啟。
-
針對 Key type (金鑰類型),請選擇 Symmetric (對稱)。
注意
建立此金鑰時,您只能建立對稱金鑰,因為 Amazon S3 等所有 AWS 服務都只能使用對稱加密金鑰。
-
選擇 Advanced Options (進階選項)。針對 Key material origin (金鑰材料來源),請確認已選擇 KMS,然後選擇 Next (下一步)。Add labels (新增標籤) 頁面隨即開啟。
-
針對 Create alias and description (建立別名和描述),請輸入一個金鑰別名 (例如,
DMS-S3-endpoint-encryption-key
) 和任何額外的描述。 -
針對 Tags (標籤),請新增您想要的任何標籤以協助識別金鑰和追蹤其使用情況,然後選擇 Next (下一步)。Define key administrative permissions (定義金鑰管理許可) 頁面隨即開啟,其中顯示您可以選擇的使用者和角色清單。
-
新增您想要的使用者和角色來管理金鑰。請確定這些使用者和角色具有管理金鑰所需的許可。
-
針對 Key deletion (金鑰刪除),請選擇金鑰管理員是否可以刪除金鑰,然後選擇 Next (下一步)。Define key usage permissions (定義金鑰使用許可) 頁面隨即開啟,其中顯示您可以選擇的額外使用者和角色清單。
-
針對此帳戶,選擇您要對 Amazon S3 目標執行密碼編譯操作的可用使用者。並請選擇您之前在角色中建立的角色,以啟用存取來加密 Amazon S3 目標物件,例如
DMS-S3-endpoint-access-role
。 -
如果您想要新增其他未列出的帳戶以擁有相同的存取權,請針對其他 AWS 帳戶選擇新增另一個 AWS 帳戶,然後選擇下一步。Review and edit key policy (檢閱並編輯金鑰政策) 頁面隨即開啟,並顯示金鑰政策的 JSON,您可以透過輸入現有 JSON 來執行檢閱和編輯。在此,您可以查看金鑰政策於何處參考您在上一步所選擇的角色與使用者 (例如
Admin
和User1
)。您也可以查看不同委託人 (使用者和角色) 允許的不同金鑰動作,如以下範例所示。{ "Id": "key-consolepolicy-3", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/Admin" ] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/DMS-S3-endpoint-access-role", "arn:aws:iam::111122223333:role/Admin", "arn:aws:iam::111122223333:role/User1" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/DMS-S3-endpoint-access-role", "arn:aws:iam::111122223333:role/Admin", "arn:aws:iam::111122223333:role/User1" ] }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } } ]
-
選擇 Finish (完成)。加密金鑰頁面隨即開啟,並以訊息指出已建立您的 KMS 金鑰。
您現在已使用指定的別名建立新的 KMS 金鑰 (例如,DMS-S3-endpoint-encryption-key
)。此金鑰可讓 AWS DMS 加密 Amazon S3 目標物件。
使用日期型資料夾分割
AWS DMS 當您使用 Amazon S3 Amazon S3 資料夾分割區。透過日期型資料夾分割,您可以將資料從單一來源資料表寫入 S3 儲存貯體中的時間階層資料夾結構。透過在建立 S3 目標端點時分割資料夾,您可以實現下列事項:
-
更妥善管理您的 S3 物件
-
限制每個 S3 資料夾的大小
-
最佳化資料湖查詢或其他後續作業
在建立 S3 目標端點時,您可以啟用日期型資料夾分割。您可以在遷移現有資料並複寫持續的變更 (完全載入 + CDC) 或僅複寫資料變更 (僅限 CDC) 時啟用此功能。使用下列目標端點設定:
-
DatePartitionEnabled
– 根據日期指定分區。將此布林選項設為true
時,此參數會根據交易遞交日期對 S3 儲存貯體資料夾進行分割。您不能將此設定與
PreserveTransactions
或CdcPath
搭配使用。預設值為
false
。 -
DatePartitionSequence
– 識別資料夾分割期間要使用的日期格式順序。將此 ENUM 選項設置為YYYYMMDD
、YYYYMMDDHH
、YYYYMM
、MMYYYYDD
或DDMMYYYY
。預設值為YYYYMMDD
。當DatePartitionEnabled
設定為true.
時,請使用此項設定。 -
DatePartitionDelimiter
– 指定資料夾分割期間要使用的日期分隔符號。將此 ENUM 選項設置為SLASH
、DASH
、UNDERSCORE
或NONE
。預設值為SLASH
。當DatePartitionEnabled
設定為true
時,使用此項設定。
下列範例會示範如何啟用日期型的資料夾分割,並使用資料分割順序和分隔符號的預設值。它使用 . AWS CLIcreate-endpoint
命令--s3-settings '{
的選項。json-settings
}'
--s3-settings '{"DatePartitionEnabled": true,"DatePartitionSequence": "YYYYMMDD","DatePartitionDelimiter": "SLASH"}'
使用 Amazon S3 做為 的目標時,分割來源的平行負載 AWS DMS
您可以設定將分割資料來源平行完全載入到 Amazon S3 目標。此方法可改善將分割資料從支援的來源資料庫引擎遷移至 S3 目標的載入時間。若要改善分割來源資料的載入時間,您可以建立對應至來源資料庫中每個資料表分割區的 S3 目標子資料夾。這些分割區繫結子資料夾允許 AWS DMS 執行平行程序,以填入目標上的每個子資料夾。
若要設定 S3 目標的平行完全載入,S3 支援資料表對應 table-settings
規則的三種 parallel-load
規則類型:
partitions-auto
partitions-list
ranges
如需這些平行載入規則類型的詳細資訊,請參閱 資料表和集合設定規則與操作。
對於 partitions-auto
和 partitions-list
規則類型, AWS DMS 會使用來源端點中的每個分割區名稱來識別目標子資料夾結構,如下所示。
bucket_name
/bucket_folder
/database_schema_name
/table_name
/partition_name
/LOADseq_num
.csv
此處,用於資料遷移和儲存的 S3 目標子資料夾路徑包含一個額外的
子資料夾,該子資料夾對應至具有相同名稱的來源分割區。此 partition_name
子資料夾隨後會儲存一個或多個 partition_name
LOAD
檔案,其中包含遷移自指定來源分割區的資料。此處seq_num
.csv
是 .csv 檔案名稱上的序號後綴,例如seq_num
00000001
在 .csv 檔案中,名稱為 LOAD00000001.csv
。
不過,某些資料庫引擎 (例如 MongoDB 和 DocumentDB) 並沒有分割區的概念。對於這些資料庫引擎, AWS DMS 會將執行中的來源區段索引新增為目標 .csv 檔案名稱的字首,如下所示。
.../
database_schema_name
/table_name
/SEGMENT1_LOAD00000001.csv .../database_schema_name
/table_name
/SEGMENT1_LOAD00000002.csv ... .../database_schema_name
/table_name
/SEGMENT2_LOAD00000009.csv .../database_schema_name
/table_name
/SEGMENT3_LOAD0000000A.csv
其中檔案 SEGMENT1_LOAD00000001.csv
和 SEGMENT1_LOAD00000002.csv
的命名會使用相同的執行中來源區段索引前綴 SEGMENT1
。如此命名是因為這兩個 .csv 檔案的遷移來源資料都關聯至相同的執行中來源區段索引。另一方面,儲存在目標 SEGMENT2_LOAD00000009.csv
和 SEGMENT3_LOAD0000000A.csv
檔案中的遷移資料會分別關聯至不同的執行中來源區段索引。每個檔案都會在其檔案名稱前加上其正在執行的區段索引名稱,SEGMENT2
和 SEGMENT3
。
對於 ranges
平行載入類型,您可以使用 table-settings
規則的 columns
和 boundaries
設定來定義欄名稱和欄值。透過這些規則,您可以指定與區段名稱對應的分割區,如下所示。
"parallel-load": { "type": "ranges", "columns": [ "region", "sale" ], "boundaries": [ [ "NORTH", "1000" ], [ "WEST", "3000" ] ], "segment-names": [ "custom_segment1", "custom_segment2", "custom_segment3" ] }
其中 segment-names
設定會定義 S3 目標上用於平行遷移資料的三個分割區名稱。遷移的資料會平行載入並依序儲存在分割區子資料夾下的 .csv 檔案中,如下所示。
.../
database_schema_name
/table_name
/custom_segment1/LOAD[00000001...].csv .../database_schema_name
/table_name
/custom_segment2/LOAD[00000001...].csv .../database_schema_name
/table_name
/custom_segment3/LOAD[00000001...].csv
在此, 會將一系列 .csv 檔案 AWS DMS 存放在三個分割區子資料夾中。每個分割區子資料夾中的一系列 .csv 檔案會從 LOAD00000001.csv
開始遞增命名,直到所有資料遷移完成。
在某些情況下,您可能無法使用 segment-names
設定明確命名 ranges
平行載入類型的分割區子資料夾。在這些情況下, AWS DMS 會套用在其
子資料夾下建立每個系列 .csv 檔案的預設值。此時 AWS DMS 會在每個系列的 .csv 檔案的檔案名稱開頭加上執行中來源區段索引的名稱,如下所示。table_name
.../
database_schema_name
/table_name
/SEGMENT1_LOAD[00000001...].csv .../database_schema_name
/table_name
/SEGMENT2_LOAD[00000001...].csv .../database_schema_name
/table_name
/SEGMENT3_LOAD[00000001...].csv ... .../database_schema_name
/table_name
/SEGMENTZ
_LOAD[00000001...].csv
使用 Amazon S3 做為 目標時的端點設定 AWS DMS
您可以使用端點設定來設定您的 S3 目標資料庫,類似於使用額外的連線屬性。當您使用 AWS DMS 主控台或使用 中的 create-endpoint
命令搭配 --s3-settings '{"
JSON 語法來建立目標端點時AWS CLI,您可以指定設定。EndpointSetting"
: "value"
, ...
}'
下列資料表顯示您可搭配 Amazon S3 作為目標使用的端點設定。
選項 | Description |
---|---|
CsvNullValue |
選擇性參數,指定如何處理 null AWS DMS 值。處理 Null 值時,您可以在寫入目標時使用此參數將使用者定義的字串作為 Null 傳遞。例如,目標資料行可為 Null 時,您可以使用此選項來區分空字串值和 Null 值。因此,如果您將此參數值設定為空字串 (" " 或 ''), 會將空字串 AWS DMS 視為 null 值,而不是 預設值: 有效值:任何有效字串 範例: |
AddColumnName |
設定為 您不能將此參數搭配 預設值: 有效值: 範例: |
AddTrailingPaddingCharacter |
使用 S3 目標端點設定 類型:布林值 範例: |
BucketFolder |
選用參數;可設定 S3 儲存貯體中的資料夾名稱。如果提供此參數,則目標物件會建立為路徑 範例: |
BucketName |
S3 儲存貯體的名稱,S3 目標物件會在其中建立為 .csv 或 .parquet 檔案。 範例: |
CannedAclForObjects |
可讓 AWS DMS 將 S3 儲存貯體中建立之物件的預先定義 (掃描) 存取控制清單指定為 .csv 或 .parquet 檔案的值。如需有關 Amazon S3 標準 ACL 的詳細資訊,請參閱《Amazon S3 開發人員指南》中的標準 ACL。 預設值:NONE 此屬性的有效值:NONE、PRIVATE、PUBLIC_READ、PUBLIC_READ_WRITE、AUTHENTICATED_READ、AWS_EXEC_READ、BUCKET_OWNER_READ、BUCKET_OWNER_FULL_CONTROL。 範例: |
CdcInsertsOnly |
變更資料擷取 (CDC )期間的選用參數載入僅會寫入 INSERT 操作到逗號分隔值 (.csv) 檔案,或欄式儲存 (.parquet) 的輸出檔案。根據預設 ( 僅針對 .csv 格式,這些 INSERTS 記錄取決於 預設值: 有效值: 範例: |
CdcInsertsAndUpdates |
啟用變更資料擷取 (CDC) 載入,以將 INSERT (插入) 和 UPDATE (更新) 操作寫入 .csv 或 .parquet (直欄式儲存) 輸出檔案。預設設定為 這些 INSERT 和 UPDATE 的記錄,取決於 有關這些參數如何共同運作的更多資訊,請參閱 在遷移的 S3 資料中指示來源資料庫操作。 注意
預設值: 有效值: 範例: |
|
指定 CDC 檔案的資料夾路徑。對於 S3 來源,如果任務要擷取變更資料,此設定即為必要,否則即為選用。如果已設定 您不能將此參數搭配 類型:字串 例如,如果您將 如果您指定相同的 注意3.4.2 版和更新 AWS DMS 版本支援此設定。 依交易順序擷取資料變更時,無論目標上的 DataFormat S3 設定值為何,DMS 一律會將資料列變更儲存在 .csv 檔案中。DMS 不會使用 .parquet 檔案以交易順序儲存資料變更。 |
|
將檔案輸出到 Amazon S3 的間隔長度條件上限(以秒定義)。 預設值:60 秒 指定 注意從 3.5.3 AWS DMS 版開始,當使用 PostgreSQL 或 Aurora PostgreSQL 做為來源,以及使用 Parquet 做為目標的 Amazon S3 時, |
|
將檔案輸出到 Amazon S3 的檔案大小條件下限 (以 KB 定義)。 預設值:32000 KB 指定 |
|
如果設為 您不能將此參數搭配 類型:布林值 依交易順序擷取資料變更時,無論目標上的 DataFormat S3 設定值為何,DMS 一律會將資料列變更儲存在 .csv 檔案中。DMS 不會使用 .parquet 檔案以交易順序儲存資料變更。 注意3.4.2 版和更新 AWS DMS 版本支援此設定。 |
IncludeOpForFullLoad |
完全載入期間的選用參數,僅會寫入 INSERT 操作到逗號分隔值 (.csv) 輸出檔案。 針對完全載入,記錄僅能插入。在預設情況下 ( 注意此參數與 預設值: 有效值: 範例: |
CompressionType |
設定為 時使用 預設值: 有效值: 範例: |
CsvDelimiter |
在 .csv 來源檔案中用於區隔欄的分隔符號。預設為逗號 (,)。 範例: |
CsvRowDelimiter |
在 .csv 來源檔案中用於區隔列的分隔符號。預設為新行 (\n)。 範例: |
|
對於完全載入期間遷移到 S3 目標時要建立的任何 .csv 檔案,此值指定其大小上限 (KB)。 預設值:1048576 KB (1 GB) 有效值:1–1,048,576 範例: |
Rfc4180 |
選用參數,對於只使用 .csv 檔案格式遷移到 Amazon S3 的資料,用來設定 RFC 合規行為。當此值設為 預設值: 有效值: 範例: |
EncryptionMode |
對於複製到 S3 的 .csv 或 .parquet 物件檔案,您想要用來加密檔案的伺服器端加密模式。有效值為 注意您也可以使用 CLI 預設值: 有效值: 範例: |
ServerSideEncryptionKmsKeyId |
如果您將 範例: |
DataFormat |
AWS DMS 用於建立 S3 物件之檔案的輸出格式。對於 Amazon S3 目標, AWS DMS 支援 .csv 或 .parquet 檔案。.parquet 檔案具有二進位單欄式儲存格式,以及有效率的壓縮選項和更快速的查詢效能。如需 .parquet 檔案的詳細資訊,請參閱 https://parquet.apache.org/ 預設值: 有效值: 範例: |
EncodingType |
Parquet 編碼類型。編碼類型選項包括下列項目:
預設值: 有效值: 範例: |
DictPageSizeLimit |
.parquet 檔案中一個字典頁面允許的大小上限 (以位元組為單位)。如果字典頁面超過此值,頁面會使用純文字編碼。 預設值:1,024,000 (1 MB) 有效值:任何有效的整數值 範例: |
RowGroupLength |
.parquet 檔案的一個資料列群組的列數。 預設值:10,024 (10 KB) 有效值:任何有效的整數 範例: |
DataPageSize |
.parquet 檔案中一個資料頁面允許的大小上限 (以位元組為單位)。 預設值:1,024,000 (1 MB) 有效值:任何有效的整數 範例: |
ParquetVersion |
.parquet 檔案格式的版本。 預設值: 有效值: 範例: |
EnableStatistics |
設為 預設值: 有效值: 範例: |
TimestampColumnName |
選用參數;可包含在 S3 目標端點資料的時間戳記欄位。 AWS DMS 當您 針對完全載入,此時間戳記欄位的每一資料列,包含一個資料透過 DMS 從來源移轉至目標的時間戳記。 針對 CDC 載入,每個資料列的時間戳記欄位,包含該列在來源資料庫認可的時間戳記。 此時間戳記欄位值的字串格式為 當 範例: |
UseTaskStartTimeForFullLoadTimestamp |
設定為
預設值: 有效值: 範例:
|
ParquetTimestampInMillisecond |
選用參數,用來指定以 .parquet 格式寫入至 S3 物件之任何 當此屬性設定為 目前, Amazon Athena 和 AWS Glue 只能處理 注意
預設值: 有效值: 範例: |
GlueCatalogGeneration |
若要產生 AWS Glue Data Catalog,請將此端點設定設為 預設值: 有效值: 範例: 注意:請勿將 |
使用 AWS Glue Data Catalog 搭配 Amazon S3 目標 AWS DMS
AWS Glue 是一種 服務,提供簡單的資料分類方法,由名為 的中繼資料儲存庫組成 AWS Glue Data Catalog。您可以將 AWS Glue Data Catalog 與您的 Amazon S3 目標端點整合,並透過 Amazon Athena AWS 等其他服務查詢 Amazon S3 資料。 Amazon Athena Amazon Redshift 適用於 , AWS Glue 但 AWS DMS 不支援該選項做為預先建置的選項。
若要產生資料目錄,請將GlueCatalogGeneration
端點設定設為 true
,如下列 AWS CLI 範例所示。
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "DataFormat": "parquet", "GlueCatalogGeneration": true}'
對於包含 csv
類型資料的完全載入複製任務,請將 IncludeOpForFullLoad
設定為 true
。
請勿將 GlueCatalogGeneration
搭配 PreserveTransactions
和 CdcPath
使用。 AWS Glue 爬蟲程式無法協調存放在指定 下檔案的不同結構描述CdcPath
。
若要讓 Amazon Athena 為您的 Amazon S3 資料建立索引,以及透過 Amazon Athena 使用標準 SQL 查詢來查詢資料,連接到端點的 IAM 角色必須具有下列政策:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": [ "arn:aws:s3:::bucket123", "arn:aws:s3:::bucket123/*" ] }, { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:GetDatabase", "glue:CreateTable", "glue:DeleteTable", "glue:UpdateTable", "glue:GetTable", "glue:BatchCreatePartition", "glue:CreatePartition", "glue:UpdatePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition" ], "Resource": [ "arn:aws:glue:*:111122223333:catalog", "arn:aws:glue:*:111122223333:database/*", "arn:aws:glue:*:111122223333:table/*" ] }, { "Effect": "Allow", "Action": [ "athena:StartQueryExecution", "athena:GetQueryExecution", "athena:CreateWorkGroup" ], "Resource": "arn:aws:athena:*:111122223333:workgroup/glue_catalog_generation_for_task_*" } ] }
參考
在您的 Amazon S3 目標上使用資料加密、parquet 檔案和 CDC
您可以使用 S3 目標端點設定來設定下列項目:
-
用於加密 S3 目標物件的自訂 KMS 金鑰。
-
做為 S3 目標物件儲存格式的 Parquet 檔案。
-
在 S3 目標上包含交易順序之擷取資料變更 (CDC)。
-
AWS Glue Data Catalog 與您的 Amazon S3 目標端點整合,並透過 Amazon Athena 等其他服務查詢 Amazon Amazon S3 資料。
AWS KMS 資料加密的金鑰設定
以下範例說明設定自訂的 KMS 金鑰,以加密您的 S3 目標物件。若要啟動,您可以執行下列 create-endpoint
CLI 命令。
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "
your-service-access-ARN
", "CsvRowDelimiter": "\n", "CsvDelimiter": ",", "BucketFolder": "your-bucket-folder
", "BucketName": "your-bucket-name
", "EncryptionMode": "SSE_KMS", "ServerSideEncryptionKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480"}'
其中,--s3-settings
選項指定的 JSON 物件定義兩個參數。一個是 EncryptionMode
參數,值為 SSE_KMS
。另一個是 ServerSideEncryptionKmsKeyId
參數,值為 arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480
。這個值是自訂 KMS 金鑰的 Amazon Resource Name (ARN)。對於 S3 目標,您還可以指定額外的設定。這些設定可識別伺服器存取角色,提供預設 CSV 物件儲存格式的分隔符號,以及提供儲存貯體位置和名稱來儲存 S3 目標物件。
在預設情況下,將使用 S3 伺服器端加密進行 S3 資料加密。對於上述範例中的 S3 目標,這也等同於指定其端點設定,如下列範例所示。
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "
your-service-access-ARN
", "CsvRowDelimiter": "\n", "CsvDelimiter": ",", "BucketFolder": "your-bucket-folder
", "BucketName": "your-bucket-name
", "EncryptionMode": "SSE_S3"}'
如需使用 S3 伺服器端加密的詳細資訊,請參閱使用伺服器端加密保護資料。
注意
您也可以使用 CLI modify-endpoint
指令將現有端點的 EncryptionMode
參數值從 SSE_KMS
變更為 SSE_S3
。但您不能將 EncryptionMode
值從 SSE_S3
變更為 SSE_KMS
。
關於使用 .parquet 檔案儲存 S3 目標物件的設定
建立 S3 目標物件的預設格式為 .csv 檔案。以下範例顯示一些端點設定,用於指定 .parquet 檔案做為建立 S3 目標物件的格式。您可以用所有預設值指定 .parquet 檔案格式,如下列範例所示。
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "
your-service-access-ARN
", "DataFormat": "parquet"}'
其中,DataFormat
參數設為 parquet
,以所有 S3 預設值啟用此格式。這些預設值中有一種字典編碼 ("EncodingType: "rle-dictionary"
) 使用位元壓縮和執行長度編碼的組合,更有效率地儲存重複值。
對於預設值以外的選項,您可以新增額外的設定,如下列範例所示。
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "DataFormat": "parquet", "EncodingType: "plain-dictionary", "DictPageSizeLimit": 3,072,000, "EnableStatistics": false }'
在這種情況下,除了幾個標準 S3 儲存貯體選項的參數和 DataFormat
參數,還會設定以下額外的 .parquet 檔案參數:
-
EncodingType
– 設定為字典編碼 (plain-dictionary
),將每欄中發現的值儲存在字典頁面的每欄區塊中。 -
DictPageSizeLimit
– 設定為字典頁面大小上限 3 MB。 -
EnableStatistics
– 停用預設值,以允許收集有關 Parquet 檔案頁面和資料列群組的統計資料。
在 S3 目標上包含交易順序之擷取資料變更 (CDC)
根據預設,當 AWS DMS 執行 CDC 任務時,它會將記錄於來源資料庫 (或資料庫) 的所有資料列變更存放在每個資料表的一或多個檔案中。包含相同資料表變更的每個檔案集位於與該資料表相關聯的單一目標目錄中。 會 AWS DMS 建立與遷移至 Amazon S3 目標端點的資料庫資料表一樣多的目標目錄。檔案將儲存在這些目錄的 S3 目標上,而不考慮交易順序。如需檔案命名慣例、資料內容及格式的詳細資訊,請參閱 使用 Amazon S3 做為 的目標 AWS Database Migration Service。
若要以同樣擷取交易順序的方式擷取來源資料庫變更,您可以指定 S3 端點設定,以指示 將所有資料庫資料表的資料列變更 AWS DMS 存放在根據交易大小建立的一或多個 .csv 檔案中。對於每個交易中涉及的所有資料表,這些 .csv 交易檔案包含依交易順序列出的所有資料列變更。這些交易檔案將一起存放於您同樣在 S3 目標上指定的單一交易目錄中。在每個交易檔案中,每個資料列變更的交易操作、資料庫及來源資料表的身分,將儲存為資料列資料的一部分,如下所示。
operation
,table_name
,database_schema_name
,field_value
,...
其中
是已變更資料列上的交易作業,operation
是已變更資料列的資料庫資料表名稱,table_name
是資料表所在資料庫結構描述的名稱,而 database_schema_name
是指定資料列資料的一或多個欄位值當中的第一個。field_value
下列交易檔案的範例展示涉及兩個資料表之一或多個交易的已變更資料列。
I,Names_03cdcad11a,rdsTempsdb,13,Daniel U,Names_03cdcad11a,rdsTempsdb,23,Kathy D,Names_03cdcad11a,rdsTempsdb,13,Cathy I,Names_6d152ce62d,rdsTempsdb,15,Jane I,Names_6d152ce62d,rdsTempsdb,24,Chris I,Names_03cdcad11a,rdsTempsdb,16,Mike
在這裡,每列上的交易操作由第一欄的 I
(插入)、U
(更新) 或 D
(刪除) 表示。第二欄的值是資料表名稱 (例如 Names_03cdcad11a
)。第三欄的值是資料庫結構描述名稱 (例如 rdsTempsdb
)。剩餘的欄會填入您自己的列資料 (例如 13,Daniel
)。
此外, 會根據下列命名慣例,使用時間戳記 AWS DMS 來為其在 Amazon S3 目標上建立的交易檔案命名。
CDC_TXN-
timestamp
.csv
其中
是建立交易檔案的時間,如下列範例所示。timestamp
CDC_TXN-20201117153046033.csv
檔案名稱中的這個時間戳記可確保當您在交易目錄中列出交易檔案時,這些檔案會依交易順序建立和列出。
注意
以交易順序擷取資料變更時,無論目標上 DataFormat
S3 設定的值為何, AWS DMS 一律都會將資料列變更儲存在 .csv 檔案中。 AWS DMS 不會使用 .parquet 檔案以交易順序儲存資料變更。
若要控制在資料複寫任務期間寫入 Amazon S3 目標的頻率,您可以設定 CdcMaxBatchInterval
和 CdcMinFileSize
設定。在沒有任何額外負荷操作的情況下分析資料時,此設定可使效能提升。如需詳細資訊,請參閱 使用 Amazon S3 做為 目標時的端點設定 AWS DMS
告知 AWS DMS 以交易順序存放所有資料列變更
-
將目標上的
PreserveTransactions
S3 設定設為true
。 -
將目標上的
CdcPath
S3 設定設為相對資料夾路徑 AWS DMS ,以便存放 .csv 交易檔案。AWS DMS 在預設 S3 目標儲存貯體和工作目錄下,或您在目標上使用
BucketName
和BucketFolder
S3 設定指定的儲存貯體和儲存貯體資料夾下,建立此路徑。
在遷移的 S3 資料中指示來源資料庫操作
當 將記錄 AWS DMS 遷移至 S3 目標時,它可以在每個遷移的記錄中建立額外的欄位。此額外的欄位指示來源資料庫套用到記錄的操作。如何 AWS DMS 建立和設定第一個欄位取決於 includeOpForFullLoad
、 和 的遷移任務類型cdcInsertsOnly
和設定cdcInsertsAndUpdates
。
如果完全載入的 includeOpForFullLoad
是 true
, AWS DMS 一律會在每個 .csv 記錄中額外建立第一個欄位。此欄位包含字母 I (INSERT),用來指示資料列是插入到來源資料庫。對於 CDC 負載,當 cdcInsertsOnly
為 false
(預設值) 時, AWS DMS 也會一律在每個 .csv 或 .parquet 記錄中建立額外的第一個欄位。此欄位包含字母 I (INSERT)、U (UPDATE) 或 D (DELETE),用來指示來源資料庫的插入、更新或刪除資料列。
在下表中,您可以了解如何 includeOpForFullLoad
和 cdcInsertsOnly
屬性的設定如何共同運作,影響遷移記錄設定。
使用這些參數設定 | DMS 對於 .csv 和 .parquet 輸出的設定目標記錄如下 | ||
---|---|---|---|
includeOpForFullLoad | cdcInsertsOnly | 對於完全載入 | 對於 CDC 載入 |
true |
true |
新增第一個欄位的值設定為 I |
新增第一個欄位的值設定為 I |
false |
false |
沒有新增的欄位 | 新增第一個欄位的值設定為 I 、U 、或 D |
false |
true |
沒有新增的欄位 | 沒有新增的欄位 |
true |
false |
新增第一個欄位的值設定為 I |
新增第一個欄位的值設定為 I 、U 、或 D |
當 includeOpForFullLoad
和 cdcInsertsOnly
設定為相同的值,目標記錄會根據控制目前遷移類型設定記錄的屬性設定。這個屬性是 includeOpForFullLoad
用於完全載入和 cdcInsertsOnly
CDC 載入。
當 includeOpForFullLoad
和 cdcInsertsOnly
設定為不同的值時, AWS DMS 會讓 CDC 和完全載入的目標記錄設定一致。藉由任何先前 includeOpForFullLoad
指定的完全載入記錄,設定 CDC 載入符合記錄設定。
換言之,假設完全載入設為新增第一個欄位,用來指示插入記錄。在這種情況下,接下來的 CDC 載入設為新增第一個欄位,用來指示插入、更新或刪除記錄作為適當的來源。相反地,假設完全載入設定為 不 新增第一個欄位,用來指示插入記錄。在這種情況下,CDC 載入也設定為每個記錄不新增第一個欄位,無論來源對應的記錄操作為何。
同樣地,DMS 建立及設定額外第一個欄位的方式,取決於 includeOpForFullLoad
和 cdcInsertsAndUpdates
的設定。在下表中,您可以了解如何 includeOpForFullLoad
和 cdcInsertsAndUpdates
屬性的設定如何共同運作,以影響此格式中的遷移記錄設定。
使用這些參數設定 | DMS 對於 .csv 輸出的設定目標記錄如下 | ||
---|---|---|---|
includeOpForFullLoad | cdcInsertsAndUpdates | 對於完全載入 | 對於 CDC 載入 |
true |
true |
新增第一個欄位的值設定為 I |
新增第一個欄位的值設定為 I 或 U |
false |
false |
沒有新增的欄位 | 新增第一個欄位的值設定為 I 、U 、或 D |
false |
true |
沒有新增的欄位 | 新增第一個欄位的值設定為 I 或 U |
true |
false |
新增第一個欄位的值設定為 I |
新增第一個欄位的值設定為 I 、U 、或 D |
S3 Parquet 的目標資料類型
下表顯示使用 時支援的 Parquet 目標資料類型, AWS DMS 以及來自 AWS DMS 資料類型的預設映射。
如需 AWS DMS 資料類型的詳細資訊,請參閱 AWS Database Migration Service 的資料類型。
AWS DMS 資料類型 |
S3 parquet 資料類型 |
---|---|
BYTES |
BINARY |
DATE |
DATE32 |
TIME |
TIME32 |
DATETIME |
TIMESTAMP |
INT1 |
INT8 |
INT2 |
INT16 |
INT4 |
INT32 |
INT8 |
INT64 |
NUMERIC |
DECIMAL |
REAL4 |
FLOAT |
REAL8 |
DOUBLE |
STRING |
STRING |
UINT1 |
UINT8 |
UINT2 |
UINT16 |
UINT4 |
UINT32 |
UINT8 |
UINT64 |
WSTRING |
STRING |
BLOB |
BINARY |
NCLOB |
STRING |
CLOB |
STRING |
BOOLEAN |
BOOL |