なんか、FULL OUTER JOIN した時に、JOINできてるはずのレコードなのに片方のレコードのカラムがNULLになってるというのがあった。
http://grokbase.com/t/hive/user/1178em53hc/left-outer-join-and-partitioned-tables
こんなのあったんで、
hive.outerjoin.supports.filters=false
でやってみたが結果は変わらず・・・
よくよく調べてみたら、データとプログラムの不備でした。
- 片方のデータは空文字が""で入っているのに、もう片方は何故か"null"になっていた。
- それぞれのデータは時間順でソートした上でデータ加工していたが、タイムスタンプが秒単位で、同じ時刻のログがけっこうあり、そこでソート順が入れ替わって加工結果に差が出てしまっていた
- それぞれのデータを作成する際のロジックに微妙に違いがあり、結果も微妙にずれていた
ちなみに、これ調べてた時にたまたまこんなのも見つけた。
http://d.hatena.ne.jp/wyukawa/20120328/1332950392
おお!テーブルサイズを見て map side join すべきかどうか自動で判断してくれると!これはやってみようと思う。