內錶與外表比較
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 ...