在hive中,表型別主要分為兩種,
第一種:內部表
第二種:外部表
create external table tablename
(id int
,name string)
[location 'path'
];
內部表轉外部表
alter
table tablename set tblproperties(
'external'
='true');
--注意:內部表轉外部表,true一定要大寫;
外部表轉內部表
alter
table tablename set tblproperties(
'external'
='false');
--說明:false不區分大小
1) 內部表和外部表在建立時的差別就差兩個關鍵字,external
和location
舉例:
- 內部表 --
- craate table t_inner(id int);
- 外部表 --
-create external table t_outer(id int
) location 'hdfs:///aa/bb/xx'
;
2) hive表建立時要做的兩件事:
在hdfs
下建立表目錄
在元資料庫mysql
建立相應表的描述資料(元資料)
3) drop時有不同的特性:
1、drop
時,元資料都會被清除
2、drop
時,內部表的表目錄會被刪除,但是外部表的表目錄不會被刪除。
4) 使用場景
內部表: 平時用來測試
或者少量資料,並且自己可以隨時修改刪除資料.
建立內部表
create
table innerdemo
( empno int
, ename string,
job string,
mgr int
, hiredate date
, sal double
, comm double
, deptno int
)row format delimited
fields
terminated
by','
stored as textfile;
建立後在hdfs
上的儲存位置如下,因為沒有指定儲存位置,所以預設儲存位置就是在如下地方
/user/hive/warehouse/innerdemo
接下來刪除內部表測試
drop
table innerdemo;
去hdfs上檢視,可以看到原檔案已被刪除.
建立外部表
create external table externaldemo
( empno int
, ename string,
job string,
mgr int
, hiredate date
, sal double
, comm double
, deptno int
)row format delimited
fields
terminated
by','
stored as textfile
location 'hdfs:///hiveout'
;insert
into
table externaldemo select
*from emp;
此時在hdfs上的位置如下,檔名還是0000 這個是慣例
接下來刪除外部表測試
drop
table externaldemo;
去hdfs
上就會發現檔案還是存在的!並不會真的刪除檔案 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...