hadoop学习---基于Hive的数据仓库相关函数机制及其优化方案

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值