

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ブール、比較、数値、日時、その他の関数
<a name="CWL_QuerySyntax-operations-functions"></a>

 CloudWatch Logs Insights は、以下のセクションで説明するように、クエリ内の他の多くの演算や関数をサポートしています。

**Topics**
+ [算術演算子](#CWL_QuerySyntax-operations-arithmetic)
+ [ブール演算子](#CWL_QuerySyntax-operations-Boolean)
+ [比較演算子](#CWL_QuerySyntax-operations-comparison)
+ [数値演算子](#CWL_QuerySyntax-operations-numeric)
+ [構造型](#CWL_QuerySyntax-structure-types)
+ [日時関数](#CWL_QuerySyntax-datetime)
+ [一般関数](#CWL_QuerySyntax-general-functions)
+ [JSON 関数](#CWL_QuerySyntax-json-functions)
+ [IP アドレス文字列関数](#CWL_QuerySyntax-IPaddress-functions)
+ [文字列関数](#CWL_QuerySyntax-string-functions)

## 算術演算子
<a name="CWL_QuerySyntax-operations-arithmetic"></a>

 算術演算子は、数値データ型を引数として受け入れ、数値結果を返します。算術演算子は、`filter` コマンドと `fields` コマンドで使用します。また、他の関数の引数としても使用します。


| 運用 | 説明 | 
| --- | --- | 
|  `a + b` |  加算  | 
|  `a - b` |  減算  | 
|  `a * b` |  乗算  | 
|  `a / b` |  除算  | 
|  `a ^ b` |   指数 (`2 ^ 3` は `8` を返します)   | 
|  `a % b` |   残余または剰余 (`10 % 3` は `1` を返します)   | 

## ブール演算子
<a name="CWL_QuerySyntax-operations-Boolean"></a>

 ブール演算子 `and`、`or`、および `not` を使用します。

**注記**  
 ブール演算子は、**TRUE** または **FALSE** の値を返す関数でのみ使用します。

## 比較演算子
<a name="CWL_QuerySyntax-operations-comparison"></a>

 比較演算子は、すべてのデータ型を引数として受け入れ、ブール値の結果を返します。比較オペレーションは、`filter` コマンドで使用します。また、他の関数の引数としても使用します。


| 演算子 | 説明 | 
| --- | --- | 
|   `=`   |   Equal   | 
|   `!=`   |   等しくない   | 
|   `<`   |   Less than   | 
|  `>` |   Greater than   | 
|  `<=` |   以下   | 
|   `>=`   |   以上   | 

## 数値演算子
<a name="CWL_QuerySyntax-operations-numeric"></a>

 数値オペレーションは、数値データ型を引数として受け入れ、数値結果を返します。数値オペレーションは、`filter` コマンドと `fields` コマンドで使用します。また、他の関数の引数としても使用します。


| 運用 | 結果タイプ | 説明 | 
| --- | --- | --- | 
|   `abs(a: number)`   |   数値   |   絶対値   | 
|   `ceil(a: number)`   |   数値   |   上限 (`a` の値より大きい最小整数) に切り上げられます。  | 
|   `floor(a: number)`   |  数値 |   下限 (`a` の値より小さい最大整数) に切り下げられます。  | 
|   `greatest(a: number, ...numbers: number[])`   |   数値   |   最大値を返します   | 
|   `least(a: number, ...numbers: number[])`   |  数値 |   最小値を返します   | 
|   `log(a: number)`   |   数値   |   自然対数   | 
|   `sqrt(a: number)`   |   数値   |   平方根   | 

## 構造型
<a name="CWL_QuerySyntax-structure-types"></a>

 マップまたはリストは、クエリの属性にアクセスして使用できる、CloudWatch Logs Insights の構造型です。

**例: マップまたはリストを取得するには**  
 `jsonParse` を使用して、JSON 文字列であるフィールドを解析し、マップまたはリストにします。

```
fields jsonParse(@message) as json_message
```

**例: 属性にアクセスするには**  
 ドットアクセス演算子 (map.attribute) を使用して、マップ内の項目にアクセスします。マップ内の属性に特殊文字が含まれている場合は、バッククォートを使用して属性名を囲みます (map.attributes.`special.char`)。

```
fields jsonParse(@message) as json_message
| stats count() by json_message.status_code
```

 ブラケットアクセス演算子 (list[index]) を使用して、リスト内の特定の位置にある項目を取得します。

```
fields jsonParse(@message) as json_message
| filter json_message.users[1].action = "PutData"
```

 キー名に特殊文字が含まれている場合は、特殊文字をバッククォート (``) でラップします。

```
fields jsonParse(@message) as json_message
| filter json_message.`user.id` = "123"
```

**例: 空の結果**  
 マップとリストは、文字列、数値、日時関数では null として扱われます。

```
fields jsonParse(@message) as json_message
| display toupper(json_message)
```

 マップとリストを他のフィールドと比較すると `false` になります。

**注記**  
 `dedup`、`pattern`、`sort`、`stats` におけるマップとリストの使用はサポートされていません。

## 日時関数
<a name="CWL_QuerySyntax-datetime"></a>

 **日時関数** 

 日時関数は、`fields` コマンドと `filter` コマンドで使用します。また、他の関数の引数としても使用します。これらの関数では、集計関数を使用してクエリの時間バケットを作成します。数値と次のいずれかで構成される期間を使用します。
+ `ms` はミリ秒 
+ `s` は秒 
+ `m` は分 
+ `h` は時間 

 たとえば、`10m` は 10 分、`1h` は 1 時間です。

**注記**  
日時関数に最適な時間単位を使用します。CloudWatch Logs は、選択した時間単位に従ってリクエストを制限します。例えば、`s` を使用するすべてのリクエストの最大値として 60 を上限とします。したがって、`bin(300s)` を指定すると、CloudWatch Logs はこれを 60 秒として実際に実装します。60 は 1 分間の秒数であるため、CloudWatch Logs は `s` で 60 を超える数値を使用しません。5 分間のバケットを作成するには、代わりに `bin(5m)` を使用します。  
`ms` の上限は 1000、`s` と `m` の上限は 60、`h` の上限は 24 です。

次の表は、クエリコマンドで使用できるさまざまな日付時刻関数のリストを示したものです。このリストには、各関数の結果タイプと説明が記載されています。

**ヒント**  
 クエリコマンドを作成するときに、時間間隔セレクタを使用してクエリの対象とする期間を選択できます。例えば、5～30 分間隔、1 時間、3 時間、12 時間間隔、またはカスタム時間枠の期間を設定できます。また、特定の日付の間で期間を指定することもできます。


| 関数 | 結果タイプ | 説明 | 
| --- | --- | --- | 
|  `bin(period: Period)` |  タイムスタンプ |  `@timestamp` の値を特定の期間に切り上げ、次に切り詰めます。例えば、`bin(5m)` は `@timestamp` の値を最も近い 5 分に四捨五入します。 これを使用して、複数のログエントリをクエリにまとめることができます。次の例では、1 時間あたりの例外の数を返します。 <pre>filter @message like /Exception/ <br />    | stats count(*) as exceptionCount by bin(1h)<br />    | sort exceptionCount desc</pre> `bin` 関数では、次の時間単位と略語がサポートされています。複数の文字を含むすべての単位と略語では、s の複数形への追加がサポートされています。したがって、`hr` および `hrs` の両方とも時間を指定して機能します。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/CWL_QuerySyntax-operations-functions.html)  | 
|  `datefloor(timestamp: Timestamp, period: Period)` |  タイムスタンプ |  タイムスタンプを特定の期間に切り詰めます。たとえば、`datefloor(@timestamp, 1h)` は `@timestamp` のすべての値を 1 時間の下限に切り詰めます。  | 
|  `dateceil(timestamp: Timestamp, period: Period)` |  タイムスタンプ |  タイムスタンプを特定の期間に切り上げ、次に切り詰めます。たとえば、`dateceil(@timestamp, 1h)` は `@timestamp` のすべての値を 1 時間の上限に切り詰めます。  | 
|  `fromMillis(fieldName: number)` |  タイムスタンプ |  入力フィールドを Unix エポックからのミリ秒数として解釈し、タイムスタンプに変換します。  | 
|  `toMillis(fieldName: Timestamp)` |  数値 |  指定されたフィールドで見つかったタイムスタンプを、Unix エポックからのミリ秒を表す数値に変換します。例えば、`toMillis(@timestamp)` はタイムスタンプを `2022-01-14T13:18:031.000-08:00` から `1642195111000` に変換します。  | 
|  `now()`  |  数値  |  クエリ処理が開始された時刻をエポック秒単位で返します。この関数は引数を取りません。 これを使用して、現在の時刻に従ってクエリ結果をフィルタリングできます。 例えば、次のクエリは、過去 2 時間の 4xx エラーをすべて返します。 <pre>parse @message "Status Code: *;" as statusCode\n <br />| filter statusCode >= 400 and statusCode <= 499  \n <br />| filter toMillis(@timestamp) >= (now() * 1000 - 7200000)</pre> 次の例では、`error` または `failure` という単語のいずれかを含む過去 5 時間のすべてのログエントリを返します。 <pre>fields @timestamp, @message <br />| filter @message like /(?i)(error|failure)/ <br />| filter toMillis(@timestamp) >= (now() * 1000 - 18000000)</pre>  | 

**注記**  
 現在、CloudWatch Logs Insights では、可読性のあるタイムスタンプが記録されているログのフィルタリングをサポートしていません。

## 一般関数
<a name="CWL_QuerySyntax-general-functions"></a>

 **一般関数** 

 一般関数は、`fields` コマンドと `filter` コマンドで使用します。また、他の関数の引数としても使用します。


| 関数 | 結果タイプ | 説明 | 
| --- | --- | --- | 
|   `ispresent(fieldName: LogField)`   |   ブール値   |   フィールドが存在する場合は `true` を返します   | 
|   `coalesce(fieldName: LogField, ...fieldNames: LogField[])`   |   LogField   |   リストから最初の null でない値を返します   | 

## JSON 関数
<a name="CWL_QuerySyntax-json-functions"></a>

 **JSON 関数** 

 JSON 関数は、`fields` コマンドと `filter` コマンドで使用します。また、他の関数の引数としても使用します。


| 関数 | 結果タイプ | 説明 | 
| --- | --- | --- | 
|   `jsonParse(fieldName: string)`   |   マップ \$1 リスト \$1 空   |   入力が JSON オブジェクトまたは JSON 配列の文字列表現である場合、マップまたはリストを返します。入力がその表現のいずれかでない場合、空の値を返します。  | 
|   `jsonStringify(fieldName: Map \| List)`   |   String   |   マップまたはリストデータから JSON 文字列を返します。  | 

## IP アドレス文字列関数
<a name="CWL_QuerySyntax-IPaddress-functions"></a>

 **IP アドレス文字列関数** 

 IP アドレス文字列関数は、`filter` コマンドと `fields` コマンドで使用します。また、他の関数の引数としても使用します。


| 関数 | 結果タイプ | 説明 | 
| --- | --- | --- | 
|  `isValidIp(fieldName: string)` |  ブール型 |  フィールドが有効な IPv4 または IPv6 アドレスである場合、`true` を返します。  | 
|  `isValidIpV4(fieldName: string)` |  ブール型 |  フィールドが有効な IPv4 アドレスである場合、`true` を返します。  | 
|  `isValidIpV6(fieldName: string)` |  ブール型 |  フィールドが有効な IPv6 アドレスである場合、`true` を返します。  | 
|  `isIpInSubnet(fieldName: string, subnet: string)` |  ブール型 |  指定された v4 または v6 サブネット内でフィールドが有効な IPv4 または IPv6 アドレスである場合、`true` を返します。サブネットを指定するときは、`192.0.2.0/24` または `2001:db8::/32` などの CIDR 表記を使用します。`192.0.2.0` または `2001:db8::` は CIDR ブロックの開始アドレスです。  | 
|  `isIpv4InSubnet(fieldName: string, subnet: string)` |  boolean |  指定された v4 サブネット内でフィールドが有効な IPv4 アドレスである場合、`true` を返します。サブネットを指定するときは、`192.0.2.0/24` などの CIDR 表記を使用します。`192.0.2.0` は CIDR ブロックの開始アドレスです。  | 
|  `isIpv6InSubnet(fieldName: string, subnet: string)` |  boolean |  指定された v6 サブネット内でフィールドが有効な IPv6 アドレスである場合、`true` を返します。サブネットを指定するときは、`2001:db8::/32` などの CIDR 表記を使用します。`2001:db8::` は CIDR ブロックの開始アドレスです。  | 

## 文字列関数
<a name="CWL_QuerySyntax-string-functions"></a>

 **文字列関数** 

 文字列関数は、`fields` コマンドと `filter` コマンドで使用します。また、他の関数の引数としても使用します。


| 関数 | 結果タイプ | 説明 | 
| --- | --- | --- | 
|  `isempty(fieldName: string)` |  Number |  フィールドが欠落しているか、空の文字列である場合、`1` を返します。  | 
|  `isblank(fieldName: string)` |  Number |  フィールドが欠落しているか、空の文字列であるか、空白が含まれている場合、`1` を返します。  | 
|  `concat(str: string, ...strings: string[])` |  文字列 |  複数の文字列を連結します。  | 
|  `ltrim(str: string)` `ltrim(str: string, trimChars: string)` |  文字列 |  関数に 2 番目の文字列引数がない場合、文字列の左側からホワイトスペースを削除します。関数に 2 番目の文字列引数がある場合、ホワイトスペースは削除されません。その場合、`str`の左から `trimChars` 個の文字が削除されます。たとえば、`ltrim("xyZxyfooxyZ","xyZ")` は `"fooxyZ"` を返します。  | 
|  `rtrim(str: string)` `rtrim(str: string, trimChars: string)` |  文字列 |  関数に 2 番目の文字列引数がない場合、文字列の右側からホワイトスペースを削除します。関数に 2 番目の文字列引数がある場合、ホワイトスペースは削除されません。その場合、`str`の右から `trimChars` 個の文字が削除されます。たとえば、`rtrim("xyZfooxyxyZ","xyZ")` は `"xyZfoo"` を返します。  | 
|  `trim(str: string)` `trim(str: string, trimChars: string)` |  文字列 |  関数に 2 番目の文字列引数がない場合、文字列の両方の端からホワイトスペースを削除します。関数に 2 番目の文字列引数がある場合、ホワイトスペースは削除されません。その場合、`str`の両方から `trimChars` 個の文字が削除されます。たとえば、`trim("xyZxyfooxyxyZ","xyZ")` は `"foo"` を返します。  | 
|  `strlen(str: string)` |  数値 |  文字列の長さを Unicode コードポイントで返します。  | 
|  `toupper(str: string)` |  文字列 |  文字列を大文字に変換します。  | 
|  `tolower(str: string)` |  文字列 |  文字列を小文字に変換します。  | 
|  `substr(str: string, startIndex: number)` `substr(str: string, startIndex: number, length: number)` |  文字列 |  数値引数で指定されたインデックスから文字列の末尾までの部分文字列を返します。関数に 2 番目の数値引数がある場合、この引数には取得される部分文字列の長さが含まれます。たとえば、`substr("xyZfooxyZ",3, 3)` は `"foo"` を返します。  | 
|  `replace(fieldName: string, searchValue: string, replaceValue: string)` |  文字列 |  `searchValue` の `fieldName: string` のすべてのインスタンスを `replaceValue` に置き換えます。 例えば、関数 `replace(logGroup,"smoke_test","Smoke")` はフィールド `logGroup` に文字列値 `smoke_test` を含むログイベントを検索し、その値を文字列 `Smoke` に置き換えます。  | 
|  `strcontains(str: string, searchValue: string)` |  数値 |  `str` に `searchValue` が含まれている場合は 1 を返し、それ以外の場合は 0 を返します。  | 