最近更新时间:2024.01.22 17:18:38
首次发布时间:2024.01.22 17:18:38
本文介绍日志服务支持的数组函数语法及常见场景的使用示例。
说明
在日志服务分析语句(SQL 语句)中,需要使用单引号('')包裹代表字符串的字符,无符号包裹或被双引号("")包裹的字符为字段名或列名。例如'time'
代表字符串,time
或 "time"
代表字段名或列名。
函数名称 | 函数语法 | 说明 |
---|---|---|
ARRAY_AGG(KEY) | 聚合目标字段或表达式的值,并以数组形式返回。 | |
ARRAY_DISTINCT(KEY) | 删除数组中重复的元素。 | |
ARRAY_EXCEPT(KEY1, KEY2) | 剔除两个数组中的重复元素,并返回被剔除重复元素后的第一个数组。 | |
ARRAY_INTERSECT(KEY1, KEY2) | 返回两个数组的交集。 | |
ARRAY_JOIN(KEY, delimiter) | 使用指定的连接符将数组中的元素拼接为一个字符串。如果数组中包含 NULL 元素,则忽略 NULL 元素。 | |
ARRAY_JOIN(KEY, delimiter, null_replacement) | 使用指定的连接符将数组中的元素拼接为一个字符串。如果数组中包含 NULL 元素,则指定其他字符串代替 NULL 元素。 | |
ARRAY_MAX(KEY) | 计算数组元素中的最大值。 | |
ARRAY_MIN(KEY) | 计算数组元素中的最小值。 | |
ARRAY_REMOVE(KEY, element) | 删除数组中的某个元素。 | |
ARRAY_SORT(KEY) | 对数组中的元素进行升序排序。如果存在 NULL 元素,则将 NULL 元素排在最后。 | |
ARRAY_UNION(KEY1, KEY2) | 返回两个数组的并集。 | |
CARDINALITY(KEY) | 统计数组中元素的个数。 | |
CONCAT(KEY1, KEY2…) | 拼接多个数组为一个数组。 | |
CONTAINS(KEY, element) | 判断数组中是否包含某个元素。 | |
FILTER(KEY, lambda_expression) | 结合 FILTER 函数和 Lambda 表达式,用于过滤数组中的元素。 | |
REVERSE(KEY) | 对数组中的元素进行反向排列。 |
ARRAY_AGG 函数用于聚合一组值,并以数组形式返回。
语法格式
ARRAY_AGG (KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,其值为任意数据类型。 |
返回值说明
返回值为 Array 类型。
场景
聚合 test_double
字段的值,并以数组形式返回。
日志样例
检索和分析语句
* | SELECT ARRAY_AGG(test_double) AS array
检索和分析结果
ARRAY_DISTINCT 函数用于删除重复的数组元素。
语法格式
ARRAY_DISTINCT(KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,其值为任意数据类型。 |
返回值说明
返回值为 Array 类型。
场景
删除test_text
字段值中重复的元素。
日志样例
检索和分析语句
*| SELECT ARRAY_DISTINCT(cast(JSON_PARSE(test_text) as array(bigint)))
检索和分析结果
ARRAY_EXCEPT 函数用于删除两个数组中的重复元素,并返回被删除重复元素后的第一个数组。
语法格式
ARRAY_EXCEPT(KEY1, KEY2)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,其值为 Array 类型。 |
返回值说明
返回值为 Array 类型。
场景
删除数组[10,2,30,14,5]
和[4,2,5,7]
中的重复元素2、5,然后返回第一个数组[10,30,14]
。
检索和分析语句
* | SELECT ARRAY_EXCEPT(array[10,2,30,14,5],array[4,2,5,7])
检索和分析结果
ARRAY_INTERSECT 函数用于返回两个数组的交集。
语法格式
ARRAY_INTERSECT(KEY1, KEY2)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,其值为 Array 类型。 |
返回值说明
返回值为 Array 类型。
场景
计算数组[10,2,30,14,5]
和[4,2,5,7]
的交集。
检索和分析语句
* | SELECT ARRAY_INTERSECT(array[10,2,30,14,5],array[4,2,5,7])
检索和分析结果
ARRAY_JOIN 函数用于将数组元素拼接为一个字符串。
语法格式
使用指定的连接符将数组元素拼接为一个字符串。如果数组中包含 NULL 元素,则忽略 NULL 元素。
ARRAY_JOIN(KEY, delimiter)
使用指定的连接符将数组元素拼接为一个字符串。如果数组中包含 null 元素,则指定其他字符串代替 null 元素。
ARRAY_JOIN(KEY, delimiter,null_replacement)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,其值为 Array 类型。 |
delimiter | 连接符,可以为字符串。 |
null_replacement | 用于替换 NULL 元素的字符串。 |
返回值说明
返回值为 Varchar 类型。
场景
使用空格将数组 [null, 'Hello','World']
中的元素拼接为一个字符串,并使用Replace
替换 null 元素。
检索和分析语句
* | SELECT ARRAY_JOIN(array[null,'Hello','World'],' ','Replace')
检索和分析结果
ARRAY_MAX 函数用于提取数组元素中的最大值。
语法格式
ARRAY_MAX(KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,其值为任意数据类型。 |
返回值说明
返回值与数组元素的数据类型一致。如果数组中包含 NULL,则返回结果为 NULL。
场景
提取 test_text
字段值中的最大值。
日志样例
检索和分析语句
*| SELECT ARRAY_MAX(TRY_CAST(JSON_PARSE(test_text) as ARRAY(bigint))) AS max_number
检索和分析结果
ARRAY_MIN 函数用于提取数组元素中的最小值。
语法格式
ARRAY_MIN(KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,其值为任意数据类型。 |
返回值说明
返回值与数组元素的数据类型一致。如果数组中包含 NULL,则返回结果为 NULL。
场景
计算 test_text
字段值中的最小值。
日志样例
检索和分析语句
*| SELECT ARRAY_MIN(try_cast(JSON_PARSE(test_text) as array(bigint))) AS min_number
检索和分析结果
ARRAY_REMOVE 函数用于删除指定的数组元素。
语法格式
ARRAY_REMOVE(KEY, element)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,其值为 Array 类型。 |
element | 数组中的一个元素。 |
返回值说明
返回值为 Array 类型。如果待删除的元素为 null ,则返回结果也为 null。
场景
删除数组[49,45,47]
中的 45。
检索和分析语句
* | SELECT ARRAY_REMOVE(array[49,45,47],45)
检索和分析结果
ARRAY_SORT 函数按照升序对数组元素进行排列。如果存在 NULL 元素,则将 NULL 元素排在最后。
语法格式
ARRAY_SORT(KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,其值为 Array 类型。 |
返回值说明
返回值为 Array 类型。
场景
对数组['e', 'k', null, 'v', 'y']
进行升序排序。
检索和分析语句
* | SELECT ARRAY_SORT(ARRAY['e', 'k', null, 'v', 'y'])
检索和分析结果
ARRAY_UNION 函数用于计算两个数组的并集。
语法格式
ARRAY_UNION(KEY1, KEY2)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,其值为 Array 类型。 |
返回值说明
返回值为 Array 类型。
场景
计算数组[10,2,30,14,5]
和[4,2,5,7]
的并集。
检索和分析语句
* | SELECT ARRAY_UNION(ARRAY[10,2,30,14,5],ARRAY[4,2,5,7])
检索和分析结果
CARDINALITY 函数用于统计数组元素的个数。
语法格式
CARDINALITY(KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,其值为 Array 类型。 |
返回值说明
返回值为 Bigint 类型。
场景
计算 test_text
字段值中元素的个数。
日志样例
检索和分析语句
*| SELECT CARDINALITY(CAST(JSON_PARSE(test_text) as ARRAY(bigint)))
检索和分析结果
CONCAT 函数用于拼接多个数组为一个数组。
语法格式
CONCAT(KEY1, KEY2…)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,其值为 Array 类型。 |
返回值说明
返回值为 Array 类型。
场景
将数组 [10,2,30,14,5]
和 [4,2,5,7]
拼接为一个数组。
检索和分析语句
* | SELECT CONCAT(ARRAY[10,2,30,14,5],ARRAY[4,2,5,7])
检索和分析结果
CONTAINS 函数用于判断数组是否包含某个元素。
语法格式
CONTAINS(KEY, element)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,其值为 Array 类型。 |
element | 数组元素。 |
返回值说明
返回值为 Boolean 类型。如果数组中包含某个元素,则返回 true,否则反正 false。
场景
计算 test_text
字段值中是否包含 50。
日志样例
检索和分析语句
*| SELECT CONTAINS(cast(JSON_PARSE(test_text) as array(bigint)), 50)
检索和分析结果
结合 FILTER 函数和 Lambda 表达式,过滤数组中的元素。
语法格式
FILTER(KEY, lambda_expression)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,其值为 Array 类型。 |
lambda_expression | Lambda 表达式。 |
返回值说明
返回值为 Array 类型。返回的数组中只包含满足 Lambda 表达式的元素。
场景
结合 Lambda 表达式 x -> x > 0
,返回数组 [10,-1,null,9,-7]
中大于 0 的元素。
检索和分析语句
* | SELECT FILTER(array[10,-1,null,9,-7],x -> x > 0)
检索和分析结果
REVERSE 函数用于反向排列数组元素。
语法格式
REVERSE(KEY)
参数说明如下:
参数 | 说明 |
---|---|
KEY | 字段、表达式,其值为 Array 类型。 |
返回值说明
返回值为 Array 类型。
场景
将数组[100,500,300,400,200]
中的元素反向排序。
检索和分析语句
* | SELECT REVERSE(array[100,500,300,400,200])
检索和分析结果