SQL語法
更新時間 2024-08-20 18:52:05
最近更新時間: 2024-08-20 18:52:05
分享文章
本文主要介紹SQL統計語法。
SQL是用于訪問和處理數據庫的標準計算機語言,云日志服務SQL提供了查詢日志單元中結構化數據的語句。
在自定義語句模式下,您可以編寫SQL語句進行統計分析,云日志服務將根據SQL語句返回統計分析結果。具體操作步驟請參考SQL統計分析概述。
語法格式
SELECT [ ALL | DISTINCT ] { * | exprs }
FROM { <subquery>}
[ WHERE where_condition ]
[ GROUP BY [ col_list_name ]
[ HAVING expr ]
[ ORDER BY expr [ ASC | DESC ], expr [ ASC | DESC ], ... ]
[ LIMIT limit ]
語句說明
| 語句 | 說明 | 示例 |
|---|---|---|
| SELECT | 從表中選取數據,默認從當前日志單元中獲取符合檢索條件的數據內容。可省略后續的FROM log。 | SELECT visitCount FROM log |
| DISTINCT | 返回去重后的結果。 | SELECT DISTINCT visitCount |
| AS | 為列名稱指定別名。 | SELECT visitCount AS pv |
| FROM | 表示當前查詢數據的源數據集, 可以是當前日志單元的結構化數據,該情況下FROM后只能接log,也可以是當前日志單元結構化數據的一個子集。不加FROM的時候默認從當前日志單元結構化數據查詢,如果查詢的數據源是一個子集,您需要編寫子查詢語句。 | SELECT visitCount SELECT visitCount FROM log |
| WHERE | 指定查詢的過濾條件,支持算術運算符、關系運算符和邏輯運算符。具體過濾條件可填在where_condition處。 | SELECT visitCount WHERE visitCount > 0 |
| GROUP BY | 指定作為分組依據的結構化字段,支持根據單字段或多字段分組。具體的結構化字段列表可填入col_list_name處。 | SELECT host, count(*) AS pv WHERE visitCount > 0 GROUP BY host |
| HAVING | 只能與GROUP BY配合使用。指定用于過濾GROUP BY結果的結構化字段。 | SELECT host, count(*) AS pv GROUP BY host HAVING pv > 10 |
| ORDER BY | 后面的字段必須是用于GROUP BY分組的字段,對GROUP BY的查詢結果進行排序,用于排序的可以是任意一個結構化字段。 | SELECT host, count(*) AS pv GROUP BY host ORDER BY pv |
| ASC/DESC | ASC為升序,DESC為降序,默認為ASC。 | SELECT host, count(*) AS pv GROUP BY host ORDER BY pv DESC |
| LIMIT | 對查詢結果進行限制,用于限制返回的結構化日志條數。一次查詢最多返回20000條結構化日志。說明:如果不使用LIMIT語句,默認返回查詢結果中最新的100條數據。 | SELECT host LIMIT 100 |
注意
SQL 語句對大小寫不敏感,如SELECT 等效于 select。
使用SELECT從日志單元中獲取數據時,默認最大獲取100行數據,如需獲取更多數據請使用LIMIT語法指定需要獲取的行數,最多可獲取2萬行。
字符串必須使用單引號''包裹,無符號包裹或被雙引號""包裹的字符表示字段或列名。例如'status'表示字符串 status,status或"status"表示日志字段 status。字符串內本身包含單引號'時,需使用''(兩個單引號)代表單引號本身。
SELECT中字段名稱需符合列名規范,不符合該規范時,需使用雙引號""包裹。
每次只能執行一個sql語句。
統計分析語句中默認不需要填寫FROM子句和WHERE子句,默認統計當前日志單元中的數據。
不需要在統計分析語句末尾加分號表示結束。
常用SQL語句示例
| 查詢需求 | 查詢語句 |
|---|---|
| 標準查詢 | SELECT "field" WHERE "field" = 'value' |
| 統計行數 | SELECT count(*) |
| 列的別名 | SELECT count(*) AS "pv" |
| 去重查詢 | SELECT DISTINCT("field") 或 select distinct field |
| 分頁查詢 | SELECT "field" LIMIT 100 |
| 排序查詢 | SELECT "ts" order by "ts" |
| 分組查詢 | SELECT "field" GROUP BY "field" |
| 分組統計 | SELECT "field",count(*) GROUP BY "field" |
| 模糊查詢 | SELECT * where "field" like 'value%' |
| 查詢總和 | SELECT sum("field") |
| 查詢最大值 | SELECT max("field") |
| 查詢最小值 | SELECT min("field") |
| 查詢平均值 | SELECT avg("field") |
| SQL嵌套子查詢 | SELECT sum(pv) FROM (SELECT "field",count(*) AS "pv" GROUP BY "field") |
| HAVING子句過濾 | SELECT "field",count(*) AS "pv" GROUP BY "field" HAVING "pv" > 10 |
| 查詢包含GET,POST請求 | SELECT * WHERE "request_method" IN ('GET', 'POST') |
| 查詢不包含GET,POST請求 | SELECT * WHERE "request_method" NOT IN ('GET', 'POST') |
| 查詢非GET請求的日志 | SELECT * WHERE "request_method" != 'GET' |
| 查詢GET請求成功并且狀態碼為200且請求時間小于60秒的日志 | SELECT * WHERE "request_method" = 'GET' AND "request_time" < 60 |
| 查詢請求時間大于等于60秒,并且小于200秒的日志 | SELECT * WHERE "request_ time" >60 and "request_time" < 200 |
| 查詢GET請求或POST請求的日志 | SELECT * WHERE "request_method" = 'GET' OR "request_method" = 'POST' |