日志服务 数组函数

这篇档详细介绍了腾讯云提供的数组相关函数的语法及使用示例,涵盖数组操作、查询、转换等核心功能,包括下标访问、聚合、去重、集合运算、排序、过滤、Lambda表达式处理等场景。下标运算符[]:返回数组指定位置的元素,语法为[x],示例演示获取数组第2个元素。array_agg函数:将字段值聚合为数组,返回结果如[200,200,404]。array_distinct函数:删除数组重复元素,示例输入[12,23,26,48。

相关产品
日志服务 产品页,含版本规格、价格与购买入口。

这篇档为你介绍数组相关函数的语法及示例。

函数名称 语句 含义
下标运算符 [] [x] []用于获取数组中的某个元素,等同于 element_at 函数。
array_agg 函数 array_agg(x) 以数组形式返回 x 中的所有值。
array_distinct 函数 array_distinct(x) 数组去重,获取数组中的唯一元素。
array_except 函数 array_except(x,y) 计算 x,y 两个数组的差集。
array_intersect 函数 array_intersect(x, y) 计算 x,y 两个数组的交集。
array_join 函数 array_join(x, delimiter) 使用指定的连接符将数组中的元素拼接为一个字符串。如果数组中包含 null 元素,则 null 元素将被忽略。说明: 使用 array_join 函数时,返回结果最大为1KB,超出1KB的数据会被截断。
 array_join(x, delimiter, null_replacement) 把字符串数组用 delimiter 连接,拼接成字符串,null 值用 null_replacement 替代。说明: 使用 array_join 函数时,返回结果最大为1KB,超出1KB的数据会被截断。
array_max 函数 array_max(x) 获取数组中的最大值。
array_min 函数 array_min(x) 获取数组中的最小值。
array_position 函数 array_position(x, element) 获取指定元素的下标,下标从1开始。如果指定元素不存在,则返回0。
array_remove 函数 array_remove(x, element) 删除数组中指定的元素。
array_sort 函数 array_sort(x) 对数组元素进行升序排序。如果有 null 元素,则 null 元素排在最后。
array_union 函数 array_union(x, y) 计算两个数组的并集。
cardinality 函数 cardinality(x) 计算数组中元素的个数。
concat 函数 concat(x, y…) 将多个数组拼接为一个数组。
contains 函数 contains(x, element) 判断数组中是否包含指定元素。如果包含,则返回 true。
element_at 函数 element_at(x, y) 返回数组中的第 y 个元素。
filter 函数 filter(x, lambda_expression) 结合 Lambda 表达式,用于过滤数组中的元素,只返回满足 Lambda 表达式的元素。
flatten 函数 flatten(x) 将二维数组转换为一维数组。
reduce 函数 reduce(x, lambda_expression) 根据 Lambda 表达式的定义,对数组中的各个元素进行相加计算,然后返回计算结果。
reverse 函数 reverse(x) 对数组中的元素进行反向排列。
sequence 函数 sequence(x, y) 通过指定的起始值返回一个数组,其元素为起始值范围内一组连续且递增的值。递增间隔为默认值1。
 sequence(x, y, step) 通过指定的起始值返回一个数组,其元素为起始值范围内一组连续且递增的值。自定义递增间隔。
shuffle 函数 shuffle(x) 对数组元素进行随机排列。
slice 函数 slice(x, start, length) 获取数组的子集。
transform 函数 transform(x, lambda_expression) 将 Lambda 表达式应用到数组的每个元素中。
zip 函数 zip(x, y) 将多个数组合并为一个二维数组,且各个数组中下标相同的元素组成一个新的数组。
zip_with 函数 zip_with(x, y, lambda_expression) 根据 Lambda 表达式中的定义将两个数组合并为一个数组。

一、下标运算符 []

下标运算符用于返回数组中的第 x 个元素。等同于 element_at 函数。

二、语法

[x]

三、参数说明

参数 说明
x 数组下标,从1开始。参数值为 bigint 类型。

四、返回值类型

返回指定元素的数据类型。

五、示例

返回 number 字段值中的第2个元素。

·字段样例

array:[12,23,26,48,26]

·查询和分析语句

* | SELECT cast(json_parse(array) as array(bigint)) [2]

·查询和分析结果

23

六、array_agg 函数

array_agg 函数会以数组形式返回 x 中所有的值。

七、语法

array_agg(x)

八、参数说明

参数 说明
x 参数值为任意数据类型。

九、返回值类型

array 类型。

十、示例

以数组形式返回 status 字段的值。

·查询和分析语句

* | SELECT array_agg(status) AS array

·查询和分析结果

[200,200,200,404,200,200]

十一、array_distinct 函数

array_distinct 函数用于删除数组中重复的元素。

十二、语法

array_distinct(x)

十三、参数说明

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

十四、返回值类型

array 类型。

十五、示例

删除 array 字段值中重复的元素。

·字段样例

array:[12,23,26,48,26]

·查询和分析语句

* | SELECT array_distinct(cast(json_parse(array) as array(bigint)))

·查询和分析结果

[12,23,26,48]

十六、array_except 函数

array_except 函数用于计算两个数组的差集。

十七、语法

array_except(x, y)

十八、参数说明

参数 说明
x 参数值为 array 类型。
y 参数值为 array 类型。

十九、返回值类型

array 类型。

20、示例

计算数组[1,2,3,4,5]和[1,3,5,7]的差集。

·查询和分析语句

* | SELECT array_except(array[1,2,3,4,5],array[1,3,5,7])

·查询和分析结果

[2,4]

21、array_intersect 函数

array_intersect 函数用于计算两个数组的交集。

22、语法

array_intersect(x, y)

23、参数说明

参数 说明
x 参数值为 array 类型。
y 参数值为 array 类型。

24、返回值类型

array 类型。

25、示例

计算数组[1,2,3,4,5]和[1,3,5,7]的交集。

·查询和分析语句

* | SELECT array_intersect(array[1,2,3,4,5],array[1,3,5,7])

·查询和分析结果

[1,3,5]

26、array_join 函数

array_join 函数使用指定的连接符将数组中的元素拼接为一个字符串。

27、语法

·使用指定的连接符将数组中的元素拼接为一个字符串。如果数组中包含 null 元素,则 null 元素将被忽略。

array_join(x, delimiter)

·使用指定的连接符将数组中的元素拼接为一个字符串。如果数组中包含 null 元素,则 null 元素将被替换为 null_replacement。

array_join(x, delimiter, null_replacement)

28、参数说明

参数 说明
x 参数值为 array 类型。
delimiter 连接符,可以为字符串。
null_replacement 用于替换 null 元素的字符串。

29、返回值类型

varchar 类型。

30、示例

使用空格将数组[null, '中国','sh']中的元素拼接为一个字符串,其中 null 元素替换为 ‘region’。

·查询和分析语句

* | SELECT array_join(array[null,'中国','sh'],'/','region')

·查询和分析结果

region/中国/sh

31、array_max 函数

array_max 函数用于获取数组中的最大值。

32、语法

array_max(x)

33、参数说明

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

34、返回值类型

与参数值中元素的数据类型一致。

35、示例

获取数组中[12,23,26,48,26]的最大值48。

·字段样例

array:[12,23,26,48,26]

·查询和分析语句

* | SELECT array_max(try_cast(json_parse(array) as array(bigint))) AS max_number

·查询和分析结果

48

36、array_min 函数

array_min 函数用于获取数组中的最小值。

37、语法

array_min(x)

38、参数说明

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

39、返回值类型

与参数值中元素的数据类型一致。

40、示例

获取数组中[12,23,26,48,26]的最小值12。

·字段样例

array:[12,23,26,48,26]

·查询和分析语句

* | SELECT array_min(try_cast(json_parse(array) as array(bigint))) AS min_number

·查询和分析结果

12

41、array_position 函数

array_position 函数用于获取指定元素的下标,下标从1开始。如果指定元素不存在,则返回0。

42、语法

array_position(x, element)

43、参数说明

参数 说明
x 参数值为数组类型。
element 数组中的一个元素。

44、返回值类型

bigint 类型。

45、示例

返回数组[23,46,35]中46的下标。

·查询和分析语句

* | SELECT array_position(array[23,46,35],46)

·查询和分析结果

2

46、array_remove 函数

array_remove 函数用于删除数组中指定的元素。

47、语法

array_remove(x, element)

48、参数说明

参数 说明
x 参数值为数组类型。
element 数组中的一个元素。

49、返回值类型

array 类型。

50、示例

删除数组[23,46,35]中23。

·查询和分析语句

* | SELECT array_remove(array[23,46,35],23)

·查询和分析结果

[46,35]

51、array_sort 函数

array_sort 函数用于对数组元素进行升序排序。

52、语法

array_sort(x)

53、参数说明

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

54、返回值类型

array 类型。

55、示例

对数组['b', 'd', null, 'c', 'a']进行升序排序。

·查询和分析语句

* | SELECT array_sort(array['b','d',null,'c','a'])

·查询和分析结果

["a","b","c","d",null]

56、array_union 函数

array_union 函数用于计算两个数组的并集。

57、语法

array_union(x, y)

58、参数说明

参数 说明
x 参数值为 array 类型。
y 参数值为 array 类型。

59、返回值类型

array 类型。

60、示例

计算数组[1,2,3,4,5]和[1,3,5,7]的并集。

·查询和分析语句

* | SELECT array_union(array[1,2,3,4,5],array[1,3,5,7])

·查询和分析结果

[1,2,3,4,5,7]

61、cardinality 函数

cardinality 函数用于计算数组中元素的个数。

62、语法

cardinality(x)

63、参数说明

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

64、返回值类型

bigint 类型。

65、示例

计算 number 字段值中元素的个数。

·字段样例

array:[12,23,26,48,26]

·查询和分析语句

* | SELECT cardinality(cast(json_parse(array) as array(bigint)))

·查询和分析结果

5

66、concat 函数

concat 函数用于将多个数组拼接成一个数组。

67、语法

concat(x, y…)

68、参数说明

参数 说明
x 参数值为 array 类型。
y 参数值为 array 类型。

69、返回值类型

array 类型。

70、示例

将数组['red','blue']和['yellow','green']拼接为一个数组。

·查询和分析语句

* | SELECT concat(array['red','blue'],array['yellow','green'])

·查询和分析结果

["red","blue","yellow","green"]

71、contains 函数

contains 函数用于判断数组中是否包含指定元素。如果包含,则返回 true。

72、语法

contains(x, element)

73、参数说明

参数 说明
x 参数值为数组类型。
element 数组中的一个元素。

74、返回值类型

boolean 类型。

75、示例

判断 array 字段值中是否包含23。

·字段样例

array:[12,23,26,48,26]

·查询和分析语句

* | SELECT contains(cast(json_parse(array) as array(varchar)),'23')

·查询和分析结果

TRUE

76、element_at 函数

element_at 函数用于返回数组中的第 y 个元素。

77、语法

element_at(x, y)

78、参数说明

参数 说明
x 参数值为 array 类型。
element 数组下标,从1开始。参数值为 bigint 类型。

79、返回值类型

任意数据类型。

80、示例

返回 number 字段值中的第2个元素。

·字段样例

array:[12,23,26,48,26]

·查询和分析语句

* | SELECT element_at(cast(json_parse(number) AS array(varchar)), 2)

·查询和分析结果

23

81、filter 函数

filter 函数和 Lambda 表达式结合,用于过滤数组中的元素。只返回满足 Lambda 表达式的元素。

82、语法

filter(x, lambda_expression)

83、参数说明

参数 说明
x 参数值为 array 类型。
lambda_expression Lambda 表达式。更多信息,请参见 Lambda 函数。

84、返回值类型

array 类型。

85、示例

返回数组[5,-6,null,7]中大于0的元素,其中x -> x > 0为 Lambda 表达式。

·查询和分析语句

* | SELECT filter(array[5,-6,null,7],x -> x > 0)

·查询和分析结果

[5,7]

86、flatten 函数

flatten 函数用于将二维数组转换为一维数组。

87、语法

flatten(x)

88、参数说明

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

89、返回值类型

array 类型。

90、示例

将数组array[1,2,3,4],array[4,3,2,1]转换为一维数组。

·查询和分析语句

* | SELECT flatten(array[array[1,2,3,4],array[4,3,2,1]])

·查询和分析结果

[1,2,3,4,4,3,2,1]

91、reduce 函数

reduce 函数将根据 Lambda 表达式中的定义,对数组中的各个元素进行相加计算,然后返回计算结果。

92、语法

reduce(x, lambda_expression)

93、参数说明

参数 说明
x 参数值为 array 类型。
lambda_expression Lambda 表达式。更多信息,请参见 Lambda 函数。

94、返回值类型

bigint 类型。

95、示例

返回数组[5, 20, 50]中各个元素相加的结果。

·查询和分析语句

* | SELECT reduce(array[5,20,50],0,(s, x) -> s + x, s -> s)

·查询和分析结果

75

96、reverse 函数

reverse 函数用于对数组中的元素进行反向排列。

97、语法

reverse(x)

98、参数说明

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

99、返回值类型

array 类型。

100、示例

将数组[1,2,3,4,5]中的元素反向排序。

·查询和分析语句

* | SELECT reverse(array[1,2,3,4,5])

·查询和分析结果

[5,4,3,2,1]

101、sequence 函数

sequence 函数通过指定的起始值返回一个数组,其元素为起始值范围内一组连续且递增的值。

102、语法

·递增间隔为默认值1。

sequence(x, y)

·自定义递增间隔。

sequence(x, y, step)

103、参数说明

参数 说明
x 参数值为 bigint 类型、timestamp 类型(Unix 时间戳、日期和时间表达式)。
y 参数值为 bigint 类型、timestamp 类型(Unix 时间戳、日期和时间表达式)。
step 数值间隔。当参数值为日期和时间表达式时,step 格式如下:interval 'n' year to month,表示间隔为 n 年。interval 'n' day to second,表示间隔为 n 天。

104、返回值类型

array 类型。

105、示例

示例1:返回0 – 10之间的偶数。

·查询和分析语句

* | SELECT sequence(0,10,2)

·查询和分析结果

[0,2,4,6,8,10]

示例2:返回2017-10-23到2021-08-12之间的日期,间隔为1年。

·查询和分析语句

* | SELECT sequence(from_unixtime(1508737026),from_unixtime(1628734085),interval '1' year to month )

·查询和分析结果

["2017-10-23 05:37:06.0","2018-10-23 05:37:06.0","2019-10-23 05:37:06.0","2020-10-23 05:37:06.0"]

示例3:返回1628733298,1628734085之间的 Unix 时间戳,间隔为60秒。

·查询和分析语句

* | SELECT sequence(1628733298,1628734085,60)

·查询和分析结果

[1628733298,1628733358,1628733418,1628733478,1628733538,1628733598,1628733658,1628733718,1628733778,1628733838,1628733898,1628733958,1628734018,1628734078]

106、shuffle 函数

shuffle 函数用于对数组元素进行随机排列。

107、语法

shuffle(x)

108、参数说明

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

109、返回值类型

array 类型。

110、示例

对数组[1,2,3,4,5]中的元素进行随机排序。

·查询和分析语句

* | SELECT shuffle(array[1,2,3,4,5])

·查询和分析结果

[5,2,4,1,3]

111、slice 函数

slice 函数用于返回数组的子集。

112、语法

slice(x, start, length)

113、参数说明

参数 说明
x 参数值为 array 类型。
start 指定索引开始的位置。如果 start 为负数,则从末尾开始。如果 start 为正数,则从头部开始。
length 指定子集中元素的个数。

114、返回值类型

array 类型。

115、示例

返回数组[1,2,4,5,6,7,7]的子集,从第三个元素开始返回,子集元素个数为2。

·查询和分析语句

* | SELECT slice(array[1,2,4,5,6,7,7],3,2)

·查询和分析结果

[4,5]

116、transform 函数

transform 函数用于将 Lambda 表达式应用到数组的每个元素中。

117、语法

transform(x, lambda_expression)

118、参数说明

参数 说明
x 参数值为 array 类型。
lambda_expression Lambda 表达式。更多信息,请参见 Lambda 函数。

119、返回值类型

array 类型。

120、示例

将数组[5,6]中的各个元素加1,然后返回。

·查询和分析语句

* | SELECT transform(array[5,6],x -> x + 1)

·查询和分析结果

[6,7]

121、zip 函数

zip 函数将多个数组合并为一个二维数组,且各个数组中下标相同的元素组成一个新的数组。

122、语法

zip(x, y)

123、参数说明

参数 说明
x 参数值为 array 类型。
y 参数值为 array 类型。

124、返回值类型

array 类型。

125、示例

将数组[1,2]和[3,4]合并为一个二维数组。

·查询和分析语句

* | SELECT zip(array[1,2], array[3,4])

·查询和分析结果

["{1, 3}","{2, 4}"]

126、zip_with 函数

zip_with 函数将根据 Lambda 表达式中的定义将两个数组合并为一个数组。

127、语法

zip_with(x, y, lambda_expression)

128、参数说明

参数 说明
x 参数值为 array 类型。
y 参数值为 array 类型。
lambda_expression Lambda 表达式。更多信息,请参见 Lambda 函数。

129、返回值类型

array 类型。

130、示例

使用 Lambda 表达式(x, y) -> x + y使数组[1,2]和[3,4]中的元素分别相加后,以数组类型返回相加的结果。

·查询和分析语句

* | SELECT zip_with(array[1,2], array[3,4],(x,y) -> x + y)

·查询和分析结果

[4,6]

赞 (0)
上一篇 4天前
下一篇 4天前