比較子用於判斷參數的大小關係,適用於任意可比較的資料類型(double、bigint、varchar、timestamp和date)。本文介紹比較子的基本文法以及樣本。
比較子概覽
Log Service支援如下比較子。
|
運算子 |
文法 |
說明 |
支援SQL |
支援SPL |
|
x < y |
x小於y時,返回true。 |
√ |
√ |
|
|
x > y |
x大於y時,返回true。 |
√ |
√ |
|
|
x <= y |
x小於或等於y時,返回true。 |
√ |
√ |
|
|
x >= y |
x大於或等於y時,返回true。 |
√ |
√ |
|
|
x = y |
x等於y時,返回true。 |
√ |
√ |
|
|
x <> y |
x不等於y時,返回true。 |
√ |
√ |
|
|
x != y |
x不等於y時,返回true。 |
√ |
√ |
|
|
x relational operator ALL(subquery) |
x滿足所有條件時,返回true。 |
√ |
× |
|
|
x relational operator ANY(subquery) |
x滿足任意一個條件時,返回true。 |
√ |
× |
|
|
x BETWEEN y AND z |
x處在y和z之間時,返回true。 |
√ |
√ |
|
|
x IS DISTINCT FROM y |
x不等於y時,返回true。 |
√ |
× |
|
|
x IS NOT DISTINCT FROM y |
x等於y時,返回true。 |
√ |
× |
|
|
x LIKE pattern [escape 'escape_character'] |
用於匹配字串中指定的字元模式。字串區分大小寫。 |
√ |
√ |
|
|
x relational operator SOME(subquery) |
x滿足任意一個條件時,返回true。 |
√ |
× |
|
|
GREATEST(x, y...) |
查詢x、y中的最大值。 |
√ |
× |
|
|
LEAST(x, y...) |
查詢x、y中的最小值。 |
√ |
× |
|
|
x IS NULL |
x為null時,返回true。 |
√ |
√ |
|
|
x IS NOT NULL |
x不為null時,返回true。 |
√ |
√ |
基礎運算子
基礎運算子用於比較x和y的大小關係。如果邏輯成立,則返回true。
-
文法
文法
說明
x < y
x小於y
x > y
x大於y
x <= y
x小於或等於y
x >= y
x大於或等於y
x = y
x等於y
x <> y
x不等於y
x != y
x不等於y
-
參數說明
參數
說明
x
參數值為任意可比較的資料類型。
y
參數值為任意可比較的資料類型。
-
傳回值類型
boolean類型。
-
樣本
-
樣本1:查詢昨天的日誌。
-
查詢和分析語句
* | SELECT * FROM log WHERE __time__ < to_unixtime(current_date) AND __time__ > to_unixtime(date_add('day', -1, current_date)) -
查詢和分析結果:查詢結果返回日誌的多個欄位,包括
body_bytes_sent、client_ip、host、http_user_agent、http_x_forwarded_for、instance_id、instance_name、network_type、owner_id、referer。每條日誌記錄展示請求體大小、用戶端 IP、訪問網域名稱、User-Agent、執行個體 ID 與名稱、網路類型等訪問資訊。
-
-
樣本2:電商公司A通過訪問日誌中的mobile欄位和client_ip欄位,分析哪些客戶的電話號碼所在地和其訪問電商網站的IP地址所在地不同。
-
欄位範例
mobile:1881111**** client_ip:192.168.2.0 -
查詢和分析語句
* | SELECT mobile, client_ip, count(*) AS PV WHERE mobile_city(mobile) != ip_to_city(client_ip) AND ip_to_city(client_ip) != '' GROUP BY client_ip, mobile ORDER BY PV DESC -
查詢和分析結果:查詢結果返回兩條記錄,
mobile和client_ip列敏感資訊已脫敏顯示,對應PV值分別為 13 和 12。
-
-
ALL運算子
ALL運算子用於判斷x是否滿足所有條件。如果滿足,則返回true。
-
文法
x relational operator ALL(subquery) -
參數說明
參數
說明
x
參數值為任意可比較的資料類型。
比較子
<、>、<=、>=、=、<>、!=
重要ALL運算子必須緊跟在基礎運算子(<、>、<=、>=、=、<>、!=)後面。
subquery
SQL子查詢。
-
傳回值類型
boolean類型。
-
樣本
執行個體i-01相關的所有請求的狀態代碼是否都為200。
-
欄位範例
instance_id:i-01 status:200 -
查詢和分析語句
* | select 200 = ALL(select status where instance_id='i-01') -
查詢和分析結果返回
_col0值為false,表示並非所有 instance_id 為 i-01 的日誌的 status 值都等於 200。
-
ANY運算子
ANY運算子用於判斷x是否滿足任意一個條件。如果滿足,則返回true。
-
文法
x relational operator ANY(subquery) -
參數說明
參數
說明
x
參數值為任意可比較的資料類型。
比較子
<、>、<=、>=、=、<>、!=
重要ANY運算子必須緊跟在比較子(<、>、<=、>=、=、<>、!=)後面。
subquery
SQL子查詢。
-
傳回值類型
boolean類型。
-
樣本
執行個體i-01相關的請求中,是否存在請求狀態代碼為200的請求。
-
欄位範例
instance_id:i-01 status:200 -
查詢和分析語句
* | SELECT 200 = ANY(SELECT status WHERE instance_id='i-01') -
查詢和分析結果返回單列
_col0,值為true,表示滿足條件。
-
BETWEEN運算子
BETWEEN用於判斷x是否處在y和z之間。如果是,則返回true。y和z之間的範圍為閉區間。
-
文法
x BETWEEN y AND z -
參數說明
參數
說明
x
參數值為任意可比較的資料類型。
y
參數值為任意可比較的資料類型。
z
參數值為任意可比較的資料類型。
重要-
x、y和z的資料類型必須一致。
-
x、y和z中任意一個的值包含null,則返回結果為null。
-
-
傳回值類型
boolean類型。
-
樣本
-
樣本1:判斷status欄位值是否在[200,299]範圍內。
-
查詢和分析語句
* | SELECT status BETWEEN 200 AND 299 -
查詢和分析結果:返回表格中
_col0列共三行,值均為true,表示對應日誌的 status 欄位值均在 200 到 299 之間。
-
-
樣本2:計算status欄位值不在[200,299]範圍內的日誌條數。
-
查詢和分析語句
* | SELECT count(*) AS count FROM log WHERE status NOT BETWEEN 200 AND 299 -
查詢和分析結果顯示 count 值為 250。
-
-
DISTINCT運算子
DISTINCT運算子用於判斷x和y是否相同。
-
文法
-
IS DISTINCT FROM表示x不等於y時,返回true。
x IS DISTINCT FROM y -
IS NOT DISTINCT FROM表示x等於y時,返回true。
x IS NOT DISTINCT FROM y
-
-
參數說明
參數
說明
x
參數值為任意可比較的資料類型。
y
參數值為任意可比較的資料類型。
與基礎運算子(=、<>)對比,區別在於DISTINCT運算子可用於null的對比。
|
x |
y |
x = y |
x <> y |
x IS DISTINCT FROM y |
x IS NOT DISTINCT FROM y |
|
1 |
1 |
true |
false |
false |
true |
|
1 |
2 |
false |
true |
true |
false |
|
1 |
null |
null |
null |
true |
false |
|
null |
null |
null |
null |
false |
true |
-
傳回值類型
boolean類型。
-
樣本
將0和null進行對比。
-
查詢和分析語句
* | select 0 IS DISTINCT FROM null -
查詢和分析結果為
true,即0與null是不同的值。
-
LIKE運算子
LIKE運算子用於匹配字串中指定的字元模式。字串區分大小寫。
-
文法
x LIKE pattern [escape 'escape_character'] -
參數說明
參數
說明
x
參數值為任意可比較的資料類型。
pattern
字元模式,包括字串和萬用字元。萬用字元說明如下:
-
百分比符號(%)代表任意個字元。
-
底線 (_)代表單個字元。
escape_character
對字元模式中的萬用字元進行轉義的字元運算式。
說明LIKE運算子主要用於日誌的精準查詢。更多資訊,請參見如何精準查詢日誌。
-
-
傳回值類型
boolean類型。
-
樣本
SQL
-
樣本1:查詢request_uri欄位值是以file-8或file-6結尾的日誌。
-
欄位範例
request_uri:/request/path-2/file-6 -
查詢和分析語句
*|SELECT * WHERE request_uri LIKE '%file-8' OR request_uri LIKE '%file-6' -
查詢和分析結果:執行該查詢語句後,返回
request_uri以file-8或file-6結尾的日誌記錄,每條記錄包含remote_addr、remote_user、request_length、request_method、request_time、request_uri、scheme、server_protocol、slbid、status、time_local等欄位。
-
-
樣本2:判斷request_uri欄位值是否以file-6結尾。
-
欄位範例
request_uri:/request/path-2/file-6 -
查詢和分析語句
* | SELECT request_uri LIKE '%file-6' -
查詢和分析結果返回
_col0列,值為true,表示request_uri的值匹配%file-6模式。
-
SPL
-
樣本1:查詢request_uri欄位值是以file-8或file-6結尾的日誌。
-
欄位範例
-
request_uri:/request/path-2/file-6-
SPL語句
*|WHERE request_uri LIKE '%file-8' OR request_uri LIKE '%file-6'-
SPL結果
查詢結果返回了所有 request_uri 欄位值以 file-8 或 file-6 結尾的日誌條目。
-
樣本2:判斷request_uri欄位值是否以file-6結尾。
-
欄位範例
-
request_uri:/request/path-2/file-6-
SPL語句
* | extend a = request_uri LIKE '%file-6'-
SPL結果
查詢結果中新增欄位
a的值為true,表明該條日誌的 request_uri 欄位值以 file-6 結尾。 -
SOME運算子
SOME運算子用於判斷x是否滿足任意一個條件。如果滿足,則返回true。
-
文法
x relational operator SOME(subquery) -
參數說明
參數
說明
x
參數值為任意可比較的資料類型。
比較子
<、>、<=、>=、=、<>、!=
重要SOME運算子必須緊跟在比較子(<、>、<=、>=、=、<>、!=)後面。
subquery
SQL子查詢。
-
傳回值類型
boolean類型。
-
樣本
執行個體i-01相關的請求中,是否存在請求時間長度小於20s的請求。
-
欄位範例
instance_id:i-01 request_time:16 -
查詢和分析語句
* | SELECT 20 > SOME(SELECT request_time WHERE instance_id='i-01') -
查詢和分析結果
-
GREATEST運算子
GREATEST運算子用於擷取x、y中的最大值。
GREATEST運算子用於橫向對比,max函數用於縱向對比。
-
文法
GREATEST(x, y...) -
參數說明
參數
說明
x
參數值為任意可比較的資料類型。
y
參數值為任意可比較的資料類型。
-
傳回值類型
double類型。
-
樣本
對同一行中的request_time欄位值和status欄位值進行對比,擷取其中的最大值。
-
欄位範例
request_time:38 status:200 -
查詢和分析語句
* | SELECT GREATEST(request_time,status) -
查詢和分析結果返回
_col0列,值為200.0,即request_time(38)與status(200)中的較大值。
-
LEAST運算子
LEAST運算子用於擷取x、y中的最小值。
LEAST運算子用於橫向對比,min函數用於縱向對比。
-
文法
LEAST(x, y...) -
參數說明
參數
說明
x
參數值為任意可比較的資料類型。
y
參數值為任意可比較的資料類型。
-
傳回值類型
double類型。
-
樣本
對同一行中的request_time欄位值和status欄位值進行對比,擷取其中的最小值。
-
欄位範例
request_time:77 status:200 -
查詢和分析語句
* | SELECT LEAST(request_time,status) -
查詢和分析結果
返回結果為77。
-
NULL運算子
NULL運算子用於判斷x是否為null。
-
文法
-
IS NULL表示參數值為null時,返回true。
x IS NULL -
IS NOT NULL表示參數值不為null時,返回true。
x IS NOT NULL
-
-
參數說明
參數
說明
x
參數值為任意可比較的資料類型。
-
傳回值類型
boolean類型。
-
樣本
-
樣本1:判斷status欄位值是否為null。
-
查詢和分析語句
* | select status IS NULL -
查詢和分析結果:查詢結果返回
_col0列,兩行值均為false,表示status欄位不為 NULL。
-
-
樣本2:統計status欄位值不為空白的日誌條數。
-
查詢和分析語句
* | SELECT count(*) AS count FROM log WHERE status IS NOT NULL -
查詢和分析結果返回 count 值為
1340,表示日誌中status不為 NULL 的日誌條數。
-
-