これは何
の参加記事です。
はじめに
データとして配列を持っているテーブルを考えます。
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)
参考文献