はじめに
TDを業務でつかっているのですが、テーブルのカラムにarrayが入っている場合にwhereでどのように使うかわからなかったので調べた時のメモ
使用データ
例として下記のようなデータをつかいます
table_name: user_values
user_id(Int) | values(Array) |
---|---|
1 | ["123","abc"] |
2 | ["123", "bcd"] |
3 | ["789", "cde"] |
このuser_valuesはそのままだとwhereで使えないので、arrayを展開する
select count(user_id) AS user_cnt from user_fruits
LATERAL VIEW explode(values) exploded_values AS data
WHERE data = '123'
とすると
user_id | data |
---|---|
1 | 123 |
1 | abc |
2 | 123 |
2 | bcd |
3 | 789 |
3 | cde |
というように結合されるので
↑のクエリの結果は
user_cnt |
---|
2 |
とかなるらしい
へー
arrayが連想配列だった場合
user_id(Int) | values(Array) |
---|---|
1 | {"key1":"val1"} |
2 | {"key2":"val2"} |
3 | {"key3":"val3"} |
valuesの値が連想配列
select key, val from user_values
LATERAL VIEW explode(values) exploded_values AS key, val
ってやると
key | val |
---|---|
key1 | val1 |
key2 | val2 |
key3 | val3 |
とかって返ってくるらしい
ふうん?
まとめる
頭に描きづらくてなかなか覚えられなそう
とりあえず「ふうん?」くらいしかわからなかったのでメモしておく