2013-10-25 24 views
14

我在HIVE編寫代碼來創建由1300行6列的表格:在表中添加一列在HIVE QL

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);

回答

21

cannot add a column with a default value in Hive。你有right syntax for adding the columnALTER 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的文件的能力非常有信心,還可以直接修改它們以添加默認設置。總的來說,我會建議不要這樣做,因爲大部分時間它會更慢,更危險。可能有些情況下它是有道理的,所以我已經包含了這個選項的完整性。

+0

這是如何工作,如果我想添加多個列? – Arun

+4

'ALTER TABLE test1 ADD COLUMNS(access_count1 int,access_count2 date,access_count3 string,...);' –

+0

我們添加列的順序是否重要? –