hive的查询基本原则

Hive是将符合SQL语法的字符串解析生成可以在Hadoop上执行的MapReduce的工具。使用Hive尽量按照分布式计算的一些特点来设计sql,和传统关系型数据库有区别,

所以需要去掉原有关系型数据库下开发的一些固有思维。

基本原则:

1:尽量尽早地过滤数据,减少每个阶段的数据量,对于分区表要加分区,同时只选择需要使用到的字段

select … from A

join B

on A.key = B.key

where A.userid>10

 and B.userid<10

    and A.dt='20120417'

    and B.dt='20120417';

应该改写为:

select … from (select … from A

              where dt='201200417'

                                and userid>10

                          ) a

join ( select … from B

扫描二维码关注公众号,回复: 12910814 查看本文章
   where dt='201200417'

                 and userid < 10   

 ) b

on a.key = b.key;

2、对历史库的计算经验 (这项是说根据不同的使用目的优化使用方法)

历史库计算和使用,分区

3:尽量原子化操作,尽量避免一个SQL包含复杂逻辑

可以使用中间表来完成复杂的逻辑

4 jion操作 小表要注意放在join的左边(目前TCL里面很多都小表放在join的右边)。

否则会引起磁盘和内存的大量消耗

5:如果union all的部分个数大于2,或者每个union部分数据量大,应该拆成多个insert into 语句,实际测试过程中,执行时间能提升50%

insert overwite table tablename partition (dt= ....)
	select ..... from (
		select ... from A
		 union all
		select ... from B
		 union all
		 select ... from C
	 ) R           
where ...;

可以改写为:

insert into table tablename partition (dt= ....)

select .... from A

WHERE ...;


insert into table tablename partition (dt= ....)

select .... from B

WHERE ...;

 
insert into table tablename partition (dt= ....)

select .... from C

WHERE ...; 

猜你喜欢

转载自blog.csdn.net/Victory_Lei/article/details/103889934