【大数据Hive】Hive 内部表与外部表使用详解

目录

一、hive 内部表简介

1.1 查看内部表信息

二、hive 外部表简介

三、内部表与外部表对比

四、内部表与外部表操作演示

4.1 内部表操作

4.1.1 数据准备

4.1.2 建表sql

4.2 外部表操作

4.2.1 建表sql

4.2.2 上传数据文件到 /stu目录

4.2.3 内部表删除

4.2.4 外部表删除

4.3 如何选择内、外部表

五、内部表、外部表与location的关系

5.1 location关键字不补充说明

5.2 操作演示

5.2.1 创建外部表,不指定location

5.2.2 创建内部表,指定location


一、hive 内部表简介

内部表(Internal table)也称为被Hive拥有和管理的托管表(Managed table)

默认情况下创建的表就是内部表,Hive拥有该表的结构和文件。换句话说,Hive完全管理表(元数据和数据)的生命周期,类似于RDBMS中的表。当删除内部表时,它会删除数据以及表的元数据。

还记得上一篇中关于hive建表的完整语法树吗,在建表sql中第一行提供了可选参数 EXTERNAL

 CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name

...

1.1 查看内部表信息

可以使用DESCRIBE FORMATTED tablename,来获取表的元数据描述信息,从中可以看出表的类型;

二、hive 外部表简介

外部表(External table)中的数据不是Hive拥有或管理的,只管理表元数据的生命周期。

要创建一个外部表,需要使用EXTERNAL语法关键字,删除外部表只会删除元数据,而不会删除实际数据。在Hive外部仍然可以访问实际数据

 实际场景中,外部表搭配location语法指定数据的路径,可以让数据更安全。

外部表不补充说明

1、创建外部表 需要关键字 external

2、外部表数据存储路径不指定 默认规则和内部表一致

3、也可以使用location关键字指定HDFS任意路径

如下为一个外表表建表sql

create external table student_ext(num int,
name string,sex string,age int,
dept string)
row format delimited
fields terminated by ','
location '/stu';

三、内部表与外部表对比

  • 无论内部表还是外部表,Hive都在Hive Metastore中管理表定义、字段类型等元数据信息;
  • 删除内部表时,除了会从Metastore中删除表元数据,还会从HDFS中删除其所有数据文件;
  • 删除外部表时,只会从Metastore中删除表的元数据,并保持HDFS位置中的实际数据不变;

四、内部表与外部表操作演示

4.1 内部表操作

4.1.1 数据准备

如下,为表映射的数据文件内容;

4.1.2 建表sql

默认情况下 ,不指定external,创建的表就是内部表

create table student(num int,name string,sex string,age int,dept string)
row format delimited
fields terminated by ',';

在hive的客户端的执行表的创建

也可以使用desc命令查看创建的表信息

describe formatted student;

4.2 外部表操作

4.2.1 建表sql

create external table student_ext(num int,name string,sex string,age int,dept string)
row format delimited
fields terminated by ','
location '/stu';

外部表补充说明

  • 创建外部表 需要关键字 external;
  • 外部表数据存储路径不指定 默认规则和内部表一致;
  • 也可以使用location关键字指定HDFS任意路径;

注意:如果未提前在hdfs目录创建出location里面的目录,建表的时候会自动创建

也可以使用describe命令查看详细信息

4.2.2 上传数据文件到 /stu目录

上传外部表数据文件

hdfs dfs -put ./students.txt /stu  

上传内部表数据文件

hdfs dfs -put ./students.txt /user/hive/warehouse/test.db/student

上传完成后就可以直接查看表数据了

 

4.2.3 内部表删除

接下来我们执行一下drop table tablename 命令,分别在Hive中和HDFS中查看效果

在当前的数据库下该表被删除了,切换到hdfs目录下查看,表对应的数据文件也删掉了;

 简单来说就是,内部表执行删除的时候,hive会将内部表自身的元数据信息,连同hdfs数据文件一并删除;

4.2.4 外部表删除

 删除外部表后再次去hdfs目录查看,发现此时数据文件仍然存在;

总结来说就是,删除外部表时只删除hive上的元数据信息,hdfs上面的数据仍然保留,因为这个特性,可以一定程度上确保原始数据的安全性;

4.3 如何选择内、外部表

根据上面的操作演示,在内部表与外部表的选择上做如下的建议:

  • 当需要通过Hive完全管理控制表的整个生命周期时,请使用内部表;
  • 当数据来之不易,防止误删,请使用外部表,因为即使删除表,文件也会被保留;

五、内部表、外部表与location的关系

通过上面的操作演示,好奇的同学不仅会在脑海里冒出下面的几个思考:

  • 在创建外部表的时候,可以使用location指定存储位置路径,如果不指定会如何?
  • 创建内部表的时候,是否可以使用location指定?
  • 是否意味着Hive表的数据在HDFS上的位置不是一定要在/user/hive/warehouse下?

5.1 location关键字不补充说明

1)在创建外部表的时候,可以使用location指定存储位置路径,如果不指定会如何?

如果不指定location,外部表的默认路径也是位于/user/hive/warehouse,由默认参数控制

2)创建内部表的时候,是否可以使用location指定?

内部表可以使用location指定位置的

3)是否意味着Hive表的数据在HDFS上的位置不是一定要在/user/hive/warehouse下?

不一定,Hive中表数据存储位置,不管内部表还是外部表,默认都在/user/hive/warehouse,当然可以在建表的时候通过location关键字指定存储位置在HDFS的任意路径

5.2 操作演示

5.2.1 创建外部表,不指定location

create external table student_ext_nolocation(num int,name string,sex string,age int,dept string)row format delimitedfields terminated by ',';

执行创建表的sql;

再在hdfs目录中检查,发现就在默认的路径下:/user/hive/warehouse/test.db

5.2.2 创建内部表,指定location

create table student_inner(num int,name string,sex string,age int,dept string)
row format delimited
fields terminated by ','
location '/stu';

执行sql创建表,可以看到这种操作是可以的;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/58785.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

角角の Qt学习笔记(一)

目录 一、解决在创建新项目时遇到的几个问题 二、信号和槽(非自定义) 三、调用 UI 中的元素(比如按钮) 一、解决在创建新项目时遇到的几个问题 在新建项目时,我选择的构建系统为CMake。然后勾选了Generate form&…

超级浏览器与指纹浏览器:功能与特点的比较

导语:随着互联网的快速发展,隐私和安全问题日益受到关注。在这个背景下,超级浏览器和指纹浏览器作为定制化浏览器的两个重要类型,各自具有独特的功能和特点。本文将对超级浏览器和指纹浏览器进行比较,帮助读者更好地理…

PDF Expert 3.3 for mac

PDF Expert是一款专业的PDF编辑和阅读工具。它可以帮助用户在Mac、iPad和iPhone等设备上查看、注释、编辑、填写和签署PDF文档。 以下是PDF Expert的特点: PDF编辑:PDF Expert提供了丰富的PDF编辑功能,包括添加、删除、移动、旋转、缩放、裁…

vue中vuex的五个属性和基本用法,另加js-cookie的使用

VueX 是一个专门为 Vue.js 应用设计的状态管理构架,统一管理和维护各个vue组件的可变化状态(你可以理解成 vue 组件里的某些 data )。 Vuex有五个核心概念: state, getters, mutations, actions, modules。 1. state: vuex的基本数据&…

使用Pytest集成Allure生成漂亮的图形测试报告

目录 前言 依赖包安装 Pytest Allure Pytest Adaptor 改造基于Pytest的测试用例 生成测试报告 运行测试 生成测试报告 打开测试报告 资料获取方法 前言 之前写过一篇生成测试报告的博客,但是其实Allure首先是一个可以独立运行的测试报告生成框架&#xff…

uniapp两个单页面之间进行传参

1.单页面传参:A --> B url: .....?code JSON.stringify(param), 2.单页面传参B–>Auni.$emit() uni.$on()

elementui实现当前页全选+所有全选+翻页保持选中状

原文来自:https://blog.csdn.net/sumimg/article/details/121693305?spm1001.2101.3001.6650.1&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-121693305-blog-127570059.235%5Ev38%5Epc_relevant_anti_t3&depth_1-utm…

构建Docker容器监控系统(2)(Cadvisor +Prometheus+Grafana)

Cadvisor产品简介 Cadvisor是Google开源的一款用于展示和分析容器运行状态的可视化工具。通过在主机上运行Cadvisor用户可以轻松的获取到当前主机上容器的运行统计信息,并以图表的形式向用户展示。 接着上一篇来继续 部署Cadvisor 被监控主机上部署Cadvisor容器…

css的transform样式计算-第一节

本文作者为 360 奇舞团前端开发工程师 引言 在使用 css 样式进行样式的缩放、旋转等设置时,思考了一下它的较浅层的原理,恩,这个阶段都 是一些初高的数学计算,从新看这里的时候顺便捡了捡初高中的数学,比如三角函数之类…

Nodejs安装及环境变量配置(修改全局安装依赖工具包和缓存文件夹及npm镜像源)

本机环境:win11家庭中文版 一、官网下载 二、安装 三、查看nodejs及npm版本号 1、查看node版本号 node -v 2、查看NPM版本号(安装nodejs时已自动安装npm) npm -v 四、配置npm全局下载工具包和缓存目录 1、查看安装目录 在本目录下创建no…

揭秘压力测试:从报告中看软件的极限

压力测试简介 压力测试,对于软件开发和测试领域的人来说,绝不是一个陌生的词汇。但是对于许多人来说,它的真正含义、目的和重要性可能仍然是一个迷。那么,什么是压力测试,为什么它如此关键? 压力测试是一…

kubeadml 安装 k8s

目录 一:kubeadml 安装 k8s 1、网络环境 2、 环境准备 3、 所有节点安装docker 4、所有节点安装kubeadm,kubelet和kubectl ​5、部署K8S集群 6、测试 二: 部署 Dashboard 一:kubeadml 安装 k8s 1、网络环境 master&am…