Hive_7. 数据抽样

当数据规模不断膨胀时,我们需要找到一个数据的子集来加快数据分析效率。因此我们就需要通过筛选和分析数据集为了进行模式 & 趋势识别。目前来说有三种方式来进行抽样:随机抽样,桶表抽样,和块抽样。

1 随机抽样(Random sampling):

使用 RAND()函数和 LIMIT 关键字来获得抽样数据。DISTRIBUTE 和 SORT 关键字在这里用来确保 mappers 和 reducers可以高效的使用随机分布的数据。 ORDER BY RAND()语句也可以达到同样目的,但是性能上会稍微差点。

SELECT * FROM  DISTRIBUTE BY RAND() SORT BY RAND()LIMIT ;
有兴趣的朋友可以进一步参考博客:
http://www.tuicool.com/articles/MZFVFb

2 桶表抽样(Bucket table sampling):

它是一种桶表进行优化的抽样。
其中的 colname 值指定抽样数据的列, 在对整行抽样的时候可以同样可以使用RAND()函数。如果抽样字段跟 CLUSTERED BY 字段相同,TABLESAMPLE 语句会更加高效。它的语法如下所示:

SELECT * FROM  
TABLESAMPLE(BUCKET OUT OF ON [colname|RAND()]) table_alias;
--示例
jdbc:hive2://> SELECT name FROM employee_id_buckets 
. . . . . . .> TABLESAMPLE(BUCKET 1 OUT OF 2 ON rand()) a;
+----------+
|   name   |
+----------+
| Lucy     |
| Shelley  |
| Lucy     |
| Lucy     |
| Shelley  |
| Lucy     |
| Will     |
| Shelley  |
| Michael  |
| Will     |
| Will     |
| Will     |
| Will     |
| Will     |
| Lucy     |
+----------+
15 rows selected (0.07 seconds)

3 块抽样(Block sampling) :

它允许 Hive随机抽选 N 行数据 & (N%)百分比的数据量 & N 字节的数据。抽样的粒度是 HDFS Block 的大小。它的语法结构如下所示:

SELECT * 
FROM  TABLESAMPLE(N PERCENT|ByteLengthLiteral|N ROWS) s;
-- ByteLengthLiteral
-- (Digit)+ ('b' | 'B' | 'k' | 'K' | 'm' | 'M' | 'g' | 'G') 

--按行抽样  
jdbc:hive2://> SELECT name 
. . . . . . .> FROM employee_id_buckets TABLESAMPLE(4 ROWS) a;
+----------+
| name |
+----------+
| Lucy |
| Shelley |
| Lucy |
| Shelley |
+----------+
4 rows selected (0.055 seconds)

--根据数据比例大小来抽样 
jdbc:hive2://> SELECT name 
. . . . . . .> FROM employee_id_buckets TABLESAMPLE(10 PERCENT) a;
+----------+
| name |
+----------+
| Lucy |
| Shelley |
| Lucy |
+----------+
3 rows selected (0.061 seconds)

--根据数据大小进行抽样 
jdbc:hive2://> SELECT name 
. . . . . . .> FROM employee_id_buckets TABLESAMPLE(3M) a;
+----------+
| name |
+----------+
| Lucy |
| Shelley |
| Lucy |
| Shelley |
| Lucy |
| Shelley |
| Lucy |
| Shelley |
| Lucy |
| Will |
| Shelley |
| Lucy |
| Will |
| Shelley |
| Michael |
| Will |
| Shelley |
| Lucy |
| Will |
| Will |
| Will |
| Will |
| Will |
| Lucy |
| Shelley |
+----------+
25 rows selected (0.07 seconds)


你可能感兴趣的:(Hive,SQL,Functions)