Tips: Hive, Prestoで配列に値が含まれているかを判定する方法


これは何

の参加記事です。

はじめに

データとして配列を持っているテーブルを考えます。

id ids
1 [2, 3]
2 [1, 3]
3 [1, 2]

このようなテーブルがあった時、配列データに値が含まれているかどうかで絞り込みや結合などを行いたい場合もあると思います。
その方法を紹介します。

Presto

PrestoにはCONTAINS(array, value)という関数があります。これが第一引数に渡した配列に第二引数に渡した値が含まれているかどうかを判定する関数になります。これを用いてこのようなことができます。

例(WHERE)
SELECT *
FROM data
WHERE CONTAINS(ids, 1)
例(JOIN)
SELECT *
FROM data d1
INNER JOIN data d2 ON CONTAINS(d1.ids, d2.id)

Hive

HiveにもARRAY_CONTAINSという関数があるのでPrestoと同様にかけます。

例(WHERE)
SELECT *
FROM data
WHERE ARRAY_CONTAINS(ids, 1)
例(JOIN)
SELECT *
FROM data d1
INNER JOIN data d2 ON ARRAY_CONTAINS(d1.ids, d2.id)

参考文献