问题描述
在 AWS Athena 上运行此查询时,它设法查询了 63GB Traders.csv 文件
SELECT * FROM Trades WHERE TraderID = 1234567
Tt 需要 6.81 秒,这样做扫描 63.82GB(几乎正好是 Trades.csv 文件的大小,所以进行全表扫描)。
令我震惊的是从 s3 中提取数据的速度令人难以置信。似乎 AWS Athena 的策略是使用一个令人难以置信的巨大盒子和大量 RAM 和令人难以置信的 s3 加载能力来解决缺乏索引的问题(尽管在标准 sql 数据库上,您将在 TraderID 上拥有一个索引并加载数百万倍的数据).
但在我的实验中,我只设法从 S3 中读取了这些数据(这仍然令人印象深刻):
InstanceType | Mb/s | 网卡千兆 |
---|---|---|
t2.2xlarge | 113 | 低 |
t3.2xlarge | 140 | 最多 5 |
c5n.2xlarge | 160 | 最多 25 |
c6gn.16xlarge | 230 | 100 |
(那是兆字节而不是兆比特)
我在 eu-west-1 上为 s3 使用内部 VPC 端点。任何人都有让 s3 快速加载的任何技巧/提示?有没有人从 s3 获得超过 1GB/s 的读取速度?这甚至可能吗?
解决方法
似乎 AWS Athena 的策略是使用令人难以置信的海量 带有大量内存的盒子
不,它更像是许多小盒子,而不是一个大盒子。 Athena 正在同时在多个服务器上并行运行您的查询。据我所知,具体细节并未在任何地方发布,但它们在文档中非常清楚地表明您的查询是并行运行的。