

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

# 轉換規則與動作
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations"></a>

您可以使用轉換動作指定您希望套用到所選取結構描述或資料表的任何轉換。轉換規則為選擇性。

## 限制
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.Limitations"></a>
+ 您無法對相同物件 （結構描述、資料表、資料欄、資料表空間或索引資料表空間） 套用多個轉換規則動作。但只要每個轉換動作都套用至不同的物件，您就可以在任意層級上套用數個轉換規則動作。不過，此限制不適用於使用資料遮罩轉換規則時，您可以在其中`CHANGE-DATA-TYPE`對相同資料欄進行其他轉換，例如 `ADD-COLUMN`或 。
+ 轉換規則中的資料表名稱和資料欄名稱會區分大小寫。例如，您必須以大寫提供 Oracle 或 Db2 資料庫的資料表名稱和資料欄名稱。
+ 使用由右至左語言的資料欄名稱不支援轉換。
+ 名稱中包含特殊字元 (例如 ＃，\\，/，-) 的資料欄無法執行轉換。
+ 對於映射至 BLOB/CLOB 資料類型的資料欄，唯一支援的轉換方式是將資料欄放置在目標上。
+ AWS DMS 不支援將兩個來源資料表複寫至單一目標資料表。 會根據複寫任務的轉換規則，將記錄從資料表複 AWS DMS 寫至資料表，以及從資料欄複寫至資料欄。物件名稱必須是唯一名稱以防止重疊。

  例如，來源資料表有一個名為 `ID` 的資料欄，而映射目標資料表已存在名為 `id` 的資料欄。如果規則使用 `ADD-COLUMN` 陳述式新增名為 `id` 的新資料欄，並使用 SQLite 陳述式將自訂值填入資料欄，則會建立名為 `id` 的重複、不明確物件，且不受支援。
+ 建立轉換規則時，建議您只在選取規則指定多個資料欄時使用 `data-type` 參數，例如，當您將 `column-name`設定為 時`%`。我們不建議使用 `data-type` 來選取單一資料欄。
+ AWS DMS 不支援來源和目標物件 （資料表） 位於相同資料庫/結構描述上的轉換規則。在轉換規則中使用與來源和目標相同的資料表可能會導致非預期且可能有害的結果，包括但不限於資料表資料的意外變更、資料表結構的修改，甚至是資料表遭到捨棄。

## 值
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.Values"></a>

針對使用轉換規則類型的資料表映射規則，可套用下列值。


| 參數 | 可能的值 | Description | 
| --- | --- | --- | 
| rule-type | transformation | 此值將規則套用到選擇規則所指定的各物件。除非另有說明，否則使用 transformation。 | 
| rule-id | 數值。 | 識別規則的唯一數值。如果您為相同的物件 （結構描述、資料表、資料欄、資料表間空間或索引資料表空間） 指定多個轉換規則，則會 AWS DMS 套用具有較低 rule-id 的轉換規則。 | 
| rule-name | 英數值。 | 識別規則的唯一名稱。 | 
| object-locator | 具有下列參數的物件：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.html) | 每個要套用規則之結構描述、資料表或檢視、資料表資料表空間、索引資料表空間和資料行的名稱。您可以使用 "%" 百分比符號做為萬用字元，以代表每個 `object-locator` 參數的所有值或部分值，除了 `data-type` 以外。因此，您可以符合這些項目：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.html)<br />此外，`table-tablespace-name` 或 `index-tablespace-name` 參數僅適用於匹配 Oracle 來源端點。在單一規則中，您可以指定 `table-tablespace-name` 或 `index-tablespace-name`，但不能同時指定兩者。因此，您可以比對下列*任一*項目：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.html) | 
| rule-action | `add-column`, `include-column`, `remove-column`<br />`rename`<br />`convert-lowercase`, `convert-uppercase`<br />`add-prefix`, `remove-prefix`, `replace-prefix`<br />`add-suffix`, `remove-suffix`, `replace-suffix`<br />`define-primary-key`<br />`change-data-type`<br />`add-before-image-columns`<br />`data-masking-digits-mask`<br />`data-masking-digits-randomize`<br />`data-masking-hash-mask` | 您希望套用到物件的轉換。所有轉換規則動作都區分大小寫。<br />`rule-action` 參數的 `add-column` 值會將欄新增至資料表。但是您新增的資料欄其名稱不可與相同資料表的現有資料欄重複。<br />在與 `expression` 和 `data-type` 參數搭配使用時，`add-column` 會指定新欄資料的值。<br />`rule-action` 的 `change-data-type` 值僅適用於 `column` 規則目標。<br />`rule-action` 參數的 `include-column` 值將資料表的模式並更為*依預設刪除所有資料欄*，並*包含指定的資料欄*。若多次呼叫 `include-column` 規則，將會在目標中包含多個資料欄。<br />如果 `define-primary-key` 規則在結構描述或資料表名稱中包含萬用字元 (`%`)，則無法使用該規則。<br />對於現有任務而言，更改目標資料表結構描述 (例如 `remove-column`、`rename` 或 `add-prefix`) 的轉換規則動作必須等到重新啟動任務後才會生效。如果您在新增轉換規則後繼續執行任務，可能會發現更改的資料欄的非預期行為，其中可能包括遺失的資料欄資料。需要重新啟動任務，才能確保轉換規則的正常運作。<br />`data-masking-digits-mask`、 `data-masking-digits-randomize`和 `data-masking-hash-mask`用於在載入至目標時遮罩資料表的一或多個資料欄中包含的敏感資訊。這些轉換僅適用於資料欄規則目標。如需詳細資訊，請參閱 [使用資料遮罩來隱藏敏感資訊](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Masking.md)。 | 
| rule-target | schema, table, column, table-tablespace, index-tablespace | 您要轉換的物件類型。`table-tablespace` 和 `index-tablespace` 值僅適用於 Oracle 目標端點。<br />請務必為做為 `object-locator`: `table-tablespace-name` 或 `index-tablespace-name` 名稱一部分的參數指定一個值。 | 
| value | 遵循目標類型命名規則的英數值。 | 需要輸入動作的新值，例如 rename。 | 
| old-value | 遵循目標類型命名規則的英數值。 | 需要取代動作的舊值，例如 replace-prefix。 | 
| data-type | `type` – `rule-action` 要使用的資料類型 (若 `add-column` 為 `rule-action`)，或取代資料類型 (若 為 `change-data-type`)。<br />或者，取代資料類型的名稱 (在 `rule-action` 為 `change-data-type` 時)、`column-name` 的值為 `"%"`，以及可識別 `object-locator` 中所包含的現有資料類型的額外 `data-type` 參數。<br />AWS DMS 支援下列 DMS 資料類型的資料欄資料類型轉換： `"bytes", "date", "time", "datetime", "int1", "int2", "int4", "int8", "numeric", "real4", "real8", "string", "uint1", "uint2", "uint4", "uint8", "wstring", "blob", "nclob", "clob", "boolean", "set", "list" "map", "tuple"` AWS DMS 可以將轉換從一種類型套用到另一種受支援格式的 ONLY。例如 DATE 應以 `YYYY:MM:DD/YYYY-MM-DD.` DATETIME 表示，並以 表示`YYYY:MM:DD HH:MM:SS/YYYY-MM-DD HH:MM:SS`。時間應該以 表示`HH:MM:SS`。 <br />`precision` – 如果新增的欄或取代資料類型具有精確度，則以整數值指定精確度。<br />`scale` – 如果新增的欄或取代資料類型具有小數位數，則以整數值或日期時間值來指定小數位數。<br />`length` – 新欄資料的長度 (在與 `add-column` 搭配使用時)  | 以下為 `data-type` 參數的範例，指定要取代的現有資料類型。<pre>{<br />	"rules": [{<br />			"rule-type": "selection",<br />			"rule-id": "1",<br />			"rule-name": "1",<br />			"object-locator": {<br />				"schema-name": "%",<br />				"table-name": "%"<br />			},<br />			"rule-action": "include"<br />		},<br />		{<br />			"rule-type": "transformation",<br />			"rule-id": "2",<br />			"rule-name": "2",<br />			"rule-target": "column",<br />			"object-locator": {<br />				"schema-name": "test",<br />				"table-name": "table_t",<br />				"column-name": "col10"<br />			},<br />			"rule-action": "change-data-type",<br />			"data-type": {<br />				"type": "string",<br />				"length": "4092",<br />				"scale": ""<br />			}<br />		}<br />	]<br />}</pre><br />在這裡，`table_t` 資料表的 `col10` 資料欄已變更為 `string` 資料類型。 | 
| expression | 遵循 SQLite 語法的英數值。 | 與設為 `rename-schema` 的 `rule-action` 搭配使用時，`expression` 參數會指定新的結構描述。與設為 `rename-table` 的 `rule-action` 搭配使用時，`expression` 會指定新的資料表。與設為 `rename-column` 的 `rule-action` 搭配使用時，`expression` 會指定新的欄名稱值。<br />與設為 `add-column` 的 `rule-action` 搭配使用時，`expression` 會指定構成新欄的資料。<br />請注意，此參數只支援表達式。不支援運算子和命令。<br />如需如何將表達式用於轉換規則的詳細資訊，請參閱：[使用轉換規則表達式定義資料行內容](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions.md)。<br />如需 SQLite 表達式的詳細資訊，請參閱：[使用 SQLite 函數來建構表達式](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions.md#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-SQLite)。 | 
| primary-key-def | 具有下列參數的物件：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.html) | 此參數可以定義所轉換資料表或檢視上唯一索引鍵的名稱、類型和內容。它在 rule-action 設為 define-primary-key 且 rule-target 設為 table 時也會這麼做。預設情況下，唯一索引鍵定義為主索引鍵。 | 
| before-image-def | 具有下列參數的物件：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.html) | 此參數會定義可識別前映像欄的命名慣例，並指定篩選條件以識別哪些來源欄可具有在目標上為其建立的前映像欄。您可以在 `rule-action` 設為 `add-before-image-columns` 且 `rule-target` 設為 `column` 時指定此參數。<br />請勿將 `column-prefix` 和 `column-suffix` 同時設為空白字串。<br />針對 `column-filter`，請選取：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.html) `before-image-def` 參數不支援大型二進位物件 (LOB) 資料類型，例如 CLOB 和 BLOB。如果資料類型設定為 LOB，則會在資料表中建立空欄。 <br />如需 AWS DMS 目標端點的前映像支援的詳細資訊，請參閱：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.html) | 

## 範例
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.Examples"></a>

**Example 重新命名結構描述**  
以下範例會將您來源中的結構描述，從 `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"
        }
    ]
}
```

**Example 重新命名資料表**  
以下範例會將您來源中的資料表，從 `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"
        }
    ]
}
```

**Example 重新命名欄位**  
以下範例會將您來源中 `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"
        }
    ]
}
```

**Example 重新命名 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"
        }
    ]
}
```

**Example 重新命名 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"
        }
    ]
}
```

**Example 新增資料行**  
下列範例會將 `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
            }
        }
    ]
}
```

**Example 移除資料行**  
以下範例會轉換您來源中名為 `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%"
		}
	}]
 }
```

**Example 轉換成小寫**  
以下範例會將資料表名稱從來源中的 `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"
		}
	}]
}
```

**Example 轉換成大寫**  
以下範例會將您來源中所有資料表及結構描述中的所有資料行，從小寫轉換為目標中的大寫。  

```
{
    "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": "%"
            }
        }
    ]
}
```

**Example 新增前綴**  
以下範例會轉換您來源中所有的資料表，在目標中新增前綴 `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_"
	}]
 
}
```

**Example 取代前綴**  
以下範例會轉換您來源中所有包含前綴 `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_"
        }
    ]
}
```

**Example 移除後綴**  
以下範例會轉換您來源中所有的資料表，在目標中移除後綴 `_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"
	}]
}
```

**Example 定義主索引鍵**  
以下範例在遷移到目標端點的 `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"
			]
              }
	}]
}
```

**Example 定義唯一索引**  
以下範例在遷移到目標端點的 `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"
			]
              }
	}]
}
```

**Example 變更目標資料行的資料類型**  
下列範例會將名為 `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"
    }
}
```

**Example 新增前映像資料行**  
針對名為 `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`資料欄中哪些資料列具有更新的值。