まずは結論から
SELECT *
FROM "athena"."test_table"
WHERE arrays_overlap(split("id_list",','), ARRAY['1','2','3','4','5'] );
前提・背景・やりたいこと ...など
- AWS Athenaでcsvファイルに検索をかける
- AthenaでSQLを実行するため、Prestoの利用ができる
- csvファイルにはジェイウォーク1なカラムが含まれる
- ジェイウォークなカラムに入っている値の"どれか"が、指定リストのどれかと一致するするものを検索したい
- 速度は今回未考慮
解決法
Prestoに用意されている2つの関数を用いて解決
split(string, delimiter)
stringをdelimiterで区切ってARRAY型に変換
arrays_overlap(x,y)
xの要素のどれかがyの要素のどれかと一致した場合Trueを返す
まとめ
比較的簡単に書けました。
速度は実測にて耐えられるかを確認します。
(きっと速度は遅くなるのでしょう。。。)
もっといい方法があれば教えてください。
にしても、タイトルが長い...
参照
-
1フィールドに複数の値がカンマ区切りで格納されているもの。本来のDBではアンチパターンだが、今回は色々な制約のもと中間ファイルを作ったり、RDBにしたりが不可なので、どうにかこのまま検索したい。 ↩