压缩:
各种压缩性能比较
目前,在数仓项目中hive表一般使用snappy格式压缩数据较多。压缩和解压缩速度都比较快。
文件存储格式:
目前hive的存储格式主要有4中;TEXTFILE SEQUENCEFILE ORCFILE 和PARQUET 4中存储格式。在数仓中,hive表一般使用的是ORCFILE。
如果数仓中设置的有缓冲层,缓冲层一般会使用TEXTFILE,因为TEXTFILE格式的hive表,在导入数据的时候可以直接使用load data 的方式加载text数据,或者通过hdfs将text格式的数据移动到表元数据目录下,接着再通过insert into table select * 的方式,将数据加载到ORC格式下的ODS层hive表中(ORC格式hive表无法通过load data加载数据)。
ORCFILE 和PARQUET是基于列式存储格式,对于数仓这种OLAP分析来说,往往都是一次写入, 多次读取, 尤其是经常取少部分列以及可能会对他进行聚合操作的情况, 比较适合使用列式存储
行式存储和列式存储
行式存储:
常见的关系型数据库就是行式存储的。查询满足条件的以整行数据的时候,列式存储需要去每个字段聚集的地方找到对应的每个列的值,而行式存储只需要找到一个值,其他的值都在相邻的地方,所以查询条件需要返回大多数列的时候,行式存储比较快。hive的默认存储textfile就是行式存储
但是由于每个列的字段类型可能都不一样,所以行式存储压缩效率不高
列式存储:
因为每个字段的数据聚集存储,在查询其中少数几个字段的时候,能大大减少读取的数据量,查询内容之外的字段,也不用进行IO和解压缩操作;每个字段的类型也是一样的,就可以针对性的设计更好的压缩算法