2017-07-14 3 views
4

私はcsvデータを含むハイブ外部テーブルを持っています。文字列フィールドの中には値が 'null'であるものがあります。今、私はデータを選択し、 'select * from first into second'のようなクエリでORCフォーマットの他のテーブルに挿入したいと思います。 文字列 'null'を実際のNULL値に置き換えます。ヌル文字列をNULLとして選択/処理するハイブソリューション

一つの解決策は空白に「ヌル」を置き換え、NULLとして空白の治療のために私のテーブルを設計することができます。それはうまくいくかもしれない。しかし、データに空白の値がある場合、それらもNULLとして扱われます。

その他の点は、私の心に来るあるソリューションは、列を選択して、いくつかの操作を実行するために必要とする場合、表には、このようなstrings.Soと列の数が多いです。非常に長いクエリを書く必要があります。しかし、他の選択肢がない場合は、それを行うことができます。

解決策をご提案ください。

+1

の代わりに 'としてnull文字列を扱いますので、あなたの外部表を変更することです* 'a、b、cなどの列リストを使用し、' CASE'文を使用します。 'a '=' null 'の場合と同様にnull else' a 'として終了します。 – Ambrish

答えて

2

ハイブの最近のバージョンでは、標準NULLIF()機能をサポートしています。あなたがinsertを使用している場合は、とにかく列をリストする必要があります。

insert into second(col1, col2, col3, . . .) 
    select col1, nullif(col2, 'null'), col3, . . . 
    from first; 
2

あなたがやらなければならないことは、それがNULL

alter table my_external_table set tblproperties('serialization.null.format'='null'); 
関連する問題