ClickHouse のロゴ

ClickHouse / 公式ブログ / 2026/05/22 / 通常

ClickHouse公式ブログ解説: native random sampling で大規模集計を速く試す

databidev

公式ブログ原文

ClickHouse は 2026年5月22日、native random sampling の使い方を解説する公式ブログを公開しました。大規模テーブルに対して、全件集計ではなくランダムサンプルで高速に近似結果を得るための設計が説明されています。

要点

  • SAMPLE BYSAMPLE 句を使って、テーブルの一部だけを読んで集計できる
  • sample key は高 cardinality で均等に分散する式を選ぶ必要がある
  • sipHash64 のような hash を使い、primary key / ORDER BY との関係を考える
  • 合計値など母集団総量に依存する集計では _sample_factor による補正が必要

今回のブログ記事で語られていること

この記事は、ClickHouse で random sampling を使う時の考え方を、UK house prices dataset を使って説明しています。対象データは約 3,000万件の不動産取引で、全件に対する集計が遅い場合に、テーブルのランダムな一部だけを読んで近似値を得るという流れです。重要なのは、sampling を後付けの便利機能としてではなく、table design の段階で考える点です。SAMPLE BY key は ORDER BY に含める必要があり、query engine が primary index を使って不要な granule を読み飛ばせるように設計します。

ブログでは、sample key の選び方も丁寧に説明されています。低 cardinality の county を hash すると bucket が偏り、10% のつもりでも実際には特定地域が重くなります。一方、postcode の組み合わせのように cardinality が高い値を sipHash64 で hash すると、bucket が比較的均等に分散します。sampling の精度は、どの列を sample key にするかで大きく変わるため、単に SAMPLE 0.1 と書けばよいわけではありません。

もう一つの焦点は _sample_factor です。countavg のようにサンプルでも意味を保ちやすい集計と、sum のように母集団全体の量を推定する集計では扱いが違います。合計金額を推定するなら、sampled rows の値に _sample_factor を掛けて母集団規模へ戻す必要があります。これは、探索的分析や dashboard の高速 preview では便利ですが、請求、監査、正式レポートのように厳密な値が必要な場面では注意が必要です。

実務では、random sampling は「全件を読まないための近道」ではなく、「速い近似を許容する workflow」を作るための機能です。探索分析、異常傾向の早期確認、dashboard の初期表示、ad hoc query の試行では有効です。一方で、結果の誤差、sample key の偏り、query ごとの再現性、全件集計との切り替え条件を明確にしないと、近似値が正式な数値として独り歩きします。

実務で確認したいポイント

  1. sample key が高 cardinality で均等に分散するかを bucket 集計で確認する
  2. ORDER BYSAMPLE BY の設計を、既存 query pattern と合わせる
  3. sum など母集団総量の推定では _sample_factor を使う
  4. dashboard や BI では、sampled result であることを UI や metadata に残す

どう読むべきか

native random sampling は、大規模 ClickHouse 環境で探索速度を上げる強い選択肢です。ただし、速さと引き換えに誤差を受け入れる機能なので、sample key の設計と利用場面の明示がセットで必要です。