第3关:Hive抽样查询
任务描述
本关任务:计算每个股票每天的总交易量。
相关知识
为了完成本关任务,你需要掌握:1.随机抽样 2.桶表抽样 3.数据块抽样
随机抽样
使用
RAND()
函数和
LIMIT
关键字来获取样例数据,使用
DISTRIBUTE
和
SORT
关键字来保证数据是随机分散到
mapper
和
reducer
的。
ORDER BY RAND()
语句可以获得同样的效果,但是性能没这么高。
/**从table表里随机抽取5行数据*/
//第一种:
SELECT * FROM table DISTRIBUTE BY RAND() SORT BY RAND() LIMIT 2;
//第二种(性能不太好):
SELECT * FROM table ORDER BY RAND() LIMIT 2;
桶表抽样
① Hive分桶
对于每一个表(
table
)或者分区,
Hive
可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。
Hive
也是 针对某一列进行桶的组织。
Hive
采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。
桶(
bucket
)是指将表或分区中指定列的值为
key
进行
hash
,
hash
到指定的桶中,这样可以支持高效采样工作。
把表(或者分区)组织成桶(
Bucket
)有两个理由:
获得更高的查询处理效率。桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构。具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接 (M
版权归原作者 真题OK撒 所有, 如有侵权,请联系我们删除。