Google BigQueryにおけるランダムサンプリング
2023-07-25 22:52:55
質問
RAND()関数が、文書化されていないものの、BigQueryで動作することを発見したところです。私は、Shakespeareデータセットから10個の単語の(一見)ランダムなサンプルを生成することができました。
SELECT word FROM
(SELECT rand() as random,word FROM [publicdata:samples.shakespeare] ORDER BY random)
LIMIT 10
質問ですが、リファレンスマニュアルの "Advanced examples" の項で定義されている HASH() メソッドの代わりに、この方法を使用することにデメリットはありますか? https://developers.google.com/bigquery/query-reference
どのように解決するのですか?
層別サンプリングについては https://stackoverflow.com/a/52901452/132438
よくぞ見つけてくれました :)。最近、この機能をリクエストしたのですが、まだドキュメントにはなっていないようです。
RAND()の利点は結果が変化することで、HASH()は同じ値に対して同じ結果を出し続けることだと言えるでしょう(長期間保証されるわけではありませんが、イメージはつかめると思います)。
RAND()がもたらす多様性と同時に一貫した結果を得たい場合、RAND(3)のように整数でシードすることが可能です。
しかし、貼り付けた例では、ランダムな値の完全なソートを実行していることに注意してください。
スケーラブルなアプローチで、およそ10個のランダムな行を取得します。
SELECT word
FROM [publicdata:samples.shakespeare]
WHERE RAND() < 10/164656
( ここで、10 は取得したい結果のおおよその数で、164656 はそのテーブルが持つ行の数です。 )
標準SQLの更新です。
#standardSQL
SELECT word
FROM `publicdata.samples.shakespeare`
WHERE RAND() < 10/164656
とかでもいい。
#standardSQL
SELECT word
FROM `publicdata.samples.shakespeare`
WHERE RAND() < 10/(SELECT COUNT(*) FROM `publicdata.samples.shakespeare`)
関連
-
[解決済み] Googleからの「OAuthクライアントが削除されました」というのは、鍵が無効ということですか?
-
[解決済み] Google App EngineとGoogle Compute Engineの違いは何ですか?
-
[解決済み] CLIコマンドを使用してGCPのプロジェクトを変更する方法
-
[解決済み] Composerのrequireブランチ名
-
[解決済み] BigQueryとBigtableの違いは何ですか?[クローズド]
-
[解決済み] Google Cloud Platformです。Google Cloud Platform のプロジェクト名を変更するにはどうすればよいですか?
-
[解決済み] gcpサービスアカウントに関連するロールを一覧表示するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン