hive外部表和內部表的區別


關於庫的操作

  1. 創建庫
    create database if not exists 數據庫名;
    創建的數據庫存放在hive默認的倉庫裏面(該倉庫的位置在當時安裝hive的時候指定的位置,在/hive/conf目錄下的hive-site.xml裏查看)
    在這裏插入圖片描述

  2. 查看庫
    show current_database();

  3. 刪除庫
    在這裏插入圖片描述

# 如果是空的數據庫,直接可以刪除
drop database student1029;  

#如果數據庫中有表,想要直接刪除只能加關鍵字【cascade】暴力刪除
drop database student1029 cascade;

在這裏插入圖片描述
4. 切換庫
use 數據庫名稱;

關於外部表和內部表的操作

1. 創建外部表【一般HDFS上先有公用數據,再創建外部表進行連接】external

create external table mystu(id int,name string,gender string,age int,department string) row format delimited fields terminated by “,” lines terminated by “\n” location “/student1029/input”;
【location】:跟的是HDFS目錄,而不是具體的文件。
在這裏插入圖片描述
外部表只是連接HDFS目錄中的文件,在hive默認的倉庫裏面是沒有該文件的。
在這裏插入圖片描述
desc formatted mystu;
查看mystu表的元數據信息,可以看到位置是在HDFS目錄裏。
在這裏插入圖片描述

2. 創建內部表【一般先創建表,不指定路徑,再導入數據】

create table innerstu(id int,name string,gender string,age int,department string) row format delimited fields terminated by “,” lines terminated by “\n”;

創建的內部表默認是存放在hive的倉庫裏面。
在這裏插入圖片描述
在這裏插入圖片描述
創建出來的表是一張空表,沒有數據的。
在這裏插入圖片描述
導入數據
load data local inpath “/home/hadoopUser/students.txt” into table innerstu;
這裏導入數據的方法選擇的是從本地linux導入,上傳students.txt文件到innerstu表目錄下。
在這裏插入圖片描述
導入數據後,在HDFS上的hive倉庫該表的目錄下會存在該文件。
在這裏插入圖片描述

總結

  1. 外部表的創建在hive默認的倉庫路徑下是沒有該表信息,只是連接HDFS上的數據文件。
    內部表的創建在hive默認的倉庫路徑下是存在該表信息,且會在該表目錄下存放數據文件。

  2. 外部表連接的數據文件依然存放在該文件的HDFS目錄下。
    內部表的數據文件存放在hive倉庫下該表的目錄下。

  3. 刪除外部表,不會刪除數據文件。
    刪除內部表,會刪除數據文件。

  4. 創建外部表最好指定locaiton。
    創建內部表不用指定location。

  5. 外部表連接的HDFS目錄下若是新增了數據文件,則會同步到外部表。
    內部表需要導入新增的數據文件,纔會同步到內部表。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章