Hive是基於HDFS之上的數據倉庫,它把所有的數據存儲在HDFS中,Hive並沒有專門的數據存儲格式。當在Hive中創建了表,可以使用load語句將本地或者HDFS上的數據加載到表中,從而使用SQL語句進行分析和處理。
Hive的數據模型主要是指Hive的表結構,可以分為:內部表、外部表、分區表、臨時表和桶表,同時Hive也支持視圖。視頻講解如下:
https://www.bilibili.com/video/BV1fw4m1a7A1/?aid=1106140109&c...
一、使用Hive的內部表
內部表與關係型數據庫中的表是一樣的。使用create table語句可以創建內部表,並且每張表在HDFS上都會對應一個目錄。這個目錄將默認創建在HDFS的/user/hive/warehouse下。除外部表外,表中如果存在數據,數據所對應的數據文件也將存儲在這個目錄下。刪除內部表的時候,表的元信息和數據都將被刪除。視頻講解如下:
https://www.bilibili.com/video/BV16x4y1x7YF/?aid=1006203727&c...
下面使用之前的員工數據(emp.csv)來創建內部表。
(1)執行create table語句創建表結構。
hive> create table emp
(empno int,
ename string,
job string,
mgr int,
hiredate string,
sal int,
comm int,
deptno int)
row format delimited fields terminated by ',';
由於csv文件是採樣逗號進行分隔的,因此在創建表的時候需要指定分隔符是逗號。Hive表的默認分隔符是一個不可見字符。
(2)使用load語句加載本地的數據文件。
hive> load data local inpath '/root/temp/emp.csv' into table emp;
(3)使用下面的語句加載HDFS的數據文件。
hive> load data inpath '/scott/emp.csv' into table emp;
(4)執行SQL的查詢。
hive> select * from emp order by sal;
(5)整個執行的過程如下圖所示。
(6)查看HDFS的/user/hive/warehouse/目錄可以看到創建的emp表和加載的emp.csv文件,如下圖所示。
二、使用外部表
與內部表不同的是,外部表可以將數據存在HDFS的任意目錄下。可以把外部表理解成是一個快捷方式,它的本質是建立一個指向HDFS上已有數據的鏈接,在創建表的同時會加重數據。而當刪除外部表的時候,只會刪除這個鏈接和對應的元信息,實際的數據不會從HDFS上刪除。視頻講解如下:
https://www.bilibili.com/video/BV1dE421c755/?aid=1656254561&c...
下面通過具體的步驟演示如何創建Hive的外部表。
[root@bigdata111 ~]# more students01.txt
1,Tom,23
2,Mary,22
[root@bigdata111 ~]# more students02.txt
3,Mike,24
(2)將數據文件上傳到HDFS的任意目錄。
hdfs dfs -mkdir /students
hdfs dfs -put students0*.txt /students
(3)在Hive中創建外部表。
hive> create external table ext_students
(sid int,sname string,age int)
row format delimited fields terminated by ','
location '/students';
(4)執行SQL的查詢。
hive> select * from ext_students;
(5)執行的結果如下圖所示。