簡體   English   中英

通過select在Hive中插入值

[英]Inserting values in Hive through select

我試圖在蜂巢列中插入某些派生的值,想知道為什么它不起作用。 我的代碼如下。

Insert into month as select month(datestamp) as month from gc_1;

這里的month列已經存在,其中包含NULL值,而gc_1是表名。 我不確定是否可以使用諸如monthdate等功能從另一列中添加蜂巢中的列。

從你的問題,這就是我想你正在努力實現的:有一個名為表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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM