【问题标题】:Add a new column to hive table with given criteria使用给定条件向配置单元表添加新列
【发布时间】:2017-12-28 07:51:43
【问题描述】:

我有一个名为 Data 的 Hive 表,它按每日日期进行分区,其中我有 3 列:name,sex,city,age

现在我想在这个现有的 Hive 表中添加另一个名为 AgeRange 的列,其中的值将取决于列 Age 的数据。

如果Age < 18,则值为0。如果Age >= 18 and <= 23,则值为1,否则值为2

我该如何为此编写查询?这需要对过去的数据(即到昨天的日期)进行。

【问题讨论】:

    标签: hive hiveql


    【解决方案1】:

    您可以先添加一列,然后 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 );
    

    【讨论】:

      【解决方案2】:

      如果您的 Hive 不支持 Update 或表很大,则创建具有附加列的新表并从旧表中插入覆盖:

      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;
      

      然后删除旧表并重命名新表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-15
        • 1970-01-01
        • 2016-03-13
        • 2019-07-25
        • 1970-01-01
        • 2021-02-16
        相关资源
        最近更新 更多