您在建立索引時,可將欄位的資料類型設定為text、long、double或JSON。本文介紹各個資料類型的配置樣本及注意事項。
text類型
如果您要查詢和分析字串類型的欄位,需在配置索引時,將欄位的資料類型設定為text,並開啟統計功能。
開啟全文索引後,Log Service預設將整條日誌(除__time__以外所有欄位)設定為text類型。
日誌範例
配置索引
查詢和分析語句
查詢非GET請求的日誌。
not request_method : GET
查詢以cn開頭的日誌。
cn*
統計用戶端分布情況。
* | SELECT ip_to_province(client_ip) as province, count(*) AS pv GROUP BY province ORDER BY pv
long和double類型
設定欄位的資料類型為long或double後,您才能通過數值範圍查詢該欄位的值。
如果日誌欄位的值為整數類型,建議您在配置索引時,將欄位的資料類型設定為long。
如果日誌欄位的值為浮點數類型,建議您在配置索引時,將欄位的資料類型設定double。
如果設定資料類型為long,而實際欄位值為浮點數類型,則無法查詢該欄位。
如果設定資料類型為long或double,而實際欄位值為字串類型,則無法查詢該欄位。
如果設定資料類型為long或double,則不支援使用星號(*)或半形問號(?)進行模糊查詢。
如果欄位的值為非法的數值,則使用not key > -1000000語句進行查詢,表示查詢所有有效數值之外的日誌,其中-1000000為足夠小的值即可。
日誌範例
配置索引
查詢和分析語句
查詢請求時間大於60秒的日誌。
request_time > 60
查詢請求時間大於等於60秒,並且小於200秒的日誌。
request_time in [60 200)
request_time >= 60 and request_time < 200
查詢請求狀態代碼為200的日誌。
status = 200
JSON類型
如果欄位的值為JSON類型,您可在配置索引時,將欄位的資料類型設定為JSON。
針對JSON對象中的欄位,您可根據其值,將資料類型設定為long、double或text,並開啟統計功能。開啟統計功能後,Log Service支援您查詢和分析JSON對象中的欄位。
通過選中對Json內所有文字欄位自動索引,可實現JSON對象中的所有文字欄位自動建立索引。建立索引後,將產生索引流量。
針對非完全合法的JSON資料,Log Service支援解析合法部分。
例如以下為非完整的JSON日誌,Log Service可正確解析content.remote_addr欄位、content.request.request_length欄位和content.request.request_method欄位。
content: { remote_addr:"192.0.2.0" request: { request_length:"73" request_method:"GE
更多參考資訊
關於查詢和分析JSON日誌的更多操作環境和常見問題,包括設定索引、查詢和分析具有索引的JSON欄位、使用JSON函數、分析JSON數組等,請參見查詢和分析JSON日誌的常見問題。
查詢和分析JSON日誌相關的基礎配置和基本用法,請參見查詢和分析JSON日誌。
在查詢和分析JSON日誌時,如果資料量比較小,您可以不對JSON葉子節點建立欄位索引,而是使用JSON函數進行查詢和分析。另外,針對一些特殊情況,只能使用JSON函數進行查詢與分析。相關案例,請參見何時使用JSON函數。關於JSON函數的完整介紹和案例,請參見JSON函數。
Log Service支援JSON對象中的葉子節點建立索引,但不支援包含葉子節點的子節點建立索引。
Log Service不支援值為JSON數組的欄位建立索引,也不支援JSON數組中的欄位建立索引。
如果欄位的值為Boolean類型,則您可以在建立索引時,將欄位的資料類型設定為text。
查詢和分析語句格式為
查詢語句|分析語句
。在分析語句中,您必須使用雙引號("")包裹欄位名稱,使用單引號('')包裹字串。
日誌範例
JSON日誌範例如下所示,除Log Service保留欄位外,還包括class欄位、latency欄位、status欄位和info欄位。其中info欄位的值是JSON對象,並存在多層嵌套。
配置索引
相關說明如下:
IP欄位和data欄位的值為JSON數組,所以您無法為IP欄位和data欄位建立索引,也無法通過這兩個欄位進行查詢和分析。
region欄位和CreateTime欄位在JSON數組中,所以您無法為region欄位和CreateTime欄位建立索引,也無法通過這兩個欄位進行查詢和分析。
查詢和分析語句
查詢usedTime欄位的值大於60秒的日誌。
info.usedTime > 60
查詢success欄位的值為true的日誌。
info.success : true
查詢usedTime欄位的值大於60秒且projectName的值不為project01的日誌。
info.usedTime > 60 not info.param.projectName : project01
計算擷取Project資訊的平均時間長度。
methodName = getProjectInfo | SELECT avg("info.usedTime") AS avg_time