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

SAMPLE句

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

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

近似クエリ処理は以下の場合に有用です:

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

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

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

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

SAMPLE句には以下の構文がサポートされています:

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

SAMPLE K

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

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

この例では、クエリはデータの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テーブルを考えます。このテーブルにはサイト訪問の統計が含まれています。最初の例はページビューの数を計算する方法を示します:

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

以下の例は平均セッションの持続時間を計算する方法を示します。相対係数を使用して平均値を計算する必要はないことに注意してください。

SAMPLE K OFFSET M

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

例1

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

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

例2

ここでは、データの後半から10%のサンプルを取得しています。

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