1. 程式人生 > >Hive DML(資料匯入匯出)

Hive DML(資料匯入匯出)

DML

DML:Data Manipulation Language(資料管理語言)

載入資料到表

語法

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

從本地載入資料

LOAD DATA LOCAL INPATH '/home/hadoop/data/dept.txt' INTO TABLE ruoze_dept;

在這裡插入圖片描述

使用overwrite載入資料
在載入資料的時候,如果沒有加上overwite 關鍵字的話 會重複 載入
在這裡插入圖片描述

所以一般在工作中,載入資料的時候一定是要加上overwirte的

LOAD DATA LOCAL INPATH '/home/hadoop/data/dept.txt' OVERWRITE  INTO TABLE ruoze_dept;

在這裡插入圖片描述

從hdfs上載入資料
從hdfs上載入資料 只需要去掉 local 即可,其他一致的

LOAD DATA INPATH '/data/dept.txt'  OVERWRITE  INTO TABLE ruoze_dept;

檢視下hdfs上的檔案
在這裡插入圖片描述

檢視hive中資料
在這裡插入圖片描述

這裡需要注意的是如果從hdfs上載入資料,執行第二次的時候,是會有錯誤的


在這裡插入圖片描述

錯誤日誌提示檔案不存在了,檢視hdfs
在這裡插入圖片描述

果然沒有了,這裡細想一下可以理解的,因為hive的內部表的元資料資訊和資料都是有hive自己管理的,所以我們從hdfs中載入完資料之後,會將hdfs上的目錄移動到hive的資料倉庫對應的資料庫中

在這裡插入圖片描述

根據查詢語句插入資料

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;
INSERT OVERWRITE TABLE ruoze_dept_test select deptno ,dname ,loc  from ruoze_dept;

注意 不能插入資料順序不能錯,欄位數要一致
在這裡插入圖片描述

從hive中寫出資料

INSERT OVERWRITE [LOCAL] DIRECTORY directory1
  [ROW FORMAT row_format] [STORED AS file_format] (Note: Only available starting with Hive 0.11.0)
  SELECT ... FROM ...

執行匯出語句

INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/data/hive_test'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
SELECT empno,ename FROM ruoze_emp;

檢視結果
在這裡插入圖片描述