首页 > 解决方案 > 对于 col_a 中的每个不同值,生成一个新表

问题描述

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

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

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

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

标签: amazon-web-servicesamazon-s3aws-lambdaaws-glueamazon-athena

解决方案


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

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

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

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

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


推荐阅读