如图table表分别以行、列存储
以行存储时(TextFile),所有的数据都在一块
优点:select * from table 时效率很快,但实际应用中一般不会select *
缺点:当select a,c from table 时也会加载所有的列,也就是所有的数据,这样IO就很大
以列存储时(parquet,orc),假设a,b放一列 ,c一列,d放一列
优点:当select c,d from table 时只会加载c,d两列,这样IO就大大降低
缺点:当select * from table 会导致数据重组,耗费掉一些性能
实际业务场景
在我们实际的业务场景中,我们基本不会去select * from table 一张表。都是用到哪些字段就去查询哪些字段,所以生成业务中都是采用列式存储。