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存储?
这是由于您的特定查询。
select lpep_pickup_datetime, lpep_dropoff_datetime
from nycitytaxi.<table_name>
limit 10
在CSV等基于行的格式中,所有数据都是按行存储的。这意味着只要你选择任何10行,它就可以从头开始读取csv文件并选择前10行,从而导致非常低的数据扫描。
在列数据格式(如parquet)中,记录是按列存储的。让我们假设数据有三列,例如id
、name
、number
。这意味着,所有id
值将存储在一起,所有name
值将存储在一起,所有number
值将存储在一起。因此,当您运行查询时,在parquet中选择10行,我将不得不扫描每列中存在于不同存储位置的10个值。这意味着我将不得不扫描更多。
更多关于镶木地板的利弊。