過往記憶的專欄文章轉載:Hive insert into語句用法

黃道婆發表於2020-10-01

過往記憶的專欄文章轉載:Hive insert into語句用法

原始連結:https://www.iteblog.com/archives/798.html

 

Hive insert into語句用法

 Hadoop  2013-10-30 16:32:54 89338  2評論 下載為PDF 為什麼無法評論和登入

  在Hive0.8開始支援Insert into語句,它的作用是在一個表格裡面追加資料。
標準語法語法如下:

用法一:

INSERT OVERWRITE TABLE tablename1 [PARTITION \

(partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] \

select_statement1 FROM from_statement;

 

用法二:

INSERT INTO TABLE tablename1 [PARTITION \

(partcol1=val1, partcol2=val2 ...)] \

select_statement1 FROM from_statement;

注意:上面語句由於太長了,為了頁面顯示美觀,用'\'符號換行了。
舉例:

hive> insert into table cite

  > select * from tt;

這樣就會將tt表格裡面的資料追加到cite表格裡面。並且在cite資料存放目錄生成了一個新的資料檔案,這個新檔案是經過處理的,列之間的分割是cite表格的列分割符,而不是tt表格列的分隔符。
  (1)、如果兩個表格的維度不一樣,將會插入錯誤:

hive> insert into table cite

    > select * from cite_standby;

 

FAILED: SemanticException [Error 10044]: Line 1:18 Cannot insert into

target table because column number/types are different 'cite':

Table insclause-0 has 2 columns, but query has 1 columns.

從上面錯誤提示看出,查詢的表格cite_standby只有一列,而目標表格(也就是需要插入資料的表格)有2列,由於列的數目不一樣,導致了上面的語句不能成功執行,我們需要保證查詢結果列的數目和需要插入資料表格的列數目一致,這樣才行。
  (2)、在用extended關鍵字建立的表格上插入資料將會影響到其它的表格的資料,因為他們共享一份資料檔案。
  (3)、如果查詢出來的資料型別和插入表格對應的列資料型別不一致,將會進行轉換,但是不能保證轉換一定成功,比如如果查詢出來的資料型別為int,插入表格對應的列型別為string,可以通過轉換將int型別轉換為string型別;但是如果查詢出來的資料型別為string,插入表格對應的列型別為int,轉換過程可能出現錯誤,因為字母就不可以轉換為int,轉換失敗的資料將會為NULL。
  (4)、可以將一個表查詢出來的資料插入到原表中:

hive> insert into table cite    

  > select * from cite;

  結果就是相當於複製了一份cite表格中的資料。
  (5)、和insert overwrite的區別:

hive> insert overwrite table cite                      

  > select * from tt;

  上面的語句將會用tt表格查詢到的資料覆蓋cite表格已經存在的資料。
  更多關於Hive insert into的用法,可以參見Hive 官方wiki:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML

本部落格文章除特別宣告,全部都是原創!
轉載本文請加上:轉載自過往記憶(https://www.iteblog.com/)
本文連結: 【Hive insert into語句用法】(https://www.iteblog.com/archives/798.html)

相關文章