hive实现数据抽样一般有三种方法(参考 http://www.bubuko.com/infodetail-1022686.html ):
1. 数据块抽样 (tablesample()函数)
利用tablesample() 函数, 根据hive表数据的大小按比例抽取数据,并保存到新的hive表中。
例子: 将原hive表10%的数据存到新表,但是select语句不能带where条件且不支持子查询,需要通过建中间表或随机抽样解决。
create table xxx_new as
select * from xxx tablesample(10 percent)
另外还有tablesample(n M) 指定抽样数据的大小,单位是M; tablesample(n rows) 是每个inputSplit里抽样n行。
2. 分桶抽样 (tablesample(bucket x out of y [on colname])
这个方法算法用的较多,利用关键语句cluster by 实现。hive中分桶其实是根据某一个字段hash取模,放入指定的数据桶中,比如将表table_1按照ID分成100个桶,算法是hash(id)%100, 这样hash(id)%100 =0 的数据被放到一个桶中,hash(id)%100=1的记录放在第二个桶中。 在实际工作中,可以通过分桶,单独将某个尾号(如01,02..)的用户放入实验组,进行实验。
分桶语法样例:
执行下面的语句,创建一个分桶表,并插