您在創建索引時,可將字段的數據類型設置為text、long、double或JSON。本文介紹各個數據類型的配置示例及注意事項。
text類型
如果您要查詢和分析字符串類型的字段,需在配置索引時,將字段的數據類型設置為text,并開啟統計功能。
開啟全文索引后,日志服務默認將整條日志(除__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,并開啟統計功能。開啟統計功能后,日志服務支持您查詢和分析JSON對象中的字段。
通過選中對Json內所有文本字段自動索引,可實現JSON對象中的所有文本字段自動創建索引。創建索引后,將產生索引流量。
針對非完全合法的JSON數據,日志服務支持解析合法部分。
例如以下為非完整的JSON日志,日志服務可正確解析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函數。
日志服務支持JSON對象中的葉子節點建立索引,但不支持包含葉子節點的子節點建立索引。
日志服務不支持值為JSON數組的字段建立索引,也不支持JSON數組中的字段建立索引。
如果字段的值為Boolean類型,則您可以在建立索引時,將字段的數據類型設置為text。
查詢和分析語句格式為
查詢語句|分析語句
。在分析語句中,您必須使用雙引號("")包裹字段名稱,使用單引號('')包裹字符串。
日志樣例
JSON日志樣例如下所示,除日志服務保留字段外,還包括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