我在BigQuery中有一個表。我有一個字符串列表示一個唯一的ID(uid)。我只想通過只取得一部分uid(比如說1/100)來過濾這張表的一個樣本。 所以我的想法是做這樣的事情采樣數據:BigQuery - 根據一些哈希標準對數據進行分區
if(ABS(HASH(uid)) % 100 == 0) ...
的問題是,這將在1/100的比例只有散列值的分佈是均勻的實際過濾。因此,爲了確認,我想生成如下表:
(n goes from 0 to 99)
0 <number of rows in which uid % 100 == 0>
1 <number of rows in which uid % 100 == 1>
2 <number of rows in which uid % 100 == 2>
3 <number of rows in which uid % 100 == 3>
..等
如果我看到每一行的數字是相同的數量級,那麼我的假設是正確。
任何想法如何創建這樣的查詢,或者採取另一種方式做抽樣?
你甚至可以把RAND部分放在WHERE子句中: SELECT * FROM table WHERE RAND()<0.01 – 2014-10-21 06:00:18
RAND對數據的隨機部分很有用。但是,如果我尋求一致性(每次查詢同一個表時在同一分區中都有相同的記錄),它仍然可以工作嗎? – 2014-10-21 06:36:08
謝謝大家!然而,作爲後續,我發現我將無法使用hash()或rand()。原因是相同的會話ID出現在多種類型中,我需要從所有類型中篩選出一個特定的ID。這意味着我需要一個函數,給定相同的會話ID將產生相同的整數(我將通過執行%100來進行抽樣),以便過濾對任何表中的給定ID都是確定性的。 – 2014-10-21 06:56:46