SPL概述

本文介绍日志服务SPL语言的基本信息,包括工作原理、语法、指令表达式等。

工作原理

日志服务SPL支持在Logtail采集写入处理器通过扫描(Scan)模式查询和分析日志基于规则消费数据加工(新版)查询和分析日志等日志服务功能中使用,工作原理如下图:

说明

关于SPL在各个场景中的功能定义,请参见SPL在不同场景的功能定义SPL数据处理案例

SPL-SPL Doc - ch.jpeg

使用限制

类别

限制项

Logtail采集

写入处理器

实时消费

数据加工(新版)

扫描查询

SPL复杂度

脚本管道级数

16级

16级

16级

64级

16级

脚本长度

64KB

64KB

64KB

128KB

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',或者将正则表达式的提取结果赋值给字段例如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

重命名指定字段,并原样保留其他所有字段。

结构化数据SQL计算指令

extend

通过SQL表达式计算结果产生新字段。

支持的SQL函数列表,请参见SPL支持的SQL函数列表

where

根据SQL表达式计算结果过滤数据条目。

支持的SQL函数列表,请参见SPL支持的SQL函数列表

弱结构化数据提取指令

parse-csv

提取指定字段中的CSV格式信息。

parse-json

提取指定字段中的第一层JSON信息。

parse-regexp

提取指定字段中的正则表达式分组匹配信息。