本文介绍日志服务支持的 Map 映射函数语法及常见场景的使用示例。
说明
在日志服务分析语句(SQL 语句)中,需要使用单引号('')包裹代表字符串的字符,无符号包裹或被双引号("")包裹的字符为字段名或列名。例如'time'
代表字符串,time
或 "time"
代表字段名或列名。
函数名称 | 语法 | 说明 |
---|---|---|
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。每个键可对应多个值。 |
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)
检索和分析结果