hive学习笔记之三:内部表和外部表(1)

comment ‘this is a database for test’;

  1. 查看数据库列表(名称模糊匹配):

hive> show databases like ‘t*’;

OK

test

test001

Time taken: 0.016 seconds, Fetched: 2 row(s)

  1. describe database命令查看此数据库信息:

hive> describe database test;

OK

test this is a database for test hdfs://node0:8020/user/hive/warehouse/test.db hadoop USER

Time taken: 0.035 seconds, Fetched: 1 row(s)

  1. 上述命令可见,test数据库在hdfs上的存储位置是hdfs://node0:8020/user/hive/warehouse/test.db,打开hadoop的web页面,查看hdfs目录,如下图,该路径的文件夹已经创建,并且是以.db结尾的:

在这里插入图片描述

  1. 新建数据库的文件夹都在/user/hive/warehouse下面,这是在中配置的,如下图红框:

在这里插入图片描述

  1. 删除数据库,加上if exists,当数据库不存在时,执行该语句不会返回Error:

hive> drop database if exists test;

OK

Time taken: 0.193 seconds

以上就是常用的库相关操作,接下来实践表相关操作;

内部表

  1. 按照表数据的生命周期,可以将表分为内部表和外部表两类;

  2. 内部表也叫管理表或临时表,该类型表的生命周期时由hive控制的,默认情况下数据都存放在/user/hive/warehouse/下面;

  3. 删除表时数据会被删除;

  4. 以下命令创建的就是内部表,可见前面两篇文章中创建的表都是内部表:

create table t6(id int, name string)

row format delimited

fields terminated by ‘,’;

  1. 向t6表新增一条记录:

insert into t6 values (101, ‘a101’);

  1. 使用hadoop命令查看hdfs,可见t6表有对应的文件夹,里面的文件保存着该表数据:

[hadoop@node0 bin]$ ./hadoop fs -ls /user/hive/warehouse/t6

Found 1 items

-rwxr-xr-x 3 hadoop supergroup 9 2020-10-31 11:14 /user/hive/warehouse/t6/000000_0

  1. 查看这个000000_0文件的内容,如下可见,就是表内的数据:

[hadoop@node0 bin]$ ./hadoop fs -cat /user/hive/warehouse/t6/000000_0

101 a101

  1. 执行命令drop table t6;删除t6表,再次查看t6表对应的文件,发现整个文件夹都不存在了:

[hadoop@node0 bin]$ ./hadoop fs -ls /user/hive/warehouse/

Found 5 items

drwxr-xr-x - hadoop supergroup 0 2020-10-27 20:42 /user/hive/warehouse/t1

drwxr-xr-x - hadoop supergroup 0 2020-10-29 00:13 /user/hive/warehouse/t2

drwxr-xr-x - hadoop supergroup 0 2020-10-29 00:14 /user/hive/warehouse/t3

drwxr-xr-x - hadoop supergroup 0 2020-10-29 13:04 /user/hive/warehouse/t4

drwxr-xr-x - hadoop supergroup 0 2020-10-29 16:47 /user/hive/warehouse/t5

外部表

  1. 创建表的SQL语句中加上external,创建的就是外部表了;

  2. 外部表的数据生命周期不受Hive控制;

  3. 删除外部表的时候不会删除数据;

  4. 外部表的数据,可以同时作为多个外部表的数据源共享使用;

  5. 接下来开始实践,下面是建表语句:

create external table t7(id int, name string)

row format delimited

fields terminated by ‘,’

location ‘/data/external_t7’;

  1. 查看hdfs文件,可见目录/data/external_t7/已经创建:

[hadoop@node0 bin]$ ./hadoop fs -ls /data/

Found 1 items

drwxr-xr-x - hadoop supergroup 0 2020-10-31 12:02 /data/external_t7

  1. 新增一条记录:

insert into t7 values (107, ‘a107’);

  1. 在hdfs查看t7表对应的数据文件,可以见到新增的内容:

[hadoop@node0 bin]$ ./hadoop fs -ls /data/external_t7

Found 1 items

-rwxr-xr-x 3 hadoop supergroup 9 2020-10-31 12:06 /data/external_t7/000000_0

[hadoop@node0 bin]$ ./hadoop fs -cat /data/external_t7/000000_0

107,a107

  1. 试试多个外部表共享数据的功能,执行以下语句再建个外部表,名为t8,对应的存储目录和t7是同一个:

create external table t8(id_t8 int, name_t8 string)

row format delimited

fields terminated by ‘,’

location ‘/data/external_t7’;

  1. 建好t8表后立即查看数据,发现和t7表一模一样,可见它们已经共享了数据:

hive> select * from t8;

OK

107 a107

Time taken: 0.068 seconds, Fetched: 1 row(s)

hive> select * from t7;

OK

107 a107

Time taken: 0.074 seconds, Fetched: 1 row(s)

  1. 接下来删除t7表,再看t8表是否还能查出数据,如下可见,数据没有被删除,可以继续使用:

hive> drop table t7;

OK

Time taken: 1.053 seconds

hive> select * from t8;

OK

107 a107

Time taken: 0.073 seconds, Fetched: 1 row(s)

  1. 把t8表也删掉,再去看数据文件,如下所示,依然存在:

[hadoop@node0 bin]$ ./hadoop fs -cat /data/external_t7/000000_0

107,a107

  1. 可见外部表的数据不会在删除表的时候被删除,因此,在实际生产业务系统开发中,外部表是我们主要应用的表类型;

表的操作

  1. 再次创建t8表:

create table t8(id int, name string)

row format delimited

fields terminated by ‘,’;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)

Ending

Tip:由于文章篇幅有限制,下面还有20个关于MySQL的问题,我都复盘整理成一份pdf文档了,后面的内容我就把剩下的问题的目录展示给大家看一下

如果觉得有帮助不妨【转发+点赞+关注】支持我,后续会为大家带来更多的技术类文章以及学习类文章!(阿里对MySQL底层实现以及索引实现问的很多)

吃透后这份pdf,你同样可以跟面试官侃侃而谈MySQL。其实像阿里p7岗位的需求也没那么难(但也不简单),扎实的Java基础+无短板知识面+对某几个开源技术有深度学习+阅读过源码+算法刷题,这一套下来p7岗差不多没什么问题,还是希望大家都能拿到高薪offer吧。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
转发+点赞+关注】支持我,后续会为大家带来更多的技术类文章以及学习类文章!**(阿里对MySQL底层实现以及索引实现问的很多)

[外链图片转存中…(img-fJ6uH613-1713855270842)]

[外链图片转存中…(img-gWP8dYKy-1713855270842)]

吃透后这份pdf,你同样可以跟面试官侃侃而谈MySQL。其实像阿里p7岗位的需求也没那么难(但也不简单),扎实的Java基础+无短板知识面+对某几个开源技术有深度学习+阅读过源码+算法刷题,这一套下来p7岗差不多没什么问题,还是希望大家都能拿到高薪offer吧。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值