電商專案實戰Hive實現-外部表在Hive中的使用
阿新 • • 發佈:2021-08-30
1、emp員工表是一個內部表MANAGED_TABLE
(1)emp表,不要刪除
hive (testzhang_db)> show tables; hive (testzhang_db)> select * from emp; hive (testzhang_db)> desc formatted emp; #看結構 Table Type: MANAGED_TABLE #內部表
2、emp1表,刪除實驗
hive (testzhang_db)> select * from emp1; [hadoop@hadoop000 data]$ mysql -uroot -proot #檢視元資料 [hadoop@hadoop000 data]$ cd $HIVE_HOME [hadoop@hadoop000 hive-1.1.0-cdh5.15.1]$ cd conf/ [hadoop@hadoop000 conf]$ cat hive-site,xml #檢視這裡的資料庫,是hadoop_hive
mysql> use hadoop_hive; mysql> show tables; mysql> select * from TBLS \G; #看錶資訊 TBL_NAME: emp1 TBL_TYPE: MANAGED_TABLE
[hadoop@hadoop000 ~]$ hadoop fs -ls /user/hive/warehouse/emp1 #此時這裡是有檔案存在的
然後在hive中做刪除操作,刪除後,在hive中會找不到,在HDFS上也找不到,mysql上的也刪掉了。
emp1實際上沒刪除。emp2\3應是之前刪除的。
hive (testzhang_db)> drop table emp1;
即:刪除hive內部表,HDFS上的資料被刪除 & Meta也被刪除(MySQL)
3、建立外部表
(1)在HDFS上的儲存路徑是/external/empme/
(2)此時表是空的
hive (testzhang_db)> CREATE EXTERNAL TABLE emp_external_me( > empno int, > ename string, > job string, > mgr int, > hiredate string, > sal double, > comm double, > deptno int > ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' > location '/external/empme/';
hive (testzhang_db)> LOAD DATA LOCAL INPATH '/home/hadoop/data/emp.txt' OVERWRITE INTO TABLE emp_external_me; hive (testzhang_db)> select * from emp_external_me;
[hadoop@hadoop000 data]$ hadoop fs -ls /external/empme
此時HDFS中也有emp.txt
4、查詢外部表EXTERNAL_TABLE
hive (testzhang_db)> desc formatted emp_external_me;
Table Type: EXTERNAL_TABLE
5、檢視外部表的元資料
mysql> use hadoop_hive Database changed mysql> select * from TBLS \G; TBL_NAME: emp_external_me TBL_TYPE: EXTERNAL_TABLE
6、外部表測試
(1)實際上我沒測
(2)首先刪除剛剛建立的hive中的emp_external_me
hive (testzhang_db)> drop table emp_external_me;
(3)查詢hive中的資料,肯定是沒有了
hive (testzhang_db)> select * from emp_external_me;
(4)查詢mysql中的資料,也沒有了
mysql> select * from TBLS \G;
(5)在HDFS上查詢,是有資料的
[hadoop@hadoop000 data]$ hadoop fs -ls /external/empme
7、內部表和外部表的區別
(1)經過步驟2和步驟6的測試,得出的結果:
外部表: HDFS上的資料不被刪除 & Meta 被刪除
內部表:HDFS上的資料被刪除 & Meta 被刪除
(2)就算刪除了,再建立一份表即可,即執行步驟3建立表,而不需要載入資料。
(3)所以在生產上,優先考慮建立外部表。