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

Simple Log Service:SPL 命令

最終更新日:Jul 03, 2025

このトピックでは、Simple Log Service Processing Language (SPL) 命令について説明します。

パラメータデータ型

次の表に、SPL 命令でサポートされているパラメータのデータ型を示します。

パラメータデータ型

説明

Bool

パラメータはブール値を指定します。このタイプのパラメータは、SPL 命令のスイッチです。

Char

ASCII 文字を指定します。文字は一重引用符 (' ') で囲む必要があります。たとえば、'a' は文字 a を示し、'\t' はタブ文字、'\11' はシリアル番号が 8 進数 11 に対応する ASCII 文字、'\x09' はシリアル番号が 16 進数 09 に対応する ASCII 文字です。

Integer

パラメータは整数値を指定します。

String

文字列値を指定します。一重引用符 ('') で囲む必要があります。たとえば、'this is a string' です。

RegExp

RE2 正規表現を指定します。正規表現は一重引用符 (' ') で囲む必要があります。たとえば、'([\d.]+)' です。

構文定義については、「構文」をご参照ください。

JSONPath

JSON パスを指定します。JSON パスは一重引用符 ('') で囲む必要があります。たとえば、'$.body.values[0]' です。

構文定義については、「JsonPath」をご参照ください。

Field

フィールド名を指定します。たとえば、| project level, content です。

フィールド名に文字、数字、アンダースコア以外の特殊文字が含まれている場合は、二重引用符 ("") で囲む必要があります。たとえば、| project "a:b:c" です。

説明

フィールド名の大文字と小文字の区別については、「さまざまなシナリオでの SPL」をご参照ください。

FieldPattern

フィールド名、またはフィールド名とワイルドカードの組み合わせを指定します。アスタリスク (*) はワイルドカードとして使用でき、ゼロ個以上の文字に一致します。二重引用符 ("") で囲む必要があります。たとえば、| project "__tag__:*" です。

説明

フィールド名の大文字と小文字の区別については、「さまざまなシナリオでの SPL」をご参照ください。

SPLExp

パラメータは SPL 式を指定します。

SQLExp

パラメータは SQL 式を指定します。

SPL 命令

カテゴリ

名前

説明

制御命令

.let

名前付きデータセットを定義します。SPL データセットの詳細については、「SPL データセット」をご参照ください。

フィールド処理命令

project

指定されたパターンに一致するフィールドを保持し、指定されたフィールドの名前を変更します。命令の実行中、すべての保持関連の式は名前変更関連の式の前に実行されます。

project-away

指定されたパターンに一致するフィールドを削除し、その他すべてのフィールドをそのまま保持します。

project-rename

指定されたフィールドの名前を変更し、その他すべてのフィールドをそのまま保持します。

expand-values

指定されたフィールドの最初のレベルの JSON オブジェクトを展開し、複数の結果エントリを返します。

構造化データに対する SQL 計算命令

extend

SQL 式ベースのデータ計算の結果に基づいてフィールドを作成します。サポートされている SQL 関数の詳細については、「SPL でサポートされている SQL 関数」をご参照ください。

where

SQL 式ベースのデータ計算の結果に基づいてデータをフィルタリングし、指定された SQL 式に一致するデータを保持します。where 命令でサポートされている SQL 関数の詳細については、「SPL でサポートされている SQL 関数」をご参照ください。

半構造化データ抽出命令

parse-regexp

指定されたフィールドから、指定された正規表現のグループに一致する情報を抽出します。

parse-csv

指定されたフィールドから CSV 形式の情報を抽出します。

parse-json

指定されたフィールドから最初のレイヤーの JSON 情報を抽出します。

parse-kv

指定されたフィールドからキーと値のペア情報を抽出します。

新バージョンのデータ変換

pack-fields

ログフィールドをカプセル化し、フィールドを JSON 形式でシリアル化し、新しいフィールドにエクスポートします。この命令は、API リクエスト本文の構築など、構造化された送信が必要なシナリオに適用できます。

log-to-metric

e_to_metric 関数は、ログを Metricstore に保存できるメトリックに変換します。

metric-to-metric

既存の時系列データを処理します(タグの追加、変更、削除など)。

集約命令

stats

ログの統計分析に使用されます。SQL の集計関数 (COUNTSUMAVG など) と同様です。ログデータの特定のフィールドに対して統計、グループ化、および集計操作を実行します。

sort

クエリ結果をソートします。フィールド値または統計結果の昇順 (asc) または降順 (desc) ソートをサポートしています。ログ分析で重要なデータをすばやく見つけ、順序付きレポートを生成するための重要なツールです。

limit

クエリ結果で返されるログ行数を制限するために使用されます。データ量を制御するためのコア命令の 1 つです。 limit を使用すると、クエリ結果が大きすぎることによって発生するパフォーマンスの問題やリソースの浪費を効果的に防ぐことができます。ログ分析やリアルタイムモニタリングなど、さまざまなシナリオに適用できます。

制御命令

.let

後続の SPL 式の入力として名前付きデータセットを定義します。SPL データセットの詳細については、「SPL データセット」をご参照ください。

構文

.let <dataset>=<spl-expr>

パラメータ

パラメータ

必須

説明

dataset

String

はい

データセットの名前。名前には文字、数字、アンダースコアを含めることができ、文字で始める必要があります。名前は大文字と小文字が区別されます。

spl-expr

SPLExp

はい

データセットを生成するために使用される SPL 式。

  • 例 1: ステータスコードに基づいてアクセスログをフィルタリングおよび分類し、ログをエクスポートします。

    • SPL 文

      -- SPL 処理結果を src という名前のデータセットとして定義し、後続の SPL 式の入力として使用します。
      .let src = * 
      | where status=cast(status as BIGINT);
      
      -- 名前付きデータセット src を SPL 式の入力として使用して、status フィールドが 5xx のデータを取得し、SPL 処理結果を err という名前のデータセットとして定義します。データセットはエクスポートしません。
      .let err = $src
      | where status >= 500
      | extend msg='ERR';
      
      -- 名前付きデータセット src を SPL 式の入力として使用して、status フィールドが 2xx のデータを取得し、SPL 処理結果を ok という名前のデータセットとして定義します。データセットはエクスポートしません。
      .let ok = $src
      | where status >= 200 and status < 300
      | extend msg='OK';
      
      -- 名前付きデータセット err と ok をエクスポートします
      $err;
      $ok;
  • 入力データ

    # エントリ 1
    status: '200'
    body: 'this is a test'
    
    # エントリ 2
    status: '500'
    body: 'internal error'
    
    # エントリ 3
    status: '404'
    body: 'not found'
  • 出力

    # エントリ 1: データセット err
    status: '500'
    body: 'internal error'
    msg: 'ERR'
    
    # エントリ 2: データセット ok
    status: '200'
    body: 'this is a test'
    msg: 'OK'

フィールド処理命令

project

指定されたパターンに一致するフィールドを保持し、指定されたフィールドの名前を変更します。命令の実行中、すべての保持関連式は、名前変更関連式の前に実行されます。

重要

デフォルトでは、__time__ および __time_ns_part__ タイムフィールドは保持され、名前変更または上書きはできません。詳細については、「タイムフィールド」をご参照ください。

構文

| project -wildcard <field-pattern>, <output>=<field>, ...

パラメータ

パラメータ

必須

説明

wildcard

Bool

いいえ

ワイルドカード一致モードを有効にするかどうかを指定します。デフォルトでは、完全一致モードが使用されます。ワイルドカード一致モードを有効にする場合は、このパラメータを設定する必要があります。

field-pattern

FieldPattern

はい

保持するフィールドの名前、またはフィールドとワイルドカードの組み合わせ。一致するすべてのフィールドが処理されます。

output

Field

はい

名前を変更するフィールドの新しい名前。複数のフィールドを同じ名前に変更することはできません。

重要

新しいフィールド名が入力データの既存のフィールド名と同じである場合の値保持ポリシーの詳細については、「古い値と新しい値の保持と上書き」をご参照ください。

field

Field

はい

名前を変更するフィールドの元の名前。

  • 入力データにフィールドが存在しない場合、名前変更操作は実行されません。

  • フィールドの名前を複数回変更することはできません。

  • 例 1: フィールドを保持する。

    * | project level, err_msg
  • 例 2: フィールドの名前を変更する。

    * | project log_level=level, err_msg
  • 例 3: 完全一致する __tag__:* フィールドを保持します。

    * | project "__tag__:*"

project-away

指定されたパターンに一致するフィールドを削除し、その他すべてのフィールドをそのまま保持します。

重要

この命令は、デフォルトで __time__ および __time_ns_part__ タイムフィールドを保持します。詳細については、「タイムフィールド」をご参照ください。

構文

| project-away -wildcard <field-pattern>, ...

パラメータ

パラメータ

必須

説明

wildcard

Bool

いいえ

ワイルドカード一致モードを有効にするかどうかを指定します。デフォルトでは、完全一致モードが使用されます。ワイルドカード一致モードを有効にする場合は、このパラメータを設定する必要があります。

field-pattern

FieldPattern

はい

削除するフィールドの名前、またはフィールドとワイルドカードの組み合わせ。一致するすべてのフィールドが処理されます。

project-rename

指定されたフィールドの名前を変更し、その他すべてのフィールドをそのまま保持します。

重要

デフォルトでは、__time__ および __time_ns_part__ タイムフィールドは保持され、名前変更または上書きはできません。詳細については、「タイムフィールド」をご参照ください。

構文

| project-rename <output>=<field>, ...

パラメータ

パラメータ

必須

説明

output

Field

はい

名前を変更するフィールドの新しい名前。複数のフィールドを同じ名前に変更することはできません。

重要

新しいフィールド名が入力データの既存のフィールド名と同じである場合の値保持ポリシーの詳細については、「古い値と新しい値の保持と上書き」をご参照ください。

field

Field

はい

名前を変更するフィールドの元の名前。

  • 入力データにフィールドが存在しない場合、名前変更操作は実行されません。

  • フィールドの名前変更は複数回実行できません。

指定されたフィールドの名前を変更します。

* | project-rename log_level=level, log_err_msg=err_msg

expand-values

指定されたフィールドの第 1 レベルの JSON オブジェクトを展開し、複数の結果エントリを返します。

重要
  • 出力フィールドのデータ型は VARCHAR です。出力フィールド名が入力データの既存のフィールド名と同じである場合の値保持ポリシーの詳細については、「古い値と新しい値の保持と上書き」をご参照ください。

  • __time__ および __time_ns_part__ 時間フィールドに対して操作することはできません。詳細については、「時間フィールド」をご参照ください。

  • 新バージョンのデータ変換がサポートされています。さまざまな SPL 使用シナリオの詳細については、「さまざまなシナリオでの SPL」をご参照ください。

構文

| expand-values -path=<path> -limit=<limit> -keep <field> as <output>

パラメータ

パラメータ

必須

説明

path

JSONPath

いいえ

指定されたフィールドの JSON パス。JSON パスは、展開する情報を識別するために使用されます。

このパラメータはデフォルトで空であり、指定されたフィールドの完全なデータが展開されることを指定します。

limit

Integer

いいえ

指定されたフィールドの JSON オブジェクトを展開した後に取得できるエントリの最大数。値は 1 から 10 までの整数です。デフォルト値は 10 です。

keep

Bool

いいえ

展開操作の実行後、元のフィールドを保持するかどうかを指定します。デフォルトでは、元のフィールドは保持されません。元のフィールドを保持する場合は、このパラメータを設定する必要があります。

field

Field

はい

展開するフィールドの名前。フィールドのデータ型は VARCHAR である必要があります。フィールドが存在しない場合、展開操作は実行されません。

output

Filed

いいえ

展開操作の実行後に取得される新しいフィールドの名前。このパラメータを設定しない場合、出力データは元のフィールドにエクスポートされます。

次のロジックに基づいて、フィールドの第 1 レベルの JSON オブジェクトを展開できます。

JSON 配列: 要素ごとに配列を展開します。

JSON 辞書: キーと値のペアごとに辞書を展開します。

その他の JSON 型: 元の値を返します。

無効な JSON: null を返します。

  • 例 1: 配列を展開し、複数の結果エントリを返す。

    • SPL 文

      * | expand-values y
    • 入力データ

      x: 'abc'
      y: '[0,1,2]'
    • 出力データ (3 つのエントリを含む)

      # エントリ 1
      x: 'abc'
      y: '0'
      
      # エントリ 2
      x: 'abc'
      y: '1'
      
      # エントリ 3
      x: 'abc'
      y: '2'
  • 例 2: 辞書を展開し、複数の結果エントリを返す。

    • SPL 文

      * | expand-values y
    • 入力データ

      x: 'abc'
      y: '{"a": 1, "b": 2}'
    • 出力データ (2 つのエントリを含む)

      # エントリ 1
      x: 'abc'
      y: '{"a": 1}'
      
      # エントリ 2
      x: 'abc'
      y: '{"b": 2}'
  • 例 3: 指定された JSONPath 式に一致するコンテンツを展開し、出力データを新しいフィールドにエクスポートする。

    • SPL 文

      * | expand-values -path='$.body' -keep content as body
    • 入力データ

      content: '{"body": [0, {"a": 1, "b": 2}]}'
    • 出力データ (2 つのエントリを含む)

      # エントリ 1
      content: '{"body": [1, 2]}'
      body: '0'
      
      # エントリ 2
      content: '{"body": [1, 2]}'
      body: '{"a": 1, "b": 2}'

構造化データに対する SQL 計算命令

extend

SQL 式ベースのデータ計算の結果に基づいてフィールドを作成します。サポートされている SQL 関数の詳細については、「SPL でサポートされている SQL 関数」をご参照ください。

構文

| extend <output>=<sql-expr>, ...

パラメータ

パラメータ

必須

説明

output

Field

はい

作成するフィールドの名前。複数の式の結果を格納するために同じフィールドを作成することはできません。

重要

新しいフィールド名が入力データの既存のフィールド名と同じである場合、新しいフィールドはデータ型と値に基づいて既存のフィールドを上書きします。

sql-expr

SQLExpr

はい

データ処理式。

重要

null 値の処理の詳細については、「SPL 式の null 値を処理する」をご参照ください。

  • 例 1: 計算式を使用する。

    * | extend Duration = EndTime - StartTime
  • 例 2: 正規表現を使用する。

    * | extend server_protocol_version=regexp_extract(server_protocol, '\d+')
  • 例 3: JSONPath コンテンツを抽出し、フィールドのデータ型を変換します。

    • SPL 文

      *
      | extend a=json_extract(content, '$.body.a'), b=json_extract(content, '$.body.b')
      | extend b=cast(b as BIGINT)
    • 入力データ

      content: '{"body": {"a": 1, "b": 2}}'
    • 出力

      content: '{"body": {"a": 1, "b": 2}}'
      a: '1'
      b: 2

where

SQL 式ベースのデータ計算の結果に基づいてデータをフィルタリングし、指定された SQL 式に一致するデータを保持します。where 命令でサポートされている SQL 関数の詳細については、「SPL でサポートされている SQL 関数」をご参照ください。

構文

| where <sql-expr>

パラメータ

パラメータ

必須

説明

sql-expr

SQLExp

はい

SQL 式。この式に一致するデータが保持されます。

重要

SQL 式の null 値の処理の詳細については、「SPL 式の null 値の処理」をご参照ください。

  • 例 1: フィールドコンテンツに基づいてデータをフィルタリングする。

    * | where userId='123'
  • 例 2: フィールド名に基づいてデータに一致する正規表現を使用してデータをフィルタリングする。

    * | where regexp_like(server_protocol, '\d+')
  • 例 3: サーバーエラーのすべてのデータに一致するようにフィールドのデータ型を変換する。

    * | where cast(status as BIGINT) >= 500

半構造化データ抽出命令

parse-regexp

指定されたフィールドから、指定された正規表現のグループに一致する情報を抽出します。

重要
  • 出力フィールドのデータ型は VARCHAR です。出力フィールド名が、入力データの既存のフィールド名と同じである場合の値保持ポリシーの詳細については、「古い値と新しい値の保持と上書き」をご参照ください。

  • __time__ および __time_ns_part__ 時間フィールドに対して操作を実行することはできません。詳細については、「時間フィールド」をご参照ください。

構文

| parse-regexp <field>, <pattern> as <output>, ...

パラメーター

パラメーター

必須

説明

field

フィールド

はい

情報を抽出するフィールドの元の名前。

このフィールドが入力データに含まれており、フィールド値が null 以外の値であり、データ型が VARCHAR であることを確認してください。そうでない場合、抽出操作は実行されません。

pattern

正規表現

はい

正規表現。RE2 構文がサポートされています。

output

フィールド

いいえ

正規抽出の抽出結果を格納するために使用するフィールドの名前。

  • 例 1: 探索的マッチモードを使用します。

    • SPL 文

      *
      | parse-regexp content, '(\S+)' as ip -- ip: 10.0.0.0 フィールドを生成します。
      | parse-regexp content, '\S+\s+(\w+)' as method -- method: GET フィールドを生成します。
    • 入力データ

      content: '10.0.0.0 GET /index.html 15824 0.043'
    • 出力

      content: '10.0.0.0 GET /index.html 15824 0.043'
      ip: '10.0.0.0'
      method: 'GET'
  • 例 2: 完全パターンマッチモードを使用し、正規表現で名前のないキャプチャグループを使用します。

    • SPL 文

      * | parse-regexp content, '(\S+)\s+(\w+)' as ip, method
    • 入力データ

      content: '10.0.0.0 GET /index.html 15824 0.043'
    • 出力

      content: '10.0.0.0 GET /index.html 15824 0.043'
      ip: '10.0.0.0'
      method: 'GET'

parse-csv

指定されたフィールドから、指定された正規表現のグループに一致する情報を抽出します。

重要
  • 出力フィールドのデータ型は VARCHAR です。出力フィールド名が、入力データの既存のフィールド名と同じである場合の値保持ポリシーの詳細については、「古い値と新しい値の保持と上書き」をご参照ください。

  • __time__ および __time_ns_part__ タイムフィールドでは操作できません。詳細については、「時間フィールド」をご参照ください。

構文

| parse-csv -delim=<delim> -quote=<quote> -strict <field> as <output>, ...

パラメーター

パラメーター

必須

説明

delim

String

いいえ

入力データのデリミター。 1 ~ 3 つの有効な ASCII 文字を指定できます。

エスケープ文字を使用して特殊文字を示すことができます。たとえば、\t はタブ文字、\11 はシリアル番号が 8 進数 11 に対応する ASCII 文字、\x09 はシリアル番号が 16 進数 09 に対応する ASCII 文字です。

複数の文字の組み合わせをデリミタとして使用することもできます (例: $$$, ^_^)。

デフォルト値:カンマ(,)。

quote

Char

いいえ

入力データの引用符。 単一の有効な ASCII 文字を指定できます。 入力データにデリミターが含まれている場合は、引用符を指定する必要があります。

たとえば、二重引用符 ("")、一重引用符 ('')、または印刷できない文字 (0x01) を指定できます。

デフォルトでは、引用符は使用されません。

重要

このパラメーターは、delim パラメーターを単一の文字に設定した場合にのみ有効になります。 quote パラメーターと delim パラメーターには異なる値を指定する必要があります。

strict

Bool

いいえ

入力データの値の数が、output パラメータで指定されたフィールドの数と一致しない場合に、厳密な解析を有効にするかどうかを指定します。

  • False:厳密でないペアリング。 最大ペアリング ポリシーが使用されます。

    • 値の数がフィールドの数を超える場合、余分な値は返されません。

    • フィールドの数が値の数を超える場合、余分なフィールドは空の文字列として返されます。

  • True:厳密なペアリング。 フィールドは返されません。

デフォルト値: False。厳密な解析を有効にする場合は、このパラメータを設定します。

field

Field

はい

解析対象のフィールドの名前。

このフィールドが入力データに含まれており、フィールド値が null 以外の値であり、データ型が VARCHAR であることを確認してください。そうでない場合、抽出操作は実行されません。

output

Field

はい

入力データの解析結果を格納するために使用されるフィールドの名前。

  • 例 1:シンプルモードでデータを照合する。

    • SPL 文

      * | parse-csv content as x, y, z
    • 入力データ

      content: 'a,b,c'
    • 出力

      content: 'a,b,c'
      x: 'a'
      y: 'b'
      z: 'c'
  • 例 2:二重引用符を引用符として使用して、特殊文字を含むデータを照合する。

    • SPL 文

      * | parse-csv content as ip, time, host
    • 入力データ

      content: '192.168.0.100,"10/Jun/2019:11:32:16,127 +0800",example.aliyundoc.com'
    • 出力

      content: '192.168.0.100,"10/Jun/2019:11:32:16,127 +0800",example.aliyundoc.com'
      ip: '192.168.0.100'
      time: '10/Jun/2019:11:32:16,127 +0800'
      host: 'example.aliyundoc.com'
  • 例 3:複数の文字の組み合わせをデリミタとして使用する。

    • SPL 文

      * | parse-csv -delim='||' content as time, ip, req
    • 入力データ

      content: '05/May/2022:13:30:28||127.0.0.1||POST /put?a=1&b=2'
    • 出力

      content: '05/May/2022:13:30:28||127.0.0.1||POST /put?a=1&b=2'
      time: '05/May/2022:13:30:28'
      ip: '127.0.0.1'
      req: 'POST /put?a=1&b=2'

parse-json

指定されたフィールドから最初のレイヤーの JSON 情報を抽出します。

重要
  • 出力フィールドのデータ型は VARCHAR です。出力フィールド名が、入力データの既存のフィールド名と同じである場合の値保持ポリシーの詳細については、「古い値と新しい値の保持と上書き」をご参照ください。

  • __time__ および __time_ns_part__ 時間フィールドでは操作できません。詳細については、「時間フィールド」をご参照ください。

構文

| parse-json -mode=<mode> -path=<path> -prefix=<prefix> <field>

パラメーター

パラメーター

必須

説明

mode

文字列

いいえ

出力フィールドの名前が入力データの既存のフィールド名と同じ場合に、情報を抽出するために使用されるモード。デフォルト値は overwrite です。

path

JSONPath

いいえ

指定されたフィールド内の JSON パス。JSON パスは、抽出する情報を特定するために使用されます。

デフォルト値は空の文字列です。デフォルト値を使用すると、指定されたフィールドの完全なデータが抽出されます。

prefix

文字列

いいえ

JSON 構造を展開することによって生成されるフィールドのプレフィックス。デフォルト値は空の文字列です。

field

フィールド

はい

解析するフィールドの名前。

このフィールドが入力データに含まれており、フィールド値が null 以外の値であり、次のいずれかの条件を満たしていることを確認してください。そうでない場合、抽出操作は実行されません。

  • データ型が JSON である

  • データ型が VARCHAR で、フィールド値が有効な JSON 文字列である

  • 例 1:y フィールドからすべてのキーと値を抽出します。

    • SPL 文

      * | parse-json y
    • 入力データ

      x: '0'
      y: '{"a": 1, "b": 2}'
    • 出力

      x: '0'
      y: '{"a": 1, "b": 2}'
      a: '1'
      b: '2'
  • 例 2:content フィールドから body キーの値を異なるフィールドとして抽出します。

    • SPL 文

      * | parse-json -path='$.body' content
    • 入力データ

      content: '{"body": {"a": 1, "b": 2}}'
    • 出力

      content: '{"body": {"a": 1, "b": 2}}'
      a: '1'
      b: '2'
  • 例 3:preserve モードで情報を抽出します。既存のフィールドの場合は、元の値を保持します。

    • SPL 文

      * | parse-json -mode='preserve' y
    • 入力データ

      a: 'xyz'
      x: '0'
      y: '{"a": 1, "b": 2}'
    • 出力

      x: '0'
      y: '{"a": 1, "b": 2}'
      a: 'xyz'
      b: '2'

parse-kv

指定されたフィールドから CSV 形式の情報を抽出します。

重要
  • 出力フィールドのデータ型は VARCHAR です。出力フィールド名が、入力データの既存のフィールド名と同じである場合の値保持ポリシーの詳細については、「古い値と新しい値の保持と上書き」をご参照ください。

  • __time__ および __time_ns_part__ 時間フィールドに対して操作を実行することはできません。詳細については、「時間フィールド」をご参照ください。

構文

デリミタ抽出

指定されたデリミタに基づいてキーと値のペアを抽出します。

| parse-kv -mode=<mode> -prefix=<prefix> -greedy <field>, <delim>, <kv-sep>

正規抽出

指定された正規表現に基づいてキーと値のペアを抽出します。

| parse-kv -regexp -mode=<mode> -prefix=<prefix> <field>, <pattern>

パラメータ

デリミタ抽出

パラメータ

必須

説明

mode

String

いいえ

出力フィールド名が、入力データの既存のフィールド名と同じである場合、ビジネス要件に基づいて上書きモードを選択できます。

デフォルト値は overwrite です。詳細については、「フィールド抽出チェックと上書きモード」をご参照ください。

prefix

String

いいえ

出力フィールドのプレフィックス。デフォルト値は空の文字列です。

greedy

Bool

いいえ

フィールド値の貪欲マッチングを有効にします。

  • 無効: delim が見つかったときにフィールド値のマッチングを停止します。

  • 有効: 次のキーと値のペアの前にあるすべてのコンテンツをフィールド値として一致します。

field

Field

はい

解析するフィールドの名前。

  1. データエントリにこのフィールドが存在しない場合、またはその値が null の場合、このエントリに対して処理は実行されません。

  2. データコンテンツでキーと値のペアが一致しない場合、このエントリに対して処理は実行されません。

delim

Char

はい

異なるキーと値のペア間のデリミタ。1 ~ 5 つの有効な ASCII 文字で構成されます (例: ^_^)。

kv-sep の部分文字列にすることはできません。

kv-sep

Char

はい

キーと値のペア内のキーと値を接続する文字。1 ~ 5 つの有効な ASCII 文字で構成されます (例: #$#)。

delim の部分文字列にすることはできません。

正規抽出

パラメータ

必須

説明

regexp

Bool

はい

正規抽出モードを有効にするかどうかを指定します。

mode

String

いいえ

出力フィールド名が、入力データの既存のフィールド名と同じである場合、ビジネス要件に基づいて上書きモードを選択できます。

デフォルト値は overwrite です。詳細については、「フィールド抽出チェックと上書きモード」をご参照ください。

prefix

String

いいえ

出力フィールドのプレフィックス。デフォルト値は空の文字列です。

field

Field

はい

情報を抽出するフィールドの元の名前。

このフィールドが入力データに含まれており、フィールド値が null 以外の値であり、データ型が VARCHAR であることを確認してください。そうでない場合、抽出操作は実行されません。

pattern

RegExpr

はい

2 つのキャプチャグループを含む正規表現。1 つのキャプチャグループはフィールド名を抽出し、もう 1 つのキャプチャグループはフィールド値を抽出します。RE2 正規表現がサポートされています。

  • 例 1: 複数文字のデリミタを使用して、SLS 時系列データからラベルをデータフィールドとして抽出します

    • SPL 文

      * | parse-kv -prefix='__labels__.' __labels__, '|', '#$#'
    • 入力データ

      __name__: 'net_in'
      __value__: '231461.57374215033'
      __time_nano__: '1717378679274117026'
      __labels__: 'cluster#$#sls-etl|hostname#$#iZbp17raa25u0xi4wifopeZ|interface#$#veth02cc91d2|ip#$#192.168.22.238'
    • 出力データ

      __name__: 'net_in'
      __value__: '231461.57374215033'
      __time_nano__: '1717378679274117026'
      __labels__: 'cluster#$#sls-etl|hostname#$#iZbp17raa25u0xi4wifopeZ|interface#$#veth02cc91d2|ip#$#192.168.22.238'
      __labels__.cluster: 'sls-etl'
      __labels__.hostname: 'iZbp17raa25u0xi4wifopeZ'
      __labels__.interface: 'veth02cc91d2'
      __labels__.ip: '192.168.22.238'
  • 例 2: 貪欲マッチングモードを有効にして、アクセスログからキーと値の情報を抽出します。

    • SPL 文

      * | parse-kv -greedy content, ' ', '='
    • 入力データ

      content: 'src=127.0.0.1 dst=192.168.0.0 bytes=125 msg=connection refused body=this is test time=2024-05-21T00:00:00'
    • 出力データ

      content: 'src=127.0.0.1 dst=192.168.0.0 bytes=125 msg=connection refused body=this is test time=2024-05-21T00:00:00'
      src: '127.0.0.1'
      dst: '192.168.0.0'
      bytes: '125'
      msg: 'connection refused'
      body: 'this is test'
      time: '2024-05-21T00:00:00'
  • 例 3: ペア間およびキーと値間のデリミタが異なる場合に、正規抽出モードを使用してキーと値のペアを抽出します。

    • SPL 文

      * | parse-kv -regexp content, '([^&?]+)(?:=|:)([^&?]+)'
    • 入力データ

      content: 'k1=v1&k2=v2?k3:v3'
      k1: 'xyz'
    • 出力データ

      content: 'k1=v1&k2=v2?k3:v3'
      k1: 'v1'
      k2: 'v2'
      k3: 'v3'
  • 例 4: preserve モードで情報を抽出します。既存のフィールドの場合、元の値を保持します。

    • SPL 文

      * | parse-kv -regexp -mode='preserve' content, '([^&?]+)(?:=|:)([^&?]+)'
    • 入力データ

      content: 'k1=v1&k2=v2?k3:v3'
      k1: 'xyz'
    • 出力

      content: 'k1=v1&k2=v2?k3:v3'
      k1: 'xyz'
      k2: 'v2'
      k3: 'v3'

新バージョンのデータ変換

対応リージョン

中国 (上海)、中国 (河源)

pack-fields

複数のフィールドをカプセル化し、JSON 形式でシリアル化して、新しいフィールドにエクスポートします。この命令は、API リクエスト本文の構築など、構造化された送信が必要なシナリオに適用できます。

重要
  • デフォルトでは、データ型が Varchar でないフィールド (__time__ および __time_ns_part__ を含む) は処理されません。

  • デフォルトでは、ソースデータは保持されません。

構文

| pack-fields -keep -ltrim -include=<include> -exclude=<exclude> as <output>

パラメーター

パラメーター

必須

説明

output

文字列

はい

出力フィールドの名前。フィールド値は JSON 形式です。

include

正規表現

いいえ

ホワイトリスト。ホワイトリストで指定された正規表現に一致するフィールドがカプセル化されます。デフォルト値: ".*"。ログ内のすべてのフィールドが一致してカプセル化されることを示します。詳細については、「正規表現」をご参照ください。

exclude

正規表現

いいえ

ブラックリスト。ブラックリストはホワイトリストよりも優先されます。ブラックリストで指定された正規表現に一致するフィールドはカプセル化されません。このパラメーターはデフォルトでは空で、一致が実行されないことを示します。詳細については、「正規表現」をご参照ください。

ltrim

文字列

いいえ

出力フィールド名からプレフィックスを削除します。

keep

Bool

いいえ

データがカプセル化された後、ソースデータを保持するかどうかを指定します。

True: ソースデータは出力結果に保持されます。

False (デフォルト値): ソースデータは出力結果に保持されません。

  • 例 1: ログ内のすべてのフィールドを test フィールドにカプセル化します。デフォルトでは、カプセル化された元のフィールドは削除されます。

    • SPL 文

      * | pack-fields -include='\w+' as test
    • 入力データ

      test1:123
      test2:456
      test3:789
    • 出力

      test:{"test1": "123", "test2": "456", "test3": "789"}
  • 例 2: ログ内のすべてのフィールドを test フィールドにカプセル化します。カプセル化された元のフィールドは削除しないでください。

    • SPL 文

      * | pack-fields -keep -include='\w+' as test
    • 入力データ

      test1:123
      test2:456
      test3:789
    • 出力

      test:{"test1": "123", "test2": "456", "test3": "789"}
      test1:123
      test2:456
      test3:789
  • 例 3: test フィールドと abcd フィールドを content フィールドにカプセル化します。カプセル化された元のフィールドは削除しないでください。

    • SPL 文

      * | pack-fields -keep -include='\w+' as test
    • 入力データ

      abcd@#%:123
      test:456
      abcd:789
    • 出力

      abcd:789
      abcd@#%:123
      content:{"test": "456", "abcd": "789"}
      test:456
  • 例 4: test フィールドと abcd フィールドはカプセル化しません。他のすべてのフィールドを content フィールドにカプセル化します。カプセル化された元のフィールドは削除します。

    • SPL 文

      * | pack-fields -exclude='\w+' as test
    • 入力データ

      abcd@#%:123
      test:456
      abcd:789
    • 出力

      abcd:789
      content:{"abcd@#%": "123"}
      test:456
  • 例 5: フィールド値から正規表現に一致するすべてのキーと値のペアを抽出し、キーと値のペアをカプセル化し、キーと値のペアを name フィールドに割り当てます。

    • SPL 文

      * | parse-kv -prefix='k_' -regexp dict, '(\w+):(\w+)' | pack-fields -include='k_.*' -ltrim = 'k_' as name
    • 入力データ

      dict: x:123, y:456, z:789
    • 出力

      dict:x:123, y:456, z:789
      name:{"x": "123", "y": "456", "z": "789"}

log-to-metric

e_to_metric 関数は、ログを Metricstore に格納できるメトリックに変換します。

重要
  • デフォルトでは、「時系列データ (メトリック)」の要件を満たさないログは無視されます。

  • 元のログデータの時間フィールドの時間単位は自動的に検出されます。次の時間単位がサポートされています: 秒、ミリ秒、マイクロ秒、ナノ秒。

  • デフォルトでは、ハッシュ書き込みが使用されます。

構文

| log-to-metric -wildcard -format -names=<names> -labels=<labels> -time_field=<time_field>

パラメーター

パラメーター

必須

説明

wildcard

Bool

いいえ

names および labels パラメータで指定されたフィールド名に対して、ワイルドカード一致モードを有効にするかどうかを指定します。

デフォルトでは、完全一致モードが使用されます。ワイルドカード一致モードを有効にする場合は、このパラメータを設定する必要があります。

format

Bool

いいえ

自動フォーマットを有効にするかどうかを指定します。

デフォルトでは、この機能は無効になっています。データ変換中に無効なラベルデータはスキップされます。

この機能が有効になると、無効なラベルデータがフォーマットされます。ラベル値に "|""#" "$" などの記号が含まれている場合、これらの記号はアンダースコア(_)に置き換えられます。

names

FieldList

はい

メトリック時系列ポイントの生成に使用されるログフィールドのリスト。

入力データのフィールドが、指定された少なくとも 1 つのフィールド名またはフィールド名パターンに一致する場合、そのフィールドに対してメトリック時系列ポイントが生成されます。メトリック名はフィールド名で、メトリック値はフィールド値です。

たとえば、[mem, "mem:pct"] は、2 つの時系列ポイントが生成されることを示します。時系列ポイントの名前は、memmem:pct です。

重要
  • 入力フィールド名は、正規表現 [a-zA-Z_:][a-zA-Z0-9_:]* と一致する必要があります。そうでない場合、フィールドのタイムシリーズポイントは生成されません。

  • 入力フィールド値は、次のいずれかの要件を満たす必要があります。そうでない場合、フィールドのタイムシリーズポイントは生成されません。

    • フィールドは、TINYINT、SMALLINT、INTEGER、BIGINT、HUGEINT、REAL、DOUBLE などの数値データ型です。

    • フィールドは VARCHAR データ型で、フィールド値を有効な DOUBLE 値に変換できます。

時系列データのフォーマットの詳細については、「時系列データ (Metric)」をご参照ください。

labels

FieldList

いいえ

時系列ラベルの構築に使用されるログフィールドのリスト。

入力データのフィールドが、指定された少なくとも 1 つのフィールド名またはフィールド名パターンに一致する場合、そのフィールドは時系列ポイントのラベルに追加されます。ラベル名はフィールド名で、ラベル値はフィールド値です。

たとえば、[host, ip] は、2 つの時系列ラベルが追加されることを示します。 ラベルは hostip で、元のフィールド値です。

重要
  • 入力フィールド名は正規表現 [a-zA-Z_][a-zA-Z0-9_]* に従う必要があります。そうでない場合、生成される時系列ポイントラベルにはこのフィールドは含まれません。

  • 入力フィールド値には、縦線 | を含めることはできません。 そうでない場合、生成される時系列ポイントラベルはこのフィールドを上書きしません。

  • 入力フィールド値は VARCHAR データ型である必要があります。 そうでない場合、フィールドは生成された時系列ポイントのラベルには含まれません。

詳細については、「時系列データ (Metric)」をご参照ください。

time_field

文字列

いいえ

メトリックのタイム フィールド。デフォルトでは、ログ内の __time__ フィールドがメトリックのタイム フィールドとして使用されます。

重要

  • 入力フィールドのフォーマットはタイムスタンプである必要があり、数値型は BIGINT または VARCHAR です。フィールドが VARCHAR テキスト型の場合、その値は有効な BIGINT 型に変換できる必要があります

  • 例 1: rt フィールドを含むログを時系列データ形式に変換します。

    • SPL 文

      * | log-to-metric -names='["rt"]'
    • 入力データ

      __time__: 1614739608
      rt: 123
    • 出力

      __labels__:
      __name__:rt
      __time_nano__:1614739608
      __value__:123
  • 例 2: rt フィールドを含むログを時系列データ形式に変換し、host フィールドをラベルとして使用します。

    • SPL 文

      * | log-to-metric -names='["rt"]' -labels='["host"]'
    • 入力データ

      __time__: 1614739608
      rt: 123
      host: myhost
    • 出力

      __labels__:host#$#myhost
      __name__:rt
      __time_nano__:1614739608
      __value__:123
  • 例 3:rt フィールドと qps フィールドを含むログを時系列データ形式に変換し、host フィールドをラベルとして使用します。

    • SPL 文

      * | log-to-metric -names='["rt", "qps"]' -labels='["host"]'
    • 入力データ

      __time__: 1614739608
      rt: 123
      qps: 10
      host: myhost
    • 出力

      __labels__:host#$#myhost
      __name__:rt
      __time_nano__:1614739608
      __value__:123
      
      __labels__:host#$#myhost
      __name__:qps
      __time_nano__:1614739608
      __value__:10

  • 例 4:あいまい一致を使用して、rt1 フィールドと rt2 フィールドを含むログを時系列データ形式に変換し、host フィールドをラベルとして使用します。

    • SPL 文

      * | log-to-metric -wildcard -names='["rt*"]' -labels='["host"]'
    • 入力データ

      __time__: 1614739608
      rt1: 123
      rt2: 10
      host: myhost
    • 出力

      __labels__:host#$#myhost
      __name__:rt1
      __time_nano__:1614739608
      __value__:123
      
      __labels__:host#$#myhost
      __name__:rt2
      __time_nano__:1614739608
      __value__:10
  • 例 5:rt フィールドと qps フィールドを含むログを時系列データ形式に変換し、host フィールドをラベルとして使用し、ラベル値を自動的にフォーマットします。

    • SPL 文

      * | log-to-metric -format -names='["rt", "qps"]' -labels='["host"]'
    • 入力データ

      __time__: 1614739608
      rt: 123
      qps: 10
      host: myhost1|myhost2
    • 出力

      __labels__:host#$#myhost1_myhost2
      __name__:rt
      __time_nano__:1614739608
      __value__:123
      
      __labels__:host#$#myhost1_myhost2
      __name__:qps
      __time_nano__:1614739608
      __value__:10
  • 例 6:rt フィールドと qps フィールドを含むログを時系列データ形式に変換し、フィールド名を max_rttotal_qps に変更し、host フィールドをラベルとして使用します。

    • SPL 文

      * | project-rename max_rt = rt, total_qps = qps| log-to-metric -names='["max_rt", "total_qps"]' -labels='["host"]'
    • 入力データ

      __time__: 1614739608
      rt: 123
      qps: 10
      host: myhost
    • 出力

      __labels__:host#$#myhost
      __name__:max_rt
      __time_nano__:1614739608
      __value__:123
      
      __labels__:host#$#myhost
      __name__:total_qps
      __time_nano__:1614739608
      __value__:10
  • 例 7:rt フィールドと qps フィールドを含むログを時系列データ形式に変換し、フィールド名を max_rt と total_qps に変更し、host フィールドの名前を hostname に変更してから、ラベルとして使用します。

    • SPL 文

      * | project-rename max_rt = rt, total_qps = qps, hostname=host| log-to-metric -names='["max_rt", "total_qps"]' -labels='["hostname"]'
    • 入力データ

      __time__: 1614739608
      rt: 123
      qps: 10
      host: myhost
    • 出力

      __labels__:hostname#$#myhost
      __name__:max_rt
      __time_nano__:1614739608
      __value__:123
      
      __labels__:hostname#$#myhost
      __name__:total_qps
      __time_nano__:1614739608
      __value__:10
  • 例 8:remote_user フィールドを含むログを時系列データ形式に変換し、status フィールドをラベルとして使用し、time フィールドを時系列データのタイムフィールドとして使用し、元のログデータのタイムユニットをナノ秒として指定します。

    • SPL 文

      * | log-to-metric -names='["remote_user"]' -labels='["status"]' -time_field='time'
    • 入力データ

      time:1652943594
      remote_user:89
      request_length:4264
      request_method:GET
      status:200
    • 出力

      __labels__:status#$#200
      __name__:remote_user
      __time_nano__:1652943594
      __value__:89

metric-to-metric

既存の時系列データを処理します (タグの追加、変更、削除など)。

重要
  • 入力フィールド名は、正規表現 [a-zA-Z_][a-zA-Z0-9_]* に従う必要があります。そうでない場合、生成される時系列ポイントのラベルには、このフィールドは含まれません。

  • 3 つのオプションパラメーターに同じフィールドが含まれている場合、優先順位は add_labels > del_labels > rename_labels です。

出力時系列データのフォーマットについては、「時系列データ (Metric)」をご参照ください。

構文

| metric-to-metric -add_labels=<add_labels> -remove_labels=<remove_labels> -rename_labels=<rename_labels>

パラメーター

パラメーター

必須

説明

add_labels

配列

いいえ

追加するラベルフィールドのリスト。新しい時系列ラベル情報を構築するために使用されます。

生データは時系列ポイントのラベルに追加され、VARCHAR タイプのみがサポートされます。

たとえば、{"host":"http://www.xxx.com", "ip":"127.0.0.1"} が生データです。["host", "ip"] を入力すると、元のラベルに |host#$#http://www.xxx.com|ip#$#127.0.0.1 が追加されます。元のラベルに host フィールドが存在する場合、その値は上書きされます。

del_labels

配列

いいえ

削除するラベルフィールドのリスト。リストは、新しい時系列ラベルを構築するために使用されます。

入力データのフィールド名が元のラベルのフィールド名と一致する場合、フィールドは元のラベルから削除されます。

たとえば、元のラベルの値が host#$#http://www.xxx.com|ip#$#127.0.0.1 で、["ip"] を指定すると、1 つの時系列ラベルが削除されます。元のラベルは host#$#http://www.xxx.com に更新されます。元のラベルに ip フィールドが存在しない場合、操作は実行されません。

rename_labels

マップ

いいえ

名前を変更するラベルフィールドのリスト。リストは、新しい時系列ラベルを構築するために使用されます。

元の時系列ポイントのラベルは、マップの情報に基づいて更新されます。キーはフィールド名で、値は新しいフィールド名です。

たとえば、{"host":"host_new", "ip":"ip_new"} は、"host""host_new" に、"ip""ip_new" に名前変更します。元のラベルに対応するフィールドが存在しない場合、操作は実行されません。

format

Bool

いいえ

自動フォーマットを有効にするかどうかを指定します。デフォルトでは、この機能は無効になっています。データ変換中に無効なデータはスキップされます。

機能が有効になっている場合:

  • __labels__ フィールドがソートされます。

  • LabelKey 値と LabelValue 値がフォーマットされます。

    • LabelKey: 値は正規表現 "[a-zA-Z_][a-zA-Z0-9_]" に一致する必要があります。無効な文字はスペースに置き換えられます。

    • LabelValue: 値に "|"、"#"、"$" などの記号を含めることはできません。これらの記号が存在する場合は、アンダースコア (_) に置き換えられます。

  • LabelValue が空の文字列であるラベルは __labels__ フィールドから削除されますが、データ入力は保持されます。

  • __labels__ フィールド内の重複するラベルは削除されます。保持ロジックは LabelValue のアルファベット順に基づいています。

  • 例 1: ラベルを追加する

    • SPL 文

      * | extend qps = '10'|metric-to-metric -add_labels='["qps"]'
    • 入力データ

      __labels__:host#$#myhost
      __name__:rt
      __time_nano__:1614739608
      __value__:123
    • 出力結果

      __labels__:host#$#myhost|qps#$#10
      __name__:rt
      __time_nano__:1614739608
      __value__:123
  • 例 2: ラベルを削除する

    • SPL 文

      * | metric-to-metric -del_labels='["qps"]'
    • 入力データ

      __labels__:host#$#myhost|qps#$#10
      __name__:rt
      __time_nano__:1614739608
      __value__:123
    • 出力結果

      __labels__:host#$#myhost
      __name__:rt
      __time_nano__:1614739608
      __value__:123
  • 例 3: ラベルの名前を変更する

    • SPL 文

      * | metric-to-metric -rename_labels='{"host":"etl_host"}'
    • 入力データ

      __labels__:host#$#myhost|qps#$#10
      __name__:rt
      __time_nano__:1614739608
      __value__:123
    • 出力結果

      __labels__:etl_host#$#myhost|qps#$#10
      __name__:rt
      __time_nano__:1614739608
      __value__:123
  • 例 4: 無効なデータをワンクリックでフォーマットする

    • SPL 文

      * | metric-to-metric -format
    • 入力データ

      __labels__:host#$#myhost|qps#$#10|asda$cc#$#j|ob|schema#$#|#$#|#$#xxxx
      __name__:rt
      __time_nano__:1614739608
      __value__:123
    • 出力結果

      __labels__:asda_cc#$#j|host#$#myhost|qps#$#10
      __name__:rt
      __time_nano__:1614739608
      __value__:123

集約命令

stats

ログの統計分析に使用されます。SQL の集計関数(COUNTSUMAVG など)と同様です。ログデータ内の特定のフィールドに対して、統計、グループ化、および集約操作を実行します。

重要
  • この命令は、Logstore クエリ分析専用であり、新しいバージョンのデータ変換、SPL ルール消費、書き込みプロセッサ、Logtail 構成などのシナリオには適用できません。

  • デフォルトでは、stats は最初の 100 件の集約結果を返します。さらに多くの結果を返すには、limit 命令と組み合わせて使用します。

構文

| stats <aggregation_function> [by <field>, ...]

パラメータ

パラメータ

タイプ

必須

説明

output

String

はい

統計結果フィールドのエイリアスを指定します。

aggOperator

SQLExp

はい

次の集約関数をサポートしています。

  • count

  • count_if

  • min

  • max

  • sum

  • avg

  • skewness

  • kurtosis

  • approx_percentile

  • approx_distinct

  • bool_and

  • bool_or

  • every

  • arbitrary

  • array_agg

group

String

いいえ

集約ディメンションを指定します。SQL の group by 句のフィールドと同様です。

  • ip pv 例 1:ログエントリの総数をカウントします。

    • SPL 文

      * | stats count()
    • 入力データ

      # エントリ 1
      status: 200
      size: 1024
      ip: '192.168.1.1'
      
      # エントリ 2
      status: 404
      size: 512
      ip: '192.168.1.2'
      
      # エントリ 3
      status: 200
      size: 2048
      ip: '192.168.1.1'
    • 出力

      count(): 3
  • accesslog ip min/max 例 2:状態コード別にグループ化された統計を計算します。

    • SPL 文

      * | stats count() as count, sum(size) as total_size by status
    • 入力データ

      # エントリ 1
      status: 200
      size: 1024
      ip: '192.168.1.1'
      
      # エントリ 2
      status: 404
      size: 512
      ip: '192.168.1.2'
      
      # エントリ 3
      status: 200
      size: 2048
      ip: '192.168.1.1'
    • 出力

      # エントリ 1
      status: 200
      count: 2
      total_size: 3072
      
      # エントリ 2
      status: 404
      count: 1
      total_size: 512
  • pv 例 3:複数のグループ化フィールドで複数の統計を計算します。

    • SPL 文

      * | stats count() as count, avg(size) as avg_size, max(size) as max_size by status, ip
    • 入力データ

      # エントリ 1
      status: 200
      size: 1024
      ip: '192.168.1.1'
      
      # エントリ 2
      status: 404
      size: 512
      ip: '192.168.1.2'
      
      # エントリ 3
      status: 200
      size: 2048
      ip: '192.168.1.1'
    • 出力

      # エントリ 1
      status: 200
      ip: '192.168.1.1'
      count: 2
      avg_size: 1536
      max_size: 2048
      
      # エントリ 2
      status: 404
      ip: '192.168.1.2'
      count: 1
      avg_size: 512
      max_size: 512

sort

クエリ結果をソートします。フィールド値または統計結果の昇順(asc)または降順(desc)ソートをサポートしています。ログ分析で重要なデータの迅速な特定、順序付きレポートの生成に重要なツールです。

重要

この命令は、Logstore クエリ分析専用であり、新しいバージョンのデータ変換、SPL ルール消費、書き込みプロセッサ、Logtail 構成などのシナリオには適用できません。

構文

| sort <field> [asc|desc], ...

パラメータ

パラメータ

タイプ

必須

説明

field

String

はい

ソートするフィールドを指定します。以下のフィールドタイプをサポートしています。

  • 元のログフィールド(statusrequest_time など)。

  • 統計フィールド(count(*)avg(response_time) など)。

  • 時間フィールド(@timestamp など)。

asc/desc

String

いいえ

  • asc:昇順(デフォルト)。

  • desc:降順(一般的なシナリオ:統計値を高い順から低い順にソート)。

accessloglatencyMs でソートします。

  • SPL 文

    * 
    | extend latencyMs=cast(latencyMs as bigint) 
    | sort latencyMs desc
  • 入力データ

    ip: 192.168.1.1
    latencyMs: 10
    
    ip: 192.168.1.1
    latencyMs: 20
    
    ip: 192.168.1.2
    latencyMs: 15
  • 出力データ

    ip: 192.168.1.1
    latencyMs: 20
    
    ip: 192.168.1.2
    latencyMs: 15
    
    ip: 192.168.1.1
    latencyMs: 10

limit

クエリ結果で返されるログ行数を制限するために使用します。データ量を制御するためのコア命令の 1 つです。 limit により、過度に大きなクエリ結果によって引き起こされるパフォーマンスの問題やリソースの浪費を効果的に防ぐことができます。この命令は、ログ分析やリアルタイムモニタリングなど、さまざまなシナリオに適用できます。

重要
  • この命令は、Logstore クエリ分析専用であり、新しいバージョンのデータ変換、SPL ルール消費、書き込みプロセッサ、Logtail 構成などのシナリオには適用できません。

  • sort 命令でソート規則を明示的に定義しない場合、limit 命令の出力結果はランダムな順序になります(ログストレージは自然順序を保証しないため)。

構文

limit (<offset>,) <size>

パラメータ

パラメータ

タイプ

必須

説明

offset

Integer

いいえ

最初の offset 行をスキップします。

size

Integer

はい

行制限。

accesslog を latencyMs でソートし、最初のエントリを取得します。

  • SPL 文

    * | extend latencyMs=cast(latencyMs as bigint) | sort latencyMs | limit 1

  • 入力データ

    ip: 192.168.1.1 latencyMs: 10 ip: 192.168.1.1 latencyMs: 20 ip: 192.168.1.2 latencyMs: 15

  • 出力データ

    ip: 192.168.1.1 latencyMs: 20