首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从MySQL到Redshift的近实时ETL

从MySQL到Redshift的近实时ETL
EN

Stack Overflow用户
提问于 2017-11-20 07:55:31
回答 1查看 2.6K关注 0票数 5

我正试图找出最有效的方法从MySQL中提取数据,将其转换并加载到几乎实时的红移。目前,我们有通宵ETL工艺(使用宾得),持续时间~40分钟,我们希望用近实时(小批1-5分钟)取代它。

我找到了从MySQL binlog (即http://maxwells-daemon.io)与AWS连接的数据提取工具,我计划使用Apache或AWS转换和连接数据,并将其写入S3,然后从COPY命令将其写入Redshift。

是否有人对此或类似的解决方案有任何建议或建议?提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2017-11-20 22:50:17

这实际上取决于您希望对来自MySQL的数据进行哪些转换,以及在您的环境中最适合使用哪种语言和框架。

以下是我的建议

  1. 在MySQL和Redshift之间添加中间存储,例如S3
  2. 如果数据加载到Redshift失败,请考虑数据重新加载机制。

为此,我会考虑AWS数据管道,因为它有现成的模板、重试机制以及内置的日志记录和监视。

看起来可能是这样的:

MySQL -> S3 ->红移(暂存) -> SQL ->红移(生产)

MySQL -> S3

这个数据管道将从"RDS MySQL到S3的增量复制“模板开始。

您可以对存储来自S3的增量数据的MySQL路径进行参数化,这样就更容易使用S3前缀来管理这些增量。如果不再使用S3上的数据,则可以定期使用S3对象生命周期管理删除这些对象。

但是,拥有S3上的数据提供了其他一些好处,您可以使用AWS雅典娜查询数据,使用QuickSight可视化,或者只使用不频繁访问或Glacier存储类进行存档,以降低存储成本,但将其保留以供将来使用。

S3 ->红移(分期)

当然,对于您的用例,它必须转到Redshift,所以我建议使用AWS Redshift Loader Lambda。它的设置有点复杂,但一旦成功完成,它非常接近于零管理,正如他们所声称的。请参阅

使用,每次数据在定义的S3前缀上到达时,它都被加载到Redshift集群(再一次),您可以配置SNS来通知您或某个日志系统。还有其他选项,例如,在加载之前等待x文件,或每y分钟加载一次。

此外,您可能需要只从S3加载部分数据,然后转移到测试或开发环境中。使用,您只能定义一个特定的S3前缀,例如/data/2017/11来加载到Redshift。

通过使用Redshift Loader,可以使数据加载是异步的,因此,更难次要和控制该进程。这对你的案子来说可能是个问题。

如果将数据加载到Redshift失败,则使用Redshfit命令行工具将特定对象重新加载到Redshfit。

红移(分期) ->红移(生产)

请注意,Redshift并不强制引用完整性,例如唯一键,这意味着您必须有防止将重复行插入Redshift表的机制。如果您不担心重复,这是不相干的,您的数据已经在红移。

为什么这很重要?因为,如果从源检索到的数据,即MySQL,已经在Redshift中,那么您必须知道要采取什么操作。你是覆盖了它还是忽略了它。

通过在Redshift本身中这样做,就很容易使用唯一的列来比较新行和现有行,或者删除和插入行,或者只进行更新。在Redshift之外这样做,可能意味着跟踪Redshift之外已有的唯一键,并在那里进行比较。哪里?什么时候更新?多么?也许你已经有解决办法了。

因此,在前面的步骤中,您将数据插入Redshift (暂存)。为了确保数据在移动到生产表时的完整性,我们必须进行合并。AWS推荐下面是技术来合并Redsift中的数据。

如果是这样的话,为什么不使用SQL进行转换,这样就可以管理更少的组件了?

您可以使用SQL定义转换作业,将这些SQL脚本存储在S3上,并在SQLActivity中引用它们,以便与数据合并脚本一起在Redsshift集群上执行。

考虑到AWS的转换和存储到S3的功能,AWS也可能是合适的。我上面提到的一些观点也将适用于使用Kinesis。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47387341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档