这个其实是转自杭州第三次spark meetingup,华为的李昆大神的分享。
OLAP分析场景 | ORC File | Parquet File | Cube File |
Full scan one dimension | Fast | Fast | Median |
(Low Cardinality) | (只扫需要的列) | (只扫需要的列) | (只扫需要的列,但MDK较大) |
Full scan one dimension | Slow | Slow | Fast |
(High Cardinality) | (Stripe Level字典编码,需要重复解码) | (Row Group Level字典编码,需要重复解码) | (全局字典编码,无重复解码) |
Full scan multiple dimension aggregation | Slow | Slow | Fast |
(读取多行并做join) | (读取多行并做join) | (星型模型转换后无需join) | |
Filter single dimension | Slow | Very Slow | Fast |
(需要全扫描单列,可利用min/max跳过Stripe) | (需要全扫描单列,无索引) | (利用多维索引) | |
Filter multiple dimensions | Slow | Very Slow | Very Fast |
Select Year,ServiceName, | (需要全扫描多列,可利用min/max跳过Stripe) | (需要全扫描多列,无索引) | (利用多维索引) |
Filter on Measure | Slow | Slow | Slow |
(需要全扫描,可利用min/max跳过Stripe) | (需要全扫描,无索引) | (度量上无索引,需要全扫描) |
排版有些乱,大家凑合看一下。
从这个比较来看,大基数的全量多维的查询,CubeFile的优势是很明显的。
个人感觉,最大原因是ORCFile和ParquetFile他们是分块索引数据的,而CubeFile是全量索引数据的。现在理解的还比较浅,等深入理解后再来论这个的区别和关系。