2017-07-14 34 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');