本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
OpenSearch SQL 語言
本節包含使用 OpenSearch SQL 查詢 CloudWatch Logs 的基本簡介。如果您習慣使用關聯式資料庫,它會提供熟悉的選項。OpenSearch SQL 提供 SQL 功能的子集,使其成為執行臨機操作查詢和資料分析任務的理想選擇。透過 OpenSearch SQL,您可以使用 SELECT、 FROM、WHERE、GROUP BY、HAVING 等命令,以及各種其他 SQL 命令和函數。您可以跨日誌群組執行 JOINs、使用子查詢跨日誌群組關聯資料,並使用一組豐富的 JSON、數學、字串、條件式和其他 SQL 函數,對日誌和安全資料執行強大的分析。
您只能將 OpenSearch SQL 用於標準日誌類別中的日誌群組查詢。當您選取要查詢的日誌群組時,您可以選取單一日誌群組、共用字首的一組日誌群組,或選取所有日誌群組
注意
下表列出 CloudWatch Logs 中支援的 SQL 命令和函數 如需所有 OpenSearch SQL 命令的資訊,包括語法,請參閱 OpenSearch Service 開發人員指南中的支援的 SQL 命令。
支援的 SQL 命令
注意
在範例查詢欄中,根據您查詢的資料來源
,視需要取代 。<logGroup>
命令或函數 | 查詢範例 | 描述 |
---|---|---|
SELECT |
|
顯示投影值。 |
FROM |
|
指定要從中擷取資料的來源資料表 (s) 或檢視 (s) 的內建子句,支援各種類型的聯結和子查詢。 |
WHERE |
|
根據提供的欄位條件篩選日誌事件。 |
GROUP BY |
|
根據類別對日誌事件進行分組,並根據統計資料尋找平均值。 |
HAVING |
|
根據分組條件篩選結果。 |
ORDER BY |
|
根據 ORDER BY 子句中的欄位排序結果。您可以依遞減或遞增順序排序。 |
JOIN |
|
根據常見欄位聯結兩個資料表的結果。必須指定內部 JOIN 或左側外部聯結 |
LIMIT |
|
將顯示的查詢結果限制為前 N 列。 |
字串函數 |
|
SQL 中的內建函數,可以操作和轉換 SQL 查詢中的字串和文字資料。例如,轉換案例、結合字串、擷取部分和清理文字。 |
日期函數 |
|
用於處理和轉換 SQL 查詢中日期和時間戳記資料的內建函數。例如 date_add、date_format、datediff 和 current_date。 |
條件函數 |
|
內建函數,可根據指定的條件執行動作,或以條件方式評估表達式。例如,CASE 和 IF。 |
彙總函數 |
|
對多個資料列執行計算以產生單一摘要值的內建函數。例如,SUM、COUNT、AVG、MAX 和 MIN。 |
JSON 函數 |
|
用於在 SQL 查詢中剖析、擷取、修改和查詢 JSON 格式資料的內建函數 (例如,from_json、to_json、get_json_object、json_tuple),允許在資料集中操作 JSON 結構。 |
陣列函數 |
|
用於在 SQL 查詢中使用陣列類型資料欄的內建函數,允許存取、修改和分析陣列資料 (例如,大小、爆炸、Array_contains) 等操作。 |
範圍函數 |
|
內建函數,可在與目前資料列 (視窗) 相關的指定資料列中執行計算,啟用排名、執行總計和移動平均值等操作。例如,ROW_NUMBER、RANK、LAG 和 LEAD |
轉換函數 |
|
用於在 SQL 查詢中將資料從一種類型轉換為另一種類型的內建函數,啟用資料類型轉換和格式轉換。例如,CAST、TO_DATE、TO_TIMESTAMP 和 BINARY。 |
述詞函數 |
|
根據指定的條件或模式,評估條件並傳回布林值 (true/false) 的內建函數。例如,IN、LIKE、BETWEEN、IS NULL 和 EXISTS。 |
選取多個日誌群組 |
|
可讓您在 SELECT 陳述式中指定多個日誌群組 |
multi-log-group查詢支援的 SQL
若要支援在 SQL 中查詢多個日誌群組的使用案例,您可以使用 logGroups
命令。使用此語法,您可以在 FROM 命令中指定多個日誌群組來查詢它們。
語法:
`logGroups( logGroupIdentifier: ['LogGroup1','LogGroup2', ...'LogGroupn'] )
在此語法中,您可以在 logGroupIdentifier
參數中指定最多 50 個日誌群組。若要參考監控帳戶中的日誌群組,請使用 ARNs 而非LogGroup
名稱。
查詢範例:
SELECT LG1.Column1, LG1.Column2 from `logGroups( logGroupIdentifier: ['LogGroup1', 'LogGroup2'] )` as LG1 WHERE LG1.Column1 = 'ABC'
查詢 CloudWatch Logs 時,不支援在FROM
陳述式之後涉及多個日誌群組的下列語法。
SELECT Column1, Column2 FROM 'LogGroup1', 'LogGroup2', ...'LogGroupn' WHERE Column1 = 'ABC'
限制
當您使用 OpenSearch SQL 在 CloudWatch Logs Insights 中查詢時,適用下列限制。
-
您只能在 SELECT 陳述式中包含一個 JOIN。
-
僅支援一個層級的巢狀子查詢。
-
不支援以分號 (;) 分隔的多個陳述式查詢。
-
不支援包含相同但僅在 欄位名稱 (例如 field1 和 FIELD1) 時才不同的查詢。
例如,不支援下列查詢:
Select AWSAccountId, AwsAccountId from LogGroup
不過,由於兩個日誌群組中的欄位名稱 (
@logStream
) 相同,因此支援下列查詢:Select a.`@logStream`, b.`@logStream` from Table A INNER Join Table B on a.id = b.id
-
函數和表達式必須在欄位名稱上操作,並成為 SELECT 陳述式的一部分,其中包含 FROM 子句中指定的日誌群組。
例如,不支援此查詢:
SELECT cos(10) FROM LogGroup
支援此查詢:
SELECT cos(field1) FROM LogGroup
-
使用 SQL 或 PPL 命令時,請在反引號中括住特定欄位,以成功查詢它們。具有特殊字元 (非字母和非數字) 的欄位需要反引號。例如,將
@message
、Operation.Export
和 括在反引號Test::Field
中。您不需要在反引號中以純字母名稱括住欄位。具有簡單欄位的範例查詢:
SELECT SessionToken, Operation, StartTime FROM `LogGroup-A` LIMIT 1000;
附加反引號的類似查詢:
SELECT `@SessionToken`, `@Operation`, `@StartTime` FROM `LogGroup-A` LIMIT 1000;