在使用Hive的過程中,導入數據是必不可少的步驟,不同的數據導入方式效率也不一樣,本文總結Hive四種不同的數據導入方式: - 從本地文件系統導入數據 - 從HDFS中導入數據 - 從其他的Hive表中導入數據 - 創建表的同時導入數據
使用導入數據時,會使用到into和 into兩個關鍵字,into是在當前表追加數據,而 into是刪除當前表的數據然后在導入數據。
從本地系統導入數據
在Hive中創建表,該表中有兩個字段,一個是name一個是age。創建表的SQL語句如下:
create table if not exists load_data_local(name string,age int)
row format delimited fields terminated by ' '
lines terminated by '\n';
在本地文件系統中創建一個.txt的文件,然后往里面寫入數據,數據之間用空格分隔。數據為:
zhangsan 30
lisi 50
wangwu 60

peiqi 6
執行load data local '/home///.txt' into table ;命令,即可將本地系統中的文件的數據導入到Hive表中。
推薦一本Hive書籍。我入門的時候都是看這本書。
在使用從本地系統導入數據大Hive表中時,文件的路徑必須使用絕對路徑。
有兩種方式驗證數據是否導入成功,一種是在Hive中執行 * from 。另外一種是查看hdfs文件系統中的目錄下面是否有剛剛上傳的.txt文件,查看命令為: fs -ls /user/hive//.db/,結果為:
18/10/07 02:37:11 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 1 items
-rwxr-xr-x 3 root supergroup 38 2018-10-07 02:24 /user/hive/warehouse/bigdata17.db/load_data_local/load_data_local.txt
從HDFS中導入數據
在Hive中創建表,表中有兩個字段,分別是name和age。創建表的SQL如下:
create table if not exists load_data_hdfs(name string,age int)
row format delimited fields terminated by ' '
lines terminated by '\n';
在本地文件系統創建文件.txt文件易語言超級列表框導入cvs教程,然后往里面寫入數據。
將.txt文件上傳到HDFS的data目錄下面,命令為: fs -put .txt /data
在Hive中執行命令: load data 'data/.txt' into table ; 即可將數據導入到Hive的表中。 從本地系統導入數據和從hdfs文件系統導入數據用的命令都是load data,但是從本地系統導入數據要加local關鍵字,如果不加則是從hdfs文件系統導入數據。
從hdfs文件系統導入數據成功后,會把hdfs文件系統中的.txt文件刪除掉。
從其他的Hive表中導入數據
這種方式要求目標表和源表都必須存在。 創建一個要導入數據的目標表,SQL如下:
create table if not exists load_data_local2(name string,age int)

row format delimited fields terminated by ' '
lines terminated by '\n';
導入數據的SQL:
insert into table load_data_local2 select * from load_data_local;
這種數據導入方式也適用于分區表和分桶表的情況。本文只介紹導入分區表的情況,導入數據到分區表分為靜態分區和動態分區兩種方式。
我們先創建一個分區表,SQL如下:
create table if not exists load_data_partition(name string)
partitioned by(age int)
row format delimited fields terminated by ' '
lines terminated by '\n';
將數據導入分區表必須先在Hive中執行下面兩句語句:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
靜態方式將表的數據導入到表的sql語句如下:
insert into table load_data_partition partition(age=25) select name from load_data_local;
這種方式必須顯示的指定分區值易語言超級列表框導入cvs教程,如果分區有很多值,則必須執行多條SQL,效率低下。
動態方式將表的數據導入到表的sql語句如下:
insert overwrite table load_data_partition partition select name,age from load_data_local;
這種方式要注意目標表的字段必須和查詢語句字段的順序和類型一致,特別是分區字段的類型要一致,否則會報錯。
一張表有兩個以上的分區字段,如果同時使用靜態分區和動態分區導入數據,靜態分區字段必須寫在動態分區字段之前。
Hive還支持一條SQL語句中將數據插入多個表的功能,只需將from關鍵字前置即可:
from load_data_local
insert overwrite table load_data_partition partition (age)
select name,age
insert overwrite table load_data_local3
select *
上面的sql語句同時插入到表和表中。這種方式非常高效,對于大數據量并且要將數據插入到多個表的情況下,建議用這種方式。
創建表的同時導入數據
這種方式的創建表的表結構來自于查詢語句的查詢字段。
創建并將的數據導入到表中:
create table load_data_local3 as select * from load_data_local;