【问题标题】:Filtering data loaded into Redshift过滤加载到 Redshift 中的数据
【发布时间】:2019-07-11 08:36:22
【问题描述】:

我们将原始数据作为 parquet 存储在 S3 中。 我想要将该数据的一个子集加载到 Redshift 中。 需要明确的是,Redshift 数据将是原始数据查询(连接、过滤器、聚合)的结果。

我原本以为我可以在 Athena 中构建视图,并将结果加载到 Redshift 中 - 但似乎没有那么简单!

Glue ETL 作业需要 S3 或 RDS 源 - 不接受来自 Athena 的视图。 (也无法抓取视图)。

下一个解决方案是使用 Athena CTAS 功能,将视图结果写入 S3,然后加载到 RedShift。 但是,CTAS 没有“覆盖”选项。

所以问题... 有没有更简单的方法来解决这个问题? (似乎是一个简单的要求) 是否有一个简单的解决方法来执行具有“覆盖”行为的 CTAS? 有了这个,就必须是一个可以捆绑到计划作业中的解决方案——而且我认为这已经导致了一个自定义脚本。

当一项简单的工作变得如此困难时 - 我不禁想我错过了一些简单的事情!?

谢谢

【问题讨论】:

    标签: amazon-web-services amazon-redshift


    【解决方案1】:

    Ol' 可靠:使用 lambda! Lambda 函数可以以编程方式连接到 s3 和 redshift 以执行 SQL 语句,并且对于触发 lambda 的内容有很多选择(如果它只是一次性的,你可以让它成为一个预定的 lambda)。您也可以使用 cloudwatch 日志来检查该过程。

    但请注意:我注意到您将数据存储为镶木地板……普通 Redshift 不支持镶木地板格式的数据。因此,如果您想存储结构等类型,则需要使用 Redshift Spectrum。

    【讨论】:

    • 谢谢,我去看看能不能把它搞定——我的第一个 lambda !会回来报告的。
    • 我终于设法让它工作了。看起来很复杂——删除现有的 CTAS 表和相关的 S3 文件,调用 SQL 来创建新的 CTAS,以便结果转到 S3,然后截断并将 S3 复制到 Redshift。同时,在 CTAS 和 Redshift Copy 运行时,lambda 一直在运行——因此产生了不必要的成本。尽管如此,它仍然有效!我确信我会寻找更精简和简单的解决方案,但现在这只是基本的简介,所以谢谢。
    • 很高兴你能成功!似乎您可能有一个多余的步骤...从您在问题中描述的方式来看,流程似乎应该如下:创建与您的 s3 存储桶和 redshift 的连接,查询 s3 存储桶以获取压缩数据,然后遍历结果集并将它们插入 Redshift。但我可能误解了你的问题。 Lambda 也非常便宜……除了运行时/内存特别小/大的少数情况。
    • 您描述的缩短流程可以工作,但从维护和组织的角度来看,不热衷于将查询逻辑隐藏在 lambda 代码中 - 尤其是在有数十或数百个视图时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 2016-05-01
    • 2015-11-27
    • 2017-01-16
    • 2015-08-22
    相关资源
    最近更新 更多