使用 Kinesis Firehose 在 S3 和 Redshift 之间可以进行 ETL 吗?

问题描述 投票:0回答:2

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

在 Redshift 中维护更新的数据仓库而不使用批量转换的最佳方法是什么?理想情况下,我们希望更新“自动”发生(< 5min) whenever data is altered in our local databases.

amazon-web-services amazon-s3 aws-lambda aws-sdk amazon-kinesis-firehose
2个回答
6
投票
  1. Firehose 或 Redshift 没有触发器,但是您可以使用 Lambda 和 Firehose 的方法在插入数据之前对其进行预处理,如下所述:https://blogs.aws.amazon.com/bigdata /post/Tx2MUQB5PRWU36K/使用 Amazon-Kinesis-Firehose-和 AWS-Lambda 将数据持久流式传输到 Amazon-S3

    在您的情况下,您可以将其扩展为在 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 -Amazon-Redshift

此方法已实施多次,效果良好。


0
投票

现在可用,它将写入 s3,然后自行发出复制命令。当我只写入 s3 时,我在流本身中看到了欺骗,所以我会在它上创建一个垫子视图,并清楚地显示您的数据是否可以区分。

© www.soinside.com 2019 - 2024. All rights reserved.