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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值