16

別のテーブル (テーブル 1) から Hive にテーブル (テーブル 2) を作成しようとしています。NULL 値を持つ特定の行を除外しようとしており、次の条件を試しました。

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

ただし、新しいテーブルで次のクエリを実行すると、NULL 値を持つ 300 行以上が取得されます。

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

誰かがこれらの NULL 値の原因を指摘できますか?

ありがとうございました。

ラヴィ

4

6 に答える 6

26

column1 is not NULL or column1 <> ''まず、あまり意味がないと思います。column1 is not NULL and column1 <> ''(ANDの代わりに)と書くつもりだったのORでしょうか?

次に、テーブル定義に対する Hive の「読み取り時のスキーマ」アプローチにより、無効な値はNULL、それらから読み取るときに変換されます。したがって、たとえば、table1.column1is が typeSTRINGtable2.column1あり、 type が である場合、それを保証するのに十分INTではないと思います。(ただし、これについてはよくわかりません。)table1.column1 IS NOT NULLtable2.column1 IS NOT NULL

于 2013-08-25T19:53:58.060 に答える
7

長さ > 0 も含めるようにしてください。

column1 is not NULL AND column1 <> '' AND length(column1) > 0 
于 2014-09-30T20:37:14.683 に答える
2

Hive テーブルの column1 のデータ型は何ですか? 列が STRING の場合、外部ファイルにその列のデータがなくても NULL 値にはならないことに注意してください。

于 2013-08-27T06:54:53.480 に答える
0

以下のSQLを使用して、null文字列と空の文字列の行を除外します。

select * from table where length(nvl(column1,0))>0

空文字列の長さは0だからです。

select length('');
+-----------+--+
| length()  |
+-----------+--+
| 0         |
+-----------+--+
于 2018-08-17T06:30:40.137 に答える