替换配置单元中的空值

omjgkv6w  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(315)

我在配置单元中有一个表,其中包含以“null”作为数据的colun。我想用'n/a'替换'null',尝试使用coalesce(col\u name,'n/a'),但它不起作用,我使用if,它起作用了

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

我在列中有数百万个值,这个'if'会影响性能吗?如果是的话,处理这种情况的最佳方法是什么?
好心的建议

dtcbnfnu

dtcbnfnu1#

我怀疑您的列不是真正的空值(即没有值),而是字符串等于“null”。也许这就是从源系统加载数据的方式?
如果这是真的,那么 COALESCE(col_name,'N/A') 函数总是返回col\u name的值,因为这是函数中列出的第一个非空值。
尝试以下查询:

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

这将显示列是否实际具有空值,如配置单元所配置的那样。
请注意,您可以通过使用以下内容覆盖默认的null行为来更改配置单元的行为:

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

另请注意,如果您有一个分区表,则必须在每个分区定义上使用上面的set语句-分区将不使用表级设置。

waxmsbnn

waxmsbnn2#

使用if条件不会影响你的表现。无论您选择什么条件函数(case、nvl、if等),它都需要遍历所有记录来检查该条件。如果条件允许,请继续使用

相关问题