如何将一列(非常大的表)中的NULL值替换为0,而又不将期望结果的新列添加到HIVE中的表中?

时间:2019-07-19 14:05:50

标签: hadoop hive

我正在尝试将HIVE大表的一列中的所有NULL值都替换为0。

但是,每次尝试实现一些代码时,最终都会在表中生成一个新列。我尝试更改/修改的列仍然存在并且仍然具有NULL值,但是自动生成的新列(即_c1)是我想要修改的列。

我尝试运行 COALESCE ,但最终还是生成了一个新列。我也尝试实施 CASE WHEN ,但是结果却一样。

Select *, 
CASE WHEN columnname IS NULL THEN 0
ELSE columnname
END
from tablename;
  

也尝试过

SELECT coalesce(columnname, CAST(0 AS BIGINT)) FROM tablename

我只想使用其他列来更新表,但是我要修改的列仍然具有其原始名称,但是用NULL代替了NULL值。

我不想生成新列,而是修改现有列。 我该怎么办?

2 个答案:

答案 0 :(得分:0)

使用insert overwrite ..选项。

insert overwrite table tablename
select c1,c2,...,coalesce(columnname,0) as columnname
from tablename

请注意,您必须指定select中所需的所有其他列名称。

答案 1 :(得分:0)

最简单的方法是将select *扩展到实际的列列表中,将要修改的列替换为COALESCECASE(视需要而定),然后分配它是与原始列名相同的别名。例如:

SELECT
  c1,
  CASE 
    WHEN columnname IS NULL THEN 0
    ELSE columnname
  END AS columnname,
  c3,
  ...
FROM 
  tablename;

“新” columnname的使用会受到某些限制,例如,您将无法直接在WHERE子句中使用它,但是有很多解决方法。 / p>