

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

# 轉換規則與動作
<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 資料庫的資料表名稱和資料欄名稱。
+ 使用由右至左語言的資料欄名稱不支援轉換。
+ 名稱中包含特殊字元 (例如 ＃，\$1，/，-) 的資料欄無法執行轉換。
+ 對於映射至 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>

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

[\[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`資料欄中哪些資料列具有更新的值。