tencent cloud

文档反馈

数组函数

最后更新时间:2024-01-22 10:52:48
    本文档为您介绍数组相关函数的语法及示例。
    函数名称
    语句
    含义
    [x]
    []用于获取数组中的某个元素,等同于 element_at 函数。
    array_agg(x)
    以数组形式返回 x 中的所有值。
    array_distinct(x)
    数组去重,获取数组中的唯一元素。
    array_except(x,y)
    计算 x,y 两个数组的差集。
    array_intersect(x, y)
    计算 x,y 两个数组的交集。
    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(x)
    获取数组中的最大值。
    array_max(x)
    获取数组中的最小值。
    array_position(x, element)
    获取指定元素的下标,下标从1开始。如果指定元素不存在,则返回0。
    array_remove(x, element)
    删除数组中指定的元素。
    array_sort(x)
    对数组元素进行升序排序。如果有 null 元素,则 null 元素排在最后。
    array_union(x, y)
    计算两个数组的并集。
    cardinality(x)
    计算数组中元素的个数。
    concat(x, y...)
    将多个数组拼接为一个数组。
    contains(x, element)
    判断数组中是否包含指定元素。如果包含,则返回 true。
    element_at(x, y)
    返回数组中的第 y 个元素。
    filter(x, lambda_expression)
    结合 Lambda 表达式,用于过滤数组中的元素,只返回满足 Lambda 表达式的元素。
    flatten(x)
    把将二维数组转换为一维数组。
    reduce(x, lambda_expression)
    根据 Lambda 表达式的定义,对数组中的各个元素进行相加计算,然后返回计算结果。
    reverse(x)
    对数组中的元素进行反向排列。
    sequence(x, y)
    通过指定的起始值返回一个数组,其元素为起始值范围内一组连续且递增的值。递增间隔为默认值1。
    sequence(x, y, step)
    通过指定的起始值返回一个数组,其元素为起始值范围内一组连续且递增的值。自定义递增间隔。
    shuffle(x)
    对数组元素进行随机排列。
    slice(x, start, length)
    获取数组的子集。
    transform(x, lambda_expression)
    将 Lambda 表达式应用到数组的每个元素中。
    zip(x, y)
    将多个数组合并为一个二维数组,且各个数组中下标相同的元素组成一个新的数组。
    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 类型。

    示例

    计算数组[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]

    array_intersect 函数

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

    语法

    array_intersect(x, y)

    参数说明

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

    返回值类型

    array 类型。

    示例

    计算数组[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]

    array_join 函数

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

    语法

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

    参数说明

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

    返回值类型

    varchar 类型。

    示例

    使用空格将数组[null, '中国','sh']中的元素拼接为一个字符串,其中 null 元素替换为 ‘region’。
    查询和分析语句
    * | SELECT array_join(array[null,'中国','sh'],'/','region')
    查询和分析结果
    region/中国/sh

    array_max 函数

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

    语法

    array_max(x)

    参数说明

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

    返回值类型

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

    示例

    获取数组中[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

    array_min 函数

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

    语法

    array_min(x)

    参数说明

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

    返回值类型

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

    示例

    获取数组中[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

    array_position 函数

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

    语法

    array_position(x, element)

    参数说明

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

    返回值类型

    bigint 类型。

    示例

    返回数组[23,46,35]中46的下标。
    查询和分析语句
    * | SELECT array_position(array[23,46,35],46)
    查询和分析结果
    2

    array_remove 函数

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

    语法

    array_remove(x, element)

    参数说明

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

    返回值类型

    array 类型。

    示例

    删除数组[23,46,35]中23。
    查询和分析语句
    * | SELECT array_remove(array[23,46,35],23)
    查询和分析结果
    [46,35]

    array_sort 函数

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

    语法

    array_sort(x)

    参数说明

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

    返回值类型

    array 类型。

    示例

    对数组['b', 'd', null, 'c', 'a']进行升序排序。
    查询和分析语句
    * | SELECT array_sort(array['b','d',null,'c','a'])
    查询和分析结果
    ["a","b","c","d",null]

    array_union 函数

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

    语法

    array_union(x, y)

    参数说明

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

    返回值类型

    array 类型。

    示例

    计算数组[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]

    cardinality 函数

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

    语法

    cardinality(x)

    参数说明

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

    返回值类型

    bigint 类型。

    示例

    计算 number 字段值中元素的个数。
    字段样例
    array:[12,23,26,48,26]
    查询和分析语句
    * | SELECT cardinality(cast(json_parse(array) as array(bigint)))
    查询和分析结果
    5

    concat 函数

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

    语法

    concat(x, y...)

    参数说明

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

    返回值类型

    array 类型。

    示例

    将数组['red','blue']和['yellow','green']拼接为一个数组。
    查询和分析语句
    * | SELECT concat(array['red','blue'],array['yellow','green'])
    查询和分析结果
    ["red","blue","yellow","green"]

    contains 函数

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

    语法

    contains(x, element)

    参数说明

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

    返回值类型

    boolean 类型。

    示例

    判断 array 字段值中是否包含23。
    字段样例
    array:[12,23,26,48,26]
    查询和分析语句
    * | SELECT contains(cast(json_parse(array) as array(varchar)),'23')
    查询和分析结果
    TRUE

    element_at 函数

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

    语法

    element_at(x, y)

    参数说明

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

    返回值类型

    任意数据类型。

    示例

    返回 number 字段值中的第2个元素。
    字段样例
    array:[12,23,26,48,26]
    查询和分析语句
    * | SELECT element_at(cast(json_parse(number) AS array(varchar)), 2)
    查询和分析结果
    23

    filter 函数

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

    语法

    filter(x, lambda_expression)

    参数说明

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

    返回值类型

    array 类型。

    示例

    返回数组[5,-6,null,7]中大于0的元素,其中x -> x > 0为 Lambda 表达式。
    查询和分析语句
    * | SELECT filter(array[5,-6,null,7],x -> x > 0)
    查询和分析结果
    [5,7]

    flatten 函数

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

    语法

    flatten(x)

    参数说明

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

    返回值类型

    array 类型。

    示例

    将数组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]

    reduce 函数

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

    语法

    reduce(x, lambda_expression)

    参数说明

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

    返回值类型

    bigint 类型。

    示例

    返回数组[5, 20, 50]中各个元素相加的结果。
    查询和分析语句
    * | SELECT reduce(array[5,20,50],0,(s, x) -> s + x, s -> s)
    查询和分析结果
    75

    reverse 函数

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

    语法

    reverse(x)

    参数说明

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

    返回值类型

    array 类型。

    示例

    将数组[1,2,3,4,5]中的元素反向排序。
    查询和分析语句
    * | SELECT reverse(array[1,2,3,4,5])
    查询和分析结果
    [5,4,3,2,1]

    sequence 函数

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

    语法

    递增间隔为默认值1。
    sequence(x, y)
    自定义递增间隔。
    sequence(x, y, step)

    参数说明

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

    返回值类型

    array 类型。

    示例

    示例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]

    shuffle 函数

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

    语法

    shuffle(x)

    参数说明

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

    返回值类型

    array 类型。

    示例

    对数组[1,2,3,4,5]中的元素进行随机排序。
    查询和分析语句
    * | SELECT shuffle(array[1,2,3,4,5])
    查询和分析结果
    [5,2,4,1,3]

    slice 函数

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

    语法

    slice(x, start, length)

    参数说明

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

    返回值类型

    array 类型。

    示例

    返回数组[1,2,4,5,6,7,7]的子集,从第三个元素开始返回,子集元素个数为2。
    查询和分析语句
    * | SELECT slice(array[1,2,4,5,6,7,7],3,2)
    查询和分析结果
    [4,5]

    transform 函数

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

    语法

    transform(x, lambda_expression)

    参数说明

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

    返回值类型

    array 类型。

    示例

    将数组[5,6]中的各个元素加1,然后返回。
    查询和分析语句
    * | SELECT transform(array[5,6],x -> x + 1)
    查询和分析结果
    [6,7]

    zip 函数

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

    语法

    zip(x, y)

    参数说明

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

    返回值类型

    array 类型。

    示例

    将数组[1,2]和[3,4]合并为一个二维数组。
    查询和分析语句
    * | SELECT zip(array[1,2], array[3,4])
    查询和分析结果
    ["{1, 3}","{2, 4}"]

    zip_with 函数

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

    语法

    zip_with(x, y, lambda_expression)

    参数说明

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

    返回值类型

    array 类型。

    示例

    使用 Lambda 表达式(x, y) -> x + y使数组[1,2]和[3,4]中的元素分别相加后,以数组类型返回相加的结果。
    查询和分析语句
    * | SELECT zip_with(array[1,2], array[3,4],(x,y) -> x + y)
    查询和分析结果
    [4,6]
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持