2016-06-29 4 views
4

ハイブの既存の列から新しい列を作成できるかどうかは疑問でした。ハイブ - 別の列から列を作成することは可能ですか

私はテーブルPeople (name string, age int)を持っており、if(age > 70, 'old', 'not_old')と定義される列is_old stringを追加したいとします。これを行う方法はありますか?

私は現在、考えることができる唯一の方法は、古いものから新しいテーブル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

はい。 Googleハイブケースステートメントまたはハイブifステートメント。 – gobrewers14

答えて

2

はい、一時テーブルを作成せずにそれを行うための方法があります。列を追加して上書き表を挿入します。

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 ; 
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 
関連する問題