配置单元 - 是否可以从另一列创建一列
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 ;
我想知道是否可以从 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 ;