基於所有讀入的column_name的值,系統根據x、y的設定做採樣,並過濾掉不滿足採樣條件的行。
命令格式
boolean sample(<x>, <y>, [<column_name1>, <column_name2>[,...]])
參數說明
x、y:x必填。BIGINT類型,取值範圍為大0的整型常量。表示雜湊為x份,取第y份。
y可選,省略時預設取第一份。如果省略參數中的y,則必須同時省略column_name。
x、y為其它類型或小於等於0時拋異常,如果y大於x時也返回異常。x、y任一輸入為NULL時,返回NULL。
column_name:可選。採樣的目標列。該參數省略時將根據x、y的值隨機採樣。任意類型,列的值可以為NULL。不做隱式類型轉換。如果column_name為常量NULL,則返回報錯。
說明為避免NULL值帶來的資料扭曲,對於column_name中為NULL的值,會在x份中進行均勻雜湊。如果不指定column_name,則可能出現資料不均勻的情況,建議指定column_name,以獲得較好的輸出結果。
目前僅支援對如下資料類型的列做隨機採樣:bigint、datetime、boolean、double、string、binary、char、varchar。
傳回值說明
返回BOOLEAN類型。
使用樣本
例如存在表mf_sample
,表資料如下:
+------------+------+------+------+------+
| id | col1 | col2 | col3 | col4 |
+------------+------+------+------+------+
| 3 | eee | rrr | tttt | ggggg |
| 4 | yyy | uuuu | iiiii | ccccccc |
| 1 | "abc" | "bcd" | "rthg" | "ahgjeog" |
| 2 | "a1bc" | "bc1d" | "rt1hg" | "ahgjeog" |
+------------+------+------+------+------+
對錶資料做隨機雜湊分配為2份,取第1份:
select * from mf_sample where sample(2,1);
返回結果如下:
+------------+------+------+------+------+ | id | col1 | col2 | col3 | col4 | +------------+------+------+------+------+ | 3 | eee | rrr | tttt | ggggg | | 1 | "abc" | "bcd" | "rthg" | "ahgjeog" | +------------+------+------+------+------+
根據
id
列對錶資料做隨機雜湊分配為2份,取第1份:select * from mf_sample where sample(2,1,id);
返回結果如下:
+------------+------+------+------+------+ | id | col1 | col2 | col3 | col4 | +------------+------+------+------+------+ | 4 | yyy | uuuu | iiiii | ccccccc | | 2 | "a1bc" | "bc1d" | "rt1hg" | "ahgjeog" | +------------+------+------+------+------+
相關函數
SAMPLE函數屬於其他函數,更多其他業務情境的函數請參見其他函數。