使用给定条件向配置单元 table 添加新列
Add a new column to hive table with given criteria
我有一个名为 Table 的 Hive 数据,它按每日日期进行分区,其中有 3 列:name
、sex
、city
、age
。
现在我想向现有的 Hive table 添加另一个名为 AgeRange
的列,其中的值将依赖于列 Age
的数据。
如果 Age < 18
,则值为 0
。如果 Age >= 18 and <= 23
,则值为 1
,否则值为 2
。
我该如何编写查询?这需要为过去的数据完成,即直到昨天的日期。
您可以先添加一个列,然后 update
(希望您的 Hive 支持它)所有带有 CASE
语句的记录。
ALTER TABLE Data ADD COLUMNS (AgeRange Varchar);
UPDATE Data SET AgeRange = ( CASE WHEN Age < 18 THEN 0
WHEN Age >= 18 and <= 23 THEN 1
ELSE 2 END );
如果您的 Hive 不支持 Update
或 table 很大,则创建带有附加列的新 table 并从旧的 table 插入覆盖:
insert overwrite table new_table
select
name,
sex,
city,
age,
case when Age < 18 then 0
when Age >= 18 and Age <= 23 then 1
else 2
end AgeRange
from old_table;
然后删除旧的 table 并重命名新的 table。
我有一个名为 Table 的 Hive 数据,它按每日日期进行分区,其中有 3 列:name
、sex
、city
、age
。
现在我想向现有的 Hive table 添加另一个名为 AgeRange
的列,其中的值将依赖于列 Age
的数据。
如果 Age < 18
,则值为 0
。如果 Age >= 18 and <= 23
,则值为 1
,否则值为 2
。
我该如何编写查询?这需要为过去的数据完成,即直到昨天的日期。
您可以先添加一个列,然后 update
(希望您的 Hive 支持它)所有带有 CASE
语句的记录。
ALTER TABLE Data ADD COLUMNS (AgeRange Varchar);
UPDATE Data SET AgeRange = ( CASE WHEN Age < 18 THEN 0
WHEN Age >= 18 and <= 23 THEN 1
ELSE 2 END );
如果您的 Hive 不支持 Update
或 table 很大,则创建带有附加列的新 table 并从旧的 table 插入覆盖:
insert overwrite table new_table
select
name,
sex,
city,
age,
case when Age < 18 then 0
when Age >= 18 and Age <= 23 then 1
else 2
end AgeRange
from old_table;
然后删除旧的 table 并重命名新的 table。