2013-08-25 4 views
8

別のテーブル(テーブル1)からHiveでテーブル(テーブル2)を作成しようとしています。私はNULL値で特定の行を除外しようとしていて、次の条件を試しました。HiveでNULL値を処理する

insert overwrite table table2 partition (date = '2013-06-01') 
    select column1, column 2.... 
    from table1 
    where column1 is not NULL or column1 <> ''; 

私は新しいテーブルで、この次のクエリをしようとすると、しかし、私はNULLのvauesと300+行を取得:

select count(*) from table2 where column1 is NULL; 

を誰かがこれらのNULL値を引き起こしているものを指してもらえますか?

ありがとうございます。

ラヴィ

答えて

18

まず—私はcolumn1 is not NULL or column1 <> ''は非常に理にかなっているとは思いません。あなたはcolumn1 is not NULL and column1 <> ''ORの代わりにAND)と書くことを意図したのでしょうか?

第2に—テーブル定義に対するHiveの「スキーマ読み取り」のアプローチのため、無効な値は読み取ったときにNULLに変換されます。たとえば、table1.column1STRINGのタイプで、table2.column1のタイプがINTの場合、table2.column1 IS NOT NULLを保証するにはtable1.column1 IS NOT NULLで十分とは思われません。 (私はこれについては分かりません)

+1

間違いなく** AND **です。列はNULLであってはならず、空であってはいけません( '')。 Ruakhは良い答えを出しました。 – jbaptiste

2

Hiveテーブルのcolumn1のデータ型は何ですか?列がSTRINGの場合、外部ファイルにはその列のデータがないのにNULL値はありません。

+0

ありがとう!これは私のために働く。 – Ghrua

4

長さ> 0も含めてください。

column1 is not NULL AND column1 <> '' AND length(column1) > 0 
0

NULLのためにcolumn1のためデータをチェックし、それが文字列でのあなたのデータ型を検討するには、コマンドの下に使用することもできます。

select * from tbl_name where column1 is null or column1 <> ''; 
0

ISNULL(a)は、isnotnullを使用してみてください(A) 、nvl()などがあります。ハイブのいくつかのバージョン(潜在的にサーバ設定と組み合わせて、少なくとも私が作業しているもの)では、 'IS NULL'および 'IS NOT NULL'構文はロジックを実行しませんコンパイルされた。詳細については hereを確認してください。

関連する問題