蓝月亮四肖中特

about云開發

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

打印 上一主題 下一主題

[其它] hive 抽樣查詢(Samping)

[復制鏈接]
跳轉到指定樓層
樓主
孤獨的戰神 發表于 2019-4-28 15:19:39 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 孤獨的戰神 于 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







您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關閉

推薦上一條 /4 下一條

QQ|小黑屋|about云開發-學問論壇|社區 ( 京ICP備12023829號 )

GMT+8, 2020-1-30 05:07 , Processed in 1.140625 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2018 Comsenz Inc.Designed by u179

快速回復 返回頂部 返回列表
蓝月亮四肖中特 广东时时彩快乐十分走势图 舟山飞鱼彩票走势图 007足球比分网站 安徽快3中奖规则 重庆快乐10分定位计划 大乐透17132期号码预测 足彩半全场中奖几率 快3 江苏7位数预测 万豪彩极速11选5网站