配置单元 - 是否可以从另一列创建一列

hive - is it possible to create a column from another column

我想知道是否可以从 hive 中的现有列创建新列。

假设我有一个 table People (name string, age int),我想添加一个列 is_old string,它被定义为 if(age > 70, 'old', 'not_old')。有办法吗?

目前我唯一能想到的办法就是在旧的tablePeople_temp基础上新建一个table,删除旧的table,重命名新的table像这样:

create table People_new as select name, age, if(age > 70, 'old', 'not_old') as is_old from People;
drop table People;
alter table People_new rename People;

** 有没有办法在不创建临时文件的情况下做到这一点 table?
(例如,oracle 有计算列的想法。)

你快到了,你应该尝试一下。

使用CASE WHEN:

,CASE WHEN age > 70 THEN ''old' ELSE 'not_old' END AS is_old string

使用IF:

,IF(age > 70, 'old', 'not_old') AS is_old string

是的,有一种方法可以在不产生温度的情况下做到这一点TABLE。添加列然后从自身插入覆盖 table select :

ALTER TABLE People ADD COLUMNS (is_old string);

INSERT OVERWRITE TABLE People 
SELECT name, age, if(age > 70, 'old', 'not_old') as is_old
  FROM People ;