本文介绍日志服务支持的 Map 映射函数语法及常见场景的使用示例。
说明
在日志服务分析语句(SQL 语句)中,需要使用单引号('')包裹代表字符串的字符,无符号包裹或被双引号("")包裹的字符为字段名或列名。例如'time'
代表字符串,time
或 "time"
代表字段名或列名。
函数名称 | 语法 | 说明 |
---|---|---|
[x] | 返回 Map 中目标健的值。 | |
CARDINALITY(KEY) | 计算 Map 中键值对的数量。 | |
ELEMENT_AT(map, key) | 获取 Map 中指定键的值。 | |
HISTOGRAM(KEY) | 对检索分析结果进行分组,返回结果为 JSON 格式。 | |
MAP() | 构造一个空 Map。 | |
MAP(KEY1, KEY2) | 将两个数组映射为一个 Map。 | |
MAP_AGG(KEY1, KEY2) | 聚合数据并将其映射为一个 Map。每个键对应一个唯一的值。 | |
MAP_FILTER(KEY, lambda_expression) | 和 Lambda 表达式结合,用于过滤 Map 中的元素。 | |
MAP_KEYS(KEY) | 提取 Map 中所有的键,并以数组形式返回。 | |
MAP_VALUES(KEY) | 提取 Map 中所有键的值,并以数组形式返回。 | |
MULTIMAP_AGG(KEY1, KEY2) | 聚合数据并将其映射为一个 Map。每个键可对应多个值。 |
下标运算符用于返回 Map 中目标健的值。与 ELEMENT_AT 函数含义相同。
语法格式
[x]
参数说明
参数 | 说明 |
---|---|
x | 值为 varchar 类型。 |
返回值说明
返回值为任意数据类型。
场景
构建一个 Map {"lily":19,"lucy":27,"regan":25}
,并返回 lily
的值。
检索和分析语句
* | SELECT map(array['regan', 'lucy', 'lily'], array[25, 27, 19])['lily']
检索和分析结果
场景child_type
字段值为 varchar 类型,通过 CAST 函数将 child_type
字段值转换为 MAP(varchar, varchar) 类型,再通过下标运算符获取 kind
的键值。
说明
本示例中的 child_type
字段的索引数据类型为 text,如果索引数据类型为 json,将返回 null。
日志样例
检索和分析语句
* | SELECT CAST(JSON_PARSE(child_type) AS MAP(varchar, varchar))['kind']
检索和分析结果
CARDINALITY 函数用于计算 Map 中键值对的数量。
语法格式
CARDINALITY(KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,值为 Map 类型。 |
返回值说明
返回值为 Bigint 类型。
场景child_type
字段值为 varchar 类型,通过 CAST 函数将 child_type
字段值转换为 MAP(varchar, varchar) 类型,再通过 CARDINALITY 函数计算 Map 中键值对的数量。
说明
本示例中的 child_type
字段的索引数据类型为 text,如果索引数据类型为 json,将返回 null。
日志样例
检索和分析语句
* | SELECT CARDINALITY(CAST(JSON_PARSE(child_type) AS MAP(varchar, varchar)))
检索和分析结果
ELEMENT_AT 函数用于获取 Map 中指定键的值。
语法格式
ELEMENT_AT(map, key)
参数说明
参数 | 说明 |
---|---|
map | 字段、表达式,其值为 Map 类型。 |
key | 指定 Map 中的某个键名,ELEMENT_AT 函数将提取该键的值。 |
返回值说明
返回值为任意数据类型。
场景
构建一个 Map {"lily":19,"lucy":27,"regan":25}
,并返回 lily
的值。
检索和分析语句
* | SELECT ELEMENT_AT(map(array['regan', 'lucy', 'lily'], array[25, 27, 19]),'lily')
检索和分析结果
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(KEY1,KEY2)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,值为 Array 类型。 |
返回值说明
返回值为 Map 类型。
示例
使用 MAP 函数将分别代表姓名、年龄的数组 ['regan', 'lucy', 'lily']
、[25, 27, 19]
映射为一个 Map,将姓名和年龄一一对应。
检索和分析语句
* | SELECT map(array['regan', 'lucy', 'lily'], array[25, 27, 19])
检索和分析结果
示例
构造一个空 Map。
检索和分析语句
*| SELECT MAP()
检索和分析结果
MAP_AGG 函数用于聚合数据并将其映射为一个 Map。每个键对应一个唯一的值。
语法格式
MAP_AGG(KEY1, KEY2)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,值为 Array 类型。 |
返回值说明
返回值为 MAP 类型。
场景
通过 ReqID 和 ReqTime 查询请求对应的耗时,并使用 MAP_AGG 函数将其映射为一个 Map。ReqID 为 Map 中的键,ReqTime 为 Map 中的值。
检索和分析语句
* | SELECT MAP_AGG(ReqID, ReqTime) FROM (SELECT ReqID, ReqTime LIMIT 5)
检索和分析结果
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 中所有的键,并以数组形式返回。
语法格式
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 中所有键的值,并以数组形式返回。
语法格式
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 函数用于聚合数据并将其映射为一个 Map。
语法格式
MULTIMAP_AGG(KEY1, KEY2)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,值为任意数据类型。 |
返回值说明
返回值为 Map 类型。
场景
提取 Action
字段和 ReqTime
字段的值,然后映射为一个 Map。Action
字段值为 Map 中的键,ReqTime
字段值为 Map 中的键值,键值为数组格式。
检索和分析语句
* | SELECT MULTIMAP_AGG(Action, ReqTime) FROM(SELECT Action, ReqTime LIMIT 5)
检索和分析结果