99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
2018-10-21 閱讀量: 983
Hive如何進(jìn)行采樣

當(dāng)數(shù)據(jù)量特別大時(shí),對(duì)全體數(shù)據(jù)進(jìn)行處理存在困難時(shí),抽樣就顯得尤其重要了。抽樣可以從被抽取的數(shù)據(jù)中估計(jì)和推斷出整體的特性,是科學(xué)實(shí)驗(yàn)、質(zhì)量檢驗(yàn)、社會(huì)調(diào)查普遍采用的一種經(jīng)濟(jì)有效的工作和研究方法。

Hive支持桶表抽樣和塊抽樣,下面分別學(xué)習(xí)。

桶表抽樣

所謂桶表指的是在創(chuàng)建表時(shí)使用CLUSTERED BY子句創(chuàng)建了桶的表。

TABLESAMPLE子句允許用戶編寫用于數(shù)據(jù)抽樣而不是整個(gè)表的查詢,該子句出現(xiàn)FROM子句中,可用于任何表中。桶編號(hào)從1開始,colname表明抽取樣本的列,可以是非分區(qū)列中的任意一列,或者使用rand()表明在整個(gè)行中抽取樣本而不是單個(gè)列。在colname上分桶的行隨機(jī)進(jìn)入1到y(tǒng)個(gè)桶中,返回屬于桶x的行。下面的例子中,返回32個(gè)桶中的第3個(gè)桶中的行:

SELECT *

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

通常情況下,TABLESAMPLE將會(huì)掃描整個(gè)表然后抽取樣本,顯然這種做法效率不是很高。替代方法是,由于在使用CLUSTERED BY時(shí)指定了分桶的列,如果抽樣時(shí)TABLESAMPLE子句中指定的列匹配CLUSTERED BY子句中的列,TABLESAMPLE只掃描表中要求的分區(qū)。假如上面的例子中,source表在創(chuàng)建時(shí)使用了CLUSTEREDBY id INTO 32 BUCKETS,那么下面的語句將返回第3個(gè)和第19個(gè)簇中的行,因?yàn)槊總€(gè)桶由(32/16)=2個(gè)簇組成。為什么是3和19呢,因?yàn)橐祷氐氖堑?個(gè)桶,而每個(gè)桶由原來的2個(gè)簇組成,第3個(gè)桶就由原來的第3個(gè)和19個(gè)簇組成,根據(jù)簡單的哈希算法(3%16=19%16)。

TABLESAMPLE(BUCKET 3 OUT OF 16 ON id)

相反,下面的語句將會(huì)返回第3個(gè)簇的一半,因?yàn)槊總€(gè)桶由(32/64)=1/2個(gè)簇組成。

TABLESAMPLE(BUCKET 3 OUT OF 64 ON id)

塊抽樣

從Hive-0.8開始可以使用塊抽樣,該語句允許抽取數(shù)據(jù)大小的至少n%(不是行數(shù),而是數(shù)據(jù)大小)做為輸入,支持CombineHiveInputFormat而一些特殊的壓縮格式是不能夠被處理的,如果抽樣失敗,MapReduce作業(yè)的輸入將是整個(gè)表。由于在HDFS塊層級(jí)進(jìn)行抽樣,所以抽樣粒度為塊的大小,例如如果塊大小為256MB,即使輸入的n%僅為100MB,也會(huì)得到256MB的數(shù)據(jù)。下面的例子中輸入的0.1%或更多將用于查詢:

SELECT *

FROM source TABLESAMPLE(0.1 PERCENT) s;

如果希望在不同的塊中抽取相同的數(shù)據(jù),可以改變下面的參數(shù):

set hive.sample.seednumber=<INTEGER>;

下面的例子中輸入的100M或更多將用于查詢:

SELECT *

FROM source TABLESAMPLE(100M) s;

Hive也支持基于行數(shù)的輸入限制,當(dāng)效果與上面介紹的兩個(gè)不同。首先不需要CombineHiveInputFormat,這意味著可以被用在非原生表中。其次行數(shù)被用在每個(gè)split中。例如下面的查詢將從每個(gè)split中抽取10行:

SELECT * FROM source TABLESAMPLE(10 ROWS);

0.0000
2
關(guān)注作者
收藏
評(píng)論(0)

發(fā)表評(píng)論

暫無數(shù)據(jù)
推薦帖子