1. 程式人生 > >hive與hbase關聯表的創建,外表方式

hive與hbase關聯表的創建,外表方式

內部 col 屬於 cal key IT detail form 內部表

1.在Hive裏面創建一個表:

hive> create table wyp(id int,
> name string,
> age int,
> tele string)
> ROW FORMAT DELIMITED
> FIELDS TERMINATED BY ‘\t‘
> STORED AS TEXTFILE;
OK
Time taken: 0.759 seconds

2.這樣我們就在Hive裏面創建了一張普通的表,現在給這個表導入數據:

load data local inpath ‘/home/wyp/data/wyp.txt‘ into table wyp;

3.創建外部表多了external關鍵字說明以及location ‘/home/wyp/external’

hive> create external table exter_table(
> id int,
> name string,
> age int,
> tel string)
> location ‘/home/wyp/external‘;
OK
Time taken: 0.098 seconds

創建外部表,需要在創建表的時候加上external關鍵字,同時指定外部表存放數據的路徑(當然,你也可以不指定外部表的存放路徑,這樣Hive將 在HDFS上的/user/hive/warehouse/文件夾下以外部表的表名創建一個文件夾,並將屬於這個表的數據存放在這裏)

外部表導入數據和內部表一樣:load data local inpath ‘/home/wyp/data/wyp.txt‘ into table exter_table;

==================================================

CREATE EXTERNAL TABLE hivebig (key string,CUST_NAME string,PHONE_NUM int,BRD_WORK_FLUX double)

STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler‘
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,bd:CUST_NAME,bd:PHONE_NUM#b,bd:BRD_WORK_FLUX#b")

TBLPROPERTIES ("hbase.table.name" = "bigtable2");

https://blog.csdn.net/jameshadoop/article/details/42162669

==================================================

4.和上面的導入數據到表一樣,將本地的數據導入到外部表,數據也是從本地文件系統復制到HDFS中/home/hdfs/wyp.txt文件中,但是,最後 數據不是移動到外部表的/user/hive/warehouse/exter_table文件夾中(除非你創建表的時候沒有指定數據的存放路徑)!大家 可以去HDFS上看看!對於外部表,數據是被移動到創建表時指定的目錄(本例是存放在/home/wyp/external文件夾中)!

5.內部表刪除

hive> drop table wyp;
Moved: ‘hdfs://mycluster/user/hive/warehouse/wyp‘ to
trash at: hdfs://mycluster/user/hdfs/.Trash/Current
OK
Time taken: 2.503 seconds

如果你要刪除外部表:drop table exter_table;

hive> drop table exter_table;
OK
Time taken: 0.093 seconds

和上面刪除Hive的表對比可以發現,沒有輸出將數據從一個地方移到任一個地方!那是不是刪除外部表的的時候數據直接被刪除掉呢?答案不是這樣的,你會發現刪除外部表的時候,數據並沒有被刪除,而只是刪除了元數據,這是和刪除表的數據完全不一樣的

總結:

1、在導入數據到外部表,數據並沒有移動到自己的數據倉庫目錄下,也就是說外部表中的數據並不是由它自己來管理的,而表則不一樣;
2、在刪除表的時候,Hive將會把屬於表的元數據和數據全部刪掉;而刪除外部表的時候,Hive僅僅刪除外部表的元數據,數據是不會刪除的!
那麽,應該如何選擇使用哪種表呢?在大多數情況沒有太多的區別,因此選擇只是個人喜好的問題。但是作為一個經驗,如果所有處理都需要由Hive完成,那麽你應該創建內部表,否則使用外部表!

hive與hbase關聯表的創建,外表方式