网站首页 > 技术文章 正文
欢迎访问我的GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类和汇总,及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;
本篇概览
- 本文是《hive学习笔记》系列的第三篇,学习各种类型的表及其特点,主要内容如下:
- 建库
- 内部表(也叫管理表或临时表)
- 外部表
- 表的操作
接下来从最基本的建库开始
建库
- 创建名为test的数据库(仅当不存在时才创建),添加备注信息test database:
create database if not exists test
comment 'this is a database for test';
- 查看数据库列表(名称模糊匹配):
hive> show databases like 't*';
OK
test
test001
Time taken: 0.016 seconds, Fetched: 2 row(s)
- 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)
- 从上述命令的结果发现test数据库在hdfs上的存储位置是hdfs://node0:8020/user/hive/warehouse/test.db,打开hadoop的web页面,查看hdfs目录,如下图,该路径的文件夹已经创建,并且是以.db结尾的:
- 新建数据库的文件夹都在/user/hive/warehouse下面,这是在中配置的,如下图红框:
- 删除数据库时加上if exists,这样当数据库不存在时,执行该语句不会返回Error:
hive> drop database if exists test;
OK
Time taken: 0.193 seconds
以上就是常用的库相关操作,接下来实践表相关操作;
内部表
- 按照表数据的生命周期,可以将表分为内部表和外部表两类;
- 内部表也叫管理表或临时表,该类型表的生命周期是由hive控制的,默认情况下数据都存放在/user/hive/warehouse/下面;
- 删除表时数据会被删除;
- 以下命令创建的就是内部表,可见前面两篇文章中创建的表都是内部表:
create table t6(id int, name string)
row format delimited
fields terminated by ',';
- 向t6表新增一条记录:
insert into t6 values (101, 'a101');
- 使用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
- 查看这个000000_0文件的内容,如下可见,就是表内的数据:
[hadoop@node0 bin]$ ./hadoop fs -cat /user/hive/warehouse/t6/000000_0
101 a101
- 执行命令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
外部表
- 创建表的SQL语句中加上external,创建的就是外部表了;
- 外部表的数据生命周期不受Hive控制;
- 删除外部表的时候不会删除数据;
- 外部表的数据,可以同时作为多个外部表的数据源共享使用;
- 接下来开始实践,下面是建表语句:
create external table t7(id int, name string)
row format delimited
fields terminated by ','
location '/data/external_t7';
- 查看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
- 新增一条记录:
insert into t7 values (107, 'a107');
- 在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
- 试试多个外部表共享数据的功能,执行以下语句再建个外部表,名为t8,对应的存储目录和t7是同一个:
create external table t8(id_t8 int, name_t8 string)
row format delimited
fields terminated by ','
location '/data/external_t7';
- 建好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)
- 接下来删除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)
- 把t8表也删掉,再去看数据文件,如下所示,依然存在:
[hadoop@node0 bin]$ ./hadoop fs -cat /data/external_t7/000000_0
107,a107
- 可见外部表的数据不会在删除表的时候被删除,因此,在实际生产业务系统开发中,外部表是我们主要应用的表类型;
表的操作
- 再次创建t8表:
create table t8(id int, name string)
row format delimited
fields terminated by ',';
- 修改表名:
alter table t8 rename to t8_1;
- 可见修改表名已经生效:
hive> alter table t8 rename to t8_1;
OK
Time taken: 0.473 seconds
hive> show tables;
OK
alltype
t1
t2
t3
t4
t5
t6
t8_1
values__tmp__table__1
values__tmp__table__2
Time taken: 0.029 seconds, Fetched: 10 row(s)
- 添加字段:
alter table t8_1 add columns(remark string);
查看表结构,可见已经生效:
hive> desc t8_1;
OK
id int
name string
remark string
Time taken: 0.217 seconds, Fetched: 3 row(s)
至此,咱们对内部表和外部表已经有了基本了解,接下来的文章学习另一种常见的表类:分区表;
欢迎关注我的公众号:程序员欣宸
猜你喜欢
- 2024-10-17 hive中json字符串解析之get_json_object与json_tuple
- 2024-10-17 精选Hive高频面试题11道,附答案详细解析
- 2024-10-17 分享7个Flutter开发库,让你成为高效开发者
- 2024-10-17 看完这一篇数据仓库干货,终于搞懂什么是hive了
- 2024-10-17 Hive架构及Hive SQL的执行流程解读
- 2024-10-17 hadoop上搭建hive hadoop+hive
- 2024-10-17 HIVE常用函数大全 hive用法
- 2024-10-17 求求你别再手动部署jar包了,太low了
- 2024-10-17 hive 多字段分隔符使用 hive分隔符\001
- 2024-10-17 Hive 函数 + Shell编程的具体实践与运用
你 发表评论:
欢迎- 11-19零基础学习!数据分析分类模型「支持向量机」
- 11-19机器学习 | 算法笔记(三)- 支持向量机算法以及代码实现
- 11-19我以前一直没有真正理解支持向量机,直到我画了一张图
- 11-19研一小姑娘分享机器学习之SVM支持向量机
- 11-19[机器学习] sklearn支持向量机
- 11-19支持向量机
- 11-19初探支持向量机:用大白话解释、原理详解、Python实现
- 11-19支持向量机的核函数
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)