我在hive中有一个表,其中coluns为'null'作为数据。 我想用'N / A'替换'null' 尝试使用COALESCE(col_name,'N / A'),但它不起作用 我用过if而且有用
if(col_name='null','N/A',col_name)
我在列中有数百万个值,这个'如果'会影响性能吗?如果是的话,处理这种情况的最佳方法是什么?
请建议
答案 0 :(得分:1)
使用IF条件不会影响您的表现。无论您选择哪种条件函数(CASE,NVL,IF等),都需要遍历所有记录以检查该条件。继续使用IF条件
答案 1 :(得分:1)
我怀疑你的列不是真正的NULL值(即没有值),而是字符串等于" null"。也许这就是从源系统加载数据的方式?
如果确实如此,那么COALESCE(col_name,'N/A')
函数将始终返回col_name的值,因为这是函数中列出的第一个非NULL值。
尝试查询:
SELECT COUNT(*) FROM table_name WHERE col_name IS NULL;
这将显示列是否实际上具有NULL值,因为您已配置Hive。
请注意,您可以通过使用以下命令覆盖默认的NULL行为来更改Hive的行为:
ALTER table_name SET TBLPROPERTIES('serialization.null.format'='your_value')
另请注意,如果您有分区表,则必须在每个分区定义上使用上述SET语句 - 分区不会使用表级设置。