本文介绍Map映射函数和运算符的基本语法及示例。

日志服务支持如下Map映射函数和运算符。
注意 在日志服务分析语句中,表示字符串的字符必须使用单引号('')包裹,无符号包裹或被双引号("")包裹的字符表示字段名或列名。例如:'status'表示字符串status,status"status"表示日志字段status。
函数名称 语法 说明
下标运算符 [x] 获取Map中目标键的值。
cardinality函数 cardinality(x) 计算Map的大小。
element_at函数 element_at(x, key) 获取Map中目标键的值。
histogram函数 histogram(x) 对查询和分析结果进行分组,返回结果为JSON格式。
histogram_u函数 histogram_u(x) 对查询和分析结果进行分组,返回结果为多行多列格式。
map函数 map() 返回一个空Map。
map(x, y) 将两个数组映射为一个Map。
map_agg函数 map_agg(x, y) xy映射为一个Map。x为Map中的键,y为Map中的键值。当y存在多个值时,随机提取一个值作为键值。
map_concat函数 map_concat(x,y...) 将多个Map合并为一个Map。
map_filter函数 map_filter(x,lambda_expression) 结合Lambda表达式,用于过滤Map中的元素。
map_keys函数 map_keys(x) 提取Map中所有的键,并以数组形式返回。
map_values函数 map_values(x) 提取Map中所有键的值,并以数组形式返回。
multimap_agg函数 multimap_agg(x,y) xy映射为一个Map。x为Map中的键,y为Map中的键值,键值为数组格式。当y存在多个值时,提取所有的值作为键值。

下标运算符

下标运算符用于获取Map中的目标键的值。

语法

[x]

参数说明

参数 说明
x 参数值为varchar类型。

返回值类型

任意数据类型。

示例

日志服务数据加工日志中etl_context字段值为map类型,您可以使用下标运算符获取etl_context字段值中project的值。

  • 字段样例
    etl_context: {
     project:"datalab-148****6461-cn-chengdu"
     logstore:"internal-etl-log"
     consumer_group:"etl-83****4d1965"
     consumer:"etl-b2d40ed****c8d6-291294"
     shard_id:"0" }
  • 查询和分析语句
    * | SELECT try_cast(json_parse(etl_context) AS map(varchar, varchar))['project']
  • 查询和分析结果下标运算符

cardinality函数

cardinality函数用于计算Map的大小。

语法

cardinality(x)

参数说明

参数 说明
x 参数值为map类型。

返回值类型

bigint类型。

示例

使用histogram函数获取各个请求方法对应的请求数量,再通过cardinality函数获取请求方法的种类数。

  • 查询和分析语句
    * |
    SELECT
      histogram(request_method) AS request_method,
      cardinality(histogram(request_method)) AS "kinds"
  • 查询和分析结果cardinality

element_at函数

element_at函数用于获取Map中目标键的值。

语法

element_at(x, key)

参数说明

参数 说明