本文介绍日志服务SPL语言的基本信息,包括工作原理、语法、指令表达式等。
工作原理
日志服务SPL支持在Logtail采集、写入处理器、通过扫描(Scan)模式查询和分析日志、基于规则消费、数据加工(新版)、查询和分析日志等日志服务功能中使用,工作原理如下图:
关于SPL在各个场景中的功能定义,请参见SPL在不同场景的功能定义和SPL数据处理案例。
使用限制
类别 | 限制项 | 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语句结束标识。单条语句,或多语句中最后一条的结束符可选。 |
'...' | 字符串常量引用符号。 |
"..." | 字段名称、字段名模式引用符号。 |
-- | 注释单行内容。 |
/*...*/ | 注释多行内容。 |
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 | 数组类型。元素访问使用 例如 |
MAP | 字典类型,键只能是基本数值类型,值可以是任意类型。元素访问使用 例如 | |
JSON类型 | JSON | JSON类型。 |
SPL数据处理过程中的数据类型转换说明,请参见通用参考。
SPL指令表达式
指令表达式语法
cmd -option=<option> -option ... <expression>, ... as <output>, ...
参数说明
参数 | 说明 |
cmd | 指令名称。 |
option | 支持如下2种参数类别:
|
expression | 指令对数据源执行处理逻辑,必填。使用时,无需指定参数名,但参数顺序必须与指令的定义保持一致。 表达式类别:
|
output | 处理结果中的输出字段。例如 |
指令概览
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 | 提取指定字段中的正则表达式分组匹配信息。 |