提问者:小点点

AWS雅典娜|CSVvsParquet|扫描的数据大小


TLDR:雅典娜:select top 10扫描的数据比csv格式多。不应该反过来吗?

我正在使用Athena(V1)查询以下两个数据集(相同的数据但两种不同的文件格式):

现在我正在两个表上执行以下查询:

select lpep_pickup_datetime, lpep_dropoff_datetime 
from nycitytaxi.<table_name>
limit 10

在基于csv的表(table_name: data)上执行此查询时,Athena控制台显示它扫描了721.96KB的数据。

在基于parquet的表(table_name:aws_glue_result_xxxx)上执行此查询时,Athena控制台显示它扫描了10.9MB的数据。

雅典娜不应该为基于镶木板的表扫描更少的数据吗,因为镶木板是基于列式的,而不是基于行的CSV存储?


共1个答案

匿名用户

这是由于您的特定查询。

select lpep_pickup_datetime, lpep_dropoff_datetime 
from nycitytaxi.<table_name>
limit 10

在CSV等基于行的格式中,所有数据都是按行存储的。这意味着只要你选择任何10行,它就可以从头开始读取csv文件并选择前10行,从而导致非常低的数据扫描。

在列数据格式(如parquet)中,记录是按列存储的。让我们假设数据有三列,例如idnamenumber。这意味着,所有id值将存储在一起,所有name值将存储在一起,所有number值将存储在一起。因此,当您运行查询时,在parquet中选择10行,我将不得不扫描每列中存在于不同存储位置的10个值。这意味着我将不得不扫描更多。

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