本文主要是介绍Hive-2.HiveQL查询中抽样查询,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
当数据集非常大的时候,我们需要找一个子集来加快数据分析。此时我们需要数据采集工具以获得需要的子集。在此可以使用三种方式获得采样数据:random sampling, bucket sampling, block sampling。
8.1随机抽样(Random sampling )
使用RAND()函数和LIMIT关键字来获取样例数据,使用DISTRIBUTE和SORT关键字来保证数据是随机分散到mapper和reducer的。ORDER BY RAND()语句可以获得同样的效果,但是性能没这么高。
语法:
SELECT * FROM <Table_Name> DISTRIBUTE BY RAND() SORT BY RAND() LIMIT <N rows to sample>;
示例:随机抽出2行数据
SELECT * FROM employees DISTRIBUTE BY RAND() SORT BY RAND() LIMIT 2;
8.2桶表抽样(Bucket table sampling)
该方式是最佳化采样bucket表。RAND()函数也可以用来采样整行。如果采样列同时使用了CLUSTERED BY,使用TABLESAMPLE语句会更有效率。
语法:
SELECT * FROM <Table_Name> TABLESAMPLE(BUCKET <specified bucket number to sample> OUT OF <total number of buckets> ON [colname|RAND()]) table_alias;
示例:
SELECT * FROM employees TABLESAMPLE(BUCKET 2 OUT OF 4 ON RAND()) table_alias;
8.3数据块抽样(Block sampling )
该方式允许Hive随机抽取N行数据,数据总量的百分比(n百分比)或N字节的数据。
语法:
SELECT * FROM <Table_Name> TABLESAMPLE(N PERCENT|ByteLengthLiteral|N ROWS) s;
例:按数据量百分比抽样 hive> SELECT name FROM employees TABLESAMPLE(10 PERCENT) a;
注:此方法有待考证,在Hive0.11.0中将所有25条数
据全取出来了,在Hive0.13.0中取出了其中的12条,但是都不符合要求!!
例:按数据大小采样 hive> SELECT name FROM employees TABLESAMPLE(1M) a;
总结,聚合和抽样,特别是聚合函数,在大数据处理过程中是处理数据的主要方法。通过自由的条件限制以及聚合函数组合,基本能完成任意要求的数据处理或分组。本文仅仅是针对Hive进行了部分比较细致的讲解,关于像解析函数之类的使用比较复杂一点的处理方式需要进行更深一步的了解和运用
这篇关于Hive-2.HiveQL查询中抽样查询的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!