SPL语法
本文介绍日志服务SPL语言的基本信息,包括工作原理、语法、指令表达式等。
SPL概述
对于读取出的原始数据,日志服务提供SPL语句(SLS Processing Language)做结构化信息提取、字段操作和数据过滤等操作。另外,日志服务还提供多级管道级联功能,第一级管道是索引过滤条件,后面的多级管道是SPL指令,最终输出经过SPL处理后的结果数据。如果您了解SQL语言的使用,您在不同数据处理需求场景中使用日志服务SPL时,可以参考SPL与SQL的使用场景对照。
工作原理
日志服务SPL支持在Logtail采集、写入处理器、基于规则消费、数据加工(新版)、通过扫描(Scan)模式查询和分析日志等日志服务功能中使用,工作原理如下图:
关于SPL在各个场景中的功能定义,请参见SPL在不同场景的功能定义。
使用限制
类别 | 限制项 | 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定义的数据集。在不同场景中的SPL数据源,请参见SPL在不同场景的功能定义。
* | project status, body;
spl-expr
SPL数据处理表达式,详情请参见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支持如下指令。更多信息,请参见SPL指令。
指令类别 | 指令名称 | 说明 |
控制指令 | 定义命名数据集,SPL数据集详情请参见SPL数据集。 | |
字段操作指令 | 保留与给定模式相匹配的字段、同时可重命名指定字段。指令执行过程中,先完成所有字段保留表达式的执行,再执行重命名表达式。 | |
移除与给定模式相匹配的字段,原样保留其他所有字段。 | ||
重命名指定字段,并保留其他所有字段原样。 | ||
展开指定字段的第一层JSON对象,生成多条结果。 | ||
结构化数据SQL计算指令 | 通过SQL表达式计算结果产生新字段。支持的SQL函数列表,请参见SPL支持的SQL函数列表。 | |
根据SQL表达式过滤数据,保留满足SQL表达式的数据条目。where指令支持的SQL函数列表,请参见SPL支持的SQL函数列表。 | ||
弱结构化数据提取指令 | 提取指定字段中的正则表达式分组匹配信息。 | |
提取指定字段中的CSV格式的信息。 | ||
提取指定字段中的第一层JSON信息。 | ||
提取指定字段中的键值对信息。 | ||
数据加工(新版)指令 | 将日志字段进行打包,以JSON序列化输出到新字段,适用于需要结构化传输的场景(如API请求体构建)。 | |
将日志格式转化为时序存储的格式。 | ||
对已有时序数据进一步加工(如添加/修改/删除标签)。 | ||
聚合指令 | 用于统计分析日志的指令,类似 SQL 中的聚合函数(如 | |
对查询结果进行排序,支持对字段值或统计结果进行升序( | ||
用于限制查询结果返回的日志行数,是控制数据量的核心指令之一。通过 |