首页 > 解决方案 > 从 AWS S3 读取多个文件

问题描述

我需要一个系统来读取 S3 存储桶进行分析。存储桶被分解为年/月/日/小时,其中每个小时文件夹都有大量超过 2GB 的压缩文件。

这是用boto3在Python中编写脚本的东西吗?寻找任何大方向。

标签: pythonamazon-web-servicesamazon-s3ftp

解决方案


Amazon Athena 可以跨存储在 Amazon S3 中的多个文件运行类似 SQL 的查询。

可以使用 gzip 压缩文件。事实上,Athena 将在压缩文件上运行得更快、更便宜,因为您只需为从磁盘扫描的数据量付费。

Amazon S3 中给定文件夹(路径)中的所有文件必须采用相同的格式。例如,如果它们是 gzip 格式的 CSV 文件,则所有文件必须具有相同数量且顺序相同的列。

然后,您可以在 Amazon Athena 中使用CREATE TABLE,它定义了数据文件中的列和数据的位置。这是最难的部分,因为您必须正确定义格式。

然后,您可以运行 SQL SELECT命令来查询数据,这将应用于指定文件夹中的所有文件。

将来,如果您想添加或删除数据,只需更新文件夹的内容即可。该SELECT命令始终在运行该命令时查看文件夹中的文件。

鉴于您要求“计算 customer_id 的不同值并在所有文件中按 item_id 对它们进行分组”,它将类似于:

SELECT
  item_id,
  COUNT(DISTINCT customer_id)
FROM table
GROUP BY 1

推荐阅读