在HIVE QL的表格中添加一列

use*_*312 26 hadoop hive hiveql

我在HIVE中编写代码来创建一个包含1300行和6列的表:

create table test1 as SELECT cd_screen_function,
     SUM(access_count) AS max_count,
     MIN(response_time_min) as response_time_min,
     AVG(response_time_avg) as response_time_avg,
     MAX(response_time_max) as response_time_max,
     SUM(response_time_tot) as response_time_tot,
     COUNT(*) as row_count
     FROM sheet WHERE  ts_update BETWEEN unix_timestamp('2012-11-01 00:00:00') AND 
     unix_timestamp('2012-11-30 00:00:00') and cd_office = '016'
     GROUP BY cd_screen_function ORDER BY max_count DESC, cd_screen_function;
Run Code Online (Sandbox Code Playgroud)

现在我想添加另一列,access_count1其中包含所有1300行的唯一值,值将是sum(max_count).max_count是我现有表中的一列.我怎么能这样做?我试图通过此代码更改表ALTER TABLE test1 ADD COLUMNS (access_count1 int) set default sum(max_count);

Dan*_*man 40

无法在Hive中添加具有默认值的列.你有正确的语法添加列 ALTER TABLE test1 ADD COLUMNS (access_count1 int);,你只需要摆脱default sum(max_count).添加列后,不会对支持表的文件进行任何更改.Hive通过解释NULL为该列中每个单元格的值来处理"缺失"数据.

所以现在你有了需要填充列的问题.不幸的是,在Hive中你基本上需要重写整个表,这次填充了列.使用新列重新运行原始查询可能更容易.或者您可以将列添加到现在的表中,然后选择其所有列以及新列的值.

您还可以选择始终COALESCE将列设置为所需的默认值,并暂时保留NULL.当您希望NULL具有与所需默认值不同的含义时,此选项将失败.它还要求你依赖永远记住COALESCE.

如果您对处理支持Hive的文件的能力非常有信心,您也可以直接更改它们以添加默认值.一般来说,我会建议不要这样做,因为大多数时候它会更慢,更危险.可能有一些情况下它有意义,所以我已经包含了这个选项的完整性.

  • `ALTER TABLE test1 ADD COLUMNS(access_count1 int,access_count2 date,access_count3 string,...);` (10认同)