2017-07-14 36 views
4

我有一個Hive外部表,其中包含csv數據。某些字符串字段的值爲'null'。現在,我想要選擇數據並以ORC格式插入到其他表格中,例如'select * from first insert into second'。 我想用實際的NULL值替換字符串'null'。Hive解決方案將空字符串選擇/對待爲空

一個解決方案可以用空白替換'null'並設計我的表來將空白對待爲空。這可能有效。但是,如果數據中存在任何空白值,則這些值也將被視爲NULL。

我想到的其他一點是,表中有大量的這樣的字符串列。所以如果解決方案需要選擇一列並執行一些操作;我將不得不寫一個很長的查詢。但是如果沒有其他選擇,那可以做到。

請提出解決方案。

+1

而不是' *'使用a,b,c等列列表並使用'CASE'語句。就像'當a ='null'的情況一樣,那麼null或者結尾就是''。 – Ambrish

回答

2

更新版本的Hive支持標準NULLIF()函數。如果你正在使用insert,那麼你就應該反正列出列:

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

所有你需要做的是改變你的外部表,所以它將把null字符串作爲NULL

alter table my_external_table set tblproperties('serialization.null.format'='null');