在HIVE QL的表格中添加一列

时间:2013-10-25 12:09: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;

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

更改表格

1 个答案:

答案 0 :(得分:36)

cannot add a column with a default value in Hive。您拥有right syntax for adding the column ALTER TABLE test1 ADD COLUMNS (access_count1 int);,您只需要摆脱default sum(max_count)。添加列后,不会对支持表的文件进行任何更改。 Hive handles the "missing" data by interpreting NULL as the value for every cell in that column

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

您还可以选择始终将COALESCE列添加到所需的默认值,并暂时保留NULL。如果希望NULL具有与所需默认值不同的含义,则此选项将失败。它还要求您始终记住COALESCE

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