2023-02-09
數據 null 時候
Hive的表有兩種類型,分別是:內部表 和 外部表。
其實內部表、外部表的說法,是我們自己定義的。Hive中對表的分類是:
MANAGED_TABLE: “管理表”,也就是我們俗稱的內部表。
EXTERNAL_TABLE: 外部表。
查看表的類型
一張表的類型,可以通過元數據來查看。在元數據中記錄著非常多的信息,其中就包括每一張表的類型。
查看mysql數據庫的方式:
元數據保存在了mysql的數據庫,其中有一張表名為TBLS,其中記錄的就是表的元數據信息。我們可以直接通過查詢這張表中的記錄,來查看到每一個表的類型。
查看表的信息的方式:
內部表與外部表的區別
1創建表的時候的區別
在建表的時候,默認創建都是內部表,也就是管理表。外部表在創建的時候需要使用關鍵字external,例如: create external table if not eixsts tb_name。而內部表在創建的時候不需要添加任何額外的關鍵字。
2映射數據位置的區別
Hive是對HDFS的結構化的數據文件進行的映射,每一個表在創建的時候,本質上都是在HDFS的指定目錄創建一個與表名同名的文件夾。而表里的數據,其實就是這個文件夾下面的數據文件中的內容。
內部表在創建的時候,不能修改表映射的路徑,只能夠在 /user/hive/warehouse/{數據庫}.db/{表名} 這個位置。而外部表在創建的時候 ,可以通過關鍵字 location 修改表映射的路徑,可以映射在任意的位置。例如:
create external table if not exists t_order (
id int,
cost int,
orderdate string
)
row format delimited
fields terminated by ','
location 'hdfs://qianfeng01:9820/public_data/order'
當然,外部表在創建的時候,也可以不使用location去指定映射的位置。如果沒有使用location指定映射位置的時候,默認使用的與內部表相同的數據庫目錄/表目錄下。
3刪除表的時候的區別
內部表在刪除的時候,會刪除元數據信息,同時會刪除在HDFS上映射到的數據文件。
外部表在刪除的時候,只會刪除元數據信息,不會刪除在HDFS上映射到的數據文件。
外部表的使用場景
因為外部表的特點是可以映射到任意的位置,不僅僅局限于數據庫的目錄下。同時外部表在刪除的時候,只會刪除元數據信息,不會刪除映射到的數據文件。因此在對于有些公共數據文件的處理的時候,就可以使用到外部表來處理。這樣既可以使用Hive完成對數據的處理,同時也不用擔心萬一刪除表的時候,會連帶著數據文件一起刪除掉。而且在數據倉庫的最底層,使用到的都是外部表。
開班時間:2021-04-12(深圳)
開班盛況開班時間:2021-05-17(北京)
開班盛況開班時間:2021-03-22(杭州)
開班盛況開班時間:2021-04-26(北京)
開班盛況開班時間:2021-05-10(北京)
開班盛況開班時間:2021-02-22(北京)
開班盛況開班時間:2021-07-12(北京)
預約報名開班時間:2020-09-21(上海)
開班盛況開班時間:2021-07-12(北京)
預約報名開班時間:2019-07-22(北京)
開班盛況Copyright 2011-2023 北京千鋒互聯科技有限公司 .All Right 京ICP備12003911號-5 京公網安備 11010802035720號