配列をフィルタリングする - 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 関数を使用して、boolean_function が true となっている list_of_values 内の項目のサブセットである新しい配列を作成できます。filter 関数は、UNNEST 関数を使用できない場合に役立ちます。

次の例では、配列 [1,0,5,-1] 内のゼロより大きい値をフィルタリングします。

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

[1,5]

次の例では、配列 [-1, NULL, 10, NULL] 内の null 以外の値をフィルタリングします。

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

[-1,10]