hadoop - EMR/Redshift 数据仓库
问题描述
我们目前在 AWS 中使用 SQL Server。我们正在寻找从 SQL Server 中的数据创建数据仓库的方法。
似乎最简单的方法是使用 AWS DMS 工具并将数据发送到 redshift 并使其不断同步。Redshift 非常昂贵,因此请寻找其他方法。
我一直在使用 EMR。目前我正在使用 sqoop 从 SQL Server 获取数据并将其放入 Hive。我目前正在使用 HDFS 卷来存储数据。我还没有为此使用 S3。
我们的数据库有许多表,每个表都有数百万行。
每天更新这些数据的最佳方式是什么?sqoop 是否支持更新数据。如果不是什么其他工具用于这样的事情。
任何帮助都会很棒。
解决方案
我的建议是,如果处理过于复杂且耗时较长,或者更好地使用 Redshift,您可以选择 Hadoop 集群 (EMR)。
选择正确的工具。如果是数据仓库,那就选择 Redshift。
为什么是 DMS?你要实时同步吗?您想要每日同步。所以不需要使用 DMS。
更好的解决方案:
- 确保您有一个主键列和一个列来告诉我们该行何时更新,例如
updated_at
ormodified_at
。 - 运行 BCP 将数据从 SQL Server 批量导出到 CSV 文件。
- 将 CSV 上传到 S3,然后导入到 RedShift。
- 使用胶水获取增量数据(基于主键列和 update_at 列),然后将其导出到 S3。
- 将文件从 S3 导入 RedShift 暂存表。
- 运行 upsert 命令(更新 + 插入)以将临时表与主表合并。
如果您觉得运行胶水有点贵,那么使用 SSIS 或 Powershell 脚本执行步骤 1 到 4。然后psql
命令将文件从 S3 导入 Redshift 并执行步骤 5 和 6。
这将处理 SQL 服务器表中的插入和更新。但删除不会是其中的一部分。如果您需要所有 CRUD 操作,请使用 DMS 或 Debezium 的 CDC 方法。然后将其推送到 S3 和 RedShift。
推荐阅读
- macos - 通过 Catalyst 将 iOS 应用程序移植到 Mac 时如何获得访问文件的权限
- ios - 是否可以从 iPhone CMOS 传感器读取原始电压值?
- bash - 在 shell 脚本中格式化日期 YYYY-MM-DD +DAY + Mounth
- python - 如何在matplotlib中的垂直对齐X轴标签之间放置空间
- javascript - JavaScript 中的 .clientWidth/.width 不适用于 img 标签
- mysql - 尝试创建具有多个表但找不到创建有效主键的解决方案的 NFL 数据库
- css - 如何摆脱 DNN 的 Xcilion 皮肤中的渐变?
- qt - QML 将日期时间字符串转换为 qml 可解析日期在 GMT 时区失败
- matlab - 定点递归 MATLAB
- jinja2 - 删除 Jinja2 表中的空格