篩選陣列 - Amazon Athena

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

篩選陣列

如果資料列的集合符合篩選條件,則從資料列的集合建立陣列。

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)

您可以在 ARRAY 表達式上使用 filter 函數建立一個新的陣列,該陣列是 list_of_values 中項目的子集,其 boolean_function 為 true。filter 函數在您無法使用 UNNEST 函數的情況下十分有用。

以下範例會篩選陣列 [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]