电商项目实战Hive实现-外部表在Hive中的使用

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)所以在生产上,优先考虑创建外部表。

电商项目实战Hive实现-外部表在Hive中的使用

上一篇:设置控件的视觉效果(Win32)


下一篇:英语单词学习窗体(一)