分享

hive 抽样查询(Samping)

本帖最后由 孤独的战神 于 2019-4-28 15:27 编辑

对于非常大的数据集,有时用户需要使用的是一个具有代表性的查询结果而不是全部结果。Hive可以通过对表进行分桶抽样来满足这个需求。
1、桶抽样:
格式:
table_sample: TABLESAMPLE (BUCKET x OUT OF y [ON colname]);

TABLESAMPLE查询语句可用于任何表中,桶编号从1开始,colname表明抽取样本的列,可以是非分区列中的任意一列;也可以是rand(),表示以整行为基准而不是以单个列进行采样,以上语句为例,根据colname分桶的行被随机“分配”到编号为1到y的桶中,存放在第x个桶中的数据将会被返回。下面的例子中,返回32个桶中的第3个桶中的行:


SELECT *FROM source TABLESAMPLE(BUCKET 3 OUT OF 32 ON rand()) s;

通常情况下,TABLESAMPLE将会扫描整个表然后抽取样本,显然这种做法效率不是很高。替代方法是,由于在使用CLUSTERED BY时指定了分桶的列,如果抽样时TABLESAMPLE子句中指定的列匹配CLUSTERED BY子句中的列,TABLESAMPLE只扫描表中要求的分区。假定建表时使用了CLUSTERED BY id INTO 32 BUCKETS,那么下面的语句将返回第3个和第19个桶中行,因为新的划分之后(32/16=2),每个桶由原来的2个桶组成:

TABLESAMPLE(BUCKET 3 OUT OF 16 ON id);

为什么是第3和19个桶?
因为要返回的是第3个桶,新的划分之后(32/16=2),每个桶由原来的2个桶组成,第3个桶就由原来的第3个和19个簇组成,根据CLUSTERED BY哈希算法(3 mod 16=19 mod 16).相反,下面的语句将会返回第3个桶的一半,因为每个桶由(32/64)=1/2个桶组成:

TABLESAMPLE(BUCKET 3 OUT OF 64 ON id)

2、数据块抽样(starting with Hive 0.8):
格式:
block_sample: TABLESAMPLE (n PERCENT)

该语句允许抽取数据大小的至少n%(不是行数,而是数据大小)做为输入,支持CombineHiveInputFormat而一些特殊的压缩格式(这种抽样方式不一定适用于所有的文本格式)是不能够被处理的,如果抽样失败,MapReduce作业的输入将是整个table/partition。
由于在HDFS块层级进行抽样,所以抽样粒度为块的大小,例如如果块大小为256MB,即使输入的n%仅为100MB,也会得到256MB的数据。下面的例子中输入的0.1%或更多将用于查询:

SELECT * FROM source TABLESAMPLE(0.1 PERCENT) s;

如果希望在不同的块中抽取相同的数据,可以改变下面的参数:

set hive.sample.seednumber=<INTEGER>;

也可以指定读取数据的长度,该方法与PERCENT抽样具有一样的限制,为什么有相同的限制,是因为该语法仅将百分比改为了具体值,但没有改变基于块抽样这一前提条件.该语法为:

block_sample: TABLESAMPLE (ByteLengthLiteral)
    ByteLengthLiteral : (Digit)+ ('b' | 'B' | 'k' | 'K' | 'm' | 'M' | 'g' | 'G')

下面的例子中输入的100M或更多将用于查询:

SELECT * FROM source TABLESAMPLE(100M) s;

Hive也支持基于行数的输入限制,当效果与上面介绍的两个不同。首先不需要CombineHiveInputFormat,这意味着可以被用在非原生表中。其次行数被用在每个split中。因此总的行数根据输入的split数而变化很大。语法格式为:


block_sample: TABLESAMPLE (n ROWS)

例如下面的查询将从每个split中抽取10行:

SELECT * FROM source TABLESAMPLE(10 ROWS);

参考链接:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Sampling
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL+BucketedTables







已有(2)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条