本文介紹條件運算式的基本文法和樣本。
Log Service支援如下條件運算式。
在Log Service分析語句中,表示字串的字元必須使用單引號('')包裹,無符號包裹或被雙引號("")包裹的字元表示欄位名或列名。例如:'status'表示字串status,status或"status"表示日誌欄位status。
運算式 | 文法 | 說明 | 支援SQL | 支援SPL |
CASE WHEN condition1 THEN result1 [WHEN condition2 THEN result2] [ELSE result3] END | 通過條件判斷,對資料進行歸類。 | √ | √ | |
IF(condition, result1) | 如果condition為true,則返回result1,否則返回null。 | √ | √ | |
IF(condition, result1, result2) | 如果condition為true,則返回result1,否則返回result2。 | √ | √ | |
COALESCE(expression1, expression2, expression3...) | 返回多個運算式中第一個非null的值。 | √ | √ | |
NULLIF(expression1, expression2) | 比較兩個運算式的值是否相等。如果相等,則返回null,否則返回第一個運算式的值。 | √ | × | |
TRY(expression) | 捕獲異常資訊,使得系統繼續執行查詢和分析操作。 | √ | √ |
CASE WHEN運算式
CASE WHEN運算式用於對資料進行歸類。
文法
CASE WHEN condition1 THEN result1
[WHEN condition2 THEN result2]
[ELSE result3]
END
參數說明
參數 | 說明 |
condition | 條件運算式。 |
result1 | 返回結果。 |
樣本
樣本1:從http_user_agent欄位值中提取瀏覽器資訊,歸為Chrome、Safari和unknown三種類型並計算三種類型對應的訪問PV。
查詢和分析語句
* | SELECT CASE WHEN http_user_agent like '%Chrome%' then 'Chrome' WHEN http_user_agent like '%Safari%' then 'Safari' ELSE 'unknown' END AS http_user_agent, count(*) AS pv GROUP BY http_user_agent
查詢和分析結果
樣本2:統計不同請求時間的分布情況。
查詢和分析語句
* | SELECT CASE WHEN request_time < 10 then 't10' WHEN request_time < 100 then 't100' WHEN request_time < 1000 then 't1000' WHEN request_time < 10000 then 't10000' ELSE 'large' END AS request_time, count(*) AS pv GROUP BY request_time
查詢和分析結果
IF運算式
IF運算式用於對資料進行歸類,類似於CASE WHEN運算式。
文法
如果condition為true,則返回result1,否則返回null。
IF(condition, result1)
如果condition為true,則返回result1,否則返回result2。
IF(condition, result1, result2)
參數說明
參數 | 說明 |
condition | 條件運算式。 |
result | 返回結果 |
樣本
計算狀態代碼為200的請求占所有請求的比例。
查詢和分析語句
* | SELECT sum(IF(status = 200, 1, 0)) * 1.0 / count(*) AS status_200_percentag
查詢和分析結果
COALESCE運算式
COALESCE運算式用於返回多個運算式中第一個非null的值。
文法
COALESCE(expression1, expression2, expression3...)
參數說明
參數 | 說明 |
expression | 任何類型的運算式。 |
樣本
計算昨天消費金額與上月同一天的比值。
查詢和分析語句
* | SELECT compare("昨天消費金額", 604800) AS diff FROM ( SELECT COALESCE(sum(PretaxAmount), 0) AS "昨天消費金額" FROM log )
查詢和分析結果
6514393413.0表示昨天的消費金額。
19578267596.0表示上月同一天的消費金額。
0.33273594719539659表示昨天與上月同一天的消費金額比值。
NULLIF運算式
NULLIF運算式用於比較兩個運算式的值是否相等。如果相等,則返回null,否則返回第一個運算式的值。
文法
NULLIF(expression1, expression2)
參數說明
參數 | 說明 |
expression | 任何有效標量運算式。 |
樣本
判斷client_ip、host兩個欄位的值是否相同。當不相同時,返回client_ip欄位的值。
查詢和分析語句
* | SELECT NULLIF(client_ip,host)
查詢和分析結果
TRY運算式
TRY運算式用於捕獲異常資訊,使得系統繼續執行查詢和分析操作。
文法
TRY(expression)
參數說明
參數 | 說明 |
expression | 任何類型的運算式。 |
樣本
當執行regexp_extract函數發生異常時,try函數會捕獲異常資訊並繼續查詢和分析操作,返回查詢和分析結果。
查詢和分析語句
* | SELECT TRY(regexp_extract(request_uri, '.*\/(file.*)', 1)) AS file, count(*) AS count GROUP BY file
查詢和分析結果