本文介紹邏輯運算子的基本文法及樣本。
Log Service支援如下邏輯運算子。
-
在Log Service分析語句中,表示字串的字元必須使用單引號('')包裹,無符號包裹或被雙引號("")包裹的字元表示欄位名或列名。例如:'status'表示字串status,status或"status"表示日誌欄位status。
-
邏輯運算子優先順序從高到低為not、and、or。您可以使用圓括弧改變預設的計算順序。
-
邏輯運算只支援輸入值為true、false或null的布林運算式。
|
運算子 |
文法 |
說明 |
支援SQL |
支援SPL |
|
x AND y |
x和y的值都為true時,返回結果為true。 |
√ |
√ |
|
|
x OR y |
x和y中任意一個的值為true時,返回結果為true。 |
√ |
√ |
|
|
NOT x |
x的值為false時,返回結果為true。 |
√ |
√ |
AND運算子
x和y的值都為true時,返回結果為true。
文法
x AND y
參數說明
|
參數 |
說明 |
|
x |
參數值為布林運算式。 |
|
y |
參數值為布林運算式。 |
傳回值類型
boolean類型。
樣本
SQL
如果status欄位值為200且request_method欄位值為GET,則返回true。否則返回false。
-
查詢和分析語句
*|SELECT status=200 AND request_method='GET' -
查詢和分析結果返回
_col0列,包含布爾值true和false,分別表示日誌是否同時滿足status=200且request_method='GET'的條件。
SPL
如果status欄位值為200且request_method欄位值為GET,則返回true。否則返回false。
-
SPL語句
*|extend a = status=200 AND request_method='GET'
-
SPL結果
a: true
OR運算子
x和y中任意一個的值為true時,返回結果為true。
文法
x OR y
參數說明
|
參數 |
說明 |
|
x |
參數值為布林運算式。 |
|
y |
參數值為布林運算式。 |
傳回值類型
boolean類型。
樣本
SQL
尋找request_uri欄位值是以file-8或file-6的結尾的日誌。
-
查詢和分析語句
*|SELECT * WHERE request_uri LIKE '%file-8' OR request_uri LIKE '%file-6' -
查詢和分析結果:查詢結果返回兩條記錄,包含
remote_addr、remote_user、request_length、request_method、request_time、request_uri、scheme、server_protocol、slbid、status、time_local等欄位。兩條記錄的request_uri分別為/request/path-2/file-6和/request/path-0/file-6,要求方法分別為 DELETE 和 PUT,狀態代碼均為 200。
SPL
尋找request_uri欄位值是以file-8或file-6的結尾的日誌。
-
SPL語句
*|WHERE request_uri LIKE '%file-8' OR request_uri LIKE '%file-6'
-
SPL結果:查詢結果返回兩條日誌,其
request_uri欄位值均為/request/path-2/file-6,符合以 file-6 結尾的篩選條件。
NOT運算子
x的值為false時,返回結果為true。
文法
NOT x
參數說明
|
參數 |
說明 |
|
x |
參數值為布林運算式。 |
傳回值類型
boolean類型。
樣本
SQL
統計請求狀態代碼不為200時的請求時間長度。
-
查詢和分析語句
*|SELECT request_time WHERE NOT status=200 -
查詢和分析結果:查詢結果返回
request_time欄位值,樣本結果為 53.0、24.0、56.0、32.0。
SPL
查詢請求狀態代碼不為200時的日誌資訊。
-
SPL語句
*|WHERE NOT status=200
-
SPL結果:執行該SPL語句後,查詢結果返回狀態代碼非200的日誌條目,例如日誌中
status欄位值為500,request_uri欄位值為/request/path-2/file-6。
附錄:真值表
x和y的值為true、false或null時,真值表如下所示。
|
x |
y |
x AND y |
x OR y |
NOT x |
|
true |
true |
true |
true |
false |
|
true |
false |
false |
true |
false |
|
true |
null |
null |
true |
false |
|
false |
true |
false |
true |
true |
|
false |
false |
false |
false |
true |
|
false |
null |
false |
null |
true |
|
null |
true |
null |
true |
null |
|
null |
false |
false |
null |
null |
|
null |
null |
null |
null |
null |