【问题标题】:Row processing data from Redshift to Redshift行处理从 Redshift 到 Redshift 的数据
【发布时间】:2018-07-16 18:11:19
【问题描述】:

我们正在处理一个需求,我们希望从一个 redshift 集群“逐行”获取增量数据,根据需求对其进行处理并将其插入另一个 redshift 集群。我们希望做到“row wise” 而不是“batch operation”。为此,我们正在编写一个通用服务,它将从 Redshift -> Redshift 进行行处理。所以,它就像 Redshift -> Service -> Redshift。 对于插入数据,我们将使用插入查询来插入。我们将在特定批次之后提交,而不是按行进行性能。 但我有点担心多个插入查询的性能。或者有没有其他可用的工具可以做到这一点。有许多可用的 ETL 工具,但都进行批处理。我们希望逐行处理。有人可以建议吗?

【问题讨论】:

  • 你不想这样做,除非音量非常非常低。性能会很差。必须有更好的方法从其他来源获取数据
  • 你说的每批有多少数据?使用 Redshift,您希望进行批量加载而不是插入。考虑让您的服务将行作为多个文件写入 S3,然后进行批量加载(意味着每次数万到一百万行)。如果您一次只加载一千行或更少的行,您将遇到 Redshift 的问题。插入只是一个坏主意,因为这会阻止 Redshift 优化其表和列。
  • 在不知道处理行的要求的情况下,我无法说出一次执行这一行的想法,但是如果我们假设必须一次完成一行,那么我们不会'不想使用 Redshift。要么将数据存储在 OLTP 数据库中,在那里处理行,然后将其加载到 Redshift,要么将 Redshift 批量处理到 OLTP,在那里处理,然后批量返回到 Redshift。

标签: database amazon-web-services amazon-redshift


【解决方案1】:

我可以保证,根据经验,您的方法不会有效。您可以参考此链接了解详细的最佳实践:

https://docs.aws.amazon.com/redshift/latest/dg/c_loading-data-best-practices.html

但是,我建议你这样做:

  1. 编写一个 python 脚本,根据根据您的要求过滤数据的查询条件(即基于时间、日期等某些阈值)将数据从源 Redshift 卸载到 S3。此操作应该快速且您可以安排此脚本每分钟或几分钟执行一次,生成多个文件。

  2. 现在,您基本上在 S3 中有一个连续的文件流,其中每个文件的大小或批处理大小可以根据您对上一个脚本的频率进行控制。

  3. 现在,您所要做的就是设置一个服务,该服务在对象/文件创建时不断轮询 S3,然后根据需要对其进行处理,并将处理后的文件放入另一个存储桶中。我们称之为 B2。

  4. 设置另一个 python 脚本/ETL 步骤,从存储桶 B2 远程执行 COPY 命令。

这只是一个初步的想法。你必须在这种方法上发展并优化它。祝你好运!

【讨论】:

  • 感谢您的回答。考虑到我的用例和 redshift 的功能,我决定改变我的项目架构设计。
  • 我很想知道你最后是怎么做到的。你能在这里分享你的最终方法吗?
猜你喜欢
  • 2018-03-19
  • 2015-01-09
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
相关资源
最近更新 更多