2015-03-25 43 views
0

我在配置单元中有一个表,其中包含'null'作为数据。 我想用“N/A” 使用COALESCE(COL_NAME,“N/A”)试图取代“空”,但它不工作 如果我使用,它的工作替换配置单元中的NULL

if(col_name='null','N/A',col_name) 

我有百万值在专栏中,这个'如果'会影响表现吗?如果是的话,什么可能是最好的办法来处理这种情况?

请建议

回答

1

使用IF条件不会影响您的性能。无论您选择哪种条件函数(CASE,NVL,IF等),都需要遍历所有记录来检查该条件。继续使用IF条件

1

我怀疑你的列不是真正的NULL值(即没有值),而是等于“null”的字符串。也许这就是数据从源系统加载的方式?

如果这是真的,那么COALESCE(col_name,'N/A')函数将始终返回col_name的值,因为这是该函数中列出的第一个非NULL值。

尝试像查询:

SELECT COUNT(*) FROM table_name WHERE col_name IS NULL; 

这会告诉你,如果该列实际上有NULL值,或者不是你已经配置了蜂巢。

请注意,您可以通过覆盖缺省NULL行为改变蜂房的行为:

ALTER table_name SET TBLPROPERTIES('serialization.null.format'='your_value') 

另外请注意,如果你有一个分区表,上面的SET语句必须在每个分区定义中使用 - 在分区不会使用表级设置。