本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以使用 從 Amazon S3 儲存貯體遷移資料 AWS DMS。若要執行此作業,請提供 Amazon S3 儲存貯體的存取權,這些儲存貯體內含一或多個資料檔案。在該 S3 儲存貯體中,包含描述資料和這些檔案之資料庫資料表間映射的 JSON 檔案。
在完全載入開始之前,Amazon S3 儲存貯體中就必須有來源資料檔案。請使用 bucketName
參數指定儲存貯體名稱。
來源資料檔案可以是下列格式:
逗號分隔值 (.csv)
Parquet (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 文件,說明如何從 Amazon S3 AWS DMS 解譯資料。此文件大小上限為 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
:此資料欄中的位元組數量。最大資料欄長度限制為 2147483647 位元組 (2,047 百萬位元組),因為 S3 來源不支援完整 LOB 模式。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 檔案命名方式如下:
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
。在舊版中, 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 帳戶必須有來源儲存貯體的讀取存取權。對於 3.4.7 版和更新 AWS DMS 版本,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
,並將任務的目標資料表準備模式設定設為 Truncate。AWS DMS 會在內部使用
BYTE
資料類型來處理BYTE
和 資料類型中的BYTES
資料。S3 來源端點不支援 DMS 資料表重新載入功能。
-
AWS DMS 不支援以 Amazon S3 做為來源的完整 LOB 模式。
在 Amazon S3 中使用 Parquet 格式檔案做為來源時,適用下列限制:
-
S3 Parquet 來源日期分割功能
DDMMYYYY
不支援MMYYYYDD
、 或 中的日期。
Amazon S3 的端點設定做為 的來源 AWS DMS
您可以使用端點設定來設定 Amazon S3 來源目標,類似於使用額外的連線屬性。當您使用 AWS DMS 主控台或使用 中的 create-endpoint
命令搭配 --s3-settings '{"
JSON 語法來建立來源端點時AWS CLI,您可以指定設定。EndpointSetting"
: "value"
, ...
}'
下列資料表顯示您可以在將 Amazon S3 作為來源搭配使用的端點設定。
選項 | Description |
---|---|
BucketFolder |
(選用) S3 儲存貯體的資料夾名稱。如果提供此屬性,就可以分別讀取路徑
|
BucketName |
S3 儲存貯體的名稱。
|
CdcPath |
CDC 檔案的位置。如果任務要擷取變更資料,此屬性即為必要,否則即為選用。如果 CdcPath 存在,則 會從此路徑 AWS DMS 讀取 CDC 檔案,並將資料變更複寫至目標端點。如需詳細資訊,請參閱使用 CDC 且以 Amazon S3 作為 AWS DMS的來源。
|
CsvDelimiter |
用來在原始檔案中區隔資料行的分隔符號。預設為逗號。範例如下。
|
CsvNullValue |
從來源讀取時視為 null AWS DMS 的使用者定義字串。預設為空字串。如果您未設定此參數, AWS DMS 會將空字串視為 null 值。如果您將此參數設定為 "\N" 等字串, AWS DMS 會將此字串視為 null 值,並將空字串視為空字串值。 |
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
-
NUMERIC – 需要
ColumnPrecision
和ColumnScale
。 AWS DMS 支援下列最大值:ColumnPrecision:38
ColumnScale:31
如需詳細資訊和範例,請參閱將 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 參考中的 S3Settings。
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 |