ジェイウォークなカラムに格納された値のどれかが、リストのどれかと一致するものを検索したい
まずは結論から
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なカラムが含まれる
- ジェイウォークなカラムに入っている値の"どれか"が、指定リストのどれかと一致するするものを検索したい
- 速度は今回未考慮
解決法
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にしたりが不可なので、どうにかこのまま検索したい。 ↩
Author And Source
この問題について(ジェイウォークなカラムに格納された値のどれかが、リストのどれかと一致するものを検索したい), 我々は、より多くの情報をここで見つけました https://qiita.com/henkeizyu/items/35e03e5a188131e4e706著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .