将 Amazon Timestream 作为 Amazon Database Migration Service 的目标 - Amazon 数据库迁移服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

将 Amazon Timestream 作为 Amazon Database Migration Service 的目标

您可以使用 Amazon Database Migration Service 将数据从源数据库迁移到 Amazon Timestream 目标端点,并支持完全加载和 CDC 数据迁移。

Amazon Timestream 是一项快速、可扩展的无服务器时间序列数据库服务,专为大量数据摄取而构建。时间序列数据是在某个时间间隔内收集的一系列数据点,用于测量随时间变化的事件。它用于收集、存储和分析来自物联网应用程序、 DevOps 应用程序和分析应用程序的指标。将数据存入 Timestream 后,您就可以近乎实时地可视化查看和识别数据的趋势和模式。有关 Amazon Timestream 的更多信息,请参阅《Amazon Timestream 开发人员指南》中的什么是 Amazon Timestream?

将 Amazon Timestream 作为 Amazon Database Migration Service 目标的先决条件

在将 Amazon Timestream 设置为 Amazon DMS 的目标之前,请确保您创建了 IAM 角色。此角色必须允许 Amazon DMS 访问要迁移到 Amazon Timestream 的数据。以下 IAM 策略中显示了您用于迁移到 Timestream 的角色所需具备的最低访问权限集。

{ "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:region:account_id:database/DATABASE_NAME" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "timestream:DeleteTable", "timestream:WriteRecords", "timestream:UpdateTable", "timestream:CreateTable" ], "Resource": "arn:aws:timestream:region:account_id:database/DATABASE_NAME/table/TABLE_NAME" } ] }

如果您打算迁移所有表,请将上面示例中的 TABLE_NAME 改成 *

在将 Timestream 作为目标时,请注意以下几点:

  • 如果您打算摄取时间戳超过 1 年的历史数据,我们建议使用 Amazon DMS 以逗号分隔值 (csv) 格式将数据写入 Amazon S3。然后,使用 Timestream 的批量加载功能将数据摄取到 Timestream 中。有关更多信息,请参阅 Amazon Timestream 开发人员指南中的在 Timestream 中使用批量加载

  • 对于时间不足 1 年的数据的完全加载数据迁移,我们建议将 Timestream 表的内存存储保留期设置为大于或等于最早的时间戳。等到迁移完成后,再将表的内存存储保留时间编辑为所需的值。例如,要迁移最早时间戳为 2 个月的数据,请执行以下操作:

    • 将 Timestream 目标表的内存存储保留期设置为 2 个月。

    • 使用 Amazon DMS 开始迁移数据。

    • 数据迁移完成后,将目标 Timestream 表的保留期更改为所需的值。

    我们建议在迁移之前使用以下页面上的信息估算内存存储成本:

  • 对于 CDC 数据迁移,我们建议设置目标表的内存存储保留期,使摄取的数据处于内存存储保留范围内。有关更多信息,请参阅 Amazon Timestream 开发人员指南中的写入最佳实践

多线程完全加载任务设置

为了帮助提高数据传输速度,Amazon DMS 支持通过以下任务设置,针对 Timestream 目标端点执行多线程完全加载迁移任务:

  • MaxFullLoadSubTasks – 使用此选项指示要并行加载的表的最大数目。DMS 使用专用的子任务将各个表加载到其对应的 Amazon Timestream 目标表。默认值为 8;最大值为 49。

  • ParallelLoadThreads – 使用此选项指定 Amazon DMS 将各个表加载到其 Amazon Timestream 目标表时使用的线程数。Timestream 目标的最大值为 32。您可以请求提高此最大值限制。

  • ParallelLoadBufferSize – 使用此选项指定在缓冲区(并行加载线程将数据加载到 Amazon Timestream 目标时使用)中存储的最大记录数。默认值是 50。最大值为 1000。将此设置与 ParallelLoadThreads 一起使用;仅在有多个线程时 ParallelLoadBufferSize 才有效。

  • ParallelLoadQueuesPerThread – 使用此选项可以指定每个并发线程访问的队列数,以便从队列中取出数据记录并为目标生成批处理负载。默认 为 1。但是,对于各种负载大小的 Amazon Timestream 目标,有效范围为每个线程 5-512 个队列。

多线程 CDC 加载任务设置

要提高 CDC 性能,请 Amazon DMS 支持以下任务设置:

  • ParallelApplyThreads – 指定 Amazon DMS 在 CDC 加载期间使用的并发线程数,以便将数据记录推送到 Timestream 目标端点。默认值是 0,最大值是 32。

  • ParallelApplyBufferSize – 指定在 CDC 加载过程中,要在每个缓冲区队列中存储的、供并发线程推送到 Timestream 目标端点的最大记录数。默认值是 100,最大值是 1,000。当 ParallelApplyThreads 指定多个线程时,请使用此选项。

  • ParallelApplyQueuesPerThread – 指定每个线程访问以将数据记录从队列中取出并在 CDC 期间为 Timestream 端点生成批处理负载的队列数。默认值是 1,最大值是 512。

使用 Timestream 作为 Amazon DMS 的目标时的端点设置

您可以使用端点设置来配置 Timestream 目标数据库,这与使用额外连接属性类似。您可以在使用 Amazon DMS 控制台创建目标端点时指定对应设置,或者在 Amazon CLI 中使用符合 --timestream-settings '{"EndpointSetting": "value", ...}' JSON 语法的 create-endpoint 命令。

下表显示了将 Timestream 作为目标时您可以使用的端点设置。

名称 描述

MemoryDuration

设置此属性可指定将迁移的数据存储在 Timestream 内存存储中的保留期。时间以小时为单位进行测量。Timestream 的内存存储经过优化,可实现高摄取吞吐量和快速访问。

默认值:24(小时)

有效值:1 到 8736(1 小时到 12 个月,以小时为单位)

例如:--timestream-settings '{"MemoryDuration": 20}'

DatabaseName

设置此属性可指定目标 Timestream 数据库名称。

类型:字符串

例如:--timestream-settings '{"DatabaseName": "db_name"}'

TableName

设置此属性可指定目标 Timestream 表名称。

类型:字符串

例如:--timestream-settings '{"TableName": "table_name"}'

MagneticDuration

设置此属性可指定应用于 Timestream 表的磁介质保留期(以天为单位)。这是摄取的数据的保留期限。Timestream 会删除任何超过保留期限的时间戳。有关更多信息,请参阅 Amazon Timestream 开发人员指南中的存储

例如:--timestream-settings '{"MagneticDuration": "3"}'

CdcInsertsAndUpdates

将此属性设置为 true 可指定 Amazon DMS 仅应用插入和更新,而不应用删除。Timestream 不允许删除记录,因此,如果此值为 false,Amazon DMS 会将 Timestream 数据库中的相应记录置空,而不是删除。有关更多信息,请参阅下面的限制

默认值:false

例如:--timestream-settings '{"CdcInsertsAndUpdates": "true"}'

EnableMagneticStoreWrites

将此属性设置为 true 可启用磁介质存储写入。当此值为 false 时,Amazon DMS 不写入时间戳早于目标表内存存储保留期的记录,因为 Timestream 默认不允许磁介质存储写入。有关更多信息,请参阅 Amazon Timestream 开发人员指南中的写入最佳实践

默认值:false

例如:--timestream-settings '{"EnableMagneticStoreWrites": "true"}'

创建和修改 Amazon Timestream 目标端点

创建 IAM 角色并确定最小访问权限集后,您可以使用 Amazon DMS 控制台,也可以使用 Amazon CLI 中的 create-endpoint 命令和 --timestream-settings '{"EndpointSetting": "value", ...}' JSON 语法创建 Amazon Timestream 目标端点。

以下示例演示如何使用 Amazon 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 主题

Amazon 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 } } ] }

Amazon DMS 目前支持 map-record-to-recordmap-record-to-document 作为 rule-action 参数的唯一有效值。map-record-to-recordmap-record-to-document 值指定 Amazon DMS 默认情况下对未作为 exclude-columns 属性列表的一部分排除的记录执行的操作。这些值不会以任何方式影响属性映射。

从关系数据库迁移到 Timestream 主题时使用 map-record-to-record。此规则类型使用关系数据库中的 taskResourceId.schemaName.tableName 值作为 Timestream 主题中的分区键,并为源数据库中的每个列创建一个属性。在使用 map-record-to-record 时,对于源表中未在 exclude-columns 属性列表中列出的任何列,Amazon 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" }

将 Amazon Timestream 作为 Amazon Database Migration Service 目标的限制

将 Amazon Timestream 作为目标时存在以下限制:

  • 维度和时间戳:Timestream 像使用复合主键一样使用源数据中的维度和时间戳,并且不允许更新插入这些值。这意味着,如果您更改源数据库中记录的时间戳或维度,Timestream 数据库将尝试创建新记录。因此,如果您更改一条记录的维度或时间戳,使其与另一条现有记录的维度或时间戳相匹配,Amazon DMS 可能会更新另一条记录的值,而不是创建新记录或更新先前的相应记录。

  • DDL 命令:当前版本的 Amazon DMS 仅支持 CREATE TABLEDROP TABLE DDL 命令。

  • 记录限制:Timestream 对记录有限制,例如记录大小和度量值大小。有关更多信息,请参阅《Amazon Timestream 开发人员指南》https://docs.amazonaws.cn/中的配额

  • 删除记录和空值:Timestream 不支持删除记录。为了支持迁移从源中删除的记录,Amazon DMS 会清除 Timestream 目标数据库中的记录中的相应字段。Amazon DMS 会更改相应目标记录的字段值,将数值字段更改为 0,将文本字段更改为 null,对于布尔型字段,更改为 false

  • 将 Timestream 作为目标不支持非关系数据库 (RDBMS) 的源。

  • Amazon DMS 仅在以下区域中支持将 Timestream 作为目标:

    • 美国东部(弗吉尼亚州北部)

    • 美国东部(俄亥俄州)

    • 美国西部(俄勒冈州)

    • 欧洲地区(爱尔兰)

    • 欧洲地区(法兰克福)

    • 亚太地区(悉尼)

    • 亚太地区(东京)

  • 将 Timestream 作为目标不支持将 TargetTablePrepMode 设置为 TRUNCATE_BEFORE_LOAD。我们建议将 DROP_AND_CREATE 用于此设置。