このトピックでは、条件式の構文について説明します。 このトピックでは、式の使用方法の例も提供します。
次の表に、Simple Log Serviceでサポートされている条件式を示します。
分析ステートメントで文字列を使用する場合は、文字列を単一引用符 ('') で囲む必要があります。 囲まれていない文字列または二重引用符 ("") で囲まれている文字列は、フィールド名または列名を示します。 たとえば、'status' はステータス文字列を示し、statusまたは "status" はステータスログフィールドを示します。
式 | 構文 | 説明 | SQLでサポート | SPLでサポート |
condition1がresult1の場合 [condition2が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がデータのクエリと分析を継続できるようにします。 | √ | √ |
ケースWHEN式
CASE WHEN式はデータを分類する。
構文
条件1がresult1であるときの
CASE WHEN condition1 THEN result1
[WHEN condition2 THEN result2]
[ELSE result3]
END
パラメーター
パラメーター | 説明 |
条件 | このパラメータの値は条件式です。 |
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
クエリと分析結果
例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)
パラメーター
パラメーター | 説明 |
条件 | このパラメータの値は条件式です。 |
結果 | 返される結果。 |
例
すべてのリクエストに対するステータスコードが200リクエストの割合を計算します。
クエリ文
* | SELECT sum(IF(status = 200, 1, 0)) * 1.0 / count(*) AS status_200_percentag
クエリと分析結果
COALESCE式
COALESCE式は、複数の式の最初のnull以外の値を返します。
構文
COALESCE(expression1, expression2, expression3...)
パラメーター
パラメーター | 説明 |
式 | このパラメーターの値は、任意の型の式です。 |
例
前日の費用と前月の同じ日の費用の比率を計算します。
クエリ文
* | SELECT compare("Expenses of the previous day", 604800) AS diff FROM ( SELECT COALESCE(sum(PretaxAmount), 0) AS "Expenses of the previous day" FROM log )
クエリと分析結果
値6514393413.0は、前日の費用を示します。
値19578267596.0は、前月の同じ日の費用を示します。
値0.33273594719539659は、前月の同じ日の費用に対する前日の費用の比率を示します。
NULLIF式
NULLIF式は、2つの式の値が同じかどうかを評価します。 値が同じ場合は、nullが返されます。 それ以外の場合、最初の式の値が返されます。
構文
NULLIF(expression1, expression2)
パラメーター
パラメーター | 説明 |
式 | このパラメーターの値は有効なスカラー式です。 |
例
client_ipフィールドとhostフィールドの値が同じかどうかを評価します。 値が異なる場合、client_ipフィールドの値が返されます。
クエリ文
* | SELECT NULLIF(client_ip,host)
クエリと分析結果
TRY式
TRY式は、式の呼び出し中に発生したエラーをキャプチャし、エラーが発生した場合でもSimple Log Serviceがデータのクエリと分析を継続できるようにします。
構文
TRY(expression)
パラメーター
パラメーター | 説明 |
式 | このパラメーターの値は、任意の型の式です。 |
例
regexp_extract式が呼び出されたときにエラーが発生した場合、TRY式はエラーをキャプチャし、Simple Log Serviceは引き続きデータのクエリと分析を行います。 クエリと分析の結果が返されます。
クエリ文
* | SELECT TRY(regexp_extract(request_uri, '.*\/(file.*)', 1)) AS file, count(*) AS count GROUP BY file
クエリと分析結果