写点什么

hive 学习笔记之三:内部表和外部表 (1),贼好用的 Java 学习路线集合

用户头像
极客good
关注
发布于: 刚刚
  1. 建库

  2. 内部表(也叫管理表或临时表)

  3. 外部表

  4. 表的操作


接下来从最基本的建库开始

[](

)建库


  1. 创建名为 test 的数据库(仅当不存在时才创建),添加备注信息 test database:


create database if not exists test


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 i


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


nto 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

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
hive学习笔记之三:内部表和外部表(1),贼好用的Java学习路线集合