使用 Amazon S3 作為來源 AWS DMS - AWS 資料庫遷移服務

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

使用 Amazon S3 作為來源 AWS DMS

您可以使用從 Amazon S3 儲存貯體遷移資料 AWS DMS。若要執行此作業,請提供 Amazon S3 儲存貯體的存取權,這些儲存貯體內含一或多個資料檔案。在該 S3 儲存貯體中,包含描述資料和這些檔案之資料庫資料表間映射的 JSON 檔案。

在完全載入開始之前,Amazon S3 儲存貯體中就必須有來源資料檔案。請使用 bucketName 參數指定儲存貯體名稱。

來源資料檔案可以是下列格式:

對於逗號分隔值 (.csv) 格式的來源資料檔案,請使用下列命名慣例來命名它們。在此慣例中,schemaName 是來源結構描述,而 tableName 是該結構描述內的資料表名稱。

/schemaName/tableName/LOAD001.csv /schemaName/tableName/LOAD002.csv /schemaName/tableName/LOAD003.csv ...

例如,假設資料檔案位在以下 Amazon S3 路徑的 mybucket

s3://mybucket/hr/employee

在載入時, AWS DMS 假設來源結構描述名稱為hr,而來源資料表名稱為employee

除了 bucketName (必要項目) 之外,您還可以選擇性地提供bucketFolder參數,以指定 AWS DMS 應在 Amazon S3 儲存貯體中尋找資料檔案的位置。繼續前面的範例,如果您設bucketFolder定為sourcedata,則 AWS DMS 會讀取下列路徑的資料檔案。

s3://mybucket/sourcedata/hr/employee

您可以使用額外連線屬性指定資料行分隔符號、資料列分隔符號、null 值指標和其他參數。如需詳細資訊,請參閱 將 Amazon S3 的端點設定做為下列項目的來源 AWS DMS

您可以如下所示,使用 ExpectedBucketOwner Amazon S3 端點設定來指定儲存貯體擁有者並防止惡意攻擊。然後,當您提出測試連線或執行遷移請求時,S3 會根據指定參數檢查儲存貯體擁有者的帳戶識別碼。

--s3-settings='{"ExpectedBucketOwner": "AWS_Account_ID"}'

將 Amazon S3 的外部資料表定義為下列項目的來源 AWS DMS

除了資料檔案,您還必須提供外部資料表定義。外部資料表定義是一個 JSON 文件,描述 AWS DMS 應該如何解譯來自 Amazon S3 的資料。此文件大小上限為 2 MB。如果您使用 AWS DMS 管理主控台建立來源端點,則可以在表格對應方塊中直接輸入 JSON。如果您使用 AWS Command Line Interface (AWS CLI) 或 AWS DMS API 來執行移轉,您可以建立 JSON 檔案來指定外部資料表定義。

假設您的資料檔案包含以下內容。

101,Smith,Bob,2014-06-04,New York 102,Smith,Bob,2015-10-08,Los Angeles 103,Smith,Bob,2017-03-13,Dallas 104,Smith,Bob,2017-03-13,Dallas

以下為此資料的範例外部資料表定義。

{ "TableCount": "1", "Tables": [ { "TableName": "employee", "TablePath": "hr/employee/", "TableOwner": "hr", "TableColumns": [ { "ColumnName": "Id", "ColumnType": "INT8", "ColumnNullable": "false", "ColumnIsPk": "true" }, { "ColumnName": "LastName", "ColumnType": "STRING", "ColumnLength": "20" }, { "ColumnName": "FirstName", "ColumnType": "STRING", "ColumnLength": "30" }, { "ColumnName": "HireDate", "ColumnType": "DATETIME" }, { "ColumnName": "OfficeLocation", "ColumnType": "STRING", "ColumnLength": "20" } ], "TableColumnsTotal": "5" } ] }

此 JSON 文件的元素如下:

TableCount:來源資料表的數量。在本範例中,只有一份資料表。

Tables:由每個來源資料表一個 JSON 對應組成的陣列。在本範例中,只有一個映射。每個映射包含以下元素:

  • TableName:來源資料表的名稱。

  • TablePath:在 Amazon S3 儲存貯體中, AWS DMS 可以在其中找到完整資料載入檔案的路徑。如已指定 bucketFolder 值,則此值會附加到路徑前。

  • TableOwner:此資料表的結構描述名稱。

  • TableColumns:一或多個對應的陣列,其中每一個都會描述來源資料表中的資料欄:

    • ColumnName:來源資料表中的資料欄名稱。

    • ColumnType:資料欄的資料類型。如需有效的資料類型,請參閱Amazon S3 的來源資料類型

    • ColumnLength:此資料欄中的位元組數量。由於 S3 來源不支援完整 LOB 模式,因此最大資料行長度限制為 2147483647 位元組 (2,047 MegaBytes)。 ColumnLength對下列資料類型有效:

      • BYTE

      • STRING

    • ColumnNullable:如果此資料欄可以包含 NULL 值,則為 true 的布林值 (預設=false)。

    • ColumnIsPk:如果此資料欄是主索引鍵的一部分,則為 true 的布林值 (預設=false)。

    • ColumnDateFormat:具有 DATE、TIME 和 DATETIME 類型之資料欄的輸入日期格式,並用來將資料字串剖析為日期物件。可能的值包括:

      - YYYY-MM-dd HH:mm:ss - YYYY-MM-dd HH:mm:ss.F - YYYY/MM/dd HH:mm:ss - YYYY/MM/dd HH:mm:ss.F - MM/dd/YYYY HH:mm:ss - MM/dd/YYYY HH:mm:ss.F - YYYYMMdd HH:mm:ss - YYYYMMdd HH:mm:ss.F
  • TableColumnsTotal:資料欄的總數。此數目必須符合 TableColumns 陣列中的元素數目。

如果不指定,否則 AWS DMS 假定ColumnLength為零。

注意

在支援的版本中 AWS DMS,S3 來源資料也可以包含選用的操作資料行,作為欄值前的第一TableName欄。此操作欄位可識別在完全載入期間用來將資料遷移到 S3 目標端點的操作 (INSERT)。

如果存在,此欄的值是 INSERT 操作關鍵字 (I) 的起首字元。若已指定,此欄通常指出 S3 來源在前一個遷移期間已被 DMS 建立為 S3 目標。

在 3.4.2 之前的 DMS 版本中,從先前的 DMS 完全載入中建立的 S3 來源資料中不存在此資料欄。將此欄新增至 S3 目標資料允許寫入至 S3 的所有資料列格式保持一致,無論是在完全載入期間還是在 CDC 載入期間寫入它們。如需用於格式化 S3 目標資料格式之選項的詳細資訊,請參閱在遷移的 S3 資料中指示來源資料庫操作

如需 NUMERIC 類型的資料行,請指定精確度和小數位數。精確度是一個數字的總位數,而小數位數是小數點右邊的位數。您針對此項使用 ColumnPrecisionColumnScale 元素,如下所示。

... { "ColumnName": "HourlyRate", "ColumnType": "NUMERIC", "ColumnPrecision": "5" "ColumnScale": "2" } ...

對於 DATETIME 類型資料欄,如果其資料包含小數秒數,請指定小數位數。小數位數是小數秒數的位數,範圍可以從 0 到 9。如下所示,針對此項使用 ColumnScale 元素。

... { "ColumnName": "HireDate", "ColumnType": "DATETIME", "ColumnScale": "3" } ...

如果不指定,則 AWS DMS 假定ColumnScale為零並截斷小數秒。

使用 CDC 且以 Amazon S3 作為 AWS DMS的來源

AWS DMS 執行完整資料載入之後,它可以選擇性地將資料變更複寫到目標端點。為此,您可以將變更資料擷取檔案 (CDC 檔案) 上傳到 Amazon S3 儲存貯體。 AWS DMS 在您上傳這些 CDC 檔案時讀取這些 CDC 檔案,然後在目標端點套用變更。

CDC 檔案命名方式如下:

CDC00001.csv CDC00002.csv CDC00003.csv ...
注意

若要成功複寫變更資料資料夾中的 CDC 檔案,請按辭典 (連續) 順序上傳。例如,先上傳檔案 CDC00002.csv 後,再上傳 CDC00003.csv。如果您在 CDC00003.csv 之後載入 CDC00002.csv,則會略過且不會複寫 CDC00002.csv。但是,如果 CDC00004.csv 在 CDC00003.csv 之後載入,則會成功複寫。

若要指出在哪裡 AWS DMS 可以找到檔案,請指定cdcPath參數。繼續之前的範例,如果您將 cdcPath 設為 changedata,則 AWS DMS 會讀取以下路徑的 CDC 檔案。

s3://mybucket/changedata

如果您將 cdcPath 設為 changedata 且將 bucketFolder 設為 myFolder,則 AWS DMS 會讀取以下路徑的 CDC 檔案。

s3://mybucket/myFolder/changedata

CDC 檔案格式的記錄格式,如下所示:

  • 操作:要執行的變更操作:INSERTIUPDATEUDELETED。這些關鍵字和字元值不區分大小寫。

    注意

    在支援的 AWS DMS 版本中, AWS DMS 可以透過兩種方式識別每個負載記錄要執行的作業。 AWS DMS 可以從記錄的關鍵字值 (例如,INSERT) 或從其關鍵字初始字元 (例如I) 執行此操作。在以前的版本中,只能從 full 關鍵字值 AWS DMS 識別加載操作。

    在舊版中 AWS DMS,會寫入完整的關鍵字值來記錄 CDC 資料。舊版也只會使用關鍵字首字母,將操作值寫入至任何 S3 目標。

    識別這兩種格式可 AWS DMS 讓您處理作業,無論如何寫入作業資料行以建立 S3 來源資料。此方法支援使用 S3 目標資料做為較新遷移的來源。使用此方式,您不需要變更任何關鍵字起首值的格式,而此起首值出現在後續 S3 來源的操作欄中。

  • 資料表名稱:來源資料表的名稱。

  • 結構描述名稱:來源結構描述的名稱。

  • 資料:代表要變更之資料的一或多個資料欄。

以下是 employee 資料表的範例 CDC 檔案。

INSERT,employee,hr,101,Smith,Bob,2014-06-04,New York UPDATE,employee,hr,101,Smith,Bob,2015-10-08,Los Angeles UPDATE,employee,hr,101,Smith,Bob,2017-03-13,Dallas DELETE,employee,hr,101,Smith,Bob,2017-03-13,Dallas

使用 Amazon S3 做為來源時的先決條件 AWS DMS

若要使用 Amazon S3 做為來源 AWS DMS,您的來源 S3 儲存貯體必須位於與遷移資料的 DMS 複寫執行個體所在的 AWS 區域相同。此外,用於遷移的 AWS 帳戶必須有來源儲存貯體的讀取存取權。對於 AWS DMS 版本 3.4.7 及更高版本,DMS 必須透過 VPC 端點或公用路由存取來源儲存貯體。如需 VPC 端點的相關資訊,請參閱將 VPC 端點設定為 AWS DMS 來源和目標端點

指派給用於建立移轉任務之使用者帳戶的 AWS Identity and Access Management (IAM) 角色必須具有以下一組權限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::mybucket*/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::mybucket*" ] } ] }

如果 Amazon S3 儲存貯體已啟用版本控制,則指派給用於建立遷移任務的使用者帳戶的 AWS Identity and Access Management (IAM) 角色必須具有以下一組許可。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "S3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::mybucket*/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::mybucket*" ] } ] }

使用 Amazon S3 做為來源時的限制 AWS DMS

使用 Amazon S3 作為來源時,有下列限制:

  • 請勿為 S3 啟用版本控制。如果您需要 S3 版本控制,請使用生命週期政策以主動刪除舊版本。否則,您可能會因 S3 list-object 呼叫逾時而遭遇端點測試連線失敗。若要建立 S3 儲存貯體的生命週期政策,請參閱管理儲存生命週期。若要刪除 S3 物件的版本,請參閱刪除啟用版本控制功能之儲存貯體中的物件

  • 3.4.7 及更新版本支援啟用 VPC (閘道 VPC) 的 S3 儲存貯體。

  • MySQL 的time數據類型轉換為. string 若要在 MySQL 中查看time資料類型值,請將目標資料表中的資料行定義為string,並將工作的 Target 資料表準備模式設定設定為 [截斷]。

  • AWS DMS 在內部和BYTE數據類型中使用數據類型BYTEBYTES數據類型。

  • S3 來源端點不支援 DMS 表格重新載入功能。

  • AWS DMS 不支援使用 Amazon S3 做為來源的完整 LOB 模式。

在 Amazon S3 中使用 ParQUET 格式檔案作為來源時,會套用下列限制:

  • S3 Parquet 來源日期分割功能不支援中的日期MMYYYYDD,或DDMMYYYY不支援日期。

將 Amazon S3 的端點設定做為下列項目的來源 AWS DMS

您可以使用端點設定來設定 Amazon S3 來源目標,類似於使用額外的連線屬性。您可以在使用 AWS DMS 主控台建立來源端點時指定設定,或使用中的create-endpoint命令以 --s3-settings '{"EndpointSetting": "value", ...}' JSON 語法指定設定。AWS CLI

下列資料表顯示您可以在將 Amazon S3 作為來源搭配使用的端點設定。

選項 Description
BucketFolder

(選用) S3 儲存貯體的資料夾名稱。如果提供此屬性,就可以分別讀取路徑 s3://myBucket/bucketFolder/schemaName/tableName/s3://myBucket/bucketFolder/ 的來源資料檔案和 CDC 檔案。如不指定此屬性,則使用路徑 schemaName/tableName/

'{"BucketFolder": "sourceData"}'

BucketName

S3 儲存貯體的名稱。

'{"BucketName": "myBucket"}'

CdcPath CDC 檔案的位置。如果任務要擷取變更資料,此屬性即為必要,否則即為選用。如果存CdcPath在,則從此路徑 AWS DMS 讀取 CDC 檔案,並將資料變更複寫到目標端點。如需詳細資訊,請參閱 使用 CDC 且以 Amazon S3 作為 AWS DMS的來源

'{"CdcPath": "changeData"}'

CsvDelimiter

用來在原始檔案中區隔資料行的分隔符號。預設為逗號。範例如下。

'{"CsvDelimiter": ","}'

CsvNullValue

從來源讀取時, AWS DMS 會將使用者定義的字串視為 null。預設為空字串。如果未設定此參數,則 AWS DMS 會將空字串視為空值。如果將此參數設定為字串 (例如「\ N」),則會 AWS DMS 將此字串視為空值,並將空字串視為空字串值。

CsvRowDelimiter

用來在原始檔案中區隔資料列的分隔符號。預設為新行 (\n)。

'{"CsvRowDelimiter": "\n"}'

DataFormat

將此值設定為可讀Parquet取鑲木地板格式的資料。

'{"DataFormat": "Parquet"}'

IgnoreHeaderRows

當此值設定為 1 時, AWS DMS 會忽略 .csv 檔案中的第一列標題。值 1 啟用此功能,值 0 停用此功能。

預設值為 0。

'{"IgnoreHeaderRows": 1}'

Rfc4180

將此值設為 truey 時,每個上雙引號之後都必須要有下雙引號。此格式遵守 RFC 4180。此值設定為 falsen 時,字串常值會依原樣複製到目標。在這種情況下,分隔符號 (資料列或資料行) 表示欄位結尾。因此分隔符號無法用於字串,因為它表示一個值的結尾。

預設值為 true

有效值:truefalseyn

'{"Rfc4180": false}'

Amazon S3 的來源資料類型

使用 Amazon S3 做為來源的資料遷移,以 AWS DMS 滿足將資料從 Amazon S3 對應到 AWS DMS 資料類型的需求。如需詳細資訊,請參閱 將 Amazon S3 的外部資料表定義為下列項目的來源 AWS DMS

如需如何檢視從目標映射的資料類型資訊,請參閱您要使用的目標端點一節。

如需有關資 AWS DMS 料類型的其他資訊,請參閱AWS Database Migration Service 的資料類型

下列 AWS DMS 資料類型可搭配 Amazon S3 作為來源使用:

使用 Amazon S3 中的 PARQUET 格式檔案做為下列項目的來源 AWS DMS

在 3.5.3 AWS DMS 版及更新版本中,您可以使用 S3 儲存貯體中的 Parquet 格式檔案作為全負載或 CDC 複寫的來源。

DMS 僅支援 Parquet 格式檔案做為 DMS 透過將資料遷移到 S3 目標端點所產生的來源。檔案名稱必須採用支援的格式,否則 DMS 不會將其包含在移轉中。

對於 Parquet 格式的來源資料檔案,它們必須符合下列資料夾和命名慣例。

schema/table1/LOAD00001.parquet schema/table2/LOAD00002.parquet schema/table2/LOAD00003.parquet

對於 Parquet 格式 CDC 資料的來源資料檔案,請使用下列資料夾和命名慣例命名並儲存它們。

schema/table/20230405-094615814.parquet schema/table/20230405-094615853.parquet schema/table/20230405-094615922.parquet

若要存取 Parquet 格式的檔案,請設定下列端點設定:

  • DataFormat 設定為 Parquet

  • 請勿cdcPath設定此設定。請務必在指定的結構描述/表格資料夾中建立 Parquet 格式檔案。

如需 S3 端點設定的詳細資訊,請參閱 AWS Database Migration Service API 參考中的 S3 設定

Parquet 格式檔案支援的資料類型

AWS DMS 從 Parquet 格式檔案移轉資料時,支援下列來源和目標資料類型。在移轉之前,請確定目標資料表具有正確資料類型的欄。

來源資料類型 目標資料類型
BYTE 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 UINT
WSTRING STRING
BLOB BINARY
NCLOB STRING
CLOB STRING
BOOLEAN BOOL