日志服务扫描(Scan)查询功能支持免配置索引进行目标字段的扫描,用于查询相关日志。本文介绍扫描查询功能的相关信息。
背景信息
日志服务基于索引技术,提供快速查询日志功能,但在某些场景下可能会遇到如下限制,无法创建或使用索引。
为降低使用费用,而未对某些字段建立索引,但临时急需查询历史日志。
字段值长度超过了索引限制,超出部分无法被查询。
字段名较多,事先无法获取具体的字段名,无法建立字段索引。
字段类型发生变化,无法查询。
针对上述问题,日志服务推出扫描查询和扫描分析功能,用于查询和分析日志,无需对扫描的目标字段建立索引。关于扫描分析的更多信息,请参见扫描(Scan)分析概述。
基本语法
基本语法
查询语句 | WHERE bool_expression
使用示例
status:200 | WHERE userId = '123'
工作流程
日志服务接收到扫描请求后,执行流程主要分为如下两步。
先执行对应的查询语句进行日志查询。
重要查询语句仍依赖于索引。例如执行
status:200 | WHERE userId = '123'
语句前,您需为status字段创建索引,但无需为userId字段创建索引。通过WHERE子句,在上述查询结果中挑选符合扫描条件的日志,并返回最终的查询结果。
查询与扫描的对比
对比项 | 索引查询 | 扫描查询 |
语法 |
|
|
是否需要配置索引 | 需要。 | 不需要。 重要 竖线(|)前的查询语句仍依赖于索引。 |
是否支持搭配分析语句 | 支持。 | 支持。 |
是否支持随机翻页 | 支持。 | 不支持。 只能连续翻页(前翻或后翻)。 |
日志直方图 | 基于查询语句的查询结果进行展示。 | 基于查询语句的查询结果、扫描进度进行展示。 |
运算符与函数 | 支持逻辑、数学运算;支持模糊查询;不支持SQL函数。 | 支持LIKE、IN、BETWEEN、IS NULL、IS NOT NULL、EXISTS等关键词;支持部分SQL函数,具体请参见支持的函数。 |
字段类型 | 由索引配置中的数据类型决定。更多信息,请参见数据类型。 | 无论字段是否已配置索引,在扫描模式下 WHERE子句中出现的字段均按照text类型处理。 说明 如果您需要使用某个入参为非text的函数(例如abs),则需要通过cast函数转换字段类型。更多信息,请参见cast函数。 |
结果集大小 | 通过控制台或SDK指定,最大100条。 | 满足下述任一条件,本次扫描结束并返回扫描结果。
|
费用 | 索引流量和索引存储费用。更多信息,请参见按使用功能计费模式计费项。 | 扫描部分按照流量收费,即基于索引查询后扫描命中的数据量收费。 |
优点
节省费用:无需创建索引,节省索引流量和存储空间费用。
灵活:在使用时按需定义列的类型,不受是否创建索引及索引类型限制。
搜索能力增强,新支持多种函数。
使用限制
不支持随机翻页。
支持的函数
数学函数
函数名称 | 语法 | 说明 |
abs(x) | 计算x的绝对值。 | |
cbrt(x) | 计算x的立方根。 | |
ceil(x) | 对x进行向上取整数。 ceil函数是ceiling函数的别名。 | |
ceiling(x) | 对x进行向上取整数。 | |
e() | 返回自然底数e的值。 | |
exp(x) | 计算自然底数e的x次幂。 | |
floor(x) | 对x进行向下取整数。 | |
from_base(x, y) | 根据BASE编码将x转为y进制的数字。 | |
ln(x) | 计算x的自然对数。 | |
log2(x) | 计算x以2为底的对数。 | |
log10(x) | 计算x以10为底的对数。 | |
mod(x, y) | 计算x与y相除的余数。 | |
pi() | 返回π值,精确到小数点后15位。 | |
pow(x, y) | 计算x的y次幂。 pow函数是power函数的别名。 | |
power(x, y) | 计算x的y次幂。 | |
radians(x) | 将度转换为弧度。 | |
rand() | 返回随机数。 | |
random() | 返回[0,1)之间的随机数。 | |
random(x) | 返回[0,x)之间的随机数。 | |
round(x) | 对x进行四舍五入取整数。 | |
round(x, n) | 对x进行四舍五入且保留n位小数。 | |
sqrt(x) | 计算x的平方根。 | |
to_base(x, y) | 根据BASE编码将x转为y进制的字符串。 | |
truncate(x) | 截断x的小数部分。 | |
width_bucket(x, bound1, bound2, numBuckets) | 将一段数值范围划分成大小相同的多个Bucket,然后返回x所属的Bucket。 | |
width_bucket(x, bins) | 使用数组指定Bucket的范围,然后返回x所属的Bucket。 |
字符串函数
函数名称 | 语法 | 说明 |
chr(x) | 将ASCII码转换为字符。 | |
codepoint(x) | 将字符转换为ASCII码。 | |
concat(x, y...) | 将多个字符串拼接成一个字符串。 | |
length(x) | 计算字符串的长度。 | |
lower(x) | 将字符串转换为小写形式。 | |
lpad(x, length, lpad_string) | 在字符串的开头填充指定字符,直到指定长度后返回结果字符串。 | |
ltrim(x) | 删除字符串开头的空格。 | |
replace(x, sub_string ) | 删除字符串中匹配的字符。 | |
replace(x, sub_string, replace_string) | 将字符串中所匹配的字符替换为其他指定字符。 | |
reverse(x) | 返回反向顺序的字符串。 | |
rpad(x, length, rpad_string) | 在字符串的尾部填充指定字符,直到指定长度后返回结果字符串。 | |
rtrim(x) | 删除字符串中结尾的空格。 | |
split(x, delimeter) | 使用指定的分隔符拆分字符串,并返回子串集合。 | |
split(x, delimeter, limit) | 通过指定的分隔符拆分字符串并使用limit限制字符串拆分的个数,然后返回拆分后的子串集合。 | |
split_part(x, delimeter, part) | 使用指定的分隔符拆分字符串,并返回指定位置的内容。 | |
strpos(x, sub_string) | 返回目标子串在字符串中的位置。 | |
strpos(x, sub_string, instance) | 返回第instance个目标子串的在字符串中的位置,instance必须是正数。子串从1开始计数,如果没有找到,返回0。 | |
substr(x, start) | 返回字符串中指定位置的子串。 | |
substr(x, start, length) | 返回字符串中指定位置的子串,并指定子串长度。 | |
to_utf8(x) | 将字符串转换为UTF-8编码格式。 | |
trim(x) | 删除字符串中开头和结尾的空格。 | |
upper(x) | 将字符串转化为大写形式。 |
日期和时间函数
函数类型 | 函数名称 | 语法 | 说明 |
日期和时间函数 | date_format(x, format) | 将timestamp类型的日期和时间表达式转化为指定格式的日期和时间表达式。 | |
from_unixtime(x) | 将UNIX时间戳转化为无时区的timestamp类型的日期和时间表达式。 | ||
from_unixtime(x, time zone) | 将UNIX时间戳转化为带时区的timestamp类型的日期和时间表达式。 | ||
from_unixtime(x, hours, minutes) | 将UNIX时间戳转化为带时区的timestamp类型的日期和时间表达式,其中hours和minutes为时区偏移量。 | ||
to_unixtime(x) | 将timestamp类型的日期和时间表达式转化成UNIX时间戳。 | ||
parse_datetime函数 | parse_datetime(x, format) | 根据format将字符串转化为带时区的timestamp类型的日期和时间表达式。 | |
日期和时间提取函数 | day(x) | 提取日期和时间表达式中的天数,按月计算。 day函数等同于day_of_month函数。 | |
day_of_month(x) | 提取日期和时间表达式中的天数,按月计算。 day_of_month函数等同于day函数。 | ||
day_of_week(x) | 提取日期和时间表达式中的天数,按周计算。 day_of_week函数等同于dow函数。 | ||
day_of_year(x) | 提取日期和时间表达式中的天数,按年计算。 day_of_year函数等同于doy函数。 | ||
dow(x) | 提取日期和时间表达式中的天数,按周计算。 dow函数等同于day_of_week函数。 | ||
doy(x) | 提取日期和时间表达式中的天数,按年计算。 doy函数等同于day_of_year函数。 | ||
extract(field from x) | 通过指定的field,提取日期和时间表达式中的日期或时间部分。 | ||
hour(x) | 提取日期和时间表达式中的小时数,按24小时制计算。 | ||
minute(x) | 提取日期和时间表达式中的分钟数。 | ||
millisecond函数 | millisecond(x) | 提取日期和时间表达式中的毫秒数。 | |
month(x) | 提取日期和时间表达式中的月份。 | ||
quarter(x) | 计算目标日期所属的季度。 | ||
second(x) | 提取日期和时间表达式中的秒数。 | ||
year(x) | 提取目标日期中的年份。 | ||
year_of_week(x) | 提取目标日期在ISO周日历中的年份。 year_of_week函数等同于yow函数。 | ||
yow(x) | 提取目标日期在ISO周日历中的年份。 yow函数等同于year_of_week函数。 | ||
时间间隔函数 | date_trunc(unit, x) | 根据您指定的时间单位截断日期和时间表达式,并按照毫秒、秒、分钟,小时、日、月或年对齐。 | |
date_add(unit, N, x) | 在x上加上N个时间单位(unit)。 | ||
date_diff(unit, x, y) | 返回两个时间表达式之间的时间差值,例如计算x和y之间相差几个时间单位(unit)。 |
正则式函数
函数名称 | 语法 | 说明 |
regexp_extract_all(x, regular expression) | 提取目标字符串中符合正则表达式的子串,并返回所有子串的合集。 | |
regexp_extract_all(x, regular expression, n) | 提取目标字符串中符合正则表达式的子串,然后返回与目标捕获组匹配的子串合集。 | |
regexp_extract(x, regular expression) | 提取并返回目标字符串中符合正则表达式的第一个子串。 | |
regexp_extract(x, regular expression, n) | 提取目标字符串中符合正则表达式的子串,然后返回与目标捕获组匹配的第一个子串。 | |
regexp_like(x, regular expression) | 判断目标字符串是否符合正则表达式。 | |
regexp_replace(x, regular expression) | 删除目标字符串中符合正则表达式的子串,返回未被删除的子串。 | |
regexp_replace(x, regular expression, replace string) | 替换目标字符串中符合正则表达式的子串,返回被替换后的字符串。 |
JSON函数
函数名称 | 语法 | 说明 |
json_extract_scalar(x, json_path) | 从JSON对象或JSON数组中提取一组标量值(字符串、整数或布尔值)。 |
- 本页导读 (1)