【问题标题】:ETL Possible Between S3 and Redshift with Kinesis Firehose?使用 Kinesis Firehose 可以在 S3 和 Redshift 之间进行 ETL 吗?
【发布时间】:2016-03-29 21:40:48
【问题描述】:

我的团队正在尝试使用 Redshift 来整合来自多个不同数据库的信息。在我们第一次尝试实施此解决方案时,我们使用 Kinesis Firehose 将 POST 记录写入我们的 API 到 S3,然后发出 COPY 命令将插入的数据写入 Redshift 中的正确表。但是,这仅允许我们插入新数据,而不允许我们转换数据、在更改时更新行或删除行。

在不使用批量转换的情况下,在 Redshift 中维护更新的数据仓库的最佳方法是什么?理想情况下,我们希望在本地数据库中的数据发生更改时“自动”(

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-lambda aws-sdk amazon-kinesis-firehose


    【解决方案1】:
    1. Firehose 或 Redshift 没有触发器,但您可能会使用使用 Lambda 和 Firehose 的方法在数据插入之前对其进行预处理,如下所述:https://blogs.aws.amazon.com/bigdata/post/Tx2MUQB5PRWU36K/Persist-Streaming-Data-to-Amazon-S3-using-Amazon-Kinesis-Firehose-and-AWS-Lambda

      在您的情况下,您可以扩展它以在 S3 上使用 Lambda,因为 Firehose 正在创建新文件,然后执行 COPY/SQL 更新。

    2. 另一种选择是编写您自己的 KCL 客户端来实现 Firehose 的功能,然后在复制微批处理(500-1000 行)之后执行所需的更新。

      我已经完成了这样的实现(我们需要根据新记录更新旧记录)并且从一致性的角度来看它工作正常,尽管我建议不要使用这种架构,因为 Redshift 性能不佳更新。根据我的经验,关键规则是 Redshift 数据只能追加,并且使用过滤器删除不必要的行(使用可选的定期修剪,例如每天)通常比实时删除/更新这些行更快。

    3. 另一种选择是让 Firehose 将数据转储到临时表中,然后让计划的作业获取该表中的任何内容,进行处理、移动数据和轮换表。

    作为实时插入 Redshift 的通用参考架构,请看一下:https://blogs.aws.amazon.com/bigdata/post/Tx2ANLN1PGELDJU/Best-Practices-for-Micro-Batch-Loading-on-Amazon-Redshift

    这已经实施了多次,效果很好。

    【讨论】:

    • 好建议!感谢您的帮助
    猜你喜欢
    • 2019-09-05
    • 2018-01-03
    • 2021-07-16
    • 2019-05-09
    • 2018-12-21
    • 2017-06-27
    • 2018-06-02
    • 2017-08-10
    • 2016-02-03
    相关资源
    最近更新 更多