文档

扫描(Scan)查询概述

更新时间:

日志服务扫描(Scan)查询功能支持免配置索引进行目标字段的扫描,用于查询相关日志。本文介绍扫描查询功能的相关信息。

背景信息

日志服务基于索引技术,提供快速查询日志功能,但在某些场景下可能会遇到如下限制,无法创建或使用索引。

  • 为降低使用费用,而未对某些字段建立索引,但临时急需查询历史日志。

  • 字段值长度超过了索引限制,超出部分无法被查询。

  • 字段名较多,事先无法获取具体的字段名,无法建立字段索引。

  • 字段类型发生变化,无法查询。

针对上述问题,日志服务推出扫描查询和扫描分析功能,用于查询和分析日志,无需对扫描的目标字段建立索引。关于扫描分析的更多信息,请参见扫描(Scan)分析概述

说明

扫描查询模式正在升级为支持SPL语言,更多信息请参见SPL概述。对于读取出的原始数据,可以通过SPL语句做结构化信息提取、字段操作、数据过滤等操作,并支持多级管道级联,最终输出经过SPL处理后的结果数据。SPL目前支持的地域参考支持地域

基本语法

  • 基本语法

    查询语句 | WHERE bool_expression
  • 使用示例

    status:200 | WHERE userId = '123'

工作流程

日志服务接收到扫描请求后,执行流程主要分为如下两步。

  1. 先执行对应的查询语句进行日志查询。

    重要

    查询语句仍依赖于索引。例如执行status:200 | WHERE userId = '123'语句前,您需为status字段创建索引,但无需为userId字段创建索引。

  2. 通过WHERE子句,在上述查询结果中挑选符合扫描条件的日志,并返回最终的查询结果。

查询与扫描的对比

对比项

索引查询

扫描查询

语法

查询语句。更多信息,请参见查询语法

查询语句 | where bool_expression

是否需要配置索引

需要。

不需要。

重要

竖线(|)前的查询语句仍依赖于索引。

是否支持搭配分析语句

支持。

支持。

是否支持随机翻页

支持。

不支持。

只能连续翻页(前翻或后翻)。

日志直方图

基于查询语句的查询结果进行展示。

基于查询语句的查询结果、扫描进度进行展示。

运算符与函数

支持逻辑、数学运算;支持模糊查询;不支持SQL函数。

支持LIKE、IN、BETWEEN、IS NULL、IS NOT NULL、EXISTS等关键词;支持部分SQL函数,具体请参见支持的函数

字段类型

由索引配置中的数据类型决定。更多信息,请参见数据类型

无论字段是否已配置索引,在扫描模式下 WHERE子句中出现的字段均按照text类型处理。

说明

如果您需要使用某个入参为非text的函数(例如abs),则需要通过cast函数转换字段类型。更多信息,请参见cast函数

结果集大小

通过控制台或SDK指定,最大100条。

满足下述任一条件,本次扫描结束并返回扫描结果。

  • 达到您所指定的结果条数。

    您可以控制台或SDK指定返回的结果条数。

  • 扫描超过了单次系统设定的最大条数(基于查询语句的结果集,默认10万条。)

  • 扫描执行时间超过45秒。

费用

索引流量和索引存储费用。更多信息,请参见按使用功能计费模式计费项

扫描部分按照流量收费,即基于索引查询后扫描命中的数据量收费。

优点

  • 节省费用:无需创建索引,节省索引流量和存储空间费用。

  • 灵活:在使用时按需定义列的类型,不受是否创建索引及索引类型限制。

  • 搜索能力增强,新支持多种函数。

使用限制

不支持随机翻页。

支持的函数

数学函数

函数名称

语法

说明

abs函数

abs(x)

计算x的绝对值。

cbrt函数

cbrt(x)

计算x的立方根。

ceil函数

ceil(x

x进行向上取整数。

ceil函数是ceiling函数的别名。

ceiling函数

ceiling(x

x进行向上取整数。

e函数

e()

返回自然底数e的值。

exp函数

exp(x)

计算自然底数e的x次幂。

floor函数

floor(x)

x进行向下取整数。

from_base函数

from_base(x, y)

根据BASE编码将x转为y进制的数字。

ln函数

ln(x)

计算x的自然对数。

log2函数

log2(x)

计算x以2为底的对数。

log10函数

log10(x)

计算x以10为底的对数。

mod函数

mod(x, y)

计算xy相除的余数。

pi函数

pi()

返回π值,精确到小数点后15位。

pow函数

pow(x, y)

计算xy次幂。

pow函数是power函数的别名。

power函数

power(x, y)

计算xy次幂。

radians函数

radians(x)

将度转换为弧度。

rand函数

rand()

返回随机数。

random函数

random()

返回[0,1)之间的随机数。

random(x)

返回[0,x)之间的随机数。

round函数

round(x)

x进行四舍五入取整数。

round(x, n)

x进行四舍五入且保留n位小数。

sqrt函数

sqrt(x)

计算x的平方根。

to_base函数

to_base(x, y)

根据BASE编码将x转为y进制的字符串。

truncate函数

truncate(x)

截断x的小数部分。

width_bucket函数

width_bucket(x, bound1, bound2, numBuckets)

将一段数值范围划分成大小相同的多个Bucket,然后返回x所属的Bucket。

width_bucket(x, bins)

使用数组指定Bucket的范围,然后返回x所属的Bucket。

字符串函数

函数名称

语法

说明

chr函数

chr(x)

将ASCII码转换为字符。

codepoint函数

codepoint(x)

将字符转换为ASCII码。

concat函数

concat(x, y...)

将多个字符串拼接成一个字符串。

length函数

length(x)

计算字符串的长度。

lower函数

lower(x)

将字符串转换为小写形式。

lpad函数

lpad(x, length, lpad_string)

在字符串的开头填充指定字符,直到指定长度后返回结果字符串。

ltrim函数

ltrim(x)

删除字符串开头的空格。

replace函数

replace(x, sub_string )

删除字符串中匹配的字符。

replace(x, sub_string, replace_string)

将字符串中所匹配的字符替换为其他指定字符。

reverse函数

reverse(x)

返回反向顺序的字符串。

rpad函数

rpad(x, length, rpad_string)

在字符串的尾部填充指定字符,直到指定长度后返回结果字符串。

rtrim函数

rtrim(x)

删除字符串中结尾的空格。

split函数

split(x, delimeter)

使用指定的分隔符拆分字符串,并返回子串集合。

split(x, delimeter, limit)

通过指定的分隔符拆分字符串并使用limit限制字符串拆分的个数,然后返回拆分后的子串集合。

split_part函数

split_part(x, delimeter, part)

使用指定的分隔符拆分字符串,并返回指定位置的内容。

strpos函数

strpos(x, sub_string)

返回目标子串在字符串中的位置。

strpos(x, sub_string, instance)

返回第instance个目标子串的在字符串中的位置,instance必须是正数。子串从1开始计数,如果没有找到,返回0。

substr函数

substr(x, start)

返回字符串中指定位置的子串。

substr(x, start, length)

返回字符串中指定位置的子串,并指定子串长度。

to_utf8函数

to_utf8(x)

将字符串转换为UTF-8编码格式。

trim函数

trim(x)

删除字符串中开头和结尾的空格。

upper函数

upper(x)

将字符串转化为大写形式。

日期和时间函数

函数类型

函数名称

语法

说明

日期和时间函数

date_format函数

date_format(x, format)

将timestamp类型的日期和时间表达式转化为指定格式的日期和时间表达式。

from_unixtime函数

from_unixtime(x)

将UNIX时间戳转化为无时区的timestamp类型的日期和时间表达式。

from_unixtime(x, time zone)

将UNIX时间戳转化为带时区的timestamp类型的日期和时间表达式。

from_unixtime(x, hours, minutes)

将UNIX时间戳转化为带时区的timestamp类型的日期和时间表达式,其中hoursminutes为时区偏移量。

to_unixtime函数

to_unixtime(x)

将timestamp类型的日期和时间表达式转化成UNIX时间戳。

parse_datetime函数

parse_datetime(x, format)

根据format将字符串转化为带时区的timestamp类型的日期和时间表达式。

日期和时间提取函数

day函数

day(x)

提取日期和时间表达式中的天数,按月计算。

day函数等同于day_of_month函数。

day_of_month函数

day_of_month(x)

提取日期和时间表达式中的天数,按月计算。

day_of_month函数等同于day函数。

day_of_week函数

day_of_week(x)

提取日期和时间表达式中的天数,按周计算。

day_of_week函数等同于dow函数。

day_of_year函数

day_of_year(x)

提取日期和时间表达式中的天数,按年计算。

day_of_year函数等同于doy函数。

dow函数

dow(x)

提取日期和时间表达式中的天数,按周计算。

dow函数等同于day_of_week函数。

doy函数

doy(x)

提取日期和时间表达式中的天数,按年计算。

doy函数等同于day_of_year函数。

extract函数

extract(field from x)

通过指定的field,提取日期和时间表达式中的日期或时间部分。

hour函数

hour(x)

提取日期和时间表达式中的小时数,按24小时制计算。

minute函数

minute(x)

提取日期和时间表达式中的分钟数。

millisecond函数

millisecond(x)

提取日期和时间表达式中的毫秒数。

month函数

month(x)

提取日期和时间表达式中的月份。

quarter函数

quarter(x)

计算目标日期所属的季度。

second函数

second(x)

提取日期和时间表达式中的秒数。

year函数

year(x)

提取目标日期中的年份。

year_of_week函数

year_of_week(x)

提取目标日期在ISO周日历中的年份。

year_of_week函数等同于yow函数。

yow函数

yow(x)

提取目标日期在ISO周日历中的年份。

yow函数等同于year_of_week函数。

时间间隔函数

date_trunc函数

date_trunc(unit, x)

根据您指定的时间单位截断日期和时间表达式,并按照毫秒、秒、分钟,小时、日、月或年对齐。

date_add函数

date_add(unit, N, x)

x上加上N个时间单位(unit)。

date_diff函数

date_diff(unit, x, y)

返回两个时间表达式之间的时间差值,例如计算xy之间相差几个时间单位(unit)。

正则式函数

函数名称

语法

说明

regexp_extract_all函数

regexp_extract_all(x, regular expression)

提取目标字符串中符合正则表达式的子串,并返回所有子串的合集。

regexp_extract_all(x, regular expression, n)

提取目标字符串中符合正则表达式的子串,然后返回与目标捕获组匹配的子串合集。

regexp_extract函数

regexp_extract(x, regular expression)

提取并返回目标字符串中符合正则表达式的第一个子串。

regexp_extract(x, regular expression, n)

提取目标字符串中符合正则表达式的子串,然后返回与目标捕获组匹配的第一个子串。

regexp_like函数

regexp_like(x, regular expression)

判断目标字符串是否符合正则表达式。

regexp_replace函数

regexp_replace(x, regular expression)

删除目标字符串中符合正则表达式的子串,返回未被删除的子串。

regexp_replace(x, regular expression, replace string)

替换目标字符串中符合正则表达式的子串,返回被替换后的字符串。

JSON函数

函数名称

语法

说明

json_extract_scalar函数

json_extract_scalar(x, json_path)

从JSON对象或JSON数组中提取一组标量值(字符串、整数或布尔值)。

  • 本页导读 (1)
文档反馈