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

Hive之DML(資料匯入與資料匯出)操作

總結:

資料的匯入

1)hdfs或者本地檔案匯入使用  load 或者 建立資料庫的同時指定檔案位置 location

2)從已有hive資料庫中表匯入相應的資料    使用       as   select

3)自定義插入資料,使用 insert 命令

4)使用import命令匯入。(注意:先用export匯出後,再將資料匯入。)

資料的匯出

1)將hive中的資料選擇性的條件匯出     使用  insert

2)使用hive shell命令選擇性的條件匯出(hive -f/-e 執行語句或者指令碼 > file)

2)hadoop中hdfs命令將資料全部匯出      使用  dfs -get 

3)使用export命令將資料全部匯出

4)使用申請sqoop匯出

一. 資料匯入

1 向表中裝載資料(Load)

1)語法

hive>load data [local] inpath '/opt/module/datas/student.txt' [overwrite] into table student [partition (partcol1=val1,…)];
(1)load data:表示載入資料
(2)local:表示從本地載入資料到hive表;否則從HDFS載入資料到hive表
(3)inpath:表示載入資料的路徑
(4)overwrite:表示覆蓋表中已有資料,否則表示追加
(5)into table:表示載入到哪張表
(6)student:表示具體的表
(7)partition:表示上傳到指定分割槽

2)實操案例

(0)建立一張表

hive (default)> create table student(id string, name string) row format delimited fields terminated by '\t';

(1)載入本地檔案到hive

hive (default)> load data local inpath '/opt/module/datas/student.txt' into table default.student;

(2)載入HDFS檔案到hive中

上傳檔案到HDFS
hive (default)> dfs -put /opt/module/datas/student.txt /user/atguigu/hive;

載入HDFS上資料
hive (default)>load data inpath '/user/atguigu/hive/student.txt' into table default.student;
 

(3)載入資料覆蓋表中已有的資料

上傳檔案到HDFS
hive (default)> dfs -put /opt/module/datas/student.txt /user/atguigu/hive;

載入資料覆蓋表中已有的資料
hive (default)>load data inpath '/user/atguigu/hive/student.txt' overwrite into table default.student;   


2 通過查詢語句向表中插入資料(Insert)

1)建立一張分割槽表

hive (default)> create table student(id int, name string) partitioned by (month string) row format delimited fields terminated by '\t';

2)基本插入資料

hive (default)> insert into table  student partition(month='201709') values(1,'wangwu');

3)基本模式插入(根據單張表查詢結果)

hive (default)> insert overwrite table student partition(month='201708')
             select id, name from student where month='201709';

4)多插入模式(根據多張表查詢結果)

hive (default)> from student
              insert overwrite table student partition(month='201707')
              select id, name where month='201709'
              insert overwrite table student partition(month='201706')
              select id, name where month='201709';

3 查詢語句中建立表並載入資料(As Select)

根據查詢結果建立表(查詢的結果會新增到新建立的表中)
create table if not exists student3
as select id, name from student;

4 建立表時通過Location指定載入資料路徑

1)建立表,並指定在hdfs上的位置

hive (default)> create table if not exists student5(
              id int, name string
              )
              row format delimited fields terminated by '\t'
              location '/user/hive/warehouse/student5';
2)上傳資料到hdfs上

hive (default)> dfs -put /opt/module/datas/student.txt  /user/hive/warehouse/student5;

3)查詢資料

hive (default)> select * from student5;

5 Import資料到指定Hive表中

注意:先用export匯出後,再將資料匯入。

hive (default)> import table student2 partition(month='201709') from '/user/hive/warehouse/export/student';

2 資料匯出

1 Insert匯出

1)將查詢的結果匯出到本地

hive (default)> insert overwrite local directory '/opt/module/datas/export/student'  select * from student;
2)將查詢的結果格式化匯出到本地

hive (default)> insert overwrite local directory '/opt/module/datas/export/student1'
             ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
             select * from student;
3)將查詢的結果匯出到HDFS上(沒有local)

hive (default)> insert overwrite directory '/user/atguigu/student2'
             ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
             select * from student;
2 Hadoop命令匯出到本地

hive (default)> dfs -get /user/hive/warehouse/student/month=201709/000000_0  /opt/module/datas/export/student3.txt;

3 Hive Shell 命令匯出

[[email protected] hive]$ bin/hive -e 'select * from default.student;' >> /opt/module/datas/export/student4.txt;

4 Export匯出到HDFS上

hive (default)> export table default.student to '/user/hive/warehouse/export/student';

3 清除表中資料(Truncate)

hive (default)> truncate table student;

注意:Truncate只能刪除管理表,不能刪除外部表中資料