hive笔记

cast

cast(number as string),  可以将整数转成字符串

lpad  rpad

lpad(target, 10, '0')   表示在target字符串前面补0,构成一个长度为10的字符串

concat_ws 列拼接

concat_ws('@', 'zhaopei', 'mail.bnu.edu.cn')  

split

split('aa|bb','[|]')  形成一个list, ['aa', 'bb']

row_number() 可实现组内排序

分组后 topK, 可以用row_number()

有这样一个需求:在一段周期内每个乘客的tag字段有多个属性,查询出乘客tag属性出现次数最多的作为tag的属性值

思路:首先根据 pid,tag 进行分组,计算每个tag的数量(cnt),然后用row_number()对 pid分组,并按 cnt 降序,现在就实现了组内排序,然后取rank为一的即可

select
passenger_id, tag
from
    (select
    passenger_id, tag, row_number() over(partition by passenger_id order by cnt desc) rank
    from
        (select
        passenger_id, level_purchase_power as tag, count(*) as cnt
        from decision.fex_eb5f12_1966
        where
        concat(year, month, day) > 20180801 and concat(year, month, day) < 20180821
        and city_id = 4
        group by passenger_id, level_purchase_power) e
)a
where a.rank = 1

这样一个需求:

A,B两个表通过一列进行关联,并判断在B表中是否有对应的这一列的值

直接关联的话,如果B表没有的话,那B表对应就是null,所以只需要判断是否是null,if(complaint.order_id is null, 1, 0), hive中if的使用方法是 if( condition, true, false)

今天还在想关于left join能不能先过滤一部数据然后在和其他的表进行关联,直接做是不行的,应该先过滤出来形成一个临时表,然后用临时表在进行join

  

原文地址:https://www.cnblogs.com/zhaopAC/p/9637323.html