发布于 

SPL命令

match 筛选

类似sql的where

#筛选目的节点为"网易"的数据
match 目的节点="网易"

#筛选目的节点不是"网易"的数据
match 目的节点!="网易"

#筛选目的节点是"美团网""网易"的数据
match 目的节点 in ("美团网","网易")

#筛选目的节点不是"美团网""网易"的数据
match 目的节点 nin ("美团网","网易")

#筛选连接时间大于1500的数据
match 连接时间 > 1500

#筛选目的地址包含"cn"的数据
match 目的地址 regex "cn"

#筛选目的地址不包含"cn"的数据
match 目的地址 regex "^((?!cn).)"

#筛选目的节点为"网易""美团网"的数据
match 目的节点="网易" or 目的节点="美团网"

#筛选目的节点为"网易"而且连接时间大于100的数据
match 目的节点="网易" and 连接时间>100

stats 统计

函数名称 含义
count 记录数,输出的字段名称为_count
min 最小值
max 最大值
avg 平均值
std 标准差
sum 求和
first 取第一个值
last 取最后一个
#统计每个小时的请求数量、最大下载时间、最小下载时间、平均下载时间
stats count, max(下载时间) as 最大下载时间, min(下载时间) as 最小下载时间, avg(下载时间) as 平均下载时间 by 1h

#统计每个目的节点的请求次数、总时间和连接时间的平均值
stats count as 次数, avg(总时间) as 平均总时间,avg(连接时间) as 平均连接时间 by 目的节点

rename

控制回显字段,只显示rename的字段。可进行二次计算

#仅显示目的节点和总时间
rename 目的节点,总时间

#计算平均总时间,并四舍五入保留小数点后两位
stats avg(总时间) as 平均总时间 
| rename floor(平均总时间*100+0.5)/100 as 平均总时间

#统计各目的节点的平均总访问时间,四舍五入保留小数点后两位
stats avg(总时间) as 平均总时间 by 目的节点
| rename 目的节点,floor(平均总时间*100+0.5)/100 as 平均总时间

bstats 区间分块统计

#分别统计总时间在[0,1000)、[1000,3000)、[3000,5000)区间的请求数量
bstats count as 次数 by 总时间 bounds(1000,3000,5000) default "other"

sort、skip、limit

#跳过前10条数据
skip 10

#只显示10条数据
limit 10

#按总时间升序显示
sort asc by 总时间

#按总时间降序显示
sort desc by 总时间

addfields

新增显示字段,可进行二次计算

与rename区别:rename过后只显示rename后面写出的字段。addfields是在原数据后面添加新字段显示,显示时会保留所有原字段

#添加显示一个新总时间字段
addfields (总时间+连接时间) as 新总时间

join

用法:join “collection-id” field1,field2…… by foreign=local

  • collection-id:被连接的数据集的名称,需要是以ID分区的数据集
  • field1、field2:数据集collection-id中需要填充过来的字段名
  • foreign/local:两个数据集进行连接时的约束条件,满足约束条件的记录的相应字段会填充过来
stats count by 监测点名称
| rename 监测点名称 as agentName,_count as 记录数量
| join "agentInfo" ID,地区,主机IP by 监测点名称 = agentName

combine

#基于目的节点统计各自的平均总时间、数量、数量占总数比例
stats avg(总时间) as 平均总时间,count as 数量 by 目的节点
| combine "网页测试" with multi
| stats count as 总数
| combine *
| rename 目的节点, floor(平均总时间) as 平均总时间, 数量, floor(数量/总数*100+0.5) as 占比

#基于目的节点统计各自的平均总时间、平均连接时间、连接时间占比
stats avg(总时间) as 平均总时间,count as 数量 by 目的节点
| combine "网页测试" 平均连接时间 by 目的节点
| stats avg(连接时间) as 平均连接时间 by 目的节点
| combine *
| rename 目的节点, 数量, floor(平均总时间) as 平均总时间, floor(平均连接时间) as 平均连接时间, floor(平均连接时间/平均总时间*100) as 连接时间占比

expand 矩阵展开

  • 单次命令,且只允许出现在最后阶段
  • 必须先进行计算
#制作源节点、目的节点基于平均连接时间的展开矩阵
stats avg(连接时间) as 平均连接时间 by 目的节点,源节点
| rename floor(平均连接时间*100+0.5)/100 as 平均连接时间,目的节点,源节点
| expand 源节点 by 目的节点 with 平均连接时间

unwind 数组展开

  • 数组展开,指定数组字段,将一条记录展开成多条记录,数组中的每一个元素将被展开于原始记录中的所有字段组合形成多条记录
  • 格式:unwind 数组 数组索引变量
#展开统计所有归属地的平均总时间
addfields split(归属地," ") as 归属地
| unwind 归属地 归属地索引
| stats avg(总时间) by 归属地

upsert 统计更新

  • 统计更新,指定从某一个数据集的入库数据提取对应的字段形成更新命令进行快照数据集存储
  • 不支持查询,仅支持在数据集扩展配置SPL中使用:混合器
  • 格式:upsert “collection-name” by key1 as name1, key2 as name2 commands ..

正则表达式

regex目前支持在match命令中使用,不支持表达式cond内使用

包含字符串xx:field regex "xx"
不包含字符串xx:field regex "^((?!xx).)*$"
以字符串xx开头:field regex "^xx"
以字符串xx结束:field regex "xx$"
不以字符串xx开头:field regex "^(?!xx).*$"
不以字符串xx结束:field regex "^((?!xx$).)*$"