You need to enable JavaScript to run this app.
导航
Map 映射函数
最近更新时间:2024.08.22 11:04:20首次发布时间:2024.08.22 10:57:12

本文介绍日志服务支持的 Map 映射函数语法及常见场景的使用示例。

函数列表

说明

在日志服务分析语句(SQL 语句)中,需要使用单引号('')包裹代表字符串的字符,无符号包裹或被双引号("")包裹的字符为字段名或列名。例如'time' 代表字符串,time"time" 代表字段名或列名。

函数名称

语法

说明

HISTOGRAM 函数

HISTOGRAM(KEY)

对检索分析结果进行分组,返回结果为 JSON 格式。

MAP 函数

MAP()

构造一个空 Map。

MAP(KEY1, KEY2)

将两个数组映射为一个 Map。

MAP_AGG 函数

MAP_AGG(KEY1, KEY2)

聚合数据并将其映射为一个 Map。每个键对应一个唯一的值。

MAP_FILTER 函数

MAP_FILTER(KEY, lambda_expression)

和 Lambda 表达式结合,用于过滤 Map 中的元素。

MAP_KEYS 函数

MAP_KEYS(KEY)

提取 Map 中所有的键,并以数组形式返回。

MAP_VALUES 函数

MAP_VALUES(KEY)

提取 Map 中所有键的值,并以数组形式返回。

MULTIMAP_AGG 函数

MULTIMAP_AGG(KEY1, KEY2)

聚合数据并将其映射为一个 Map。每个键可对应多个值。

HISTOGRAM 函数

HISTOGRAM 函数用于对检索分析结果进行分组,返回结果为 JSON 格式。类似于 * | SELECT count(*) GROUP BY x

函数语法

  • 语法格式

    HISTOGRAM(KEY)
    
  • 参数说明

    参数

    说明

    KEY

    字段、表达式,值为任意数据类型。

  • 返回值说明
    返回值为 Map 类型。

函数示例

  • 场景
    使用 Histogram 函数获取所有请求不同响应状态对应的数量。

  • 检索和分析语句

    * | SELECT histogram(status) AS status_count
    
  • 检索和分析结果
    图片

MAP 函数

MAP 函数用于构造一个空 Map 或者将两个数组映射为一个 Map。

函数语法

  • 语法格式

    • 返回一个空 Map。

      MAP()
      
    • 将两个数组映射为一个 Map。

      MAP(KEY1,KEY2) 
      
  • 参数说明

    参数

    说明

    KEY

    字段、表达式,值为 Array 类型。

  • 返回值说明
    返回值为 Map 类型。

函数示例

  • 场景1
    • 示例
      使用 MAP 函数将分别代表姓名、年龄的数组 ['regan', 'lucy', 'lily'][25, 27, 19] 映射为一个 Map,将姓名和年龄一一对应。

    • 检索和分析语句

      * | SELECT map(array['regan', 'lucy', 'lily'], array[25, 27, 19])
      
    • 检索和分析结果
      图片

  • 场景2
    • 示例
      构造一个空 Map。

    • 检索和分析语句

      *| SELECT MAP()
      
    • 检索和分析结果
      图片

MAP_AGG 函数

MAP_AGG 函数用于聚合数据并将其映射为一个 Map。每个键对应一个唯一的值。

函数语法

  • 语法格式

    MAP_AGG(KEY1, KEY2)
    
  • 参数说明

    参数

    说明

    KEY

    字段、表达式,值为 Array 类型。
    KEY1 为 Map 中的键,KEY2 为 Map 中的键值。当 KEY2 存在多个值时,随机提取一个值作为键值。

  • 返回值说明
    返回值为 MAP 类型。

函数示例

  • 场景
    通过 ReqID 和 ReqTime 查询请求对应的耗时,并使用 MAP_AGG 函数将其映射为一个 Map。ReqID 为 Map 中的键,ReqTime 为 Map 中的值。

  • 检索和分析语句

    * | SELECT MAP_AGG(ReqID, ReqTime) FROM (SELECT ReqID, ReqTime LIMIT 5)
    
  • 检索和分析结果
    图片

MAP_FILTER 函数

MAP_FILTER 函数和 Lambda 表达式结合,用于过滤 Map 中的元素。

函数语法

  • 语法格式

    MAP_FILTER(KEY, lambda_expression)
    
  • 参数说明

    参数

    说明

    KEY

    字段、表达式,值为 Map 类型。

    lambda_expression

    Lambda 表达式。

  • 返回值说明
    返回值为 Map 类型。

函数示例

  • 场景
    将两个数组映射为一个新的 Map,且 Map 中的键值不为 null。其中 (k, v) -> v is not null 为Lambda表达式。

  • 检索和分析语句

    * | SELECT MAP_FILTER(MAP(array['regan', 'lucy', 'lily'], array[21, NULL, 18]), (k, v) -> v is not null)
    
  • 检索和分析结果
    图片

MAP_KEYS 函数

MAP_KEYS 函数用于提取 Map 中所有的键,并以数组形式返回。

函数语法

  • 语法格式

    MAP_KEYS(KEY)
    
  • 参数说明

    参数

    说明

    KEY

    字段、表达式,值为 Map 类型。

  • 返回值说明
    返回值为 Array 类型。

函数示例

  • 场景
    使用 MAP_KEYS 函数提取 result 字段值中所有的键。

  • 日志样例

    result: {
    type:"pattern-discovery"
    stage:"pattern-clustering"
    progress:"100"
    complete:"false"
    }
    
  • 检索和分析语句

    * | SELECT MAP_KEYS(TRY_CAST(JSON_PARSE(result) AS MAP(varchar, varchar)))
    
  • 检索和分析结果
    图片

MAP_VALUES 函数

MAP_VALUES 函数用于提取 Map 中所有键的值,并以数组形式返回。

函数语法

  • 语法格式

    MAP_VALUES(KEY)
    
  • 参数说明

    参数

    说明

    KEY

    字段、表达式,值为 Map 类型。

  • 返回值说明
    返回值为 Array 类型。

函数示例

  • 场景
    使用 MAP_VALUES 函数提取 result 字段值中所有的值。

  • 日志样例

    result: {
    type:"pattern-discovery"
    stage:"pattern-clustering"
    progress:"100"
    complete:"false"
    }
    
  • 检索和分析语句

    * | SELECT MAP_VALUES(TRY_CAST(JSON_PARSE(result) AS MAP(varchar, varchar)))
    
  • 检索和分析结果
    图片

MULTIMAP_AGG 函数

MULTIMAP_AGG 函数用于聚合数据并将其映射为一个 Map。

函数语法

  • 语法格式

    MULTIMAP_AGG(KEY1, KEY2)
    
  • 参数说明

    参数

    说明

    KEY

    字段、表达式,值为任意数据类型。
    KEY1 为 Map 中的键,KEY2 为 Map 中的键值,键值为数组格式。当 KEY2 存在多个值时,提取所有的值作为键值。

  • 返回值说明
    返回值为 Map 类型。

函数示例

  • 场景
    提取 Action 字段和 ReqTime 字段的值,然后映射为一个 Map。Action 字段值为 Map 中的键,ReqTime 字段值为 Map 中的键值,键值为数组格式。

  • 检索和分析语句

    * | SELECT MULTIMAP_AGG(Action, ReqTime) FROM(SELECT Action, ReqTime LIMIT 5)
    
  • 检索和分析结果
    图片