secsoso spl 語法說明
數據分析一直是近幾年非常熱的一個話題,但如何進行數據分析目前業界還沒有一個統一答案,從抽象的角度來說,先要有數據,然后有目標,最后給個工具從數據中提取目標這個就是數據分析過程。但目前數據和目標都相對比較容易獲取,但工具一直沒有比較理想的工具。公司根據這種情況開發了一系列產品來緩解數據分析的過程,其中免費的命令行工具為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開始的,count()函數操作后的默認列名稱為count_
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
其中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
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'
人工智能 EI企業智能 AI
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。