LoginSignup
0
0

More than 5 years have passed since last update.

ジェイウォークなカラムに格納された値のどれかが、リストのどれかと一致するものを検索したい

Last updated at Posted at 2019-02-14

まずは結論から

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を返す

まとめ

比較的簡単に書けました。
速度は実測にて耐えられるかを確認します。
(きっと速度は遅くなるのでしょう。。。)

もっといい方法があれば教えてください。
にしても、タイトルが長い...

参照

Presto 0.172 Documentation


  1. 1フィールドに複数の値がカンマ区切りで格納されているもの。本来のDBではアンチパターンだが、今回は色々な制約のもと中間ファイルを作ったり、RDBにしたりが不可なので、どうにかこのまま検索したい。 

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0