0

我有来自不同生产者的Kinesis流中的数据。根据数据的类型,数据需要转换为几个不同的表格。我试图从Kinesis Streams读取Lambda,将数据转换为不同的表格,然后使用Kinesis Firehose将批处理和COPY转换为Redshift。将数据从单个Kinesis流传输到Redshift中的多个表中

但是由于Firehose一次只能传递给一个Redhsift表,因此我需要使多个Firehose实例的运行时间与我在Redshift模式中使用的表的数量相等。我发现每个区域有20个Firehose实例的默认上限,我想知道这是否是我尝试实现的理想数据管道。

+1

您可以使用Kinesis Analystics应用程序来执行流的预处理并将其分成多个流?它看起来像你可以使目标流Kinesis Firehose红移http://docs.aws.amazon.com/kinesisanalytics/latest/dev/app-tworecordtypes.html – Nathan

+0

@Nathan - 感谢您提出建议。虽然这很有趣,但这并不能解决使用Kinesis Firehose的多个实例的问题 - 我仍然需要与架构中的表数量一样多的Firehose实例。其次,我的数据转换更适合用python/javascript编写,与原始sql相比,因为我可以使用第三方库来执行一些复杂的转换。 –

+1

我不认为你会找到一种方法来从单个流中填充多个Redshift表,而不是先将原始流加载到stage表中,然后将其分割成Redshift,或者拆分流,并且每个流有一个流表。红移是否是一项要求?如果不是,雅典娜可能是另一种选择? – Nathan

回答

1

我设计了类似于您的数据管道。我从kinesis中获取数据,在数据达到红移之后转换数据。所有来自1个流的数据都会通过红移转移到一个主表。然后,我运行一个cron作业,它将数据转换为不同的表格。

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

+0

你如何运行这个cron工作?根据我的理解,在Redshift或AWS内运行预定的SQL脚本时存在限制和开销。像Cloudwatch和SQS/SNS或EB实例那样管理更多事情。另外,我也希望使用COPY命令将数据批量加载到Redshift中,因为批量批量INSERT是次优的。我还必须将我的结构化数据扁平化为几乎非结构化的数据,以创建一个可存储所有数据的单个表。 –

+0

我在ec2服务器上有一个cron作业,它触发连接到redshift的python脚本并执行选定的插入。或者你可以使用AWS lambda,它连接到你的redshift并完成这项工作。我必须管理的唯一额外工作是python脚本和cron作业。 Flatten结构 - 是的,根据您的使用情况,这可能会变得复杂,这取决于表的数量和数据流的频率。请参阅此处比较性能问题 - https://stackoverflow.com/questions/25454477/amazon-redshift-bulk-insert-vs-copying-from-s3 –

相关问题