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

时间:2016-06-29 03:39:57

标签: sql hive

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

假设我有一个表格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有计算列的想法。)

2 个答案:

答案 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