python - 从 AWS S3 读取多个文件
问题描述
我需要一个系统来读取 S3 存储桶进行分析。存储桶被分解为年/月/日/小时,其中每个小时文件夹都有大量超过 2GB 的压缩文件。
这是用boto3在Python中编写脚本的东西吗?寻找任何大方向。
解决方案
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
推荐阅读
- c# - 插入数据时在 xamarin 表单中出现错误:System.ArgumentNullException:'值不能为空。参数名称:取消'
- ffmpeg - 您如何将特定 X 和 Y 位置的视频与 FFMPEG 结合起来?
- java - 如何将 JSON 添加到项目的类路径中?使用 VS 代码
- ruby-on-rails - /profile 之类的路径是否生成正确的 URI?他们违反了 REST 吗?有什么影响?
- python - 用于 Awk 的 Python 子进程
- r - Tktable 包在 R 版本 4.0 中不可用
- c++ - 如何在 C++ 中更新部分输出?
- r - 为什么我的系数的标准误差相同?
- google-bigquery - 如何加入主键同时具有整数和字符串值的位置
- c# - c#自定义属性可以实现订阅/取消订阅方法吗?