すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:近似関数

最終更新日:Jun 04, 2026

近似関数は、計算コストを抑えながら個別値のカウント、パーセンタイル、ヒストグラムを推定します。

Log Service は、以下の近似関数をサポートしています。

重要 分析文で文字列を使用する場合は、必ずシングルクォーテーション ('') で囲んでください。囲まれていない文字列またはダブルクォーテーション ("") で囲まれた文字列は、フィールド名またはカラム名を示します。たとえば、'status' は文字列 status を示し、status または "status" はログフィールド status を示します。

関数

構文

説明

SQL サポート

SPL サポート

approx_distinct

approx_distinct(x)

x 内の個別値の数を推定します。デフォルトの標準誤差は 2.3% です。

approx_distinct(x, e)

カスタム標準誤差で x 内の個別値の数を推定します。

approx_percentile

approx_percentile(x, percentage)

x(昇順にソート)の近似 percentage パーセンタイルを返します。結果は近似値であり、安定性は保証されません。

approx_percentile(x, array[percentage01, percentage02...])

xpercentage01 および percentage02 パーセンタイル(昇順にソート)における近似値を返します。結果は近似値であり、安定性は保証されません。

approx_percentile(x, weight, percentage)

percentage パーセンタイルの近似値を返します。xx × weight で重み付けされ(昇順にソートされます)。結果は近似値であり、安定性は保証されません。

approx_percentile(x, weight, array[percentage01, percentage02...])

xpercentage01 および percentage02 パーセンタイルにおける近似値を、x × weight で重み付けして返します。結果は近似値であり、安定性は保証されません。

approx_percentile(x, weight, percentage, accuracy)

設定可能な精度で、percentage パーセンタイルの近似値を返します。この値は x のもので、x × 重みで重み付けされています。結果は安定性保証のない近似値です。

numeric_histogram

numeric_histogram(bucket, x)

指定されたバケット数で x の近似ヒストグラムを計算します。JSON オブジェクトを返します。

numeric_histogram(bucket, x, weight)

指定されたバケット数で x の重み付き近似ヒストグラムを計算します。JSON オブジェクトを返します。

numeric_histogram_u

numeric_histogram_u(bucket, x)

指定されたバケット数で x の近似ヒストグラムを計算します。複数行・複数列のテーブルを返します。

approx_most_frequent

approx_most_frequent(k, x)

カラム x の上位 k 個の最頻値とその近似カウントを推定します。マップを返します。

approx_distinct 関数

approx_distinct 関数は、x 内の個別値の数を推定します。

構文

  • x 内の個別値の数を推定します。デフォルトの標準誤差は 2.3% です。

    approx_distinct(x)
  • カスタム標準誤差で x 内の個別値の数を推定します。

    approx_distinct(x, e)

パラメーター

パラメーター

説明

x

カラム名。任意のデータの型をサポートします。

e

カスタム標準誤差。有効範囲:[0.0115, 0.26]。

戻り値の型

BIGINT

使用例

  • 例 1:client_ip フィールドに対して、count で PV を計算し、approx_distinct で UV を推定します。標準誤差は 2.3% です。

    • クエリ文

      * | SELECT count(*) AS PV, approx_distinct(client_ip) AS UV
    • クエリ結果は、PV が 941,787、UV が 723,040 です。

  • 例 2:client_ip フィールドに対して、PV を計算し、カスタム標準誤差 10% で UV を推定します。

    • クエリ文

      * | SELECT count(*) AS PV, approx_distinct(client_ip,0.1) AS UV
    • クエリ結果は、PV が 9,095、UV が 7,946 です。

approx_percentile 関数

approx_percentile 関数は、percentage で指定された x の近似パーセンタイルを返します。結果は近似値であり、安定性は保証されません。

構文

  • x(昇順にソート)の近似 percentage パーセンタイルを返します。戻り値の型:double。

    approx_percentile(x, percentage)
  • x の percentage01 および percentage02 パーセンタイル(昇順にソート)における近似値を返します。戻り値の型:array(double,double)。

    approx_percentile(x, array[percentage01, percentage02...])
  • x × weight で重み付けされた x の近似 percentage パーセンタイルを返します。戻り値の型:double

    approx_percentile(x, weight, percentage)
  • x × weight で重み付けされた x の percentage01 および percentage02 パーセンタイルにおける近似値を返します。戻り値の型:array(double,double)。

    approx_percentile(x, weight, array[percentage01, percentage02...])
  • x × weight で重み付けされ、精度が設定可能な x の近似 percentage パーセンタイルを返します。戻り値の型:double。

    approx_percentile(x, weight, percentage, accuracy)

パラメーター

パラメーター

説明

x

カラム名。DOUBLE 型である必要があります。

percentage

パーセンタイル値。有効範囲:[0, 1]。

accuracy

精度値。有効範囲:(0, 1)。

weight

重み。1 より大きい整数である必要があります。

システムは、x × weight の積でソートします。

戻り値の型

DOUBLE または ARRAY(DOUBLE)

使用例

  • 例 1:request_time の近似 50 パーセンタイル(中央値)を返します。

    • クエリ文

      * | SELECT approx_percentile(request_time, 0.5)
    • クエリ結果は 45.0 で、これは request_time の近似中央値(50 パーセンタイル)です。

  • 例 2:request_time の近似 10、20、70 パーセンタイルを返します。

    • クエリ文

      * | SELECT approx_percentile(request_time, array[0.1, 0.2, 0.7])
    • クエリ結果は [17.0, 24.0, 59.0] で、これはそれぞれ request_time の 10、20、70 パーセンタイルにおける近似値です。

  • 例 3:request_time の重み付き 50 パーセンタイルを返します。重みは request_time < 20 の場合 100、それ以外は 10 です。

    • クエリ文

      * |
      SELECT
        approx_percentile(
          request_time,
          CASE
            WHEN request_time < 20 THEN 100
            ELSE 10
          END,
          0.5
        )
    • クエリ結果は 18.0 です。

  • 例 4:request_time の重み付き 80 および 90 パーセンタイルを返します。重みは request_time < 20 の場合 100、それ以外は 10 です。

    • クエリ文

      * |
      SELECT
        approx_percentile(
          request_time,
          CASE
            WHEN request_time < 20 THEN 100
            ELSE 10
          END,
          array [0.8, 0.9]
        )
    • クエリ結果は [48.0, 64.0] です。

  • 例 5:request_time の重み付き 50 パーセンタイルを精度 0.2 で返します。重みは request_time < 20 の場合 100、それ以外は 10 です。

    • クエリ文

      * |
      SELECT
        approx_percentile(
          request_time,
          CASE
            WHEN request_time < 20 THEN 100
            ELSE 10
          END,
          0.5,
          0.2
        )

numeric_histogram 関数

numeric_histogram 関数は、指定されたバケット数で x の近似ヒストグラムを計算し、結果を JSON オブジェクトとして返します。

構文

  • 指定されたバケット数で x の近似ヒストグラムを計算します。

    numeric_histogram(bucket, x)
  • 指定されたバケット数で x の重み付き近似ヒストグラムを計算します。

    numeric_histogram(bucket, x, weight)

パラメーター

パラメーター

説明

bucket

ヒストグラムのバケット数。BIGINT 型である必要があります。

x

カラム名。DOUBLE 型である必要があります。

weight

重み。0 より大きい整数である必要があります。

システムは、x × weight の積で値をグループ化します。

戻り値の型

JSON

使用例

  • 例 1:POST リクエストのリクエスト持続時間の近似ヒストグラムを計算します。

    • クエリ文

      request_method:POST | SELECT numeric_histogram(10, request_time)
    • バケットの上限値をキー、カウントを値とする JSON オブジェクトを返します。例:"45.03638445951907":11351.0"31.617058096415327":16180.0"51.0979254315973":13786.0

  • 例 2:POST リクエストのリクエスト持続時間の重み付き近似ヒストグラムを計算します。

    • クエリ文

      request_method:POST | SELECT numeric_histogram(10, request_time, CASE WHEN request_time<20 THEN 100 ELSE 10 END)
    • 数値範囲から頻度へのマッピングを含む 10 個のキーと値のペアを持つ JSON 列 _col0 を返します。例:"60.63632633267428":268070.0"76.41340599455032":275250.0"15.028066666666671":1500000.0

numeric_histogram_u 関数

numeric_histogram_u 関数は、指定されたバケット数で x の近似ヒストグラムを計算し、結果を複数行・複数列形式で返します。

構文

numeric_histogram_u(bucket, x)

パラメーター

パラメーター

説明

bucket

ヒストグラムのバケット数。BIGINT 型である必要があります。

x

カラム名。DOUBLE 型である必要があります。

戻り値の型

bucket_avg および count カラムを持つテーブル。

使用例

POST リクエストのリクエスト持続時間の近似ヒストグラムを計算します。

  • クエリ文

    request_method:POST | SELECT numeric_histogram_u(10, request_time)
  • bucket_avg(バケットの平均値)および count(そのバケット内のアイテム数)の 2 つのカラムを持つ 10 行を返します。たとえば、最初のバケットは bucket_avg が 14.20、count が 18806.0 です。最後のバケットは bucket_avg が 70.78、count が 13442.0 です。

approx_most_frequent 関数

カラム x の上位 k 個の最頻値とその近似カウントを推定します。

構文

approx_most_frequent(k, x)

パラメーター

パラメーター

説明

k

返す最頻値の数。たとえば、5 を指定すると上位 5 つの値とその近似カウントが返されます。

x

カラム名。VARCHAR 型である必要があります。

戻り値

map(VARCHAR, BIGINT)

使用例

content フィールドから最も出現頻度の高い 3 つの値を取得します。

  • サンプルデータ

    content: 
    'A'
    'B'
    'A'
    'C'
    'A'
    'B'
    'C'
    'D'
    'E'
  • クエリ文

    SELECT approx_most_frequent(3, content)
  • 出力

    クエリ結果は {"A":3, "B":2, "C":2} です。