

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

# 使用 Amazon DynamoDB 資料庫做為 的目標 AWS Database Migration Service
<a name="CHAP_Target.DynamoDB"></a>

您可以使用 AWS DMS 將資料遷移至 Amazon DynamoDB 資料表。Amazon DynamoDB 是全受管的 NoSQL 資料庫服務，可提供快速且可預測的效能和無縫的可擴展性。 AWS DMS 支援使用關聯式資料庫或 MongoDB 做為來源。

在 DynamoDB 中，資料表、項目與屬性都是您會用到的核心元件。*資料表*是項目的集合，而每個*項目*都是屬性的集合。DynamoDB 使用稱為分割區索引鍵的主索引鍵，唯一識別資料表中的各個項目。您也可以使用索引鍵和次要索引提供更多的查詢靈活性。

您要使用物件映射將資料從來源資料庫遷移到目標 DynamoDB 資料表。物件映射可讓您判斷來源資料在目標中的位置。

當 在 DynamoDB 目標端點上 AWS DMS 建立資料表時，它會建立與來源資料庫端點中一樣多的資料表。 AWS DMS 也會設定數個 DynamoDB 參數值。資料表的建立成本取決於要遷移的資料量和資料表數量。

**注意**  
 AWS DMS 主控台或 API 上的 **SSL 模式**選項不適用於某些資料串流和 NoSQL 服務，例如 Kinesis 和 DynamoDB。根據預設，它們是安全的，因此 AWS DMS 顯示 SSL 模式設定等於無 (**SSL 模式=無**)。您無需為端點提供任何其他組態即可使用 SSL。例如，使用 DynamoDB 作為目標端點時，預設情況下其是安全的。所有對 DynamoDB 的 API 呼叫都使用 SSL，因此 AWS DMS 端點中不需要額外的 SSL 選項。您可以使用 HTTPS 通訊協定 ( AWS DMS 是在連線到 DynamoDB 資料庫時預設使用的通訊協定)，透過 SSL 端點安全地放置和擷取資料。

為了協助提高傳輸速度， AWS DMS 支援對 DynamoDB 目標執行個體進行多執行緒完全載入。DMS 使用包括下列項目的任務設定來支援此多執行緒操作：
+ `MaxFullLoadSubTasks`：使用此選項，指出要平行載入的來源資料表數目上限。DMS 會使用專用子任務，將每個資料表載入到其對應的 DynamoDB 目標資料表。預設值為 8。最大值為 49。
+ `ParallelLoadThreads` – 使用此選項指定 AWS DMS 用來將每個資料表載入其 DynamoDB 目標資料表的執行緒數目。預設值為 0 (單一執行緒)。最大值為 200。您可以要求提高此上限。
**注意**  
DMS 會將資料表的每個區段指派給自己的執行緒，以進行載入。因此，將 `ParallelLoadThreads` 設定為您針對來源中資料表所指定的區段數量上限。
+ `ParallelLoadBufferSize`：使用此選項，指定要在平行載入執行緒用來將資料載入至 DynamoDB 目標的緩衝區中儲存的記錄數量上限。預設值為 50。最大值為 1000。使用此設定搭配 `ParallelLoadThreads`；`ParallelLoadBufferSize`，只有在有多個執行緒時才有效。
+ 個別資料表的資料表對應設定：使用 `table-settings` 規則，從來源中識別您想要平行載入的個別資料表。亦可使用這些規則，指定如何將每個資料表的資料列分段，以進行多執行緒載入。如需詳細資訊，請參閱[資料表和集合設定規則與操作](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md)。

**注意**  
當 AWS DMS 設定遷移任務的 DynamoDB 參數值時，預設讀取容量單位 (RCU) 參數值會設為 200。  
也會設定寫入容量單位 (WCU) 參數值，但其值取決於多項其他設定：  
WCU 參數的預設值為 200。
如果 `ParallelLoadThreads` 任務設定的值大於 1 (預設為 0)，則 WCU 參數會設定為 `ParallelLoadThreads` 值的 200 倍。
標準 AWS DMS 用量費用適用於您使用的資源。

## 從關聯式資料庫遷移到 DynamoDB 資料表
<a name="CHAP_Target.DynamoDB.RDBMS2DynamoDB"></a>

AWS DMS 支援將資料遷移至 DynamoDB 純量資料類型。從 Oracle 或 MySQL 等關聯式資料庫遷移到 DynamoDB 時，您可能想要重組資料的儲存方式。

目前 AWS DMS 支援將單一資料表重組為 DynamoDB 純量類型屬性的單一資料表。如果要將資料從關聯式資料庫資料表遷移到 DynamoDB，您需要取出資料表的資料，將它重新格式化為 DynamoDB 純量資料類型屬性。這些屬性可以接受多資料行資料，而且您可以直接將資料行映射到屬性。

AWS DMS 支援下列 DynamoDB 純量資料類型：
+ String
+ 數字
+ Boolean

**注意**  
忽略目標中來自來源的 NULL 資料。

## 使用 DynamoDB 做為 目標的先決條件 AWS Database Migration Service
<a name="CHAP_Target.DynamoDB.Prerequisites"></a>

在您開始使用 DynamoDB 資料庫做為 的目標之前 AWS DMS，請務必建立 IAM 角色。此 IAM 角色應允許 AWS DMS 擔任並授予要遷移至其中的 DynamoDB 資料表的存取權。以下 IAM 政策顯示最低的存取許可集。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "",
         "Effect": "Allow",
         "Principal": {
            "Service": "dms.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
      }
   ]
}
```

------

遷移到 DynamoDB 所用的角色必須擁有下列許可。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:CreateTable",
                "dynamodb:DescribeTable",
                "dynamodb:DeleteTable",
                "dynamodb:DeleteItem",
                "dynamodb:UpdateItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-west-2:{{111122223333}}:table/name1",
                "arn:aws:dynamodb:us-west-2:{{111122223333}}:table/OtherName*",
                "arn:aws:dynamodb:us-west-2:{{111122223333}}:table/awsdms_apply_exceptions",
                "arn:aws:dynamodb:us-west-2:{{111122223333}}:table/awsdms_full_load_exceptions"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:ListTables"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 使用 DynamoDB 做為 目標的限制 AWS Database Migration Service
<a name="CHAP_Target.DynamoDB.Limitations"></a>

使用 DynamoDB 作為目標時，有下列限制：
+ DynamoDB 將 Number 資料類型的精確度限制到 38 位。將精確度更高的所有資料類型儲存為字串。您需要使用物件映射功能來明確指定此設定。
+ 因為 DynamoDB 沒有 Date 資料類型，所以使用 Date 資料類型的資料會轉換為字串。
+ DynamoDB 不允許更新主索引鍵屬性。此限制在使用變更資料擷取 (CDC) 進行中複寫時十分重要，因為它會導致目標出現不需要的資料。根據您如何映射物件，用於更新主索引鍵的 CDC 操作有兩種用途。它可以使新項目失敗，或隨著更新的主索引鍵和不完整的資料來插入新項目。
+ AWS DMS 僅支援使用非複合主索引鍵複寫資料表。如果您搭配分區索引鍵、排序索引鍵或兩者來指定目標資料表的物件映射，則為例外。
+ AWS DMS 除非是 CLOB，否則 不支援 LOB 資料。在遷移資料時， 會將 CLOB 資料 AWS DMS 轉換為 DynamoDB 字串。
+ 使用 DynamoDB 做為目標時，僅支援套用異常控制資料表 (`dmslogs.awsdms_apply_exceptions`)。如需控制資料表的詳細資訊，請參閱[控制資料表任務設定](CHAP_Tasks.CustomizingTasks.TaskSettings.ControlTable.md)。
+ AWS DMS 不支援 DynamoDB `TargetTablePrepMode=TRUNCATE_BEFORE_LOAD` 的任務設定做為目標。
+ AWS DMS 不支援 DynamoDB `TaskRecoveryTableEnabled` 的任務設定做為目標。
+ `BatchApply` DynamoDB 端點不支援 。
+ AWS DMS 無法遷移名稱符合 DynamoDB 中預留單字的屬性。如需詳細資訊，請參閱《Amazon [ DynamoDB 開發人員指南》中的 DynamoDB 中的預留單字](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html)。 * DynamoDB *

## 使用物件映射將資料遷移到 DynamoDB
<a name="CHAP_Target.DynamoDB.ObjectMapping"></a>

AWS DMS 使用資料表映射規則，將資料從來源映射到目標 DynamoDB 資料表。若要將資料映射到 DynamoDB 目標，您要使用一種稱為 *object-mapping* 的資料表映射規則。物件映射可讓您定義屬性名稱和遷移到屬性的資料。當您使用物件映射時，您必須有選擇規則。

除了擁有分割區索引鍵和選擇性排序索引鍵外，DynamoDB 沒有預設結構。如果您有非複合主索引鍵， AWS DMS 會使用它。如果您有複合主索引鍵或想要使用排序索引鍵，請在您的目標 DynamoDB 資料表中定義這些索引鍵和其他屬性。

若要建立物件映射規則，請將 `rule-type` 指定為 *object-mapping*。此規則指定您想要使用的物件映射類型。

規則的結構如下：

```
{ "rules": [
    {
      "rule-type": "object-mapping",
      "rule-id": "<id>",
      "rule-name": "<name>",
      "rule-action": "<valid object-mapping rule action>",
      "object-locator": {
      "schema-name": "<case-sensitive schema name>",
      "table-name": ""
      },
      "target-table-name": "<table_name>"
    }
  ]
}
```

AWS DMS 目前支援 `map-record-to-record`和 `map-record-to-document`做為 `rule-action` 參數的唯一有效值。這些值會指定預設 AWS DMS 如何處理屬性`exclude-columns`清單中未排除的記錄。這些值反正不會影響屬性映射。
+ 從關聯式資料庫遷移到 DynamoDB 時，您可以使用 `map-record-to-record`。其使用關聯式資料庫的主索引鍵作為 DynamoDB 的分割區索引鍵，並為來源資料庫中的每個資料欄建立一個屬性。使用 時`map-record-to-record`，對於來源資料表中未列於`exclude-columns`屬性清單中的任何資料欄， 會在目標 DynamoDB 執行個體上 AWS DMS 建立對應的屬性。無論屬性映射中是否使用該來源欄，它都會這樣做。
+ 請使用 `map-record-to-document` 並利用屬性名稱 "\_doc"，將來源資料欄放到目標上的單一、普通 DynamoDB 對應中。使用 時`map-record-to-document`， 會將資料 AWS DMS 放入來源上的單一、平面、DynamoDB 映射屬性。此屬性稱為 "\_doc"。此放置適用於來源資料表中未列在 `exclude-columns` 屬性清單的任何欄。

若要了解 `rule-action` 參數 `map-record-to-record` 和 `map-record-to-document` 之間的差異，方法之一就是實際查看這兩個參數。在本範例中，假設您開始使用之關聯式資料庫資料表資料列的結構和資料如下：

![範例所用的範例資料庫](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/images/datarep-dynamodb1.png)


若要將此資訊遷移到 DynamoDB，您要建立規則，將資料映射到 DynamoDB 資料表項目。記下針對 `exclude-columns` 參數列出的資料行。這些資料行不會直接映射至目標。而是改用屬性映射將資料組合為新項目，例如 *FirstName* 和 *LastName* 組成 DynamoDB 目標的 *CustomerName*。不排除 *NickName* 和 *income*。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToDDB",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "test",
                "table-name": "customer"
            },
            "target-table-name": "customer_t",
            "mapping-parameters": {
                "partition-key-name": "CustomerName",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${FirstName},${LastName}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "document",
                        "attribute-sub-type": "dynamodb-map",
                        "value": {
                            "M": {
                                "Home": {
                                    "M": {
                                        "Address": {
                                            "S": "${HomeAddress}"
                                        },
                                        "Phone": {
                                            "S": "${HomePhone}"
                                        }
                                    }
                                },
                                "Work": {
                                    "M": {
                                        "Address": {
                                            "S": "${WorkAddress}"
                                        },
                                        "Phone": {
                                            "S": "${WorkPhone}"
                                        }
                                    }
                                }
                            }
                        }
                    }
                ]
            }
        }
    ]
}
```

透過使用 `rule-action` 參數 *map-record-to-record*、*NickName* 和 *income* 的資料映射到 DynamoDB 目標的同名項目。

![開始使用 AWS DMS](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/images/datarep-dynamodb2.png)


不過，假設您使用相同的規則，但將 `rule-action` 參數變更為 *map-record-to-document*。在本例中，未列在 `exclude-columns` 參數 *NickName* 和 *income* 中的資料行會映射到 *\_doc* 項目。

![開始使用 AWS DMS](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/images/datarep-dynamodb3.png)


### 使用自訂條件表達式與物件映射
<a name="CHAP_Target.DynamoDB.ObjectMapping.ConditionExpression"></a>

您可以使用稱為條件表達式的 DynamoDB 功能，操作要寫入 DynamoDB 資料表的資料。如需 DynamoDB 中條件表達式的詳細資訊，請參閱[條件表達式](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html)。

條件表達式成員包含：
+ 表達式 (必要) 
+ expression 屬性值 （必要）。指定屬性值的 DynamoDB json 結構。這有助於比較屬性與 DynamoDB 中您在執行時間之前可能不知道的值。您可以將表達式屬性值定義為實際值的預留位置。
+ 運算式屬性名稱 （必要）。這有助於避免與任何 DynamoDB 保留字、包含特殊字元的屬性名稱以及類似名稱發生潛在衝突。
+ 何時使用條件表達式的選項 (選用)。預設值是 apply-during-cdc = false 和 apply-during-full-load = true

規則的結構如下：

```
"target-table-name": "customer_t",
      "mapping-parameters": {
        "partition-key-name": "CustomerName",
        "condition-expression": {
          "expression":"<conditional expression>",
          "expression-attribute-values": [
              {
                "name":"<attribute name>",
                "value":<attribute value>
              }
          ],
          "apply-during-cdc":<optional Boolean value>,
          "apply-during-full-load": <optional Boolean value>
        }
```

以下範例會重點介紹用於條件表達式的區段。

![開始使用 AWS DMS](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/images/datarep-Tasks-conditional1.png)


### 使用屬性映射與物件映射
<a name="CHAP_Target.DynamoDB.ObjectMapping.AttributeMapping"></a>

屬性映射讓您使用來源資料行名稱指定範本字串，在目標中重組資料。除使用者在範本中指定的以外，沒有任何格式化。

以下範例顯示來源資料庫的結構以及 DynamoDB 目標所需的架構。首先顯示來源的結構 (本例中為 Oracle 資料庫)，然後顯示 DynamoDB 資料所需的架構。此範例以建立所需目標結構所使用的 JSON 作結。

Oracle 資料的結構如下：


****  

<table>
<thead>
  <tr><th>FirstName</th><th>LastName</th><th>StoreId</th><th>HomeAddress</th><th>HomePhone</th><th>WorkAddress</th><th>WorkPhone</th><th>DateOfBirth</th></tr>
</thead>
<tbody>
  <tr><td colspan="2">主索引鍵</td><td colspan="5">N/A</td><td></td></tr>
  <tr><td>Randy</td><td>Marsh</td><td>5</td><td>221B Baker Street </td><td>1234567890</td><td>31 Spooner Street, Quahog </td><td>9876543210 </td><td>1988/02/29 </td></tr>
</tbody>
</table>


DynamoDB 資料的結構如下：


****  

<table>
<thead>
  <tr><th>CustomerName</th><th>StoreId</th><th>ContactDetails</th><th>DateOfBirth</th></tr>
</thead>
<tbody>
  <tr><td>分割區索引鍵</td><td>排序索引鍵</td><td colspan="2">N/A</td></tr>
  <tr><td><pre>Randy,Marsh</pre></td><td><pre>5</pre></td><td><pre>{<br />    "Name": "Randy",<br />    "Home": {<br />        "Address": "221B Baker Street",<br />        "Phone": 1234567890<br />    },<br />    "Work": {<br />        "Address": "31 Spooner Street, Quahog",<br />        "Phone": 9876541230<br />    }<br />}</pre></td><td><pre>02/29/1988</pre></td></tr>
</tbody>
</table>


下列 JSON 顯示完成 DynamoDB 結構所使用的物件映射和資料行映射：

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToDDB",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "test",
                "table-name": "customer"
            },
            "target-table-name": "customer_t",
            "mapping-parameters": {
                "partition-key-name": "CustomerName",
                "sort-key-name": "StoreId",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${FirstName},${LastName}"
                    },
                    {
                        "target-attribute-name": "StoreId",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${StoreId}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "{\"Name\":\"${FirstName}\",\"Home\":{\"Address\":\"${HomeAddress}\",\"Phone\":\"${HomePhone}\"}, \"Work\":{\"Address\":\"${WorkAddress}\",\"Phone\":\"${WorkPhone}\"}}"
                    }
                ]
            }
        }
    ]
}
```

資料行映射的另一個使用方法是使用 DynamoDB 格式做為您的文件類型。以下程式碼範例使用 *dynamodb-map* 做為屬性映射的 `attribute-sub-type`。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToDDB",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "test",
                "table-name": "customer"
            },
            "target-table-name": "customer_t",
            "mapping-parameters": {
                "partition-key-name": "CustomerName",
                "sort-key-name": "StoreId",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${FirstName},${LastName}"
                    },
                    {
                        "target-attribute-name": "StoreId",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${StoreId}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "document",
                        "attribute-sub-type": "dynamodb-map",
                        "value": {
                          "M": {
                            "Name": {
                              "S": "${FirstName}"
                            },
                            "Home": {
                                    "M": {
                                        "Address": {
                                            "S": "${HomeAddress}"
                                        },
                                        "Phone": {
                                            "S": "${HomePhone}"
                                        }
                                    }
                                },
                                "Work": {
                                    "M": {
                                        "Address": {
                                            "S": "${WorkAddress}"
                                        },
                                        "Phone": {
                                            "S": "${WorkPhone}"
                                        }
                                    }
                                }
                            }
                        }        
                    }
                ]
            }
        }
    ]
}
```

作為 `dynamodb-map` 的替代方案，您可以如下列範例所示，使用 `dynamodb-list` 作為屬性映射的 attribute-sub-type。

```
{
"target-attribute-name": "ContactDetailsList",
"attribute-type": "document",
"attribute-sub-type": "dynamodb-list",
"value": {
    "L": [
            {
                "N": "${FirstName}"
            },
            {   
                "N": "${HomeAddress}"
            },
            {   
                "N": "${HomePhone}"
            },
            {
                "N": "${WorkAddress}"
            },
            {
                "N": "${WorkPhone}"
            }
        ]   
    }
}
```

### 範例 1：使用屬性映射與物件映射
<a name="CHAP_Target.DynamoDB.ColumnMappingExample1"></a>

以下範例會將資料從兩個 MySQL 資料庫資料表 *nfl\_data* 和 *sport\_team* 遷移到兩個 DynamoDB 資料表 *NFLTeams* 和 *SportTeams*。將資料從 MySQL 資料庫資料表映射到 DynamoDB 資料表所使用的資料表結構和 JSON，如下所示。

MySQL 資料庫資料表 *nfl\_data* 的結構如下所示：

```
mysql> desc nfl_data;
+---------------+-------------+------+-----+---------+-------+
| Field         | Type        | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| Position      | varchar(5)  | YES  |     | NULL    |       |
| player_number | smallint(6) | YES  |     | NULL    |       |
| Name          | varchar(40) | YES  |     | NULL    |       |
| status        | varchar(10) | YES  |     | NULL    |       |
| stat1         | varchar(10) | YES  |     | NULL    |       |
| stat1_val     | varchar(10) | YES  |     | NULL    |       |
| stat2         | varchar(10) | YES  |     | NULL    |       |
| stat2_val     | varchar(10) | YES  |     | NULL    |       |
| stat3         | varchar(10) | YES  |     | NULL    |       |
| stat3_val     | varchar(10) | YES  |     | NULL    |       |
| stat4         | varchar(10) | YES  |     | NULL    |       |
| stat4_val     | varchar(10) | YES  |     | NULL    |       |
| team          | varchar(10) | YES  |     | NULL    |       |
+---------------+-------------+------+-----+---------+-------+
```

MySQL 資料庫資料表 *sport\_team* 的結構如下所示：

```
mysql> desc sport_team;
+---------------------------+--------------+------+-----+---------+----------------+
| Field                     | Type         | Null | Key | Default | Extra          |
+---------------------------+--------------+------+-----+---------+----------------+
| id                        | mediumint(9) | NO   | PRI | NULL    | auto_increment |
| name                      | varchar(30)  | NO   |     | NULL    |                |
| abbreviated_name          | varchar(10)  | YES  |     | NULL    |                |
| home_field_id             | smallint(6)  | YES  | MUL | NULL    |                |
| sport_type_name           | varchar(15)  | NO   | MUL | NULL    |                |
| sport_league_short_name   | varchar(10)  | NO   |     | NULL    |                |
| sport_division_short_name | varchar(10)  | YES  |     | NULL    |                |
```

將兩份資料表映射到兩份 DynamoDB 資料表所用的資料表映射規則，如下所示：

```
{
  "rules":[
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "dms_sample",
        "table-name": "nfl_data"
      },
      "rule-action": "include"
    },
    {
      "rule-type": "selection",
      "rule-id": "2",
      "rule-name": "2",
      "object-locator": {
        "schema-name": "dms_sample",
        "table-name": "sport_team"
      },
      "rule-action": "include"
    },
    {
      "rule-type":"object-mapping",
      "rule-id":"3",
      "rule-name":"MapNFLData",
      "rule-action":"map-record-to-record",
      "object-locator":{
        "schema-name":"dms_sample",
        "table-name":"nfl_data"
      },
      "target-table-name":"NFLTeams",
      "mapping-parameters":{
        "partition-key-name":"Team",
        "sort-key-name":"PlayerName",
        "exclude-columns": [
          "player_number", "team", "name"
        ],
        "attribute-mappings":[
          {
            "target-attribute-name":"Team",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"${team}"
          },
          {
            "target-attribute-name":"PlayerName",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"${name}"
          },
          {
            "target-attribute-name":"PlayerInfo",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"{\"Number\": \"${player_number}\",\"Position\": \"${Position}\",\"Status\": \"${status}\",\"Stats\": {\"Stat1\": \"${stat1}:${stat1_val}\",\"Stat2\": \"${stat2}:${stat2_val}\",\"Stat3\": \"${stat3}:${
stat3_val}\",\"Stat4\": \"${stat4}:${stat4_val}\"}"
          }
        ]
      }
    },
    {
      "rule-type":"object-mapping",
      "rule-id":"4",
      "rule-name":"MapSportTeam",
      "rule-action":"map-record-to-record",
      "object-locator":{
        "schema-name":"dms_sample",
        "table-name":"sport_team"
      },
      "target-table-name":"SportTeams",
      "mapping-parameters":{
        "partition-key-name":"TeamName",
        "exclude-columns": [
          "name", "id"
        ],
        "attribute-mappings":[
          {
            "target-attribute-name":"TeamName",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"${name}"
          },
          {
            "target-attribute-name":"TeamInfo",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"{\"League\": \"${sport_league_short_name}\",\"Division\": \"${sport_division_short_name}\"}"
          }
        ]
      }
    }
  ]
}
```

*NFLTeams* DynamoDB 資料表的輸出範例如下所示：

```
  "PlayerInfo": "{\"Number\": \"6\",\"Position\": \"P\",\"Status\": \"ACT\",\"Stats\": {\"Stat1\": \"PUNTS:73\",\"Stat2\": \"AVG:46\",\"Stat3\": \"LNG:67\",\"Stat4\": \"IN 20:31\"}",
  "PlayerName": "Allen, Ryan",
  "Position": "P",
  "stat1": "PUNTS",
  "stat1_val": "73",
  "stat2": "AVG",
  "stat2_val": "46",
  "stat3": "LNG",
  "stat3_val": "67",
  "stat4": "IN 20",
  "stat4_val": "31",
  "status": "ACT",
  "Team": "NE"
}
```

SportsTeams *DynamoDB* 資料表的輸出範例如下所示：

```
{
  "abbreviated_name": "IND",
  "home_field_id": 53,
  "sport_division_short_name": "AFC South",
  "sport_league_short_name": "NFL",
  "sport_type_name": "football",
  "TeamInfo": "{\"League\": \"NFL\",\"Division\": \"AFC South\"}",
  "TeamName": "Indianapolis Colts"
}
```

## DynamoDB 的目標資料類型
<a name="CHAP_Target.DynamoDB.DataTypes"></a>

的 DynamoDB 端點 AWS DMS 支援大多數 DynamoDB 資料類型。下表顯示使用 時支援的 Amazon AWS DMS 目標資料類型， AWS DMS 以及來自 AWS DMS 資料類型的預設映射。

如需 AWS DMS 資料類型的詳細資訊，請參閱 [AWS Database Migration Service 的資料類型](CHAP_Reference.DataTypes.md)。

當 從異質資料庫 AWS DMS 遷移資料時，我們會將資料類型從來源資料庫映射到稱為 AWS DMS 資料類型的中繼資料類型。然後，我們會將中繼資料類型映射到目標資料類型。下表顯示每個 AWS DMS 資料類型及其在 DynamoDB 中對應的資料類型：


| AWS DMS 資料類型 | DynamoDB 資料類型 | 
| --- | --- | 
| String | String | 
| WString | String | 
| Boolean | Boolean | 
| 日期 | String | 
| DateTime | String | 
| INT1 | Number | 
| INT2 | Number | 
| INT4 | Number | 
| INT8 | Number | 
| 數值 | Number | 
| Real4 | Number | 
| Real8 | Number | 
| UINT1 | Number | 
| UINT2 | Number | 
| UINT4 | Number | 
| UINT8 | Number | 
| CLOB | String | 