

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

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

 使用 `parse` 從日誌欄位擷取資料，並建立一個您可在查詢中處理的擷取欄位。**`parse`** 支援使用萬用字元的 glob 模式和規則運算式。如需規則表達式語法的資訊，請參閱 [支援的規則運算式 (regex) 語法](FilterAndPatternSyntax.md#regex-expressions)。

 您可以使用規則表達式剖析巢狀 JSON 欄位。

**範例：剖析巢狀 JSON 欄位**

 程式碼片段會示範如何剖析在擷取期間已扁平化的 JSON 日誌事件。

```
{'fieldsA': 'logs', 'fieldsB': [{'fA': 'a1'}, {'fA': 'a2'}]}
```

 程式碼片段會顯示一個具有規則運算式的查詢，其會擷取 `fieldsA` 和 `fieldsB` 的值，以建立擷取欄位 `fld` 和 `array`。

```
parse @message "'fieldsA': '*', 'fieldsB': ['*']" as fld, array
```

**具名擷取群組**

當您將 **`parse`** 與正規表達式搭配使用時，您可以使用具名擷取群組將模式擷取到欄位中。語法是 `parse @message (?<Name>pattern)`。

以下範例在 VPC 流量日誌上使用擷取群組，將 ENI 擷取到名為 `NetworkInterface` 的欄位中。

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

**注意**  
 JSON 日誌事件會在擷取期間扁平化。目前不支援剖析具有 glob 表達式的巢狀 JSON 欄位。您只能剖析包含不超過 200 個日誌事件欄位的 JSON 日誌事件。剖析巢狀 JSON 欄位時，您必須格式化查詢中的規則表達式，以符合 JSON 日誌事件的格式。

## 剖析命令的範例
<a name="CWL_QuerySyntax-parse-examples"></a>

**使用 glob 運算式，從日誌欄位 `@message` 中擷取欄位 `@user`、`@method` 和 `@latency`，並傳回 `@method` 和 `@user` 各種不重複組合的平均延遲。**

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

**使用規則運算式，從日誌欄位 `@message` 中擷取欄位 `@user2`、`@method2` 和 `@latency2`，並傳回 `@method2` 和 `@user2` 各種不重複組合的平均延遲。**

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

**擷取欄位 `loggingTime`、`loggingType` 和 `loggingMessage`，並篩選包含 `ERROR` 或 `INFO` 字串的日誌事件，然後針對包含 `ERROR` 字串的事件，僅顯示 `loggingMessage` 和 `loggingType` 欄位。**

```
FIELDS @message
    | PARSE @message "* [*] *" as loggingTime, loggingType, loggingMessage
    | FILTER loggingType IN ["ERROR", "INFO"]
    | DISPLAY loggingMessage, loggingType = "ERROR" as isError
```