也能夠經過hadoop操做把文件導入到數據庫中,使用hive來進行操做,也就是說只要是在建立的數據庫中的存儲位置,均可以進行hive的操做sql
假設導入的數據字段缺失,那麼會出現null,而且null在字段的最後數據庫
假如導入的數據多出一個字段,那麼多出的字段不會顯示app
hive表有兩大類:oop
managed_table:存儲的位置默認在/user/hive/warehourse/spa
external:3d
建立一個uuu.data數據,hadoop fs -put / 上傳到hdfs的/目錄中code
想要把這個uuu.data數據導入到hive表中 load data inpath '/uuu.data' into table t_order_wk;orm
導入後發現/目錄下uuu.data不見了,出現到咱們建的表的目錄下blog
這樣的缺點就是把咱們業務數據會移動位置,會干預咱們業務系統的運行hadoop
所以hive提供了external格式,數據能夠在任何一個位置不影響,這樣對數據的操做就不會影響業務數據
建立external表
1.hdfs上建立指定目錄,而且導入數據
hadoop fs -mkdir /hive_ext
hadoop fs -put jjj.data /hive_ext
2.建立external表
create external table t_order_ex(id int,name,string,price double) row format delimited fields ternimated by '/t' location '/hive_ex';
業務數據並無發生位置變化
3.查詢數據
建立external的特色:
1.秩序關聯,無需移動位置;
2.刪除表時候,內部表及元數據都刪除了,外部表的刪除,只會刪除表,業務數據不會刪除,就是元數據時候刪除的區別;
臨時中間表的建立:
主要用於建立一些臨時表存儲中間結果,同時也會造成一個元數據
crete table t_order_simople as select id,name,price from t_order_wk;
create table t_simple like t_order_wk;
insert overwrite table t_simple;用於向臨時表中追加中間結果數據
partitioned by:
假如未使用分區,要查詢某個月份的訂單,使用group by 就會掃描所有數據,若是按月份建立了分區,那麼就能夠直接在某個月份的分區中查找
1.建立分區表
create table t_order(id int,name string,price double) partitioned by(month string) row format delimited fields ternimated by '/t''
2.向分區中導入數據
load data local inpath '/home/hadoop/apps/xxx.data' into table t_order_wk partition(month='201401')
分區數據是先存儲在表的文件夾/建立的分區名/分區表
3.按照分區進行查詢
select count(*) from t_order_pt where month='201401'
把分區數據當成一個字段進行約束查詢