全部產品
Search
文件中心

Simple Log Service:SPL文法

更新時間:Dec 21, 2024

本文介紹Simple Log ServiceSPL語言的基本資料,包括工作原理、文法、指令運算式等。

工作原理

Log ServiceSPL支援在Logtail採集寫入處理器通過掃描(Scan)模式查詢和分析日誌基於規則消費資料加工(新版)查詢和分析日誌等Log Service功能中使用,工作原理如下圖:

說明

關於SPL在各個情境中的功能定義,請參見SPL在不同情境的功能定義SPL資料處理案例

SPL-SPL Doc - ch.jpeg

使用限制

類別

限制項

Logtail採集

寫入處理器

即時消費

資料加工(新版)

掃描查詢

SPL複雜度

指令碼管道級數

16級

16級

16級

16級

16級

指令碼長度

64KB

64KB

10KB

10KB

64KB

SPL運行時

運行記憶體大小

重要

處理方案請參見錯誤處理

50MB

1GB

1GB

1GB

2GB

運行逾時

重要

處理方案請參見錯誤處理

1秒

5秒

5秒

5秒

2秒

SPL文法

SPL語句

SPL語句是多級資料處理語句,通過英文管道符(|)串連,以英文分號(;)作為語句結束符。SPL文法結構如下:

  • 文法

    <data-source> | <spl-expr> | <spl-expr> ;
  • 參數說明

    參數

    說明

    data-source

    資料來源,包括SLS Logstore,以及SPL定義的資料集。

    例如* | project status, body

    在不同情境中的SPL資料來源,請參見SPL在不同情境的功能定義

    spl-expr

    SPL資料處理運算式,詳情請參見SPL指令運算式

文法符號列表

符號

說明

*

SLS Logstore資料作為SPL輸入資料時的預留位置。

.

作為SPL語句的第一個字元時,表示SPL文法關鍵字。

|

SPL管道符,用於引出SPL指令運算式,文法格式為| <spl-cmd> ...

;

SPL語句結束標識。單條語句,或多語句中最後一條的結束符可選。

'...'

字串常量引用符號。

"..."

欄位名稱、欄位名模式引用符號。

--

注釋單行內容。

/*...*/

注釋多行內容。

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資料處理過程中的資料類型轉換說明,請參見通用參考

SPL指令運算式

指令運算式文法

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

參數說明

參數

說明

cmd

指令名稱。

option

指令執行參數,可選。使用時必須指定參數名,參數名以中劃線(-)開頭,參數順序無要求。

支援如下2種參數類別:

  • 索引值參數-option=<option>:使用指令時以索引值對的形式輸入。

  • 切換參數-option:指令定義中預設均為關閉狀態,添加該參數即表示開啟開關。

expression

指令對資料來源執行處理邏輯,必填。使用時,無需指定參數名,但參數順序必須與指令的定義保持一致。

運算式類別:

  • SPL運算式

    • 欄位名及其通配模式運算式,例如content。如果包含[a-zA-Z_]以外的字元,需要使用雙引號("")包裹,例如"__tag__:__path__"

    • 欄位賦值運算式,直接對欄位賦值例如level='INFO',或者將Regex的提取結果賦值給欄位例如msg=regex_extract(content, '\S+')

  • SQL運算式

    • 資料計算運算式傳回值,例如cast(status as int)>=500

output

處理結果中的輸出欄位。例如| parse-csv content as a, b, c

指令概覽

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

提取指定欄位中的Regex分組匹配資訊。

parse-csv

提取指定欄位中的CSV格式的資訊。

parse-json

提取指定欄位中的第一層JSON資訊。

parse-kv

提取指定欄位中的索引值對資訊。