【问题标题】:For each distinct value in col_a, yield a new table对于 col_a 中的每个不同值,生成一个新表
【发布时间】:2020-02-25 17:51:49
【问题描述】:

我在 S3 中有一个 Athena 数据表,它充当源表,其中包含 idnameevent 列。对于此表中的每个唯一 name 值,我想输出一个新表,其中包含与该 name 值对应的所有行,并保存到 S3 中的不同存储桶中。这将导致在 S3 中存储 n 个新文件,其中 n 也是源表中唯一 name 值的数量。

我在 Lambda 中使用 PARTITION BY 和 CTAS 查询尝试了单个 Athena 查询,但似乎无法获得我想要的结果。看来AWS Glue或许能达到我预期的效果,但我在网上看到它更贵,也许我可以使用Lambda获得预期的效果。

如何存储一个新文件(最好是 JSON 格式),其中包含对应于 S3 中每个唯一 name 的所有行?

我最好每天运行一次以更新name 存储的数据,但目前主要关注的是上述问题。

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-lambda aws-glue amazon-athena


    【解决方案1】:

    当您编写 spark/glue 代码时,您需要使用名称列对数据进行分区。但是,这将导致路径具有以下格式

    S3://bucketname/folder/name=value/file.json

    这应该为每个名称值提供一组单独的文件,但是如果您想将其作为单独的表访问,您可能需要在抓取数据并使其可用之前从键中删除 = 符号雅典娜

    如果你确实使用了 lambda,则该操作涉及遍历数据,类似于胶水所做的,并对数据进行分区

    我想这完全取决于它需要处理的数据量。胶水,如果使用火花可能会有一点额外的启动时间。 Glue python shell 具有相对更好的启动时间

    【讨论】:

    • 感谢您的回复。这与我得出的结论基本相同,尽管我正在从 AWS Glue 进行分区。我当前的问题是,在最初的问题中,我说我想按name 列进行分区,但实际上它是url 列。但是,您的回复完全回答了我的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    相关资源
    最近更新 更多