amazon-web-services - 对于 col_a 中的每个不同值,生成一个新表
问题描述
我在 S3 中有一个 Athena 数据表,它充当源表,其中包含id
、name
、列event
。对于此表中的每个唯一name
值,我想输出一个新表,其中包含与该name
值对应的所有行,并保存到 S3 中的不同存储桶中。这将导致在 S3 中存储 n 个新文件,其中 n 也是name
源表中唯一值的数量。
我在 Lambda 中使用PARTITION BY
和 CTAS 查询尝试了单个 Athena 查询,但似乎无法获得我想要的结果。AWS Glue 似乎可以达到我的预期结果,但我在网上看到它更贵,也许我可以使用 Lambda 获得我预期的结果。
如何存储一个新文件(最好是 JSON 格式),其中包含与name
S3 中每个唯一对应的所有行?
最好我每天运行一次以更新 存储的数据name
,但上述问题是目前主要关注的问题。
解决方案
当您编写 spark/glue 代码时,您需要使用名称列对数据进行分区。但是,这将导致路径具有以下格式
S3://bucketname/folder/name=value/file.json
这应该为每个名称值提供一组单独的文件,但是如果您想将其作为单独的表访问,您可能需要在抓取数据并通过 Athena 使其可用之前从密钥中删除该 = 符号
如果您确实使用 lambda,则该操作涉及遍历数据,类似于胶水所做的操作,并对数据进行分区
我想这一切都取决于它需要处理的数据量。胶水,如果使用火花可能会有一点额外的启动时间。Glue python shell 具有相对更好的启动时间
推荐阅读
- windows - Windows 上的 pyarrow hdfs.connect
- scala - 如何将大流分组为子流
- react-data-grid - 如何从不同的列而不是第一列呈现
- xpages - 使用 SSJS 比较两个日期字段
- tags - 如何将 URL 正确编码到 NFC 标签上?
- java - 如何在具有不同ID的字符串xml android中查找重复的字符串?
- stripe-payments - 我如何知道 Stripe 付款是否用于测试?
- c++ - (C++) 查找两个整数之间的所有素数(不使用 Eratosthanes 筛)
- javascript - Javascript 动画(Canvas)不能在 Firefox、Edge 上工作,但可以在 Chrome 上工作
- javascript - 在 asp.net 中的 javascript/jquery 中访问服务器端变量