还不会SLS分析语法?一句话教你学会写复杂分析语句

6 阅读2分钟

背景

  • 在日常工作中,经常需要到阿里云上面查询日志。有时需要将日志数据处理加工。
  • 但是阿里云的分析语法写起来特别难受。
  • 它宣称sls的分析语法是类sql语言。但是根本写不了(没理解前)。

例如:

  • 查询删除记录,并对结果进行切割
删除记录* and (1 or 2) | select substr(logDetail, 213) as record
	
  • 查询删除记录,并且对数据进行筛选
删除记录* and (1 or 2) | where regexp_like(logDetail, 'deleteMobileList:\[.+\]')
  • 如果是需要将两个语句结合起来呢,这时候不知道就不知道select应该写在哪里,where应该写在哪里。

解决

  • 上面的两条语句,都可以改变一下。
  • 其实阿里云的SLS分析语句,都有一个隐含的from log ,表示查询的数据源,也就是前面的查询结果。
  • 查询删除记录,并对结果进行切割

删除记录* and (1 or 2) | select substr(logDetail, 213) as record from log
	
  • 查询删除记录,并且对数据进行筛选

删除记录* and (1 or 2) | select * from log where regexp_like(logDetail, 'deleteMobileList:\[.+\]')

  • 那么就可以通过我们的sql知识结合起来

删除记录* and (1 or 2) | select  substr(logDetail, 213) as record from log where regexp_like(logDetail, 'deleteMobileList:\[.+\]')

  • 甚至可以继续写子查询

删除记录* and (1 or 2) | 
select * from (

select  substr(logDetail, 213) as record from log where regexp_like(logDetail, 'deleteMobileList:\[.+\]')

) where length(record) > 10

总结

  • 阿里云的SLS分析语句中有隐式的from log
  • 不知道分析语法怎么写时,先直接写出 | select * from log , 后面就可以根据字段编写了。

吐槽

  • 这个特性文档中是一点没提啊,导致我之前每次写分析语法都很难受。写着超级难受,查文档也没用。

参考链接