hive的經常使用語法

也能夠經過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'

把分區數據當成一個字段進行約束查詢

相關文章
相關標籤/搜索