美文网首页
hive语法

hive语法

作者: Eden_1 | 来源:发表于2017-12-19 11:39 被阅读0次

    查询语句

    自动升级数据类型

    在做join或计算处理时候,低级的type会自动升级成高级的,如int-bigint,int-float

    表生成函数

    explode 把行变成列
    stack 把多列变成多行

    case……when……

    case when 是对单列的查询结果
    case 需要写结束end
    case 会在select过程中直接生成新的列,需要用的时候需要给出列名

        select name, salary,
        case
            when salary<5000 then 'low'
            when salary>5000 and salary<7000 then 'middle'
            when salary>7000 and salary<10000 then 'high'
            else 'very high'
        end as bracket from employees
    

    join

    join时候,hive默认最后一张表最大,所以会把前面的几张表缓存起来,去和最后一张join 因此,一般把大的表往后放。但大部分情况下,大表放在前面更符合逻辑要求。因此,可以用代码控制缓存的表格。 如将s设为最后的驱动表格。

        select /*+STREAMTABLE(s)*/s.ymd,
        s.symbol,
        s.price_close,
        d.dividend,
        FROM stocks a JOIN dividend d
        on s.ymd=d.ymd and s.symbol =d.symbol
        where s.symbol='APPL'
    

    join where 处理顺序关系

    where 在连接操作之后才会处理,但在where中加入分区过滤可以加快查询速度
    (select where) 会按照要求在数据进行连接操作前进行分区过滤

    join连接

    • inner join= join
      on和where给条件是等价的
    • left outer join
      on只能给join条件,表的筛选条件要用where给出
    • right outer join
    • full outer join
    • in....EXSISTS(其他SQL语句) = left semi-join 只保留左表那些满足右表join条件的行记录
    • 笛卡尔乘积:如果不给出join的on条件,就会实现join的全连接的笛卡尔乘积,生成表之后在进行where的筛选。eg.
        select * from stocks join dividends
        where stock.symbol=dividends.symbol
        and stock.symbol='AAPL'
    

    排序

    • order by
      全排序,时间长
      ASC 升序,DESC 降序
    • sort by
      在每个reducer内进行排序,如果有多个reducer,即不是全排序

    UNION ALL

    连接的表必须列名,列的顺序,列的字符type都相同

    demo

        create table tmp.amy_coffee_menu as
        select
        activityid,
        transaction_rank,
        daypart_name,
        max(case when category_desc='Drink' and subcategory_desc='Coffee' then 'Coffee' end) as drink_coffee_yn,
        from tmp.amy_coffee_receiver4
        where combo_flag<>1
        and alc_price>0
        group by activityid,
        transaction_rank,
        daypart_name;
    
        create table tmp.yidan_1218_drink_member as
        select a.*
        ,b.user_type
        ,b.sex
        ,b.birthday
        from tmp.amy_phdi_member2 a
        join tmp.amy_phdi_drinkuser3 b
        on a.usercode=b.usercode and a.subcategory_desc='Drink';
    

    相关文章

      网友评论

          本文标题:hive语法

          本文链接:https://www.haomeiwen.com/subject/jrebwxtx.html