微信怎么建设自己网站专做充电器的网站
Hive Sampling 抽样函数
文章目录
- Hive Sampling 抽样函数
 - Random随机抽样
 - Block 基于数据块抽样
 - Bucket table 基于分桶表抽样
 - 语法
 
在HQL中,可以通过三种方式采样数据:随机采样,存储桶表采样和块采样。
Random随机抽样
- 随机抽样使用rand()函数确保随机获取数据,LIMIT来限制抽取的数据个数。
 - 表数据多时抽样速度不快,但随机。
 - 有两种用法:
方法一:(效率较高) 
SELECT * FROM student
DISTRIBUTE BY RAND() SORT BY RAND() LIMIT 2;
 
方法二:
SELECT * FROM student
ORDER BY RAND() LIMIT 2;
 
Block 基于数据块抽样
- 允许随机获取n行数据、百分比数据、指定大小的数据
 - 采样粒度是HDFS块大小
 - 优点是速度快,但不随机
 - 例:
 
- 获取1行数据:
 
SELECT * FROM student
TABLESAMPLE(1 ROWS);
 
- 百分比数据:
 
SELECT * FROM student
TABLESAMPLE(50 PERCENT);
 
- 指定大小的数据:
 
SELECT * FROM student
TABLESAMPLE(1k);
 
Bucket table 基于分桶表抽样
- 一种特殊的采样方法,针对分桶表进行了优化
 - 抽样既随机,速度也很快。
 
语法
- y必须是table总桶数的倍数或因子。hive根据y的大小,决定抽样的比例。(当y=2,有4个桶时,抽取4/2个桶的数据)
 - x表示从哪个桶开始抽取。
 - x的值必须小于y的值。
 - ON colname表示基于什么抽 
- ON RAND():表示随机抽
 - ON 分桶字段:表示基于分桶字段抽样,效率更高
 
 
TABLESAMPLE (BUCKET x OUT OF y [ON colname])
 
- 例:
 
SELECT * FROM t_usa_covid19_bucket TABLESAMPLE(BUCKET 1 OUT OF 5 ON RAND());
