我在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);
答案 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的文件的能力非常有信心,您也可以直接更改它们以添加默认值。一般来说,我会建议不要这样做,因为大多数时候它会更慢,更危险。可能有一些情况下它有意义,所以我已经包含了这个选项以保持完整性。