我在配置单元中有一个表,其中包含'null'作为数据。 我想用“N/A” 使用COALESCE(COL_NAME,“N/A”)试图取代“空”,但它不工作 如果我使用,它的工作替换配置单元中的NULL
if(col_name='null','N/A',col_name)
我有百万值在专栏中,这个'如果'会影响表现吗?如果是的话,什么可能是最好的办法来处理这种情况?
请建议
我在配置单元中有一个表,其中包含'null'作为数据。 我想用“N/A” 使用COALESCE(COL_NAME,“N/A”)试图取代“空”,但它不工作 如果我使用,它的工作替换配置单元中的NULL
if(col_name='null','N/A',col_name)
我有百万值在专栏中,这个'如果'会影响表现吗?如果是的话,什么可能是最好的办法来处理这种情况?
请建议
使用IF条件不会影响您的性能。无论您选择哪种条件函数(CASE,NVL,IF等),都需要遍历所有记录来检查该条件。继续使用IF条件
我怀疑你的列不是真正的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语句必须在每个分区定义中使用 - 在分区不会使用表级设置。