Hive sampling 語法之TABLESAMPLE用法理解

官網關於LanguageManual Sampling的教程,部分截圖以下,這裏主要分享對TABLESAMPLE(BUCKET 3 OUT OF 16 ON id)子句的理解

​ 官網中假設建立表時設置了 CLUSTERED BY(id) INTO 32 BUCKETS 即分紅了32個文件(雖然這裏用的是bucket,爲了不混淆和方便理解下面的解釋,我的傾向於用cluster或者叫簇來代替),那麼下面這個子句apache

TABLESAMPLE(BUCKET 3 OUT OF 16 ON id)

在查詢中的意思是將cluster分紅16個桶,而後取出第三個桶中的數據。32個文件分進16個桶,那就是每一個桶有(32/16=)2 個cluster,怎麼分呢?第1個cluster分進第1個桶,第2個cluster分進第2個桶......第16個cluster分進第16個桶,第17個cluster分進第1個桶,以此類推。因此當取出第三個桶中的數據時,就會取出第3個簇(cluster)和第19簇(cluster)的數據。官網原話:code

would pick out the 3rd and 19th clusters as each bucket would be composed of (32/16)=2 clusters.blog

​ 那下面這個怎麼理解呢?教程

TABLESAMPLE(BUCKET 3 OUT OF 64 ON id)

​ 32個cluster分進64個桶,而後再抽出第三個桶中的數據。32/64=1/2,每一個桶由1/2個cluster組成,一樣地,第1個cluster的前一半數據分進第1個桶,後一半數據分進第33個桶,第2個cluster的前一半數據分進第2個桶,後一半數據分進第34個桶,.....第32個cluster的前一半數據分進第32個桶,後一半數據分進第64個桶。因此這個子句會取出第3個桶中的數據,也就是第3個cluster中的前一半數據。官網原話:get

would pick out half of the 3rd cluster as each bucket would be composed of (32/64)=1/2 of a cluster.table

​ 補充官網關於分桶表的DDL操做sed

LanguageManual DDL BucketedTablesim

相關文章
相關標籤/搜索