hive內外表比較與切換

2021-10-09 11:41:37 字數 1969 閱讀 3959

內錶與外表比較

create

[external]

table[if

notexists

][db_name.

]table_name

(col_name data_type [

comment

'col_comment'],

...)

[partitioned by

(col_name data_type [

comment

'col_comment'],

...)

][comment

'table_comment'][

with serdeproperties (

'key1'

='value1'

,'key2'

='value2',.

..)]

[[row format row_format]

[stored as file_format]

][location 'hdfs_path'

][tblproperties (

'key1'

='value1'

,'key2'

='value2',.

..)]

[cached in

'pool_name'

[with

replication

=integer

]| uncached]

external關鍵字用來區分內部表和外部表,location指定也可以不指定預設為hive倉庫路徑

1) 外部表刪除表僅僅刪除hive中元資料不刪除資料和指定的路徑,內部表如果drop掉表,資料和預設路徑都刪除了;

2) 在匯入資料到外部表,資料並沒有移動到自己的資料倉儲目錄下(如果指定了location的話),也就是說外部表中的資料並不是由它自己來管理的!而內部表則不一樣;

3) 內部表資料由hive自身管理,外部表資料由hdfs管理;

4) 對內部表的修改會將修改直接同步給元資料,而對外部表的表結構和分割槽進行修改,則需要修復(msck repair table table_name;)

內錶與外表轉換

--內部轉外部

alter

table tablename set tblproperties(

'external'

='true');

--外部轉內部

alter

table tablename set tblproperties(

'external'

='false'

);

刪除外部表資料的幾種方式

1) 先將外部表轉為內部表,然後再drop,如:

alter

table tablename set tblproperties(

'external'

='false');

drop

table tablename;

2)先drop,然後在hdfs清空資料,如:
drop

table tablename;

hdfs dfs -

rm-r /user/hive/tablename/partition=yyyy-mm-dd

3)	從hive4.0.0開始,設定表屬性 external.table.purge=true,也將刪除資料。
alter

table tablename set tblproperties(

'external.table.purge'

='true');

drop

table tablename;

hive內外表是否可以重名 驗證

先說結論 不能重名個 剛接觸hive 看到 內外表這個 標誌的時候第一反應是隔絕開的 所以有個疑問就是 內錶外表是否可以重名 建立外表 create external table if not exists dept deptno int,dname string,loc int row forma...

Hive 之內 外表 與 分割槽表 桶表區別

內錶 刪表刪資料 hdfs上的檔案資料 外表 刪表不刪資料 hdfs上的檔案資料 外表 包含external 的表叫外部表 分割槽表 加入分割槽避免hive select查詢中掃瞄整個表內容,會消耗很多時間做沒必要的工作。例如每一天的日誌存放在乙個分割槽中,這樣根據特定的日期查詢 乙個表可以擁有乙個...

Hive內錶與外表的區別

一 區別 1 建立表結構 在hive裡面建立乙個表 hive create table wyp id int,name string,age int,tele string row format delimited fields terminated by t stored as textfile ...