我正在尝试将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值。
我不想生成新列,而是修改现有列。 我该怎么办?
答案 0 :(得分:0)
使用insert overwrite ..
选项。
insert overwrite table tablename
select c1,c2,...,coalesce(columnname,0) as columnname
from tablename
请注意,您必须指定select
中所需的所有其他列名称。
答案 1 :(得分:0)
最简单的方法是将select *
扩展到实际的列列表中,将要修改的列替换为COALESCE
或CASE
(视需要而定),然后分配它是与原始列名相同的别名。例如:
SELECT
c1,
CASE
WHEN columnname IS NULL THEN 0
ELSE columnname
END AS columnname,
c3,
...
FROM
tablename;
“新” columnname
的使用会受到某些限制,例如,您将无法直接在WHERE
子句中使用它,但是有很多解决方法。 / p>