我想知道是否可以从配置单元中的现有列创建新列。
假设我有一个表格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;
**有没有办法在不创建临时表的情况下这样做?
(例如,oracle有计算列的想法。)
答案 0 :(得分:3)
是的,有一种方法可以在不创建TEMP TABLE的情况下完成。添加列然后插入覆盖表select 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 ;
答案 1 :(得分:2)
你几乎就在那里,你应该尝试一下。
使用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