[Athena]1対多のテーブルをJOINしてGROUP BYで集約したレコードを配列で出力

Athenaの裏側ではprestoが動いているようなのでprestoのドキュメントにあるarray_aggという集約関数を使って以下の様なクエリを実行することで配列で取得することが出来ます。

SELECT users.id, array_agg(documents.id) AS document_ids FROM users INNER JOIN documents ON documents.user_id = users.id GROUP BY users.id;

データ

users

id name
1 “Chadwick”
2 “Raman”
3 “Compton”
4 “Bohr”
5 “Lorentz”

documents

id user_id
1 1
2 1
3 1
4 2
5 2
6 3
7 4

結果

user_id document_ids
1 1 [3, 2, 1]
2 2 [5, 4]
3 4 [7]
4 3 [6]

参照