1. SPL语法和SQL语法对照表
一下表格中“#”代表SPL中的管道符“|”
SQL命令 | SQL示例 | Splunk SPL 示例 |
---|---|---|
select * | select * from myTable | source=myTable |
where | select * from myTable where myColumn = 5 | source=myTable myColumn= 5 |
select | select mycolumn1, mycolumn2 from myTable | source=myTable # fields mycolumn1, mycolumn2 |
and/or | select * from mytable where (mycolumn1=”true” OR mycolumn2=”red”) and mycolumn3=”blue” | source=mytable and (mycolumn1=”true” OR mycolumn2=”red”) and mycolumn3=”blue” |
as | select mycolumn as column_alias from mytable | source=mytable # rename mycolumn as column_alias # fields column_alias |
between | select * from mytable where mycolumn between 1 and 5 | source=mytable mycolumn>=1 mycolumn<=5 |
group by | select mycolumn, avg(mycolumn) from mytable where mycolumn=value group by mycolumn | source=mytable mycolumn=value # stats avg(mycolumn) by mycolumn # fields mycolumn, avg(mycolumn) |
having | select mycolumn,avg(mycolumn) from mytable where mycolumn=value group by mycolumn having avg(mycolumn)=value | source=mytable mycolumn=value # stats avg(mycolumn) by mycolumn # search avg(mycolumn)=value # fields mycolumn, avg(mycolumn) |
like | select * from mytable where mycolumn like “%some text%” | source=mytable mycolumn=”some text“ |
order by | select * from mytable order by mycolumn desc | source=mytable # sort -mycolumn |
select distinct | select distinct mycolumn1,mycolumn2 from mytable | source=mytable # dedup mycolumn1 # fields mycolumn1,mycolumn2 |
inner join | select * from mytable1 inner join mytable2 on mytable1.mycolumn = mytable2.mycolumn | source=mytable1 # join type=inner mycolumn [search source=mytable2]# |
select into | select * into new_mytable in mydb2 from old_mytable | source=old_mytable # eval source=new_mytable # collect index=mydb2 |
delete | delete from mytable where mycolumn=5 | source=mytable1 mycolumn=6 # delete |
update | select mytable set column1=value, column2=value,…where some_column=some_value | — |
注:
AVG()函数 用于计算一组值或表达式的平均值,返回数值列的平均值。
2. SPL函数
a. 对比和条件函数
case(x,’y’, …):
此函数获取 X 和 Y 参数对。X 参数是从第一个到最后一个依次评估的布尔表达式。当遇到的第一个评估结果为 TRUE 的 X 表达式时,将返回相应的 Y 参数。
1 | ...| eval description=case(error==404, 'not found', error == 500, 'internal server error', error == 200, 'ok'); |
cidrmatch(“X”,Y):
使用此函数确定 IP 地址是否属于特定子网。若 IP 地址 Y 属于特定子网 X,则此函数返回结果为 true。
1 | ... | eval isLocal = if(cidrmatch('123.132.32.0/25', ip), 'local', 'not local'); |
coalesce(X,…)
此函数会获取任意数量的参数并返回第一个不是空值的值。
1 | ... | eval ip=coalesce(clientip,ipaddress) |
if(X,Y,Z)
此函数获取三个参数。第一个参数 X 必须是布尔表达式。如果 X 值为 TRUE,则结果为第二个参数 Y。如果 X 值为 FALSE,则结果为第三个参数 Z。1
... | eval err=if(error == 200, "OK", "Error")
in(VALUE-LIST )
此函数会采用以逗号分隔的值的列表。如果列表中的一个值和您指定字段中的值匹配,则函数返回 TRUE。
1 | ... | where status in("400", "401", "403", "404") |
like(TEXT, PATTERN)
此函数将采用两个参数,一个与 TEXT 匹配的字符串和一个与 PATTERN 匹配的字符串表达式。当且仅当 TEXT 和 PATTERN 匹配时返回 TRUE。1
... | eval is_a_foo=if(like(field, "foo%"), "yes a foo", "not a foo")
match(SUBJECT, “REGEX”)
此函数将正则表达式字符串 REGEX 与 SUBJECT 值进行比较并返回一个布尔值。如果 REGEX 能找到 SUBJECT 任意子串的匹配,返回 TRUE。1
... | eval n=if(match(field, "^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$"), 1, 0)
tonumber(NUMSTR,BASE)
此函数将输入字符串 NUMSTR 转换为数字。NUMSTR 可以是一个字段名称或字段值。1
... | eval n=tonumber("0A4",16)//示例以十六进制数为例,以 16 为 BASE 返回数字 "164"。
b. 加密函数
md5(X)
此函数计算并返回字符串值 X 的 MD5 哈希值。1
... | eval n=md5(field)
c. 日期和时间函数
now()
此函数不获取任何参数,它将返回搜索的开始时间。1
... | eval n=relative_time(now(), "-1d@d")