在后续可能会使用GZ(GZIP), 包管压缩后的数据更小, 同时压缩和解压的速度比较OK的,
但是大部门的选择重要会选择另一种压缩方案, snappy, 此种方案可以包管在公道的压缩比下, 拥有更高的解压缩的速度,在大数据领域中重要是关注数据的处理速度
http://google.github.io/snappy/
On a single core of a Core i7 processor in 64-bit mode, Snappy compresses at about 250 MB/sec or more and decompresses at about 500 MB/sec or more.
select * from (select * from 表1 where 字段名 is not null) 别名1 join (select * from 表2 where 字段名 is not null) 别名2 on 关联条件;
方案二: 将null值替换为随机数, 从而减少数据倾斜影响
select * from (select case when 字段名 is null then rand() else 字段名 end from 表1) 别名1 join (select case when 字段名 is null then rand() else 字段名 end from 表2) 别名2 on 关联条件;
3) 基于分桶表(大文件分为多个小文件)
复制代码
7、列裁剪
Hive在读数据的时候,可以只读取查询中所必要用到的列,而忽略其他列
比方:
假设有一个表A: a b c d e 5个字段, 请查看以下SQL
select a,b from A where a=xxx;
在这条SQL, 发现没有使用c d e 字段, 在from A表时候, 读取数据, 只需要将a列 和 b列数据读取出来即可, 不需要读取cde列字段, 这样可以减少读取的数据量, 从而提升效率
复制代码
如何设置呢?
-- -=【列裁剪(只读取sql语句需要的字段,节省读取开销,提升效率)
set hive.optimize.cp=true; -- 默认就是true (在hive 2.x中无需在配置了, 直接为固定值: true)