Hive sampling 語法之TABLESAMPLE用法理解


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

​ 官網中假設創建表時設置了 CLUSTERED BY(id) INTO 32 BUCKETS 即分成了32個文件(雖然這里用的是bucket,為了避免混淆和方便理解下面的解釋,個人傾向於用cluster或者叫簇來代替),那么下面這個子句

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)的數據。官網原話:

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

​ 那下面這個怎么理解呢?

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中的前一半數據。官網原話:

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

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

LanguageManual DDL BucketedTables


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM