扫描(Scan)查询概述

日志服务扫描(Scan)查询功能支持免配置索引进行目标字段的扫描,用于查询相关日志,并且支持通过SPL语句对查询结果进行进一步的过滤、转换、解析等操作。本文介绍扫描查询功能的相关信息。

背景信息

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

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

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

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

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

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

说明

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

优点

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

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

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

使用限制

  1. 扫描模式下执行SPL,运行时相关限制请参考使用限制

  2. 不支持随机翻页。

工作流程

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

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

    重要

    第一级管道的查询语句依赖于索引查询,无需索引过滤时可以写 *。例如执行status:200 | WHERE userId = '123' | extend host=upper(hostname)语句前,您需为status字段创建索引,但无需为userId字段和hostname字段创建索引。

  2. 上述索引查询结果的日志,经过SPL语句处理(过滤、转换、解析等操作),处理后的结果作为最终的查询结果。

基本语法

  • 基本语法

    SPL指令的语法参考 SPL指令

    索引查询语句 | <spl-cmd> ... | <spl-cmd> ...
  • 使用示例

    • 按某个条件过滤原始日志

      status:200 | where host like '%www%'
    • 计算出新的字段,计算出的字段也可以再次过滤。

      status:200 
      | extend timediff = cast(endTime as bigint) - cast(beginTime as bigint)
      | where timediff > 100
    • 将JSON字段展开,丢弃原有的JSON字段。

      status:200 
      | parse-json body 
      | project-away body

查询与扫描的对比

对比项

索引查询

扫描查询

语法

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

查询语句 | SPL指令1 | SPL指令2 | ...

是否需要配置索引

需要。

不需要。

重要

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

是否支持搭配分析语句

支持。

支持。

是否支持随机翻页

支持。

不支持。

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

日志直方图

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

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

运算符与函数

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

参考SPL指令SPL支持的SQL函数列表

字段类型

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

无论字段是否已配置索引,在扫描模式下 SP语句中出现的字段均按照text类型处理。详情请参考数据类型转换

结果集大小

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

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

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

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

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

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

费用

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

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