

要获得与亚马逊 Timestream 类似的功能 LiveAnalytics，可以考虑适用于 InfluxDB 的亚马逊 Timestream。适用于 InfluxDB 的 Amazon Timestream 提供简化的数据摄取和个位数毫秒级的查询响应时间，以实现实时分析。点击[此处](https://docs.aws.amazon.com//timestream/latest/developerguide/timestream-for-influxdb.html)了解更多信息。

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

# Aurora/RDS Postgres 作为目标
<a name="aurora-postgres-target"></a>

本节介绍如何将 S3 分阶段的时间序列数据提取到 Amazon PostgreSQL 中。 RDS/Aurora 摄取过程将主要聚焦于从 Timestream 的导出工具生成的 CSV 文件要摄取到 Postgres 数据库中。对于基于时间的查询，建议在设计 PostgreSQL 架构和表时采用适当的索引策略。使用任何 ETL 流程，将 Timestream 的专用结构转换为针对特定要求进行优化的关系表。在将 Timestream 数据迁移到关系数据库时，使用时间戳列作为主时间索引、派生自 Timestream 的 measure\$1name 测量值标识符列以及来自 Timestream 维度和实际度量的维度列构建架构。根据时间范围和高频查询的维度组合创建策略索引，以优化数据转换和加载过程中的性能。将时间序列数据迁移到 PostgreSQL 时，合理配置实例规格对于在扩展过程中维持查询性能至关重要。在选择实例类时，请考虑预期数据量、查询复杂度和并发性要求，特别注意时间序列聚合工作负载的内存分配。对于超过数千万行的数据集，应利用 [PostgreSQL 的原生分区功能](https://docs.aws.amazon.com//AmazonRDS/latest/UserGuide/PostgreSQL_Partitions.html)和高级索引策略，针对时间序列访问模式进行优化。

我们建议执行功能和性能测试以选择合适的实例，同时[调整 PostgreSQL 数据库](https://docs.aws.amazon.com//AmazonRDS/latest/UserGuide/PostgreSQL.Tuning_proactive_insights.html)以解决任何性能瓶颈。通过对源 Timestream 数据库与目标系统进行样本查询比对，实施严格的数据完整性检查，对于确保迁移成功及维持查询正确性至关重要。通过在两个系统上执行相同的查询并比较结果（包括记录计数、聚合结果和异常值），可识别任何差异，这些差异可能表明存在转换错误、数据丢失或查询解释中的语义差异。此验证流程旨在确认数据在迁移后仍保持其分析价值，增强依赖这些见解的利益相关者对新系统的信心，协助识别为适应平台间语法或功能差异所需的查询调整，并建立可量化的基准线以判定何时可将迁移视为完成且成功。如果缺乏这些系统性检查，细微的数据不一致可能无法被发现，这可能导致错误的业务决策，或动摇对整个迁移项目的信心。

## 摄取
<a name="postgres-ingestion"></a>

我们建议使用 [AWS数据库迁移服务（DMS）](https://docs.aws.amazon.com//dms/latest/userguide/Welcome.html)，其中[源为 S3](https://docs.aws.amazon.com//dms/latest/userguide/CHAP_Source.S3.html)（同时支持 CSV 和 Parquet），目标为 [PostgreSQL](https://docs.aws.amazon.com//dms/latest/userguide/CHAP_Target.PostgreSQL.html)。对于 AWS DMS 可能不适合您的特定要求的情况，我们提供了一个基于 Python 的补充工具（PostgreSQL CSV [摄取工具），用于将 CSV 数据从 S3 迁移到 PostgreSQL](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/targets/rds_for_postgresql/README.md)。

### PostgreSQL CSV 摄取工具概览
<a name="postgres-tool-overview"></a>

PostgreSQL CSV 摄取工具是一种高性能的实用工具，旨在高效地将 CSV 文件加载到 PostgreSQL 数据库中。该工具利用多线程和连接池并行处理多个文件，从而显著缩短数据加载时间。建议使用 EC2 实例运行此脚本。考虑使用针对网络操作进行优化的实例类型，例如 C5N。

#### 主要 功能
<a name="key-features"></a>
+ 多线程处理：同时加载多个 CSV 文件。
+ 连接池：高效管理数据库连接。
+ 自动列检测：从 CSV 标头中动态提取列名。
+ 重试逻辑：处理带指数回退的瞬态错误。
+ 文件管理；将处理过的文件移至指定目录，以便重试时能继续执行而非重新开始。
+ 全面日志记录：用于监控和故障排除的详细日志。
+ 错误通知：可选的 SNS 故障通知。
+ 安全凭证：从 Secrets Manager 检索数据库密码。 AWS 

*先决条件和安装*

请参阅中的 [PostgreSQL CSV 摄取](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/targets/rds_for_postgresql/README.md)工具自述文件中的先决条件和安装。 GitHub

*用法*

```
python copy_postgres.py \
    --database 'postgres_testing' \
    --table 'demolarge_restored' \
    --csv-files-dir '/data/csv_files/*partition*/*.csv' \
    --host database-1.cluster-xxxxxxxx.us-east-1.rds.amazonaws.com \
    --secret-arn 'arn:aws:secretsmanager:<region>:<account_id>:secret:rds!cluster-xxxxx-xx-xx-xx-xxxxxxxx-xxxxx' \
    --sns-topic-arn 'arn:aws:sns:<region>:<account_id>:<topic_name>'
```

*验证*

您可以使用 DynamoDB 存储 Timestream 导出工具生成的导出行或日志，并与从 PostgreSQL 摄取自动化日志中摄取的行进行比对。在迁移过程中，如果持续摄取数据，则源表和目标表的计数结果会因导出和导入时间不一致而产生差异。因此建议通过日志记录比较导出行数与导入行数。

*清除*
+ 清理作为 Timestream 导出工具的一部分创建的卸载数据。 LiveAnalytics 
+ 删除 EC2 上下载的数据和日志以释放空间。
+ 如果 DynamoDB 表作为 Time LiveAnalytics stream 导出工具的一部分用于记录，请删除。