目錄
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文件添加進去。
-
從本地目錄導入數據到hive表,需要添加【local】關鍵字
從本地目錄複製文件到hive表目錄下
load data local inpath “/home/hadoopUser/文件名” into table 表名; -
從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 = “女”;
-
創建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); -
把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區別
- create views的時候,子查詢語句沒有執行。
但是CTAS是必須執行子查詢sql語句的。 - 當工作中的需求需要多個sql語句才能執行出來的時候,create views可以把多個sql語句先攢起來不執行,最後通過hive優化後再一起執行,效率更高。
而CTAS則是每個sql語句都會先執行。