微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AWS 雅典娜 | CSV 与实木复合地板 |扫描的数据大小

如何解决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 这样的列式数据格式中,记录是按列存储的。让我们假设数据有三列,比如 idnamenumber。这意味着,所有 id 值将存储在一起,所有 name 值将存储在一起,所有 number 值将存储在一起。因此,当您运行查询时,选择镶木地板中的 10 行,我将不得不扫描每列中存在于不同存储位置的 10 个值。这意味着我将不得不进行更多扫描。

更多关于镶木地板的利弊here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。