

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用亚马逊 Timestream 作为目标 AWS Database Migration Service
<a name="CHAP_Target.Timestream"></a>

您可以使用将数据从源数据库迁移 AWS Database Migration Service 到 Amazon Timestream 目标终端节点，同时支持全载和 CDC 数据迁移。

Amazon Timestream 是一项快速、可扩展的无服务器时间序列数据库服务，专为大量数据摄取而构建。时间序列数据是在某个时间间隔内收集的一系列数据点，用于测量随时间变化的事件。它用于收集、存储和分析来自物联网应用程序、 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)
+ [使用亚马逊 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*中使用 `*` for。

在将 Timestream 作为目标时，请注意以下几点：
+ 如果您打算摄取时间戳超过 1 年的历史数据，我们建议使用 AWS DMS 以逗号分隔值 (csv) 格式将数据写入 Amazon S3。然后，使用 Timestream 的批量加载功能将数据摄取到 Timestream 中。有关更多信息，请参阅 [Amazon Timestream 开发人员指南](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/data-ingest.html)。

## 多线程完全加载任务设置
<a name="CHAP_Target.Timestream.FLTaskSettings"></a>

为了帮助提高数据传输速度， AWS DMS 支持使用以下任务设置将多线程满载迁移到 Timestream 目标端点的任务：
+ `MaxFullLoadSubTasks` – 使用此选项指示要并行加载的表的最大数目。DMS 使用专用的子任务将各个表加载到其对应的 Amazon Timestream 目标表。默认值为 8；最大值为 49。
+ `ParallelLoadThreads`— 使用此选项指定用于将每个表加载到其 Amazon Timestream 目标表的线程数。 AWS DMS 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 端点生成批处理负载的队列数。默认值是 1，最大值是 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_cn/dms/latest/userguide/CHAP_Target.Timestream.html)

## 创建和修改 Amazon Timestream 目标端点
<a name="CHAP_Target.Timestream.CreateModifyEndpoint"></a>

创建 IAM 角色并确定最低访问权限集后，您可以使用 AWS DMS 控制台创建 Amazon Timestream 目标终端节点，也可以使用中带有 `--timestream-settings '{"EndpointSetting": "value", ...}'` JSON 语法的`create-endpoint`命令创建 Amazon Timestream 目标终端节点。[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)

以下示例演示如何使用 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`值指定默认情况下如何 AWS DMS 处理未排除在`exclude-columns`属性列表中的记录。这些值不会以任何方式影响属性映射。

从关系数据库迁移到 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 | 02/29/1988 | 

要将此信息从名为 `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"
  }
```

## 使用亚马逊 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/)中的[配额](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` 用于此设置。