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

Simple Log Service:構造化プロセス言語 (SPL) の基本構文

最終更新日:Mar 14, 2026

このトピックでは、Simple Log Service 向けの構造化プロセス言語 (Structured Process Language: SPL) の基本構文について説明します。

SPL 構文

SPL 文

SPL 文は、多段階のデータ処理に使用されます。これらの文はパイプライン文字 (|) で接続され、セミコロン (;) で終了します。構文は以下のとおりです:

  • 構文

    <data-source> | <spl-expr> | <spl-expr> ;
  • パラメーター

    パラメーター

    説明

    data-source

    データソース。SLS Logstore または SPL で定義された データセット のいずれかを指定できます。SPL データソースのシナリオ別の詳細については、「一般リファレンス」をご参照ください。

    * | project status, body;

    |

    SPL パイプライン。パイプラインの前にある命令の出力が、パイプラインの後に続く命令の入力として使用されます。

    spl-expr

    SPL 命令式。詳細については、「SPL 構文」をご参照ください。

データソース

Simple Log Service では、データソースの定義はシナリオによって異なります。詳細は以下のとおりです:

機能タイプ

Logstore インデックスフィルターからの入力

大文字小文字を区別するフィールド名

全文検索対象フィールド __line__

ベストプラクティス

Logtail 収集

サポートされていません。アスタリスク (*) を使用して、Logtail で収集されたすべての生データを入力として表します。たとえば、* | parse-json content

区別される

サポートされていません

SPL を使用したテキストログの収集

Ingest Processor

サポートされていません。アスタリスク (*) を使用して、書き込まれたすべての生データを入力として表します。

機密

サポートされていません

Ingest Processor を使用したクラウドプロダクトログの処理

リアルタイム消費

サポートされていません。アスタリスク (*) を使用して、Logstore 内のすべての生データを入力として表します。たとえば、* | where msg like '%wrong%'

機密

サポートされていません

データ変換(新バージョン)

サポートされていません。アスタリスク (*) を使用して、Logstore 内のすべての生データを入力として表します。

機密

サポートされていません

ベストプラクティス

スキャンおよびクエリ

サポートされています。まずインデックスフィルターが実行され、その後、フィルター結果に対して SPL 処理が実行されます。たとえば、error and msg:wrong | project level, msg

非機密

サポートされています

ログのスキャン

SPL 命令式

SPL でサポートされる命令の詳細については、「SPL 命令および関数」をご参照ください。

命令式の構文

cmd -option=<option> -option ... <expression>, ... as <output>, ...

パラメーター

パラメーター

説明

cmd

命令名。

option

命令の実行時パラメーターです。このパラメーターはオプションです。パラメーター名を指定する必要があります。また、パラメーター名はハイフン(-)で始まる必要があります。パラメーターの順序は固定されていません。

以下の 2 種類のパラメーターがサポートされています:

  • キーと値のペアパラメーター -option=<option>:キーと値のペアとしてパラメーターを入力します。

  • スイッチパラメーター -option:命令定義ではデフォルトで無効になっています。有効にするには、このパラメーターを追加します。

expression

命令がデータソースに対して実行する処理ロジック。必須パラメーターです。パラメーター名は不要ですが、パラメーターの順序は命令で定義された順序と一致させる必要があります。

式の種類:

  • SPL 式

    • フィールド名およびそのワイルドカードパターン式(例:content)。式に [a-zA-Z_] 以外の文字が含まれる場合は、二重引用符 ("") で囲んでください。たとえば、"__tag__:__path__"

    • フィールド代入式。たとえば、level='INFO' はフィールドに直接値を割り当てます。msg=regex_extract(content, '\S+') は正規表現抽出の結果をフィールドに割り当てます。

  • SQL 式

    • データ計算式の戻り値。たとえば、cast(status as int)>=500

output

処理結果の出力フィールド。たとえば、| parse-csv content as a, b, c

構文記号一覧

以下の表では、SPL 構文で使用される記号について説明します。

記号

説明

*

SLS Logstore データを SPL の入力データとして使用する際のプレースホルダー。

状態コードに基づいてアクセスログをフィルターおよび分類し、結果を出力します。

  • SPL 文

    -- SPL 処理結果を名前付きデータセット 'src' として定義し、後続の SPL 式の入力として使用します。
    .let src = * 
    | where status=cast(status as BIGINT);
    
    -- 名前付きデータセット 'src' を入力として使用します。status フィールドが 5xx のデータをフィルターし、結果をデータセット 'err' として定義します。結果は出力しません。
    .let err = $src
    | where status >= 500
    | extend msg='ERR';
    
    -- 名前付きデータセット 'src' を入力として使用します。status フィールドが 2xx のデータをフィルターし、結果をデータセット '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'

.

SPL 文の先頭文字として使用される場合、SPL 構文キーワードであることを示します。

|

SPL パイプライン文字。SPL 命令式を導入するために使用されます。構文は | <spl-cmd> ... です。

;

SPL 文の文末識別子。単一文または複数ステートメントブロックの最後の文では、省略可能です。

'...'

文字列定数の引用符。

"..."

フィールド名、フィールド名パターン、および引用符。

--

1 行のコメントアウト。

/*...*/

複数行のコメントアウト。

$

名前付きデータセットの引用。構文は $<dataset-name> です。

SPL データ型

以下の表では、SPL ログフィールドのデータ型について説明します。

型カテゴリ

型名

型の説明

基本数値型

BOOLEAN

ブール値型。

TINYINT

8 ビット整数型。

SMALLINT

16 ビット整数型。

INTEGER

32 ビット整数型。

BIGINT

64 ビット整数型。

HUGEINT

128 ビット整数型。

REAL

32 ビット可変精度浮動小数点数型。

DOUBLE

64 ビット可変精度浮動小数点数型。

TIMESTAMP

ナノ秒精度の UNIX タイムスタンプ型。

DATE

日付データ型。形式は YYYY-MM-DD です。

VARCHAR

可変長文字列データ型。

VARBINARY

可変長バイナリデータ型。

構造化数値型

ARRAY

配列型。要素へのアクセスには [] を使用します。要素のインデックスは 1 から始まります。

たとえば、* | extend a = ARRAY[0, 1, 2] | extend b = a[1]

MAP

辞書型。キーは基本数値型のみ、値は任意の型を指定できます。[] を使用して要素にアクセスします。

たとえば、* | extend a = MAP(ARRAY['foo', 'bar'], ARRAY[0, 1]) | extend b = a['foo']

JSON 型

JSON

JSON 型。

SPL データ処理におけるデータ型変換の詳細については、「一般リファレンス」をご参照ください。