BigQueryでランダムにデータを2分割する方法を紹介します。活用シーンとしては、ABテストを実施する際に便利です。
今回、ランダムにデータを2分割しますが、再現性を保つようにします。つまり、「ある時にSQLを実行したらグループAに分類。後日SQLを実行してもグループAに分類。」となるようにします。
サンプルSQL
テーブル「tb_user」に、一意のID「user_id」のカラムを持つ場合、以下のように書けます。
-- ABテスト用に、ランダムにデータを2分割するクエリ。
-- 全データが「group_no=0」と「group_no=1」に分かれる。
SELECT
*,
MOD(ABS(FARM_FINGERPRINT(user_id)), 2) as group_no
FROM tb_user
・FARM_FINGERPRINT でハッシュを計算
・ABS ハッシュが負の数になる可能性があるため正の数に変換
・MOD で余りを算出する
(参考)
https://cloud.google.com/bigquery/docs/reference/standard-sql/hash_functions
以上、『ランダムにデータを2分割する方法(ABテスト)』でした。
コメント