Hiveメモ

HiveのTipsかもしれないものを2つ知ったのでいちおうメモっとく。何でこうなるかはわかってない。バージョンは0.6ね。

まず1つめ

aaaとbbbという2つのテーブルがあって、それぞれcolumn1というパーティションキーがあって、
このキーで結合しつつcolumn1が1なものを求めたい

っていう場合は

select
  *
from
  aaa a
join
  bbb b
on
  a.column1 = b.column1
and
  a.column1 = 1
;

だとMap数が膨大になるが、

select
  *
from
  aaa a
join
  bbb b
on
  a.column1 = b.column1
and
  a.column1 = 1
and
  b.column1 = 1
;

とすれば大丈夫。

2つめ

aaaというテーブルがあってcolumn1カラムの値がhogeな件数を求めたい

って場合は

select count(*) from aaa where column1 = "hoge";

だとcolumn1がnullのときもカウントされてしまう。

select count(column1) from aaa where column1 = "hoge";

とか

select count(1) from aaa where column1 = "hoge";

ならOK

下記のようにやった場合と件数が違くて変だなーって思って気づいた。

select column1, count(*) from aaa group by column1

count(*)は使わずにcount(1)使ったほうが無難かも

いじょ