RECORD_IN_FAST_SAMPLE

RECORD_IN_FAST_SAMPLEは、現在のレコードが指定した状態のレコードのサンプルにあるかどうかを示すブールを返す行関数です。

RECORD_IN_FAST_SAMPLE関数の構文は次のとおりです。
RECORD_IN_FAST_SAMPLE(<double_literal>)
ここで、double_literalは、リクエストしたサンプルのサイズを、レコードの合計数の割合で指定します。サンプル・サイズは、0.0から1.0の間(0.0と1.0を含む)である必要があります。たとえば、値0.1は、状態内のレコードの約10%を返します。

RECORD_IN_FAST_SAMPLEは、DgraphからStudioに送信されるデータのサイズを小さくする(ヒート・マップなどの大まかなビジュアライゼーションを生成する場合など)ための高速で便利な関数です。ただし、この関数では真にランダムなサンプルは計算されません。つまり、コレクション内の各レコードが選択される確率が同じわけではなく、kレコードの各サブセットが選択される確率がkレコードの他のサブセットと同じわけではありません。

関数の使用上の制限

RECORD_IN_FAST_SAMPLE関数を使用する場合の制限は次のとおりです。
  • 文ごとのWHERE条件としてのみ使用できます。
  • CASE内または別の関数の引数としては使用されません。
  • FROMの対象が単一の状態の文でのみ使用できます。FROMの対象が別の文、ビュー、JOINまたはCROSSの文でRECORD_IN_FAST_SAMPLEが使用されている場合、EQLはエラーを表示します。

これらの制限の違反は、EQLチェック・エラーになります。

次の単純な例では、WHERE句を使用した関数の使用を示します。
RETURN Results AS
SELECT TotalSales AS Sales
FROM SalesState
WHERE RECORD_IN_FAST_SAMPLE(0.1)
RECORD_IN_FAST_SAMPLEは、次の簡単な問合せのように、ブール演算子と組み合せて使用することもできます。
RETURN Results AS
SELECT TotalSales AS Sales
FROM SalesState
WHERE TotalSales IS NOT NULL AND RECORD_IN_FAST_SAMPLE(0.1)

サンプリングと結合に関する注意

結合の結果をサンプリングすることはできません(前述の3つ目の制限を参照)が、サンプリングの結果を結合することはできます。ただし、望ましい結果が得られない可能性があることに注意してください。たとえば、次の問合せを考えてみます。
DEFINE s1 AS
  SELECT ...
  FROM State1
  WHERE RECORD_IN_FAST_SAMPLE(0.1);
DEFINE s2 AS
  SELECT ...
  FROM State2
  WHERE RECORD_IN_FAST_SAMPLE(0.1);
RETURN s3 AS
  SELECT ..
  FROM s1 JOIN s2 ON (...)

s1およびs2の結果には、それぞれState1およびState2のレコードの約10%が含まれます。ただし、一般的には、前の文がサンプリングされていない場合、s3の結果には10%より大幅に少ないレコードが含まれます。