如何解决AWS 雅典娜 | CSV 与实木复合地板 |扫描的数据大小
TLDR:Athena:select top 10
为 Parquet 格式扫描的数据多于 csv 格式。不应该反过来吗?
我正在使用 Athena(V1) 查询以下两个数据集(相同的数据但两种不同的文件格式):
格式 | 尺寸 | Athena 数据库名称 | 雅典娜表名 | 数据集描述 |
---|---|---|---|---|
CSV | 91.3 MB | 纽约市出租车 | 数据 | 纽约市出租车之旅,存在于公共 s3 存储桶中 |
实木复合地板 | 19.4 MB | 纽约市出租车 | aws_glue_result_xxxx | 与上述相同的数据转换为镶木地板 - 通过 glue Crawler 作业 - 并存储在我的一个 S3 存储桶中 |
现在我在两个表上执行以下查询:
select lpep_pickup_datetime,lpep_dropoff_datetime
from nycitytaxi.<table_name>
limit 10
在基于 csv 的表(table_name:数据)上执行此查询时,Athena 控制台显示它扫描了 721.96 KB 的数据。
在基于镶木地板的表(表名称:aws_glue_result_xxxx)上执行此查询时,Athena 控制台显示它扫描了 10.9 MB 的数据。
Athena 是否应该为基于 parquet 的表扫描更少的数据,因为 parquet 是基于列的,而不是基于行的 CSV 存储?
解决方法
这是由于您的特定查询。
select lpep_pickup_datetime,lpep_dropoff_datetime
from nycitytaxi.<table_name>
limit 10
在 CSV 等基于行的格式中,所有数据都按行存储。这意味着只要你说,选择任意10行,它就可以从头开始读取csv文件并选择前10行,导致数据扫描非常低。
在像 parquet 这样的列式数据格式中,记录是按列存储的。让我们假设数据有三列,比如 id
、name
、number
。这意味着,所有 id
值将存储在一起,所有 name
值将存储在一起,所有 number
值将存储在一起。因此,当您运行查询时,选择镶木地板中的 10 行,我将不得不扫描每列中存在于不同存储位置的 10 个值。这意味着我将不得不进行更多扫描。
更多关于镶木地板的利弊here。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。