[Hive]Hive實現抽樣查詢

TOMOCAT發表於2018-08-16

對於非常大的資料集,有時使用者需要使用的知識一個具有代表性的查詢結果,而不是全部結果。Hive可以通過對錶進行分桶抽樣來滿足這個需求。

1、分桶抽樣查詢

select * from numbers TABLESAMPLE(BUCKET 3 OUT OF 10 ON number) s;

其中tablesample是抽樣語句,語法:TABLESAMPLE(BUCKET x OUT OF y) 。y必須是table總bucket數的倍數或者因子。hive根據y的大小,決定抽樣的比例。例如,table總共分了64份,當y=32時,抽取(64/32=)2個bucket的資料,當y=128時,抽取(64/128=)1/2個bucket的資料。x表示從哪個bucket開始抽取。例如,table總bucket數為32,tablesample(bucket 3 out of 16),表示總共抽取(32/16=)2個bucket的資料,分別為第3個bucket和第(3+16=)19個bucket的資料。

2、資料塊抽樣

Hive提供了另外一種按照抽樣百分比進行抽樣的方式,這種是基於行數的,按照輸入路徑下的資料塊百分比進行抽樣。

select * from numbersflat TABLESAMPLE(0.1 PERCENT) s;

這種抽樣方式不一定適用於所有的檔案格式。另外抽樣的最小抽樣單元是一個HDFS資料塊。如果標的資料大小小於普通的塊大小128MB,那麼會返回所有的行。

相關文章