全部產品
Search
文件中心

Simple Log Service:SPL概述

更新時間:Jun 30, 2024

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

工作原理

Log ServiceSPL支援在即時消費、掃描查詢和Logtail採集三個Log Service情境中使用,工作原理如下圖:

image.jpeg

關於SPL在各個情境中的功能定義,請參見SPL在不同情境的功能定義。支援使用Log ServiceSPL的阿里雲地區,請參見支援地區

使用限制

類別

限制項

即時消費

掃描查詢

Logtail採集

SPL複雜度

指令碼管道級數

16級

16級

16級

指令碼長度

64KB

64KB

64KB

SPL運行時

運行記憶體大小

重要

處理方案請參見錯誤處理

1GB

2GB

50MB

運行逾時

重要

處理方案請參見錯誤處理

1秒

2秒

1秒

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支援如下指令。

指令類別

指令名稱

說明

欄位操作指令

project

保留與給定模式相匹配的欄位、重新命名指定欄位。

project-away

移除與給定模式相匹配的欄位,原樣保留其他所有欄位。

project-rename

重新命名指定欄位,並原樣保留其他所有欄位。

結構化資料SQL計算指令

extend

通過SQL運算式計算結果產生新欄位。

支援的SQL函數列表,請參見SPL支援的SQL函數列表

where

根據SQL運算式計算結果過濾資料條目。

支援的SQL函數列表,請參見SPL支援的SQL函數列表

弱結構化資料提取指令

parse-csv

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

parse-json

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

parse-regexp

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