本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon S3 作為來源 AWS DMS
您可以使用從 Amazon S3 儲存貯體遷移資料 AWS DMS。若要執行此作業,請提供 Amazon S3 儲存貯體的存取權,這些儲存貯體內含一或多個資料檔案。在該 S3 儲存貯體中,包含描述資料和這些檔案之資料庫資料表間映射的 JSON 檔案。
在完全載入開始之前,Amazon S3 儲存貯體中就必須有來源資料檔案。請使用 bucketName
參數指定儲存貯體名稱。
來源資料檔案可以是下列格式:
逗號分隔值 (.csv)
鑲木地板(DMS 版本 3.5.3 及更高版本)。若要取得有關使用 Parquet 格式檔案的資訊,請參閱〈〉。使用 Amazon S3 中的 PARQUET 格式檔案做為下列項目的來源 AWS DMS
對於逗號分隔值 (.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 類型的資料行,請指定精確度和小數位數。精確度是一個數字的總位數,而小數位數是小數點右邊的位數。您針對此項使用 ColumnPrecision
和 ColumnScale
元素,如下所示。
... { "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
設為
,則 AWS DMS 會讀取以下路徑的 CDC 檔案。changedata
s3://
mybucket
/changedata
如果您將 cdcPath
設為
且將 changedata
bucketFolder
設為
,則 AWS DMS 會讀取以下路徑的 CDC 檔案。myFolder
s3://
mybucket
/myFolder
/changedata
CDC 檔案格式的記錄格式,如下所示:
-
操作:要執行的變更操作:
INSERT
或I
、UPDATE
或U
、DELETE
或D
。這些關鍵字和字元值不區分大小寫。注意
在支援的 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 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
數據類型中使用數據類型BYTE
的BYTES
數據類型。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 '{"
JSON 語法指定設定。AWS CLIEndpointSetting"
:
"value"
, ...
}'
下列資料表顯示您可以在將 Amazon S3 作為來源搭配使用的端點設定。
選項 | Description |
---|---|
BucketFolder |
(選用) S3 儲存貯體的資料夾名稱。如果提供此屬性,就可以分別讀取路徑
|
BucketName |
S3 儲存貯體的名稱。
|
CdcPath |
CDC 檔案的位置。如果任務要擷取變更資料,此屬性即為必要,否則即為選用。如果存CdcPath 在,則從此路徑 AWS DMS 讀取 CDC 檔案,並將資料變更複寫到目標端點。如需詳細資訊,請參閱 使用 CDC 且以 Amazon S3 作為 AWS DMS的來源。
|
CsvDelimiter |
用來在原始檔案中區隔資料行的分隔符號。預設為逗號。範例如下。
|
CsvNullValue |
從來源讀取時, AWS DMS 會將使用者定義的字串視為 null。預設為空字串。如果未設定此參數,則 AWS DMS 會將空字串視為空值。如果將此參數設定為字串 (例如「\ N」),則會 AWS DMS 將此字串視為空值,並將空字串視為空字串值。 |
CsvRowDelimiter |
用來在原始檔案中區隔資料列的分隔符號。預設為新行 (
|
DataFormat |
將此值設定為可讀
|
IgnoreHeaderRows |
當此值設定為 1 時, AWS DMS 會忽略 .csv 檔案中的第一列標題。值 1 啟用此功能,值 0 停用此功能。 預設值為 0。
|
Rfc4180 |
將此值設為 預設值為 有效值:
|
Amazon S3 的來源資料類型
使用 Amazon S3 做為來源的資料遷移,以 AWS DMS 滿足將資料從 Amazon S3 對應到 AWS DMS 資料類型的需求。如需詳細資訊,請參閱 將 Amazon S3 的外部資料表定義為下列項目的來源 AWS DMS。
如需如何檢視從目標映射的資料類型資訊,請參閱您要使用的目標端點一節。
如需有關資 AWS DMS 料類型的其他資訊,請參閱AWS Database Migration Service 的資料類型。
下列 AWS DMS 資料類型可搭配 Amazon S3 作為來源使用:
-
BYTE:需要
ColumnLength
。如需詳細資訊,請參閱 將 Amazon S3 的外部資料表定義為下列項目的來源 AWS DMS。 -
DATE
-
TIME
-
DATETIME:如需詳細資訊和範例,請參閱將 Amazon S3 的外部資料表定義為下列項目的來源 AWS DMS中的 DATETIME 類型範例。
-
INT1
-
INT2
-
INT4
-
INT8
-
數字 — 需要
ColumnPrecision
和ColumnScale
. AWS DMS 支援下列最大值:ColumnPrecision: 三十八
ColumnScale:
如需詳細資訊和範例,請參閱將 Amazon S3 的外部資料表定義為下列項目的來源 AWS DMS中的 NUMERIC 類型範例。
-
REAL4
-
REAL8
-
STRING:需要
ColumnLength
。如需詳細資訊,請參閱 將 Amazon S3 的外部資料表定義為下列項目的來源 AWS DMS。 -
UINT1
-
UINT2
-
UINT4
-
UINT8
-
BLOB
-
CLOB
-
BOOLEAN
使用 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 |