Treasure Data に突っ込んである配列型のデータを集計しようとして LATERAL VIEW 構文を使ってみていたんだけど、元の配列に空データ(array()
的なやつ)が入っていると、explode()
で展開した後にそいつが NULL
として入ってきてしまって、期待のデータにならなかった。
そこで、ググった結果や、Hive のマニュアルやらを眺めていたら、「Outer Lateral Views」という説明に辿り着いた。
通常の LATERAL VIEW の構文では、こう書くところ、
SELEC * FROM src LATERAL VIEW explode(array()) C AS a limit 10;
OUTER LATERAL VIEW では、このように書くようだ。
SELECT * FROM src LATERAL VIEW OUTER explode(array()) C AS a limit 10;
これで、explode()
結果が NULL だったものを除外してくれるみたいなことがマニュアルには書いてあるんだと思うんだけど、Treasure Data の Hive ではエラーとなってしまって、実行できなかった。
OUTER LATERAL VIEW の実装は Hive 0.12.0 かららしいので、Treasure Data 内の Hive バージョンではサポートされてないという状況だと思われる。
結局のところ、
SELEC * FROM src LATERAL VIEW explode(array()) C AS a WHERE a IS NOT NULL AND a != '' limit 10;
のように「explode()
で展開後の値が NULL ではなく、空文字列でもない」という条件を加えた。IS NOT NULL だけでも良いような気はするけど、おまじない的に空文字でもない、を入れちゃった。