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的文件的能力非常有信心,您也可以直接更改它们以添加默认值.一般来说,我会建议不要这样做,因为大多数时候它会更慢,更危险.可能有一些情况下它有意义,所以我已经包含了这个选项的完整性.
| 归档时间: |
|
| 查看次数: |
108929 次 |
| 最近记录: |