HiveQL的一些技巧

  • 随机抽样

有的时候我们需要从一张大表中随机抽取一定量的样本供分析,Hive中提供了一个rand()函数,我们就利用这个来实现随机抽样。

思路如下:

对于表中每行均附加一个随机的整数,然后再以该整数进行orderBy即可得。

例如下面这个


  1. selectvt.user_nick,vt.vidxfrom(
  2. selectuser_nick,cast(rand()*100000asint)asvidx
  3. froms_mc_xcard_userwherept='20120808000000'
  4. orderbyvidxlimit10000
  5. )vtorderbyvt.vidxlimit100

  • 处理复杂的数据结构

如果我们希望将复杂的数据结构存储在Hive表中,可以使用Json字符串这种东东来承载。Hive中提供了一个get_json_object的函数供json解析;这个函数里面的第二个参数比较令人费解,不过官方文档还算是清楚。

另外hive还提供了array,struct, map等数据结构,貌似目前功能很少,不建议使用。

  • 行列转置

比如有一张这样的表:

uid intmydata array
100'a','b','c'
101'a','c'

其中data字段是一个array类型(可由split函数得到)。

我们希望得到下面这样的结果:

'a'2
'b'1
'c'2

其中,第二个字段的含义是各个data的分量出现的次数。

在Hive中,这种能生成了新的行函数被称作UDTF,这里我们可以使用explode+lateral view来达到目的。


  1. SELECTonedata,count(1)FROMtblLATERALVIEWexplode(mydata)
  2. vdataASonedata;

-----

 
 
转载自:http://spinlock.blog.51cto.com/607469/959607
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值