比較演算子は、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 と y の両方が NULL の場合は false を返します。 |
√ |
× |
|
|
x IS NOT DISTINCT FROM y |
x が y と等しい場合に true を返します。= 演算子とは異なり、この演算子は x と y の両方が NULL の場合に 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 未満の場合、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
任意の比較可能なデータ型の式。
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:電話番号の所在地がアクセス IP の所在地と異なる顧客を見つけるために、E コマース企業はアクセスログの mobile フィールドと client_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 -
クエリ結果:クエリは 2 つのレコードを返します。
mobile列とclient_ip列の機密情報はマスクされています。対応するPV値は 13 と 12 です。
-
-
ALL 演算子
ALL 演算子は、値 x をサブクエリの結果セット内のすべての値と比較します。比較がセット内のすべての値に対して true である場合、true を返します。
-
構文
x relational operator ALL(subquery) -
パラメーター
パラメーター
説明
x
任意の比較可能なデータ型の値。
comparison operator
<、>、<=、>=、=、<>、!=
重要ALL 演算子は、基本演算子 (<、>、<=、>=、=、<>、!=) の直後に置く必要があります。
subquery
SQL サブクエリ。
戻り値の型
ブール型。
-
例
この例では、インスタンス 'i-01' のすべてのリクエストの状態コードが 200 であるかどうかを確認します。
-
ログの例
instance_id:i-01 status:200 -
クエリ・分析文
* | select 200 = ALL(select status where instance_id='i-01') -
クエリ・分析結果では、_col0 が false として表示されます。これは、インスタンス 'i-01' のすべてのログの状態が 200 ではないことを意味します。
-
ANY 演算子
ANY 演算子は、値 x を、サブクエリによって返される値のセットと比較します。セット内の少なくとも 1 つの値との比較が true の場合、true を返します。
-
構文
x relational operator ANY(subquery) -
パラメーター
パラメーター
説明
x
任意の比較可能なデータ型の式。
relational operator
<、>、<=、>=、=、<>、または !=
重要ANY演算子の前には関係演算子を置く必要があります。subquery
単一の値の列を返すサブクエリ。列のデータ型は、式
xのデータ型と一致する必要があります。 -
戻り値の型
boolean
-
例
インスタンス
i-01のいずれかのリクエストの状態コードが 200 であるかどうかを確認します。-
フィールドの例
instance_id:i-01 status:200 -
クエリ文
* | SELECT 200 = ANY(SELECT status WHERE instance_id='i-01') -
クエリは、値が
trueの_col0列を返します。これは、条件が満たされたことを示します。
-
BETWEEN 演算子
BETWEEN は、x が y と z の間にあるかどうかを判定し、その場合に true を返します。y と z の間の範囲は閉区間です。
-
構文
x BETWEEN y AND z -
パラメーター
パラメーター
説明
x
任意の比較可能なデータ型の式。
y
任意の比較可能なデータ型の式。
z
任意の比較可能なデータ型の式。
重要-
x、y、およびz のデータの型は同じである必要があります。
-
x、y、または z の値が null の場合、結果は null になります。
-
-
戻り値の型
ブール値
-
例
-
例 1:status フィールドの値が [200, 299] の範囲内にあるかどうかを確認します。
-
クエリ文
* | SELECT status BETWEEN 200 AND 299 -
クエリ・分析結果:クエリは
_col0列に 3 つの行を返し、各行の値はtrueです。これは、対応する各ログの status フィールドの値が 200 と 299 の間にあることを示します。
-
-
例 2:status フィールドの値が [200, 299] の範囲内にないログをカウントします。
-
クエリ文
* | SELECT count(*) AS count FROM log WHERE status NOT BETWEEN 200 AND 299 -
クエリ・分析結果:クエリは 250 の count を返します。
-
-
DISTINCT 演算子
DISTINCT 演算子は、2 つの値、x と y を比較し、NULL 値を正しく処理します。
-
構文
-
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 |
-
戻り値の型
ブール値。
-
例
0 と null を比較します。
-
クエリ文
* | select 0 IS DISTINCT FROM null -
クエリ結果は
trueであり、0 と null が異なることを示します。
-
LIKE 演算子
LIKE 演算子は、文字列が指定された文字パターンに一致するかどうかを確認します。この操作では大文字と小文字が区別されます。
-
構文
x LIKE pattern [escape 'escape_character'] -
パラメーター
パラメーター
説明
x
任意の比較可能なデータ型の式。
pattern
検索する文字パターン。文字列とワイルドカード文字を含めることができます。次のワイルドカード文字がサポートされています:
-
パーセント記号 (%): 0 文字以上の任意の文字列に一致します。
-
アンダースコア (_): 任意の 1 文字に一致します。
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' -
クエリは、値が
trueの_col0列を返します。これは、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 結果
クエリ結果には、値が
trueの新しいフィールドaが含まれます。これは、ログエントリの request_uri フィールドの値が file-6 で終わることを示します。 -
SOME 演算子
SOME 演算子は、値 x をサブクエリが返す値のセットと比較します。セット内のいずれかの値に対して比較が true の場合、true を返します。
-
構文
x relational operator SOME(subquery) -
パラメーター
パラメーター
説明
x
任意の比較可能なデータ型の式。
relational operator
<、>、<=、>=、=、<>、!=
重要SOME演算子は、関係演算子 (<、>、<=、>=、=、<>、または !=) の直後に置く必要があります。subquery
単一の値の列を返すサブクエリ。列のデータ型は、式 x のデータ型と同じである必要があります。
-
戻り値の型
ブール型。
-
例
インスタンス
i-01に関連するいずれかのリクエストのリクエスト時間が 20 秒未満であるかどうかを確認します。-
フィールドの例
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) -
クエリ・分析結果には、値が
200.0の_col0列が含まれます。これは、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
任意の比較可能なデータ型の式。
-
戻り値の型
ブール型。
-
例
-
例 1:status フィールドの値が null かどうかを確認します。
-
クエリ文
* | select status IS NULL -
クエリ・分析結果:クエリは
_col0列を返します。両方の行に値falseが含まれており、statusフィールドが null でないことを示します。
-
-
例 2:status フィールドが null でないログエントリをカウントします。
-
クエリ文
* | SELECT count(*) AS count FROM log WHERE status IS NOT NULL -
クエリ・分析結果:クエリは
1340の count を返します。
-
-