作者:灵圣
概述
如前一篇《SLS 数据加工全面升级,集成 SPL 语法》所述,SLS 数据加工集成了 SLS 数据处理语法 SPL。与旧版本数据加工 DSL 相比,SPL 在处理非结构化数据的场景中,其语法简洁度上有很多提升,比如中间类型保持、字段引用、无缝兼容 SQL 函数等。
这里我们继续讨论在不同的数据处理需求中,新版数据加工 SPL 与旧版数据加工 DSL 的使用对照。对于数据同步的场景,即不需要做任何数据处理,新版 SPL 与旧版 DSL 均传入空逻辑即可,以下不再赘述。
场景一:数据过滤与清洗
在日常运维中,错误日志分析是发现、定位问题的关键步骤。这里我们就以服务日志为例,介绍如何应用数据加工完成数据清洗。
旧版数据加工中,使用 e_keep/e_drop 完成数据清洗,对应的新版数据加工 SPL 中则使用 where 指令。
精确匹配
需要筛选出错误日志,即级别 level 字段值为字符串 ERROR。
模糊匹配
由于不同服务模块的编码标准差异,如果 level 字段的值并非固定,可能是 ERROR、ERR 或者 E 等。这个场景下就需要进行字符串模糊匹配。
数值范围
除了文本日志的筛选,我们还需要数值范围的比对。比如访问日志中,我们需要筛选出用户使用错误,以便分析哪些操作可能存在设计不合理,即筛选出状态码字段 status 值在 4xx 范围的数据。
存在性检查
另一个运维场景中,如果服务运行错误则会写出 error 字段,否则 error 字段不存在。我们需要筛选出包含 error 的数据条目。
场景二:字段管理
新字段构造
SPL 使用 extend 指令完成字段赋值操作,相当于数据加工 DSL 中的 e_set。
筛选、排除、重命名
SPL 提供原地处理指定字段的能力,即不需要给定完整的数据 Schema(包括字段列表、及其类型),可以直接操作给定字段,且不影响其他不相关的字段。
条件表达式
条件表达式对于处理混杂在一起的不同类型的数据是关键需求。SPL 通过 SQL 表达式完成条件判断。
场景三:时间信息解析与格式化
在 SPL 执行过程中,SLS 日志时间字段类型始终保持为数值类型 INTEGER 或者 BIGINT。SLS 日志字段包括数据时间时间戳字段 time 和数据时间纳秒部分字段 time_ns_part。需要更新数据时间时,须使用 extend 指令操作。
场景四:非结构或半结构化数据提取
在机器数据处理场景中,从非结构化或半结构化数据中提取关键信息,是一个繁琐的过程。因为数据没有固定的模式,需考虑太多处理细节,但处理的效率要求又极高。SPL 提供指令实现不同的数据提取,比如正则、JSON、CSV 等。
正则文本提取
JSON 结构数据提取
CSV 格式数据提取
相关链接:
[1] JsonPath
https://github.com/json-path/JsonPath
[2] JMES 语法
https://help.aliyun.com/zh/sls/user-guide/jmespath-syntax
[3] CSV RFC 4180
https://www.loc.gov/preservation/digital/formats/fdd/fdd000323.shtml