[英]Inserting values in Hive through select
我試圖在蜂巢列中插入某些派生的值,想知道為什么它不起作用。 我的代碼如下。
Insert into month as select month(datestamp) as month from gc_1;
這里的month列已經存在,其中包含NULL值,而gc_1是表名。 我不確定是否可以使用諸如month , date等功能從另一列中添加蜂巢中的列。
從你的問題,這就是我想你正在努力實現的:有一個名為表gc_1
其中一列已經存在所謂的datestamp
是可能含有適合作為一個參數日期字符串month
功能。 然后,您想在gc_1
創建一個名為month
的新列(我不建議這樣做,因為month
也是內置函數的名稱),並用其中所有對應值的日歷月填充datestamp
列。
假設我已經正確解釋了您的意圖,這是解決問題的一種通用方法:
CREATE TABLE temp_table AS SELECT *, MONTH(datestamp) AS month FROM gc_1;
確認temp_table
的內容temp_table
預期后,請刪除gc_1
並將temp_table
重命名為gc_1
。
DROP TABLE gc_1;
ALTER TABLE temp_table RENAME TO gc_1;
當然,這會臨時復制gc_1
,因此請注意確保有足夠的存儲空間。
或者,有一種避免存儲重復表的方法:
ALTER TABLE gc_1 ADD COLUMNS (month INT);
INSERT OVERWRITE TABLE gc_1 SELECT column1, column2, ..., MONTH(datestamp) FROM gc_1;
這將直接覆蓋原始表,因此不會創建第二個表。 但是,此選項有一些缺點:
gc_1
的副本,則在覆蓋期間如果出現任何問題,將無法撤消。 gc_1
每一列(並以正確的順序)。 如果gc_1
是一個包含許多字段的寬表,那么這很快就會變得乏味且容易出錯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.