Hive SQL 使用时的注意事项和一些踩过的坑

1· Hive作为大数据平台下的sql语言极易上手,又难以精通,内部实现上,比如在Hadoop平台上,Hive会将sql转换为mp程序去处理

2· 由于sql被转换成了mp程序,在Hadoop中,一条sql会启动多个job, 而启动job任务是需要花费时间和机器资源的,所以在书写Hivesql时,要本着:尽量减少嵌套层次以减少job任务的原则

3· 每条group语句会多启动一个job, 所以要减少group的使用

4· 对比2条sql:

select a.cola,b.colb
from (
   select cola,joinColumn from tablea
) a join (
   select colb,joinColumn from tableb
) b on a.joinColumn=b.joinColumn 


select a.cola,b.colb
from (
   select cola,joinColumn from tablea
) a join tableb b on a.joinColumn=b.joinColumn 

第一条sql会启动3个job, 第二条会启动2个job , 区别就体现出来了,在join处理的时候如果不需要处理字段那么我们最好直接 join tables tablesname


5· 每一个where条件最好写在单独的子查询中,这样得到的每个子数据集就会减小,以提高执行速度(事实上在sql中这条规则都适用)

6· 在where条件中,分区桶 限制条件要写在最前,比如:

select ***
from a 
where p_day between '1' and '2' and **>=**

而不是

select ***
from a 
where  **>=** and p_day between '1' and '2'

7· 在HIve.21中,limit语句有一个潜藏的bug: 在limit 980000000时会报错:Java Heap Space OOM ,而970000000就能执行过去,目前还未找到原因,在更高版本中可能会修复


你可能感兴趣的:(Hive)