Hive內部表與外部表,資料匯入,資料匯出

2021-10-08 08:08:37 字數 3314 閱讀 7632

1,內部表資料由hive自身管理,外部表資料由hdfs管理

2,刪除內部表會直接刪除元資料(metadata)及儲存資料;刪除外部表僅僅會刪除元資料,hdfs上的檔案並不會被刪除;

3,內部表資料儲存的位置是hive.metastore.warehouse.dir(預設:/user/hive/warehouse);  外部表資料的儲存位置由

自己制定(如果沒有location,hive將在hdfs上的/user/hive/warehouse資料夾下以外部表的表名建立乙個資料夾,

並將屬於這個表的資料存放在這裡);

內部表:(預設)

create  table tb_user(

uid string ,

name string ,

gender string ,

age int

) row format delimited fields terminated by ","

location "/test/"; --指定hdfs中的資料夾

外部表:(external)

create external table tb_user2(

uid string ,

name string ,

gender string ,

age int

) row format delimited fields terminated by ","

location "/test/";

location  :指定工作目錄。

在建表的時候沒有使用location關鍵字 ,表的預設目錄在hdfs上的配置只hive.metastore.warehouse.dir的資料庫資料夾中:

直接將檔案資料上傳到該錶目錄下即可查詢

stored as:指定儲存格式

create table log_orc(

track_time string

)stored as orc ; --指定orc格式,其他(parquet),都是列式儲存格式

壓縮比:orc >  parquet >  textfile

1,匯入本地資料(load)

load data local inpath "本地結構化檔案的路徑" into table tb_name ;
2,匯入hdfs資料 (會將檔案剪下到表的工作目錄下)

load data inpath "本地結構化檔案的路徑" into table tb_name ;
3,覆蓋匯入(overwrite)

load data local inpath "" overwrite into table  tb_name ;
4,insert匯入 

//手動插入

insert into  tb_name  valeus () , () ,() ,()
//查詢其他表的資料追加

insert into  tb_name  select .... 將後面的select運算結果儲存到某個表中
//查詢其他表的資料覆蓋

insert overwrite table tb_name select ....
insert 語法 不要一條一條資料的insert  因為一次insert在hdfs中生成乙個小檔案5,create as  將結果資料直接儲存在乙個新的表中  

create table if not exists  tb_phone  

as select * from tb_product where cate = '手機' ;

6,import  一定是匯出的資料才能匯入

匯出資料到hdfs中

export table tb_product to

'/user/hive/warehouse/export/product';

匯入資料方式

import table tb_product2 from

'/user/hive/warehouse/export/product';

1,insert覆蓋匯入(會覆蓋該資料夾下所有的檔案,慎用)

insert overwrite [local] directory '/hive/p2/'  --local:linux ,不指定hdfs

[row format delimited fields terminated by '\t'] --指定分隔符,不指定預設空格

select * from tb_product;

2,hdfs命令(簡單直接,匯出到linux本地)

hdfs  dfs  -get  [表工作空間]
3,hive命令(在linux命令列執行,可以用來寫指令碼)

hive -e 『sql』

例子:將結果輸出到test.txt檔案中(乙個》 覆蓋;兩個》追加)

hive -e 'select * from yege.tb_user;' >> /opt2/test.txt;
hive -f    執行乙個指令碼

例子:新建指令碼export_hive.hql,

insert overwrite directory '/opt2' select * from yege.tb_user;
執行: hive -f  export_hive.hql (匯出資料到hdfs,指令碼內容只能是在hive shell中的語句)

4,export匯出工具  (匯出到hdfs系統的opt2下面的user資料夾)

export table yege.tb_user to '/opt2/user';
5,資料遷移工具

sqoop、datax、kettle、canal、streamsets等

hive內部表與外部表

假設已經進入hive的環境。有一張叫做test的表 內部表 外部表 未被external修飾的是內部表 managed table 被external修飾的為外部表 external table 區別 內部表資料由hive自身管理,外部表資料由hdfs管理 內部表資料儲存的位置是hive.metas...

Hive 內部表與外部表

首先檢視當前的表 檢視emp表 檢視這個emp表的詳細資訊 可以看到table type是乙個managed table,就是所謂的內部表 首先看一下mysql中的表 tbls 可以看到這個表tbl type是managed table型別,檢視hdfs上的資料 然後從hive中刪除這個表emp 刪...

Hive內部表 外部表

內部表 外部表 未被external修飾的是內部表 managed table 被external修飾的為外部表 external table 區別 內部表資料由hive自身管理,外部表資料由hdfs管理 內部表資料儲存的位置是hive.metastore.warehouse.dir 預設 user...