使用给定条件向配置单元 table 添加新列

Add a new column to hive table with given criteria

我有一个名为 Table 的 Hive 数据,它按每日日期进行分区,其中有 3 列:namesexcityage

现在我想向现有的 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。