【问题标题】:Streaming data from a single Kinesis Stream to multiple tables in Redshift将数据从单个 Kinesis Stream 流式传输到 Redshift 中的多个表
【发布时间】:2017-09-14 19:09:03
【问题描述】:

我有来自不同生产者的数据进入 Kinesis 流。数据需要根据数据的类型转换成几个不同的表。我正在尝试从 Kinesis Streams 读取 Lambda,将数据转换为不同的表,然后使用 Kinesis Firehose 进行批处理并复制到 Redshift。

但是,由于 Firehose 一次只能交付给一个 Redhsift 表,因此我需要运行多个 Firehose 实例,这与我的 Redshift 架构中的表数量相同。我看到每个区域有 20 个 Firehose 实例的默认上限,我想知道这是否是我想要实现的理想数据管道。

【问题讨论】:

  • 您能否使用 Kinesis 分析应用程序对流进行预处理并将其拆分为多个流?看起来您可以将目标流作为 Kinesis Firehose 到 Redshift docs.aws.amazon.com/kinesisanalytics/latest/dev/…
  • @Nathan - 感谢您的建议。虽然这很有趣,但这并不能解决使用多个 Kinesis Firehose 实例的问题 - 我仍然需要与架构中的表数量一样多的 Firehose 实例。其次,与原始 sql 相比,我的数据转换更适合用 python/javascript 编写,因为我可以使用第三方库进行一些复杂的转换。
  • 我不认为你会找到一种方法来从单个流中填充多个 Redshift 表,而不先将原始流加载到阶段表中,然后在 Redshift 中将其拆分,或者拆分流并且每个表有一个流。 Redshift 是必需的吗?如果不是,也许雅典娜是替代品?
  • 雅典娜看起来很有趣。将不得不评估它。我们的读取查询负载将是密集的和相关的(即涉及 JOIN,即使有一个扁平的、非规范化的模式)。我们已经将 Redshift 用于我们的一些其他分析相关服务。将不得不为我们的用例评估 Athena,即 Redshift。
  • @NathanGriffiths 如何使用 Athena 来实现?你能提供一个文档链接吗?

标签: amazon-web-services amazon-redshift amazon-kinesis amazon-kinesis-firehose


【解决方案1】:

我设计了几乎与您类似的数据管道。我从运动中获取数据,在数据达到红移后对其进行转换。来自 1 个流的所有数据都进入 redshift 中的一个主表。然后,我运行一个 cron 作业,它将数据转换为不同的表。

如果我做了一个错误的假设,请发表评论,我会重新调整我的答案。

【讨论】:

  • 如何运行这个 cron 作业?据我了解,在 Redshift 或 AWS 内运行计划的 SQL 脚本通常存在限制和开销。更多需要管理的东西,例如 Cloudwatch 和 SQS/SNS 或 EB 实例。此外,我确实想使用 COPY 命令将数据批处理并加载到 Redshift 中,因为执行批处理批量 INSERT 是次优的。我还必须将结构化数据扁平化为几乎非结构化数据,以创建一个可以存储所有数据的单个表。
猜你喜欢
  • 2018-12-05
  • 2021-01-05
  • 1970-01-01
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 2016-12-24
  • 2015-10-15
相关资源
最近更新 更多