外部表和內部表區別和實際運用:
前提知識儲備:
1、hive存儲的數據在hdfs上,建表的時候實際上是在hdfs上創建目錄而已。
2、hive的元數據信息實際上是存在於mysql中(通常的做法)
3、訪問hive的數據是先訪問元數據再根據元數據的地址信息來獲取數據
外部表和內部表在建表上的區別就是external(代表的外部表),外部表存儲的方式是固定的hdfs路徑,表是通過映射的方式訪問(load數據到表中),而內部表的訪問方式就是一個表和一個hdfs對應。所以在刪除外部表的時候,實際上是刪除的外部表的元數據信息,但是數據在hdfs上絲毫未動,但是刪除內部表,刪除的是元數據和所有的hdfs上存儲的數據。
對內部表的修改會將修改直接同步給元數據,而對外部表的表結構和分區進行修改,則需要修復(MSCK REPAIR TABLE table_name;)
業務實際運用:
1、在ods層的數據一般建設成外部表的形式,在日誌產生的時候以文件的形式落到hdfs
上,然後再通過load語句將外部表和相關的hdfs路徑關聯起來,這樣的話,多個表會以同樣的方式來訪問同一個hdfs的文件,也就實現了多個表共享數據。
-
- 優點:
-
-
- 不會誤刪數據,刪除外部表只會刪除表的元數據信息
-
-
-
- 多個部分公用同一份數據,效率提升、權限可以收斂
-
2、ods層下面之後的數據使用內部表的形式,一般一個業務線自我建設相關的數據,一個表對應一個hdfs路徑就可以了,刪表的時候可以把數據直接刪掉,就會騰出hdfs空間