

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

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

您可以使用 AWS Database Migration Service 將資料從來源資料庫遷移至 Amazon Timestream 目標端點，並支援完全載入和 CDC 資料遷移。

Amazon Timestream 是一項專為大量資料擷取而建置之快速、可擴展且無伺服器的時間序列資料庫服務。時間序列資料是在一段時間間隔內收集的資料點序列，用於測量隨時間變更的事件。它可用來收集、儲存和分析來自 IoT 應用程式、DevOps 應用程式和分析應用程式的指標。在 Timestream 中取得資料後，您可以近乎即時地視覺化並識別資料中的趨勢和模式。如需 Amazon Timestream 的相關資訊，請參閱《Amazon Timestream 開發人員指南》**中的[什麼是 Amazon Timestream？](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html)。

**Topics**
+ [使用 Amazon Timestream 做為 目標的先決條件 AWS Database Migration Service](#CHAP_Target.Timestream.Prerequisites)
+ [多執行緒完全載入任務設定](#CHAP_Target.Timestream.FLTaskSettings)
+ [多執行緒 CDC 載入任務設定](#CHAP_Target.Timestream.CDCTaskSettings)
+ [使用 Timestream 做為 目標時的端點設定 AWS DMS](#CHAP_Target.Timestream.ConnectionAttrib)
+ [建立和修改 Amazon Timestream 目標端點](#CHAP_Target.Timestream.CreateModifyEndpoint)
+ [使用物件映射將資料遷移到 Timestream 主題](#CHAP_Target.Timestream.ObjectMapping)
+ [使用 Amazon Timestream 做為 目標的限制 AWS Database Migration Service](#CHAP_Target.Timestream.Limitations)

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

將 Amazon Timestream 設定為 的目標之前 AWS DMS，請務必建立 IAM 角色。此角色必須允許 AWS DMS 存取要遷移至 Amazon Timestream 的資料。下列 IAM 政策顯示您用來遷移至 Timestream 之角色的最低存取權限集。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowDescribeEndpoints",
      "Effect": "Allow",
      "Action": [
        "timestream:DescribeEndpoints"
      ],
      "Resource": "*"
    },
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "timestream:ListTables",
        "timestream:DescribeDatabase"
      ],
      "Resource": "arn:aws:timestream:us-east-1:123456789012:database/DATABASE_NAME"
    },
    {
      "Sid": "VisualEditor1",
      "Effect": "Allow",
      "Action": [
        "timestream:DeleteTable",
        "timestream:WriteRecords",
        "timestream:UpdateTable",
        "timestream:CreateTable"
      ],
      "Resource": "arn:aws:timestream:us-east-1:123456789012:database/DATABASE_NAME/table/TABLE_NAME"
    }
  ]
}
```

------

如果您要遷移所有資料表，請在上述範例中使用 `*` 做為 *TABLE\$1NAME*。

請注意以下有關使用 Timestream 做為目標的事項：
+ 如果您想要擷取時間戳記超過 1 年的歷史資料，建議使用 AWS DMS 並以逗號分隔值 (csv) 格式將資料寫入 Amazon S3。然後，使用 Timestream 的批次載入將資料擷取至 Timestream。如需詳細資訊，請參閱《Amazon Timestream 開發人員指南》[https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html)中的[在 Timestream 中使用批次載入](https://docs.aws.amazon.com/timestream/latest/developerguide/batch-load.html)。
+ 對於 1 年以內資料的完全載入資料遷移，我們建議將 Timestream 資料表的記憶體存放區保留期設定為大於或等於最舊的時間戳記。然後，當完成遷移後，將資料表的記憶體存放區保留編輯為所需的值。例如，若要遷移最舊時間戳記為 2 個月的資料，請執行下列動作：
  + 將 Timestream 目標資料表的記憶體存放區保留時間設定為 2 個月。
  + 使用 開始資料遷移 AWS DMS。
  + 完成資料遷移後，請將目標 Timestream 資料表的保留期變更為所需的值。

   建議您使用下列頁面上的資訊，在遷移之前先預估記憶體存放區成本：
  + [Amazon Timestream 定價](https://aws.amazon.com/timestream/pricing)
  + [AWS 定價計算器](https://calculator.aws/#/addService) 
+ 對於 CDC 資料遷移，建議您設定目標資料表的記憶體存放區保留期，使擷取的資料處於記憶體存放區保留限制內。如需詳細資訊，請參閱《Amazon Timestream 開發人員指南》[https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html)中的[寫入最佳實務](https://docs.aws.amazon.com/timestream/latest/developerguide/data-ingest.html)。

## 多執行緒完全載入任務設定
<a name="CHAP_Target.Timestream.FLTaskSettings"></a>

為了協助提高資料傳輸速度， AWS DMS 使用以下任務設定，支援多執行緒完全載入遷移任務到 Timestream 目標端點：
+ `MaxFullLoadSubTasks`：使用此選項，指出要平行載入的來源資料表數目上限。DMS 會使用專用子任務，將每個資料表載入到其對應的 Amazon Timestream 目標資料表。預設值為 8；最大值為 49。
+ `ParallelLoadThreads` – 使用此選項指定 AWS DMS 用來將每個資料表載入其 Amazon Timestream 目標資料表的執行緒數目。Timestream 目標的最大值為 32。您可以要求提高此上限。
+ `ParallelLoadBufferSize`：使用此選項，指定要在平行載入執行緒用來將資料載入至 Amazon Timestream 目標的緩衝區中存放的記錄數量上限。預設值為 50。最大值為 1000。使用此設定搭配 `ParallelLoadThreads`；`ParallelLoadBufferSize`，只有在有多個執行緒時才有效。
+ `ParallelLoadQueuesPerThread`：使用此選項指定每個並行執行緒存取的佇列數目，以便將資料記錄從佇列中取出，並為目標產生批次載入。預設為 1。但是，對於各種承載大小的 Amazon Timestream 目標，有效範圍為每個執行緒 5–512 個佇列。

## 多執行緒 CDC 載入任務設定
<a name="CHAP_Target.Timestream.CDCTaskSettings"></a>

為了提升 CDC 效能， AWS DMS 支援下列任務設定：
+ `ParallelApplyThreads` – 指定在 CDC 載入期間 AWS DMS 用來將資料記錄推送至 Timestream 目標端點的並行執行緒數目。預設值為 0，最大值為 32。
+ `ParallelApplyBufferSize`：指定每個緩衝區佇列中存放的最大記錄數目，以便並行執行緒在 CDC 載入期間推送至 Timestream 目標端點。預設值為 100，最大值為 1,000。`ParallelApplyThreads` 指定多個執行緒時，請使用此選項。
+ `ParallelApplyQueuesPerThread`：指定每個執行緒存取的佇列數目，以便從佇列中取出資料記錄，並在 CDC 期間產生 Timestream 端點的批次載入。預設值為 １，最大值為 512。

## 使用 Timestream 做為 目標時的端點設定 AWS DMS
<a name="CHAP_Target.Timestream.ConnectionAttrib"></a>

您可以使用端點設定來設定您的 Timestream 目標資料庫，類似於使用額外的連線屬性。當您使用 AWS DMS 主控台或使用 中的 `create-endpoint`命令搭配 `--timestream-settings '{"EndpointSetting": "value", ...}'` JSON 語法來建立目標端點時[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)，您可以指定設定。

下列資料表顯示您可搭配 Timestream 做為目標使用的端點設定。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Target.Timestream.html)

## 建立和修改 Amazon Timestream 目標端點
<a name="CHAP_Target.Timestream.CreateModifyEndpoint"></a>

建立 IAM 角色並建立最低限度的存取許可後，您可以使用 AWS DMS 主控台建立 Amazon Timestream 目標端點，或使用 中的 `create-endpoint`命令[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)搭配 `--timestream-settings '{"EndpointSetting": "value", ...}'` JSON 語法。

以下範例示範如何使用 AWS CLI建立和修改 Timestream 目標端點。

**建立 Timestream 目標端點命令**

```
aws dms create-endpoint —endpoint-identifier timestream-target-demo
--endpoint-type target —engine-name timestream
--service-access-role-arn arn:aws:iam::123456789012:role/my-role
--timestream-settings
{
    "MemoryDuration": 20,
    "DatabaseName":"db_name",
    "MagneticDuration": 3,
    "CdcInsertsAndUpdates": true,
    "EnableMagneticStoreWrites": true,
}
```

**修改 Timestream 目標端點命令**

```
aws dms modify-endpoint —endpoint-identifier timestream-target-demo
--endpoint-type target —engine-name timestream
--service-access-role-arn arn:aws:iam::123456789012:role/my-role
--timestream-settings
{
    "MemoryDuration": 20,
    "MagneticDuration": 3,
}
```

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

AWS DMS 使用資料表映射規則，將資料從來源映射到目標 Timestream 主題。若要將資料映射到目標主題，請使用一種稱為物件映射的資料表映射規則。您可以使用物件映射定義如何將來源中的資料記錄映射到發佈到 Timestream 主題的資料記錄。

除了擁有分割區索引鍵外，Timestream 主題沒有預設結構。

**注意**  
您不一定要使用物件映射。您可以針對各種轉換使用一般資料表映射。不過，分割區索引鍵類型會遵循下列預設行為：  
主索引鍵會作為「完全載入」的分割區索引鍵。
如果未使用平行套用任務設定，則 `schema.table` 會做為 CDC 的分割區索引鍵。
如果使用平行套用任務設定，則主索引鍵會做為 CDC 的分割區索引鍵。

若要建立物件映射規則，請將 `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": ""
            }
        }
    ]
}
```



```
{
    "rules": [
        {
            "rule-type": "object-mapping",
            "rule-id": "1",
            "rule-name": "timestream-map",
            "rule-action": "map-record-to-record",
            "target-table-name": "tablename",
            "object-locator": {
                "schema-name": "",
                "table-name": ""
            },
            "mapping-parameters": {
                "timestream-dimensions": [
                    "column_name1",
                     "column_name2"
                ],
                "timestream-timestamp-name": "time_column_name",
                "timestream-multi-measure-name": "column_name1or2",
                "timestream-hash-measure-name":  true or false,
                "timestream-memory-duration": x,
                "timestream-magnetic-duration": y
            }
        }
    ]
}
```

AWS DMS 目前支援 `map-record-to-record`和 `map-record-to-document`做為 `rule-action` 參數的唯一有效值。`map-record-to-record` 和 `map-record-to-document`值會指定預設對`exclude-columns`屬性清單中未排除的記錄 AWS DMS 執行的動作。這些值反正不會影響屬性映射。

從關聯式資料庫遷移到 Timestream 主題時，請使用 `map-record-to-record`。此規則類型使用關聯式資料庫的 `taskResourceId.schemaName.tableName` 值做為 Timestream 主題的分割區索引鍵，並會為來源資料庫中的每一欄建立一個屬性。使用 時`map-record-to-record`，對於來源資料表中未列於`exclude-columns`屬性清單中的任何資料欄， 會在目標主題中 AWS DMS 建立對應的屬性。無論屬性映射中是否使用該來源資料行，都會建立此對應的屬性。

了解 `map-record-to-record` 的一種方法是查看它運作時的狀態。在本範例中，假設您開始使用之關聯式資料庫資料表資料列的結構和資料如下。


| FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateofBirth | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Randy | Marsh | 5 | 221B Baker Street | 1234567890 | 31 Spooner Street, Quahog  | 9876543210 | 1988/02/29 | 

若要將此資訊從名為 `Test` 的結構描述遷移至 Timestream 主題，您可以建立規則以將資料映射至目標主題。以下規則說明映射。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "DefaultMapToTimestream",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            }
        }
    ]
}
```

指定 Timestream 主題和分割區索引鍵 (在本例中為 `taskResourceId.schemaName.tableName`)，下列說明使用我們在 Timestream 目標主題中的範例資料所產生的記錄格式：

```
  {
     "FirstName": "Randy",
     "LastName": "Marsh",
     "StoreId":  "5",
     "HomeAddress": "221B Baker Street",
     "HomePhone": "1234567890",
     "WorkAddress": "31 Spooner Street, Quahog",
     "WorkPhone": "9876543210",
     "DateOfBirth": "02/29/1988"
  }
```

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

使用 Amazon Timestream 做為目標時，有下列限制：
+ **維度和時間戳記：**Timestream 會如同使用複合主鍵一樣使用來源資料中的維度和時間戳記，而且也不允許您更新插入這些值。這表示，如果您變更來源資料庫中記錄的時間戳記或維度，Timestream 資料庫會嘗試建立新記錄。因此，如果您變更記錄的維度或時間戳記，使其與其他現有記錄的維度或時間戳記相符，則 會 AWS DMS 更新其他記錄的值，而不是建立新的記錄或更新先前的對應記錄。
+ **DDL 命令：** 的目前版本 AWS DMS 僅支援 `CREATE TABLE`和 `DROP TABLE` DDL 命令。
+ **記錄限制：**Timestream 對記錄大小和度量大小等記錄有限制。如需詳細資訊，請參閱《[Amazon Timestream 開發人員指南](https://docs.aws.amazon.com/)》中的[配額](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html)。
+ **刪除記錄和空值：**Timestream 不支援刪除記錄。為了支援遷移從來源刪除的記錄， 會 AWS DMS 清除 Timestream 目標資料庫中記錄中的對應欄位。將對應目標記錄欄位中的值 AWS DMS 變更為數字欄位為 **0**、文字欄位為 **null**，以及布林值欄位為 **false**。
+ 做為目標的 Timestream 不支援非關聯式資料庫 (RDBMS) 的來源。
+ AWS DMS 僅支援 Timestream 做為下列區域中的目標：
  + 美國東部 (維吉尼亞北部)
  + 美國東部 (俄亥俄)
  + 美國西部 (奧勒岡)
  + 歐洲 (愛爾蘭)
  + 歐洲 (法蘭克福)
  + 亞太地區 (雪梨)
  + 亞太地區 (東京)
+ 做為目標的 Timestream 不支援將 `TargetTablePrepMode` 設定為 `TRUNCATE_BEFORE_LOAD`。我們建議針對此設定使用 `DROP_AND_CREATE`。