- 随机抽样
有的时候我们需要从一张大表中随机抽取一定量的样本供分析,Hive中提供了一个rand()函数,我们就利用这个来实现随机抽样。
思路如下:
对于表中每行均附加一个随机的整数,然后再以该整数进行orderBy即可得。
例如下面这个
- selectvt.user_nick,vt.vidxfrom(
- selectuser_nick,cast(rand()*100000asint)asvidx
- froms_mc_xcard_userwherept='20120808000000'
- orderbyvidxlimit10000
- )vtorderbyvt.vidxlimit100
- 处理复杂的数据结构
如果我们希望将复杂的数据结构存储在Hive表中,可以使用Json字符串这种东东来承载。Hive中提供了一个get_json_object的函数供json解析;这个函数里面的第二个参数比较令人费解,不过官方文档还算是清楚。
另外hive还提供了array,struct, map等数据结构,貌似目前功能很少,不建议使用。
- 行列转置
比如有一张这样的表:
uid int | mydata array |
100 | 'a','b','c' |
101 | 'a','c' |
其中data字段是一个array类型(可由split函数得到)。
我们希望得到下面这样的结果:
'a' | 2 |
'b' | 1 |
'c' | 2 |
其中,第二个字段的含义是各个data的分量出现的次数。
在Hive中,这种能生成了新的行函数被称作UDTF,这里我们可以使用explode+lateral view来达到目的。
- SELECTonedata,count(1)FROMtblLATERALVIEWexplode(mydata)
- vdataASonedata;
-----
转载自:http://spinlock.blog.51cto.com/607469/959607