本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
轉換規則與動作
您可以使用轉換動作指定您希望套用到所選取結構描述或資料表的任何轉換。轉換規則為選擇性。
限制
您無法對同一個物件 (結構描述、資料表、資料欄、資料表空間或索引資料表空間) 套用一個以上的轉換規則動作。但只要每個轉換動作都套用至不同的物件,您就可以在任意層級上套用數個轉換規則動作。
轉換規則中的資料表名稱和資料欄名稱會區分大小寫。例如,您必須以大寫提供 Oracle 或 Db2 資料庫的資料表名稱和資料欄名稱。
使用由右至左語言的資料欄名稱不支援轉換。
名稱中包含特殊字元 (例如 #,\,/,-) 的資料欄無法執行轉換。
對於映射至 BLOB/CLOB 資料類型的資料欄,唯一支援的轉換方式是將資料欄放置在目標上。
AWS DMS 不支援將兩個來源資料表複製到單一目標資料表。 AWS DMS 根據複寫任務的轉換規則,將記錄從資料表複製到資料表,以及從資料行複寫記錄到資料行。物件名稱必須是唯一名稱以防止重疊。
例如,來源資料表有一個名為
ID
的資料欄,而映射目標資料表已存在名為id
的資料欄。如果規則使用ADD-COLUMN
陳述式新增名為id
的新資料欄,並使用 SQLite 陳述式將自訂值填入資料欄,則會建立名為id
的重複、不明確物件,且不受支援。建立轉換規則時,建議只有在選取規則指定多個資料欄時 (例如,當您設定為時)
column-name
才使用此data-type
參數%
。我們不建議使data-type
用選取單一資料行。
值
針對使用轉換規則類型的資料表映射規則,可套用下列值。
參數 | 可能的值 | 描述 |
---|---|---|
rule-type |
transformation |
此值將規則套用到選擇規則所指定的各物件。除非另有說明,否則使用 transformation 。 |
rule-id |
數值。 | 識別規則的唯一數值。如果您為相同物件 (綱要、資料表、資料欄、資料表間空間或索引表格空間) 指定多個轉換規則,則會 AWS DMS 套用規則識別碼較低的轉換規則。 |
rule-name |
英數值。 | 識別規則的唯一名稱。 |
object-locator |
具有下列參數的物件:
|
每個要套用規則之結構描述、資料表或檢視、資料表資料表空間、索引資料表空間和資料行的名稱。您可以使用 "%" 百分比符號做為萬用字元,以代表每個
此外,
|
rule-action |
|
您希望套用到物件的轉換。所有轉換規則動作都區分大小寫。
在與
如果 對於現有任務而言,更改目標資料表結構描述 (例如 |
rule-target |
schema , table ,
column , table-tablespace ,
index-tablespace |
您要轉換的物件類型。
請務必為做為 |
value |
遵循目標類型命名規則的英數值。 | 需要輸入動作的新值,例如 rename 。 |
old-value |
遵循目標類型命名規則的英數值。 | 需要取代動作的舊值,例如 replace-prefix 。 |
data-type |
或者,取代資料類型的名稱 (在 AWS DMS 支援下列 DMS 資料類型的資料行資料類型轉換:
|
以下為
在這裡, |
expression |
遵循 SQLite 語法的英數值。 |
與設為 與設為 請注意,此參數只支援表達式。不支援運算子和命令。 如需如何將表達式用於轉換規則的詳細資訊,請參閱:使用轉換規則表達式定義資料行內容。 如需 SQLite 表達式的詳細資訊,請參閱:使用 SQLite 函數來建構表達式。 |
primary-key-def |
具有下列參數的物件:
|
此參數可以定義所轉換資料表或檢視上唯一索引鍵的名稱、類型和內容。它在 rule-action 設為 define-primary-key 且 rule-target 設為 table 時也會這麼做。預設情況下,唯一索引鍵定義為主索引鍵。 |
before-image-def |
具有下列參數的物件:
|
此參數會定義可識別前映像欄的命名慣例,並指定篩選條件以識別哪些來源欄可具有在目標上為其建立的前映像欄。您可以在 請勿將 針對
如需 AWS DMS 目標端點的前映像支援的詳細資訊,請參閱: |
範例
範例 重新命名結構描述
以下範例會將您來源中的結構描述,從 Test
重新命名為目標中的 Test1
。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "rename", "rule-target": "schema", "object-locator": { "schema-name": "Test" }, "value": "Test1" } ] }
範例 重新命名資料表
以下範例會將您來源中的資料表,從 Actor
重新命名為目標中的 Actor1
。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "rename", "rule-target": "table", "object-locator": { "schema-name": "Test", "table-name": "Actor" }, "value": "Actor1" } ] }
範例 重新命名欄位
以下範例會將您來源中 Actor
資料表內的資料行,從 first_name
重新命名為目標中的 fname
。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "4", "rule-name": "4", "rule-action": "rename", "rule-target": "column", "object-locator": { "schema-name": "test", "table-name": "Actor", "column-name" : "first_name" }, "value": "fname" } ] }
範例 重新命名 Oracle 資料表資料表空間
以下範例針對 Oracle 來源中名為 Actor
的資料表,將名為 SetSpace
的資料表之資料表空間重新命名為 Oracle 目標端點中的 SceneTblSpace
。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Play", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "rename", "rule-target": "table-tablespace", "object-locator": { "schema-name": "Play", "table-name": "Actor", "table-tablespace-name": "SetSpace" }, "value": "SceneTblSpace" } ] }
範例 重新命名 Oracle 索引資料表空間
以下範例針對 Oracle 來源中名為 Actor
的資料表,將名為 SetISpace
的索引資料表空間重新命名為 Oracle 目標端點中的 SceneIdxSpace
。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Play", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "rename", "rule-target": "table-tablespace", "object-locator": { "schema-name": "Play", "table-name": "Actor", "table-tablespace-name": "SetISpace" }, "value": "SceneIdxSpace" } ] }
範例 新增資料行
下列範例會將 datetime
欄新增至結構描述 test
中的資料表 Actor
。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "test", "table-name": "actor" }, "value": "last_updated", "data-type": { "type": "datetime", "precision": 6 } } ] }
範例 移除資料行
以下範例會轉換您來源中名為 Actor
的資料表,在您的目標中移除所有開頭為 col
字元的資料行。
{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "remove-column", "rule-target": "column", "object-locator": { "schema-name": "test", "table-name": "Actor", "column-name": "col%" } }] }
範例 轉換成小寫
以下範例會將資料表名稱從來源中的 ACTOR
轉換為目標中的 actor
。
{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "convert-lowercase", "rule-target": "table", "object-locator": { "schema-name": "test", "table-name": "ACTOR" } }] }
範例 轉換成大寫
以下範例會將您來源中所有資料表及結構描述中的所有資料行,從小寫轉換為目標中的大寫。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "convert-uppercase", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%", "column-name": "%" } } ] }
範例 新增前綴
以下範例會轉換您來源中所有的資料表,在目標中新增前綴 DMS_
。
{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-prefix", "rule-target": "table", "object-locator": { "schema-name": "test", "table-name": "%" }, "value": "DMS_" }] }
範例 取代前綴
以下範例會轉換您來源中所有包含前綴 Pre_
的資料行,在目標中將其取代成 NewPre_
。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "replace-prefix", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%", "column-name": "%" }, "value": "NewPre_", "old-value": "Pre_" } ] }
範例 移除後綴
以下範例會轉換您來源中所有的資料表,在目標中移除後綴 _DMS
。
{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "remove-suffix", "rule-target": "table", "object-locator": { "schema-name": "test", "table-name": "%" }, "value": "_DMS" }] }
範例 定義主索引鍵
以下範例在遷移到目標端點的 ITEM
資料表的三個欄上,定義名為 ITEM-primary-key
的主索引鍵。
{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "inventory", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "define-primary-key", "rule-target": "table", "object-locator": { "schema-name": "inventory", "table-name": "ITEM" }, "primary-key-def": { "name": "ITEM-primary-key", "columns": [ "ITEM-NAME", "BOM-MODEL-NUM", "BOM-PART-NUM" ] } }] }
範例 定義唯一索引
以下範例在遷移到目標端點的 ITEM
資料表的三個欄上,定義名為 ITEM-unique-idx
的唯一索引。
{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "inventory", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "define-primary-key", "rule-target": "table", "object-locator": { "schema-name": "inventory", "table-name": "ITEM" }, "primary-key-def": { "name": "ITEM-unique-idx", "origin": "unique-index", "columns": [ "ITEM-NAME", "BOM-MODEL-NUM", "BOM-PART-NUM" ] } }] }
範例 變更目標資料行的資料類型
下列範例會將名為 SALE_AMOUNT
之目標資料行的資料類型,從現有的資料類型變更為 int8
。
{ "rule-type": "transformation", "rule-id": "1", "rule-name": "RuleName 1", "rule-action": "change-data-type", "rule-target": "column", "object-locator": { "schema-name": "dbo", "table-name": "dms", "column-name": "SALE_AMOUNT" }, "data-type": { "type": "int8" } }
範例 新增前映像資料行
針對名為 emp_no
的來源欄,下列範例中的轉換規則會在目標中新增名為 BI_emp_no
的新欄。
{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "employees" }, "rule-action": "add-before-image-columns", "before-image-def": { "column-prefix": "BI_", "column-suffix": "", "column-filter": "pk-only" } } ] }
在此,下列陳述式會在對應的資料列中為 BI_emp_no
欄填入 1。
UPDATE employees SET emp_no = 3 WHERE BI_emp_no = 1;
將 CDC 更新寫入支援的 AWS DMS 目標時,資BI_emp_no
料行可讓您判斷哪些資料列已更新資料行中的emp_no
值。