首页 > 解决方案 > EMR/Redshift 数据仓库

问题描述

我们目前在 AWS 中使用 SQL Server。我们正在寻找从 SQL Server 中的数据创建数据仓库的方法。

似乎最简单的方法是使用 AWS DMS 工具并将数据发送到 redshift 并使其不断同步。Redshift 非常昂贵,因此请寻找其他方法。

我一直在使用 EMR。目前我正在使用 sqoop 从 SQL Server 获取数据并将其放入 Hive。我目前正在使用 HDFS 卷来存储数据。我还没有为此使用 S3。

我们的数据库有许多表,每个表都有数百万行。

每天更新这些数据的最佳方式是什么?sqoop 是否支持更新数据。如果不是什么其他工具用于这样的事情。

任何帮助都会很棒。

标签: hadoophiveamazon-redshiftsqoopamazon-emr

解决方案


我的建议是,如果处理过于复杂且耗时较长,或者更好地使用 Redshift,您可以选择 Hadoop 集群 (EMR)。

选择正确的工具。如果是数据仓库,那就选择 Redshift。

为什么是 DMS?你要实时同步吗?您想要每日同步。所以不需要使用 DMS。

更好的解决方案:

  1. 确保您有一个主键列和一个列来告诉我们该行何时更新,例如updated_ator modified_at
  2. 运行 BCP 将数据从 SQL Server 批量导出到 CSV 文件。
  3. 将 CSV 上传到 S3,然后导入到 RedShift。
  4. 使用胶水获取增量数据(基于主键列和 update_at 列),然后将其导出到 S3。
  5. 将文件从 S3 导入 RedShift 暂存表。
  6. 运行 upsert 命令(更新 + 插入)以将临时表与主表合并。

如果您觉得运行胶水有点贵,那么使用 SSIS 或 Powershell 脚本执行步骤 1 到 4。然后psql命令将文件从 S3 导入 Redshift 并执行步骤 5 和 6。

这将处理 SQL 服务器表中的插入和更新。但删除不会是其中的一部分。如果您需要所有 CRUD 操作,请使用 DMS 或 Debezium 的 CDC 方法。然后将其推送到 S3 和 RedShift。


推荐阅读