hive數據導入的6種方式


1.hadoop fs -put的方式

語法:hadoop fs -put 數據文件名 HDFS目錄 的形式暴力導入。【不太推薦】

hadoop fs -put students.txt /home/hadoopUser/apps/hive/warehouse/myhive1029.db/stu1029/
在這裏插入圖片描述

2.load的方式

可查看hive的官方文檔

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

說明:
LOAD操作是單純的複製或者移動,將數據文件移動到hive表對應的位置。
【local】查找本地linux的filepath位置。
【overwrite】先清空hive表目錄下的所有文件,然後再把filepath文件添加進去。

  1. 從本地目錄導入數據到hive表,需要添加【local】關鍵字
    從本地目錄複製文件到hive表目錄下
    load data local inpath “/home/hadoopUser/文件名” into table 表名;

  2. 從HDFS目錄導入數據到hive表,不需要添加【local】關鍵字
    從HDFS目錄剪切文件到hive表目錄下
    load data inpath “/HDFS目錄/文件名” into table 表名;

3.insert…values的方式

該語法和mysq插入數據的語法一樣。一般不常用,可能在測試的時候會用到這種方式。
實際工作中一般數據都是存放在文件中,通過load的方式批量導入到表內。
如果要使用該方法,必須保證hadoop集羣已經啓動,因爲這個語法是將sql語句轉化爲mapreduce程序交給yarn執行的。

4.insert…select的方式

假如我現在已經有2張表,一張是t1表(空表),一張是mystu表(有數據的表),我想把mystu表篩選出性別爲女的數據,放到t1表中。
語法:
insert into table t1 select * from mystu where gender = “女”;

  1. 創建t1表:
    create table t1(id int,name string,gender string,age int) row format delimited fields terminated by “,” lines terminated by “\n”;

    由於是從已有的表中篩選數據放入t1表,已有的表格數據已經進行了分隔,因此在創建t1表可以不用設置分隔字段,直接寫
    create table t1(id int,name string,gender string,age int);

  2. 把mystu表中性別爲女的數據篩選出來放到t1中:
    insert into table t1 select id,name,gender,age from mystu where gender = “女”;
    在這裏插入圖片描述
    在這裏插入圖片描述
    t1表創建的是內部表,t1目錄下的文件是select篩選性別爲女然後insert進t1的數據文件。
    在這裏插入圖片描述

5.CTAS的方式(比第4種方式更加簡便)

在創建t2表的同時就把mystu篩選的數據導入。
select查詢篩選出來的是一張虛表數據,通過下面的語法,將虛表變成一張實表t2。
語法:
create table 表(可加字段)as select…

  • 表字段跟select後的字段一樣。

創建t2表,同時把mystu篩選的數據導入t2。
create table t2 as select * from mystu where gender = “女”;
在這裏插入圖片描述
在這裏插入圖片描述

6.create views視圖的方式(比第5種方式更加簡便)

創建視圖的時候,as後面sql的語句可以延遲執行。
語法:
create view 表名 as 子查詢語句

創建t3_id
create view t3_id as select id,name from mystu;

創建t3_dp
create view t3_dp as select id,department from mystu;

創建這兩個視圖,子查詢select是沒有執行的,但是show tables;能夠查看到視圖,hive倉庫目錄下也不會有視圖信息。
在這裏插入圖片描述
在這裏插入圖片描述
當工作中需要多個子查詢的時候,create view 比 CTAS 更好用,因爲創建視圖時,後面的子查詢語句沒有執行。
而在做一些比如視圖的連接查詢的時候,此時子查詢語句纔會一起執行,然後經過hive優化的效率更高。
例子:
select t3_id.* ,t3_dp.* from t3_id join t3_dp on t3_id.id = t3_dp.id;
在這裏插入圖片描述
執行過後select * from 視圖 就有結果。

create views和CTAS區別

  1. create views的時候,子查詢語句沒有執行。
    但是CTAS是必須執行子查詢sql語句的。
  2. 當工作中的需求需要多個sql語句才能執行出來的時候,create views可以把多個sql語句先攢起來不執行,最後通過hive優化後再一起執行,效率更高。
    而CTAS則是每個sql語句都會先執行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章