このトピックでは、条件式の構文について説明します。また、式の使用例も示します。
次の表に、Simple 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) | 2 つの式の値が同じかどうかを評価します。値が同じ場合は null が返されます。それ以外の場合は、最初の式の値が返されます。 | √ | × | |
TRY(expression) | 式の呼び出し中に発生するエラーをキャプチャし、エラー発生時でも Simple Log Service がクエリと分析を続行できるようにします。 | √ | √ |
CASE 式
CASE 式はデータを分類します。
構文
CASE WHEN condition1 THEN result1
[WHEN condition2 THEN result2]
[ELSE result3]
ENDパラメーター
パラメーター | 説明 |
condition | このパラメーターの値は条件式です。 |
result1 | 返される結果です。 |
例
例 1:http_user_agent フィールドの値からブラウザ情報を抽出します。次に、その情報を Chrome、Safari、および不明に分類し、3 つのタイプのページビュー (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クエリと分析の結果には、各ブラウザ (http_user_agent) のページビュー (PV) が表示されます:Chrome (5563)、Safari (1842)、および不明 (1666)。
例 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クエリと分析の結果は 2 つのレコードを返します:
request_timeがt100の場合、PV は 1563542、request_timeがlargeの場合、PV は 533 です。
IF 式
IF 式はデータを分類します。この式は CASE 式と同様に機能します。
構文
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クエリと分析の結果:
status_200_percentagの値は0.884686775009848です。
COALESCE 式
COALESCE 式は、複数の式の中から最初の非 null 値を返します。
構文
COALESCE(expression1, expression2, expression3...)パラメーター
パラメーター | 説明 |
expression | このパラメーターの値は、任意の型の式です。 |
例
前日の経費と前週同日の経費の比率を計算します。
クエリ文
* | SELECT compare("yesterday's expenses", 604800) AS diff FROM ( SELECT COALESCE(sum(PretaxAmount), 0) AS "yesterday's expenses" FROM log )クエリと分析の結果
値 6514393413.0 は、前日の経費を示します。
値 19578267596.0 は、前週同日の経費を示します。
値 0.33273594719539659 は、前日の経費と前週同日の経費の比率を示します。
NULLIF 式
NULLIF 式は、2 つの式の値が同じかどうかを評価します。値が同じ場合は null が返されます。それ以外の場合は、最初の式の値が返されます。
構文
NULLIF(expression1, expression2)パラメーター
パラメーター | 説明 |
expression | このパラメーターの値は、有効なスカラー式です。 |
例
client_ip フィールドと host フィールドの値が同じかどうかを評価します。値が異なる場合は、client_ip フィールドの値が返されます。
クエリ文
* | SELECT NULLIF(client_ip,host)クエリおよび分析結果: クエリは、
NULLIF(client_ip,host)の結果を表示する単一の列_col0を返します。この関数は、client_ipがhostと異なる場合はclient_ipの値を返し、同じ場合は NULL を返します。
TRY 式
TRY 式は、式の呼び出し中に発生するエラーをキャプチャし、エラーが発生した場合でも Simple Log Service がデータのクエリと分析を続行できるようにします。
構文
TRY(expression)パラメーター
パラメーター | 説明 |
expression | このパラメーターの値は、任意の型の式です。 |
例
regexp_extract 式の呼び出し時にエラーが発生した場合、TRY 式がエラーをキャプチャし、Simple Log Service はデータのクエリと分析を続行します。クエリと分析の結果が返されます。
クエリ文
* | SELECT TRY(regexp_extract(request_uri, '.*\/(file.*)', 1)) AS file, count(*) AS count GROUP BY fileクエリと分析の結果には、抽出された各ファイル名のカウントが表示されます。例:file-5 (851)、file-7 (928)、file-3 (837)、および file-4 (863)。