SPL语法和SQL语法对照表

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")

baishiwen wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!