筛选数组 - Amazon Athena
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

筛选数组

如果行集合与筛选条件匹配,则从这些行创建一个数组。

WITH dataset AS ( SELECT ARRAY[1,2,3,4,5] AS items ) SELECT array_agg(i) AS array_items FROM dataset CROSS JOIN UNNEST(items) AS t(i) WHERE i > 3

此查询返回:

+-------------+ | array_items | +-------------+ | [4, 5] | +-------------+

根据数组的一个元素是否包含特定值 (例如 2) 来筛选该数组,如以下示例所示:

WITH dataset AS ( SELECT ARRAY [ ARRAY[1,2,3,4], ARRAY[5,6,7,8], ARRAY[9,0] ] AS items ) SELECT i AS array_items FROM dataset CROSS JOIN UNNEST(items) AS t(i) WHERE contains(i, 2)

此查询返回:

+--------------+ | array_items | +--------------+ | [1, 2, 3, 4] | +--------------+

filter 函数

filter(ARRAY [list_of_values], boolean_function)

filter 函数从 list_of_valuesboolean_function 为 true 的项目创建一个数组。在无法使用 UNNEST 函数的情况下,filter 函数会非常有用。

以下示例使用数组 [1,0,5,-1] 中大于零的值创建一个数组。

SELECT filter(ARRAY [1,0,5,-1], x -> x>0)

结果

[1,5]

以下示例创建一个由数组 [-1, NULL, 10, NULL] 中的非空值组成的数组。

SELECT filter(ARRAY [-1, NULL, 10, NULL], q -> q IS NOT NULL)

结果

[-1,10]