文档章节

secsoso spl 语法说明

o
 osc_elbmybcg
发布于 07/01 17:02
字数 2500
阅读 27
收藏 0
red

精选30+云产品,助力企业轻松上云!>>>

概述
数据分析一直是近几年非常热的一个话题,但如何进行数据分析目前业界还没有一个统一答案,从抽象的角度来说,先要有数据,然后有目标,最后给个工具从数据中提取目标这个就是数据分析过程。但目前数据和目标都相对比较容易获取,但工具一直没有比较理想的工具。公司根据这种情况开发了一系列产品来缓解数据分析的过程,其中免费的命令行工具为secsoso。它们在搜索的时候都用了SPL (Search Processing Language)语言,本文就介绍SPL的搜索语法。

快速参考
    面向SQL用户的SPL
       以下内容不是 SQL 与 SPL搜索处理语⾔ (SPL) 之间的精确映射, 但是, 如果您熟悉 SQL,这⼀快速对⽐可以帮助您快速熟悉搜索命令的使⽤。

       库概念

数据库概念

Spl概念

注释

SQL 查询

SPL搜索

SPL搜索是对数据进⾏检索, 并且可以执⾏转换和报告操作。 可以将搜索所获得的结果通过管道符从⼀个命令传递或传输到另⼀个命令, 以对这些结果进⾏过滤、 修改、 重新排序和分组。

表/视图

搜索结果

对secsoso来说一个文件就是一个表的概念。

row

结果/事件

SPL搜索中的结果是⼀个包含字段(即, 列) 值的列表, 对应于表格的⾏。事件是指具有时间戳和原始⽂本的结果。 通常, 事件是⽇志⽂件中的⼀条记录,

从 SQL 到SPL
说明:

完整语法为:file=(“/export/home/20190613/access.log”,” ”,“utf-8”)

其中/export/home/20190613/access.log为文件路径,“ ”为字段分割符。文件名可以是绝对路径(/export/home/20190613/access.log) 也可以是相对路径(access.log),其中file= 可以省略,默认分隔符为” ”,编码为”utf-8” 如果是文件特点是默认值也可以省略。

注意:

如果需要文件编码,则文件分割符不能省略

其中文件默认的列名为($1,$2,$3…) 注意索引是从1开始的,count($1)函数操作后的默认列名称为count_$1

SQL ⽤于搜索由列组成的关系数据库表。 SPL设计⽤于搜索由字段组成的集合。

       对比表格:

SQL

SQL

SPL

SELECT *

SELECT *
FROM mytable

file=(filename,” ”,”utf-8”)

WHERE

SELECT *
FROM mytable
WHERE mycolumn=5

file=filename mycolumn=5

SELECT

SELECT mycolumn1, mycolumn2
FROM mytable

file=filename
| FIELDS mycolumn1, mycolumn2

AND/OR

SELECT *
FROM mytable
WHERE (mycolumn1="true"
OR mycolumn2="red")
AND mycolumn3="blue"



file=filename
 (mycolumn1="true"
OR mycolumn2="red")
AND mycolumn3="blue"
注意:SPL 中隐含有 AND 运算符, 不需要
指定。 对于此⽰例, 您还可以使⽤:
file=filename
(mycolumn1="true"
OR mycolumn2="red")
mycolumn3="blue"








AS(别名)

SELECT mycolumn AS column_alias
FROM mytable

file=filename
| RENAME mycolumn as column_alias
| FIELDS column_alias

BETWEEN

SELECT *
FROM mytable
WHERE mycolumn
BETWEEN 1 AND 5


file=filename
mycolumn>=1 mycolumn<=5

GROUP BY

SELECT mycolumn, avg(mycolumn)
FROM mytable
WHERE mycolumn=value
GROUP BY mycolumn


file=filename  mycolumn=value
| STATS mycolumn, avg(mycolumn) BY mycolumn

HAVING

SELECT mycolumn, avg(mycolumn)
FROM mytable
WHERE mycolumn=value
GROUP BY mycolumn
HAVING avg(mycolumn)=value



file=filename  mycolumn=value
| STATS mycolumn ,avg(mycolumn) BY mycolumn
| SEARCH avg_mycolumn=value

ORDER BY

SELECT *
FROM mytable
ORDER BY mycolumn desc

file=filename
| SORT -mycolumn
在 SPL 中, 您可在字段名称前⾯使⽤负号 (- ) 进⾏降序排列,默认是升序排列。

SELECT DISTINCT

SELECT DISTINCT
mycolumn1, mycolumn2
FROM mytable

file=filename
| stats mycolumn1, mycolumn2 by mycolumn1, mycolumn2

SELECT TOP

SELECT TOP(5)
mycolum1,
mycolum2
FROM mytable1
WHERE mycolum3 = "bar"
ORDER BY mycolum1 mycolum2




file=filename mycolum3="bar"
| FIELDS mycolum1 mycolum2
| SORT 5 mycolum1 mycolum2

Spl概念
       SPL主要有关键字,函数,管道组成。管道用来分割前后的逻辑。关键字可以放在管道后面执行,函数不能单独执行,只能放在关键字的后面。

Spl关键字
       SPL的语法结构为:关键字 参数 管道 关键字 参数 管道等等以此类推。管道用|,关键字和参数就详见下面的章节,我们已搜索统计的一个需求为例,统计用户登录系统的数量:

       search source="index" AND eventType = "login"|stats count(userName) by userName

       其中search,stats就是关键字source="index" AND eventType = "login"就是search的参数,这个参数的意思是查询索引名为index的索引,eventType等于login的所有事件,两个条件是AND的关系,管道用|,count(userName) by username是stats的参数,含义是根据userName进行分组。

search搜索
       搜索是在数据中找到数据的一个过程,产品支持两种搜索,一个是在数据分析平台中可以搜索elasticsearch(简称ES)中的数据,一个是用命令行secsoso可以搜索文档中的数据。

       search <file> [条件查询]

       其中search是关键字,在搜索的时候可以省略, file是用命令行secsoso搜索文件中的数据,后面紧跟着是条件。

      

       条件查询的语法为:

       (字段名称 操作符 值)关系(字段名称 操作符 值)…。

       注意:file本身也是一种条件。

       file的语法为:file=("文件名"," "),其中第二个参数是分隔符,默认分隔符为空格,通过分隔符来确定文件中的每一列,默认的列名为$1,$2,$3等等,用命令行secsoso工具,如果默认分隔符为空格可以直接简化为:secsoso "文件名" 条件。

      

       字段名称:

       对ES中,字段名称就是ES的每一列,对于文件就是通过分隔符分割后的每一列。

       操作符:

       系统支持以下操作符语法:

操作符

语义

=或者==

等于

!= 或者<>或者<=>

不等于

<

小于

<=或者!>

小于等于|不小于

大于

=或者!,

大于等于|不小于

In

包括

not in

不包括

       查询值支持以下几种语法:

       精确查询:输入一个完整的值。

   模糊查询:支持?。 可以匹配零个、单个或多个字符,? 可以匹配一个字符,和?可以同时使用,且可以放在字段值的任意位置,和?至少要保留一个才能进行模糊查询,否则就是精确查询。

       正则查询:/regexp/,正则表达式前后必须加上正斜杠。

       关系:

   要使用多个条件查询,需要指定条件之间的关系:AND、OR。多个条件查询默认的关系是AND。关系运算符不区分大小写。AND优先级高于OR。AND是与的关系OR是或的关系。

   也可使⽤括号对搜索字符串的各部分进⾏分组,括号里的条件优先。

fields保留或删除字段
       搜索结果中展示的都是全部字段,使用fields命令可以根据字段列表条件保留或删除搜索结果中的字段。语法:

       fields [+|-] field1, field2, field3…

       +|-,如果指定了加号(+)则代表在结果中只保留field_list这些字段,反之指定了减号(-)则在结果中删除field_list这些字段。默认值是+,可缺省。

rename字段重命名
       rename 命令是修改搜索结果中的列名。语法为:

       rename field_name as field_name_other

sort结果排序
       sort是对返回结果集的某一个或者多个字段进行排序。语法为:

       sort [limit] [+|-] field1, field2, field3…

       含义jiesh :sort [结果个数] [正序|逆序] 字段名,多个字段名用逗号分开。

       多个字段名用小写的逗号隔开。默认为正序(+)

eventcount获取总数
       使⽤ eventcount命令对数据进行计数。返回字段名为event_count ,值为总记录数的一条记录。语法为:

       …|eventcount

eval增加字段
       eval在原有日志中添加一个新的field,新字段将根据已有字段进行逻辑运算生成,如通过算术运算、字符串运算等方式。如果您指定的字段名称和搜索结果中已经存在的字段名称匹配, eval 表达式中的结果会覆盖该字段中的值。可在⼀个搜索中使⽤逗号将多个 eval 表达式链接起来, 以分隔后续表达式。 该搜索从左⾄右处理多个 Eval 表达式, 并允许您在后续表达式中引⽤之前已评估过的字段。

       语法:

       eval <field>=<expression>["," <field>=<expression>]...

       expression支持的函数包括比和条件函数、加密函数、日期和时间函数、数学函数、文本函数和三⾓函数和双曲函数

       示例:

       在返回的结果中增加一列,得到小写的用户名,使⽤ lower 函数。

... | eval lowuser = lower(username)

stats统计
       stats用于对计算结果集进行聚合统计, 如平均数、 计数和总和。 类似于 SQL 聚合。 如果 stats 命令在没有 BY ⼦句的情况下使⽤,将只返回⼀⾏, 也就是整个进来的结果集的聚合。 如果使⽤了 BY ⼦句, 将为 BY ⼦句中指定的每个唯⼀值返回⼀⾏。语法为:

       stats (stats-function(field) [AS field])...[BY field-list]

       stats-function支持的函数主要是统计函数。

Stats 和 Eval 命令的区别

stats 命令根据事件中的字段计算统计信息。 eval 命令使⽤现有字段和任意表达式在您的事件中新建字段。

示例
列出文件中访问次数最多的10个IP

secsoso 'file=("/export/home/20190613/access.log"," ")|stats  count($1) by $1|sort 10 -count_$1'

说明:完整语法为:file=(“文件名”,分割符,“编码”)

其中分割符默认为“ ” 编码默认为utf-8

其中file= 可以省略,如果是文件特点是默认值也可以省略

其中文件默认的列名为($1,$2,$3…) 注意索引是从1开始的

也可以给字段重命名以友好方式显示,这个是简化语法:结果同上。

secsoso ‘access.log|rename $1 as ip |stats  count(ip) by ip|sort 10 -count_ip’

从中间件文件中找到密码猜测的ip,密码猜测条件是5分钟登录失败10次以上的

secsoso 'access.log $6="POST" $7="/login"  $9="200"| eval date=$4.to_date("[dd/MMM/yyyy:HH:mm:ss")|stats count($1) as count by tspan(date,"5m"),$1| search count>10|stats sum(count) by $1'

更多示例请参考《运维利器:WEB日志分析场景介绍》

o
粉丝 0
博文 61
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
secsoso spl 语法说明

概述 数据分析一直是近几年非常热的一个话题,但如何进行数据分析目前业界还没有一个统一答案,从抽象的角度来说,先要有数据,然后有目标,最后给个工具从数据中提取目标这个就是数据分析过...

zhulinu
06/29
0
0
secsoso spl 语法说明

概述 数据分析一直是近几年非常热的一个话题,但如何进行数据分析目前业界还没有一个统一答案,从抽象的角度来说,先要有数据,然后有目标,最后给个工具从数据中提取目标这个就是数据分析过...

赛克蓝德
2019/09/20
82
0
免费数据分析工具:secsoso

前段时间思考了理想数据分析平台,之后我们根据这个思路开发了spl语言并提供了一个数据分析平台,这个平台主要用在搜索ES,数据库索引中的数据。但后来发现对文件的事后处理也是个非常重要的...

zhulinu
06/29
0
0
免费数据分析工具:secsoso

前段时间思考了理想数据分析平台,之后我们根据这个思路开发了spl语言并提供了一个数据分析平台,这个平台主要用在搜索ES,数据库索引中的数据。但后来发现对文件的事后处理也是个非常重要的...

osc_c9pkd6zt
06/30
5
0
免费数据分析工具:secsoso

前段时间思考了理想数据分析平台,之后我们根据这个思路开发了spl语言并提供了一个数据分析平台,这个平台主要用在搜索ES,数据库索引中的数据。但后来发现对文件的事后处理也是个非常重要的...

赛克蓝德
2019/09/18
184
1

没有更多内容

加载失败,请刷新页面

加载更多

Kafka如何在千万级别时优化JVM GC问题?

大家都知道Kafka是一个高吞吐的消息队列,是大数据场景首选的消息队列,这种场景就意味着发送单位时间消息的量会特别的大,那既然如此巨大的数据量,kafka是如何支撑起如此庞大的数据量的分发...

hummerstudio
06/18
0
0
我打赌!90%程序员都破解不了这个粽子,不信你试!

放假了 各位读者朋友们,马上就是端午小长假啦,开心激动有木有? 新的故事文章还在创作中,写了初稿感觉不太满意又推倒重来。其实写故事还是挺难的,读者可能第一次第二次有新鲜感,写多了就...

轩辕之风
06/24
0
0
如何删库跑路?教你使用Binlog日志恢复误删的MySQL数据

前言 “删库跑路”是程序员经常谈起的话题,今天,我就要教大家如何删!库!跑!路! 开个玩笑,今天文章的主题是如何使用Mysql内置的Binlog日志对误删的数据进行恢复,读完本文,你能够了解...

后端技术漫谈
01/14
0
0
PHP设计模式之代理模式

PHP设计模式之代理模式 代理人这个职业在中国有另外一个称呼,房产经济人、保险经济人,其实这个职业在国外都是叫做房产代理或者保险代理。顾名思义,就是由他们来帮我们处理这些对我们大部分...

硬核项目经理
2019/09/23
0
0
Redis的复制模式

Redis的复制功能分为同步(sync)和命令传播(command propagate)两个操作。 同步 同步操作用于将从服务器的数据库状态更新至主服务器当前所处的数据库状态。 1. 旧版本的执行步骤 从服务器...

osc_s9cni3go
1分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部