hive外部表改为内部表_2018-08-28期 Hive的内部表和外部表

一、内部表和外部表区别

一般情况下不指定关键字External关键字创建的表都为内部表,数据默认存放在/user/hive/warehouse目录下

外部表创建是需要指定External关键字,可以手动指定存放目录,有Location关键字指定,数据可以存放到Hdfs任意目录下。

二、下面创建一个外部表t_org,存放的数据形式如下

orgidorgnameorgytpe

G0001xiaoshou01

G0002shichang02

G0003HR03

G0004dianshang04

G0005guanli05

现在针对这种数据存储形式创建一个外部表

hive> create external table t_org

> (orgid string,orgname string,orgtype string)

> row format delimited

> fields terminated by '\t'

> location '/user/t_org';

OK

Time taken: 2.805 seconds

检查内部表默认数据存放目录是否存在t_org表

通过检查,创建的外部表t_org并没有在/user/hive/warehouse目录下创建表存储目录

下面检查/user/t_org在hdfs文件系统是否存在

通过检查创建的外部表确实在我们创建表指定的目录下创建了目录。

三、构造t_org表数据

[root@hadoop-server01 data]# cat t_org.data.1

G0001   xiaoshou        01

G0002   shichang        02

G0003   HR              03

G0004   dianshang       04

G0005   guanli          05

[root@hadoop-server01 data]#

利用hive load命令将数据加载到hdfs集群的/usr/t_org目录下

特别注意:load 命令是一个剪切操作,相当于将inpath路径下的文件剪切到Hive /user/warehouse目录。

hive> load data local inpath '/root/data/t_org.data.1' into table t_org;

Copying data from file:/root/data/t_org.data.1

Copying file: file:/root/data/t_org.data.1

Loading data to table default.t_org

Table default.t_org stats: [num_partitions: 0, num_files: 1, num_rows: 0, total_size: 85, raw_data_size: 0]

OK

Time taken: 0.402 seconds

通过检查数据确实加载到创建的/usr/t_org目录下

四、做连表查询

hive> select u.userid,u.username,o.orgid,o.orgname,o.orgtype,u.logintimes

> from t_user u join t_org o

> on u.orgid = o.orgid;

Total MapReduce CPU Time Spent: 510 msec

OK

U0001   Zhangsan        G0001   xiaoshou        01      10

U0002   Lisi            G0001   xiaoshou        01      12

U0003   Wangwu          G0002   Shichang        02      13

U0004   Liuneng         G0002   Shichang        02      18

U0005   Zhaosi          G0004   Dianshang       04      29

U0004   Liuneng         G0002   Shichang        02      18

U0005   Zhaosi1         G0004   Dianshang       04      29

U0006   Zhaosi2         G0004   Dianshang       04      29

U0009   Zhaosi5         G0004   Dianshang       04      29

U00010  Zhaosi6         G0004   Dianshang       04      29

U00011  Zhaosi7         G0002   Shichang        02      29

U00012  Zhaosi8         G0004   Dianshang       04      29

U00012  zhangsan        G0004   Dianshang       04      29

U00012  Zhangq          G0004   Dianshang       04      29

U00012  Lilin           G0004   Dianshang       04      29

U00012  Zhaoqi          G0004   Dianshang       04      29

查询hive sql语句被翻译成了MapReduce程序提交给Hadoop执行,执行结果为关联两个表查询,通过orgid进行关联,去掉了那些没有员工记录及没有部门记录的行。

五、删除内部表和外部表测试

1、删除内部表

hive> drop table t_user;

OK

Time taken: 0.702 seconds

hive>

hive> show tables;

OK

Time taken: 0.027 seconds

检查内部表默认存放目录中数据是否还存在,通过检查发现,删除内部表后会连同默认存放目录下的数据也删掉。

2、删除外部表

hive> drop table t_org;

OK

Time taken: 0.107 seconds

hive>

检查HDFS数据存放目录下数据是否存在,通过检查删掉外部表后,只是将外部表在元数据库中存放的建表等相关信息删除,HDFS上数据并没有一并被删除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值