本文是向大家介绍日志服务一些常用函数,大家在实际工作中可以参考使用。
1、arbitrary函数
arbitrary函数用于返回x中任意一个非空的值。
语法
arbitrary(x)
参数说明
参数说明
x参数值为任意数据类型。
返回值类型
与参数值的数据类型一致。
示例:查询某个场景任意一个tarceid
分析语句:content.business: 查询首页轮播 | SELECT arbitrary("content.trace_id")
2、count函数
count函数用于计数。
语法
· 统计所有的日志条数。
count(*)
· 统计所有的日志条数。等同于count(*)。
count(1)
· 统计x中值不为NULL的日志条数。
count(x)
参数说明
参数说明
x参数值为任意数据类型。
返回值类型
integer类型。
示例:查询某业务一段时间pv总量
分析语句: * | select count(*) as pv
3、split_part函数
split_part函数通过指定的分隔符拆分字符串,并返回指定位置的内容。
语法
split_part(x, delimeter, part)
参数说明
参数说明
x参数值为varchar类型。
delimeter分隔符。
part大于0的整数。
返回值类型
varchar类型。
示例:获取某日志中uid
分析语句:*|SELECT '北京分省订购',split_part(split_part(split_part("content.inParams",'uid',2 ),',',1),'"',3) from log where "content.business"='分省订购-北京订购接口' and "content.consumer" = 'mfbizcore'
4、substr函数
substr函数用于返回字符串中指定位置的子串。
语法
· 返回字符串中指定位置的子串。
substr(x, start)
· 返回字符串中指定位置的子串,并指定子串长度。
substr(x,start,length)
参数说明
参数说明
x参数值为varchar类型。
start开始提取子串的位置,从1开始。
length子串的长度。
返回值类型
varchar类型。
示例:统计小米手机一段时间总量
分析语句:* and content.mobile: xiaomi | select lower(substr(“content.mobile”,1,6)) as mobile,count(*) group by mobile
5、time_series函数
time_series函数用于补全您查询时间窗口内缺失的数据。
注意 time_series函数必须搭配GROUP BY语法和ORDER BY语法使用,且ORDER BY语法不支持DESC排序方式。
语法
time_series(x, window_time, format, padding_data)
参数说明
参数说明
x时间列,例如__time__。时间列的值为long类型或timestamp类型。
window_time窗口大小,单位为s(秒)、m(分)、h(小时)、d(天)。例如2h、5m、3d。
format返回结果的时间格式。
padding_data补全的内容。包括:
· 0:将缺失的值设置为0。
· null:将缺失的值设置为null。
· last:将缺失的值设置了上一个时间点对应的值。
· next:将缺失的值设置了下一个时间点对应的值。
· avg:将缺失的值设置为前后两个时间点的平均值。
返回值类型
varchar类型。
示例:统计每小时pv
分析语句:* | select time_series(__time__, '1h', '%Y-%m-%d %H:%i:%s', '0') as time, count(*) as pv from log group by time order by time
6、compare函数
compare函数用于对比当前时间周期内的计算结果与n秒之前时间周期内的计算结果。
语法
· 对比当前时间周期内的计算结果与n秒之前时间周期内的计算结果。
compare(x, n)
· 对比当前时间周期内的计算结果与n1、n2、n3秒之前时间周期内的计算结果。
compare(x, n1, n2, n3...)
参数说明
参数说明
x参数值为double类型或long类型。
n时间窗口,单位为秒。例如3600(1小时)、86400(1天)、604800(1周)、31622400(1年)。
返回值类型
JSON数组。格式为[当前计算结果, n秒前的计算结果, 当前计算结果与n秒前计算结果的比值, n秒前的UNIX时间戳]。
示例:统计某时间段与昨天同时段的域名访问量比值
分析语句:* and request_uri: "qcj/api/activity/show" and http_user_agent: AliApp and http_user_agent: "MiniProgram APXWebView" | SELECT yuming,diff [1] AS today,diff [2] AS yesterday,round((1-diff [3])*100) AS ratio FROM (SELECT yuming,compare(PV, 86400) AS diff FROM ( select count(*) as pv,split_part(http_referer, '/', 3) as yuming from log GROUP by yuming )GROUP by yuming)