hive - 是否可以从另一列创建一列

ant*_*ell 5 sql hive hiveql

我想知道是否可以从配置单元中的现有列创建新列。

假设我有一个表People (name string, age int),我想添加一个is_old string定义为 的列if(age > 70, 'old', 'not_old')。有没有办法做到这一点?

People_temp我目前能想到的唯一方法是从旧表创建一个新表,删除旧表并重命名新表,如下所示:

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;
Run Code Online (Sandbox Code Playgroud)

** 有没有办法在不创建临时表的情况下执行此操作?
(例如,oracle 有计算列的想法。)

lef*_*oin 4

是的,有一种方法可以在不创建临时表的情况下做到这一点。添加列然后插入覆盖表从其自身选择:

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 ; 
Run Code Online (Sandbox Code Playgroud)