热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

欢迎访问我的GitHubhttps:github.comzq2599blog_demos内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、De

欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;


《hive学习笔记》系列导航



  1. 基本数据类型

  2. 复杂数据类型

  3. 内部表和外部表

  4. 分区表

  5. 分桶

  6. HiveQL基础

  7. 内置函数

  8. Sqoop

  9. 基础UDF

  10. 用户自定义聚合函数(UDAF)

  11. UDTF


本篇概览



  • 本文是《hive学习笔记》系列的第三篇,要学习的是各种类型的表及其特点,主要内容如下:



  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结尾的:

在这里插入图片描述

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

在这里插入图片描述

6. 删除数据库,加上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 ',';


  1. 修改表名:

alter table t8 rename to t8_1;


  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)


  1. 添加字段:

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)

至此,咱们对内部表和外部表已经有了基本了解,接下来的文章学习另一种常见的表类:分区表;


你不孤单,欣宸原创一路相伴



  1. Java系列

  2. Spring系列

  3. Docker系列

  4. kubernetes系列

  5. 数据库+中间件系列

  6. DevOps系列


欢迎关注公众号:程序员欣宸


微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...

https://github.com/zq2599/blog_demos




推荐阅读
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
author-avatar
骄傲_yi2006
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有