Hive 随机抽样

  • 随机抽样
有的时候我们需要从一张大表中随机抽取一定量的样本供分析,Hive中提供了一个rand()函数,我们就利用这个来实现随机抽样。
思路如下:
对于表中每行均附加一个随机的整数,然后再以该整数进行orderBy即可得。
例如下面这个
  
  
  
  
  1. select vt.user_nick, vt.vidx from ( 
  2.     select user_nick, cast(rand() * 100000 as intas vidx 
  3.     from s_mc_xcard_user where pt='20120808000000' 
  4.     order by vidx limit 10000 
  5. ) 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来达到目的。
  
  
  
  
  1. SELECT onedata, count(1) FROM tbl LATERAL VIEW explode(mydata) 
  2. vdata AS onedata; 

-----
 
 
 
 
 

你可能感兴趣的:(hive,随机抽样)