Hive相关函数(部分):
-
if函数:
-
作用: 用于进行逻辑判断操作
-
语法: if(条件, true返回信息,false返回信息)
-
注意: if函数支持嵌套使用
-
-
select if(a=a,’bbbb’,111) fromlxw_dual; bbbb select if(1<2,100,200) fromlxw_dual; 200
-
nvl函数:
-
作用: null值替换函数
-
格式: nvl(T value, T default_value)
-
-
select nvl(principal,1) from mydb.aaaaa; 1
-
COALESCE函数
-
作用: 非空查找函数:
-
格式: coalesce(值1,值2,值3...)
-
说明: 从第一个值开始判断, 找到第一个不为null的值, 将其返回, 如果都为null,返回null
-
-
select COALESCE(null,’aaa’,50) from lxw_dual; aaa
-
CASE WHEN THEN 函数:
-
格式1: case 字段 when 条件 then 值1 when 条件 then 值2 .. else 值3 end
-
格式2: case when 条件 then 值1 when 条件2 then 值2 .. else 值3 end
-
-
select case 100 when 50 then 'tom' when 100 then 'mary' else 'tim' end from lxw_dual; mary select case 200 when 50 then 'tom'when 100 then 'mary' else 'tim' end from lxw_dual; tim
-
isnull() | isnotnull() 函数
作用:
isnull()判断是否为null,如果为null返回true,否则返回false
isnotnull()判断是否不为null,如果不为null,返回true,如果为null返回falsel
hive的并行优化:
并行编译:
Hive默认同时只能编译一段HiveSQL,并上锁。
将hive.driver.parallel.compilation设置为true,各个会话可以同时编译查询,提高团队工作效率。否则如果在UDF中执行了一段HiveQL,或者多个用户同时使用的话, 就会锁住。
修改hive.driver.parallel.compilation.global.limit的值,0或负值为无限制,可根据团队人员和硬件进行修改,以保证同时编译查询。
说明:
hive在同一时刻只能编译一个会话中SQL, 如果有多个会话一起来执行SQL, 此时出现排队的情况, 只有当这一个会话中SQL全部编译后, 才能编译另一个会话的SQL, 导致执行效率变慢
解决方案:
hive.driver.parallel.compilation 是否开启并行编译 设置为true
hive.driver.parallel.compilation.global.limit 最大允许同时有多少个SQL一起编译 设置为0表示无限制
这两项可以建议直接在CM的hive配置窗口上进行永久配置 (通用配置)
并行执行:
Hive会将一个查询转化为一个或多个阶段,包括:MapReduce阶段、抽样阶段、合并阶段、limit阶段等。默认情况下,一次只执行一个阶段。不过,如果某些阶段不是互相依赖,是可以并行执行的。
set hive.exec.parallel=true,可以开启并发执行,默认为false。
set hive.exec.parallel.thread.number=16; //同一个sql允许的最大并行度,默认为8。
说明:
在运行一个SQL的时候, 这个SQL形成的执行计划中, 可能会被拆分为多个阶段, 当各个阶段之间没有依赖关系的时候, 可以尝试让多个阶段同时运行, 从而提升运行的效率, 这就是并行执行
配置方案:
set hive.exec.parall