メインコンテンツまでスキップ
メインコンテンツまでスキップ

SAMPLE句

SAMPLE句は、近似的なSELECTクエリ処理を可能にします。

データサンプリングが有効になっている場合、クエリはすべてのデータではなく、特定のデータの割合(サンプル)のみで実行されます。たとえば、すべての訪問の統計を計算する必要がある場合、すべての訪問の1/10の割合でクエリを実行し、その結果を10倍すれば十分です。

近似的なクエリ処理は、以下のような場合に役立ちます:

  • 厳格なレイテンシ要件がある(100ms未満など)が、それを満たすための追加ハードウェアリソースのコストを正当化できない場合。
  • 生データが正確でないため、近似が品質を著しく低下させない場合。
  • ビジネス要件が近似的な結果をターゲットにしている場合(コスト効率のためや、プレミアムユーザーに正確な結果をマーケティングするため)。
注記

サンプリングは、MergeTreeファミリーのテーブルでのみ使用でき、テーブル作成時にサンプリング式が指定されている場合に限ります(MergeTreeエンジンを参照)。

データサンプリングの機能は以下の通りです:

  • データサンプリングは決定論的なメカニズムです。同じSELECT .. SAMPLEクエリの結果は常に同じです。
  • サンプリングは異なるテーブルで一貫して機能します。単一のサンプリングキーを持つテーブルの場合、同じ係数のサンプルは常に同じ可能なデータのサブセットを選択します。たとえば、ユーザーIDのサンプルは、異なるテーブルからすべての可能なユーザーIDの同じサブセットを持つ行を取得します。これは、IN句のサブクエリでサンプルを使用できることを意味します。また、JOIN句を使用してサンプルを結合できます。
  • サンプリングは、ディスクから読み取るデータ量を減らすことを可能にします。サンプリングキーを正しく指定する必要があることに注意してください。詳細については、MergeTreeテーブルの作成を参照してください。

SAMPLE句に対してサポートされている構文は以下の通りです:

SAMPLE句構文説明
SAMPLE kここでkは0から1の範囲の数です。クエリはkの割合のデータで実行されます。たとえば、SAMPLE 0.1はデータの10%でクエリを実行します。詳しく読む
SAMPLE nここでnは十分に大きな整数です。クエリは少なくともn行のサンプルで実行されます(ただし、これよりもはるかに多くはありません)。たとえば、SAMPLE 10000000は最小10,000,000行でクエリを実行します。詳しく読む
SAMPLE k OFFSET mここでkmは0から1の範囲の数です。クエリはデータのkの割合のサンプルで実行されます。サンプルに使用されるデータはmの割合でオフセットされます。詳しく読む

SAMPLE K

ここでkは0から1の範囲の数です(分数および小数表記がサポートされます)。たとえば、SAMPLE 1/2またはSAMPLE 0.5

SAMPLE k句では、データのkの割合からサンプルが取得されます。以下に例を示します:

SELECT
    Title,
    count() * 10 AS PageViews
FROM hits_distributed
SAMPLE 0.1
WHERE
    CounterID = 34
GROUP BY Title
ORDER BY PageViews DESC LIMIT 1000

この例では、クエリは0.1(10%)のデータからサンプルを実行します。集計関数の値は自動的に補正されないため、近似結果を得るにはcount()の値を手動で10倍にする必要があります。

SAMPLE N

ここでnは十分に大きな整数です。たとえば、SAMPLE 10000000

この場合、クエリは少なくともn行のサンプルで実行されます(ただし、これよりもはるかに多くはありません)。たとえば、SAMPLE 10000000は最小10,000,000行でクエリを実行します。

データを読み取るための最小単位は1グラニュールであるため(そのサイズはindex_granularity設定によって設定されます)、グラニュールのサイズよりもはるかに大きいサンプルを設定することが理にかなっています。

SAMPLE n句を使用すると、処理されたデータの相対パーセントがわかりません。したがって、集計関数をどの係数で掛けるべきかもわかりません。近似結果を得るには、_sample_factor仮想カラムを使用してください。

_sample_factorカラムには、動的に計算された相対係数が含まれています。このカラムは、指定されたサンプリングキーでテーブルを作成すると自動的に作成されます。_sample_factorカラムの使用例は以下に示します。

visitsテーブルを考えてみましょう。このテーブルには、サイト訪問の統計が含まれています。最初の例は、ページビューの数を計算する方法を示しています:

SELECT sum(PageViews * _sample_factor)
FROM visits
SAMPLE 10000000

次の例は、総訪問数を計算する方法を示しています:

SELECT sum(_sample_factor)
FROM visits
SAMPLE 10000000

以下の例は、平均セッションの長さを計算する方法を示しています。平均値を計算するために相対係数を使用する必要はありません。

SELECT avg(Duration)
FROM visits
SAMPLE 10000000

SAMPLE K OFFSET M

ここでkmは0から1の範囲の数です。以下に例を示します。

例1

SAMPLE 1/10

この例では、サンプルはすべてのデータの1/10です:

[++------------]

例2

SAMPLE 1/10 OFFSET 1/2

ここでは、データの後半から10%のサンプルが取得されます。

[------++------]