- 随机抽样
有的时候我们需要从一张大表中随机抽取一定量的样本供分析,Hive中提供了一个rand()函数,我们就利用这个来实现随机抽样。
思路如下:
对于表中每行均附加一个随机的整数,然后再以该整数进行orderBy即可得。
例如下面这个
- select vt.user_nick, vt.vidx from (
- select user_nick, cast(rand() * 100000 as int) as vidx
- from s_mc_xcard_user where pt='20120808000000'
- order by vidx limit 10000
- ) vt order by vt.vidx limit 100
- 处理复杂的数据结构
如果我们希望将复杂的数据结构存储在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来达到目的。
- SELECT onedata, count(1) FROM tbl LATERAL VIEW explode(mydata)
- vdata AS onedata;
-----
转载于:https://blog.51cto.com/spinlock/959607