7.2 KiB
slug | sidebar_label |
---|---|
/ja/sql-reference/statements/select/sample | SAMPLE |
SAMPLE句
SAMPLE
句は、近似のSELECT
クエリ処理を可能にします。
データサンプリングが有効になっている場合、クエリはすべてのデータに対して実行されるのではなく、データの一部(サンプル)のみに対して実行されます。例えば、すべての訪問の統計を計算する必要がある場合、すべての訪問の10分の1のデータに対してクエリを実行し、その結果を10倍するだけで十分です。
近似クエリ処理が有用なケースは以下の通りです:
- 厳格なレイテンシ要件(例えば100ms未満)があるが、これを満たすための追加のハードウェアリソースのコストを正当化できない場合。
- 生データが正確でないので、近似が品質を明らかに劣化させることはない場合。
- ビジネス要件が近似結果を目標としている場合(コスト効果のため、または正確な結果をプレミアムユーザーに提供するため)。
:::note
サンプリングは、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 |
ここでk およびm は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
ここでk
およびm
は0から1の数字です。以下に例を示します。
例 1
SAMPLE 1/10
この例では、すべてのデータの1/10のサンプルです:
[++------------]
例 2
SAMPLE 1/10 OFFSET 1/2
ここで、データの後半から10%のサンプルが取られます。
[------++------]