

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# parse
<a name="CWL_QuerySyntax-Parse"></a>

使用 從日誌欄位`parse`擷取資料，並建立您可以在查詢中處理的擷取欄位。`parse` 命令支援三種模式：glob 表達式、常規表達式和 logfmt。

如果省略 `fieldName` ，預設`@message`會使用 。您可以指定欄位名稱做為第一個引數，從任何具名欄位進行剖析。

如果日誌事件不符合指定的模式，您仍然會在結果中看到它，但沒有擷取的欄位。

## Glob 模式
<a name="CWL_QuerySyntax-parse-glob"></a>

針對您要擷取的值使用萬用字元 (`*`) 做為預留位置，並使用 將其指派給具名欄位`as`。

**語法**

```
parse {{fieldName}} "{{pattern}}" as {{alias1}}, {{alias2}}
```

萬`*`用字元的數量必須等於別名的數量。

**範例**

```
parse @message "user=*, method:*, latency := *" as @user,
    @method, @latency | stats avg(@latency) by @method, @user
```

```
parse @logStream "*/*/*/*" as env, service, instance, shard
| stats count(*) by env, service
```

**鏈結剖析**

擷取欄位，然後進一步剖析擷取的欄位。

```
parse @message "url=*" as url
| parse url "/api/*/users/*" as apiVersion, userId
| display apiVersion, userId
```

## Regex 模式
<a name="CWL_QuerySyntax-parse-regex"></a>

使用具有具名擷取群組的規則運算式來擷取欄位。如需規則表達式語法的資訊，請參閱 [支援的規則運算式 (regex) 語法](FilterAndPatternSyntax.md#regex-expressions)。

**語法**

```
parse {{fieldName}} /{{regex}}/
```

使用具名擷取群組`(?<{{name}}>...)`來定義擷取的欄位。

**範例**

**使用具名擷取群組來擷取欄位**

```
parse @message /user=(?<user2>.*?), method:(?<method2>.*?),
    latency := (?<latency2>.*?)/ | stats avg(latency2) by @method2,
    @user2
```

**使用具名擷取群組從 VPC 流程日誌擷取 ENI**

```
parse @message /(?<NetworkInterface>eni-.*?) /
| display NetworkInterface, @message
```

## Logfmt 模式
<a name="CWL_QuerySyntax-parse-logfmt"></a>

使用 `parse logfmt`將 logfmt 格式的日誌行剖析為鍵/值對。Logfmt 是一種結構化日誌格式，其中每一行都包含空格分隔的`key=value`配對。

**語法**

```
parse {{fieldName}} logfmt as {{alias}}
```

結果是您使用點表示法 （例如，、) `lf.level`存取的映射`lf.msg`。

**範例**

```
parse @message logfmt as lf
| filter lf.level = "error"
| display lf.msg, lf.duration
```

```
parse @message logfmt as lf
| stats count(*) by lf.host
```