2013-08-25 53 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 <> ''; 

然而,当我尝试用新表这下面的查询,我得到300+行与NULL vaues:

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

可能有人点是什么原因造成这些NULL值?

谢谢。

拉维

回答

18

首先—我不认为column1 is not NULL or column1 <> ''使多大的意义。也许你打算写column1 is not NULL and column1 <> ''AND而不是OR)?

其次—由于Hive对表定义的“读取架构”方法,当您从中读取无效值时,它们将转换为NULL。因此,例如,如果table1.column1的类型是STRINGtable2.column1的类型是INT,那么我认为table1.column1 IS NOT NULL就不足以保证table2.column1 IS NOT NULL。 (虽然我不确定)

+1

当然,它是**和**。该列不能为NULL,也不能为空('')。拉赫克给出了很好的答案。 – jbaptiste

2

Hive表中column1的数据类型是什么?请注意,如果您的列是STRING,即使您的外部文件没有该列的任何数据,也不会有NULL值。

+0

谢谢!这对我有用。 – Ghrua

4

尝试包括长度> 0。

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

要检查为NULL列1数据,并考虑您的是字符串数据类型,你可以使用下面的命令:

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

尝试使用ISNULL(一),isnotnull(一) ,nvl()等等。在配置单元的某些版本(可能与服务器设置一起工作时),'IS NULL'和'IS NOT NULL'语法在执行时不执行逻辑编译。请查询 here了解更多信息。