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

news2024/11/19 12:34:27

目录

一、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 delimited
        fields 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.coloradmin.cn/o/756123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【一蹴而就】软著申请时,如何更高效地将源码进行格式处理和合并呢?这篇博客告诉你答案。

【一蹴而就】软著申请时,如何更高效地将源码进行格式处理和合并呢?这篇博客告诉你答案。 1,软著申请三要素2,源代码合成软件SourceConvert2.1 启动文件2.2 Spring项目源代码格式2.2.1 规律的包名2.2.2 核心文件 3,Sour…

[QT编程系列-10]:C++图形用户界面编程,QT框架快速入门培训 - 4- QT画图与动画

目录 4. QT画图与动画 4.1 QT的绘图系统 4.2 案例目标 4.3 绘制过程 4.4 更换控件的icon 4.5 案例2 4.6 坐标轴 4. QT画图与动画 4.1 QT的绘图系统 QT(也称为Qt Framework)是一种流行的跨平台应用程序开发框架,它提供了丰富的图形用户…

网页无插件播放265/264视频/监控大屏/GPU解码

网页无插件播放265/264视频/监控大屏/GPU解码 先看效果 特点 GPU解码,chrome网页播放32路 h256/hevc 直播视频流,毫无压力。提供1分屏、4分屏、8分屏、9分屏、16分屏、32分屏、64分屏分屏切换不会停止播放GPU解码、无插件播放自动识别264/265,并且都是…

飞控学习笔记-梯度下降算法(gradient descent algorithm)

简介 笔记来源于文章:An_efficient_orientation_filter_for_inertial_and_inertial_magnetic_sensor_arrays 共轭: 四元数叉乘: 欧拉角等式:

vue-springboot美食商城网站的设计与实现0fh04

美食网站是在的数据存储主要通过MySQL。用户在使用应用时产生的数据通过Java语言传递给数据库。通过此方式促进美食信息流动和数据传输效率,提供一个内容丰富、功能多样、易于操作的平台。述了数据库的设计,系统的详细设计部分主要论述了几个主要模块的详…

一文阐明死锁的成因及解决方案

死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。 目录 一、死锁的几种情况 1、一个线程,一把锁(上面同一线程给同一对象加两…

stm32PID调参实验

使用了增量式PID,有点难调,数据一直在波动。实际中调参具有很大的不确定性,因为你这次调好了,下次再供电发现又不是那么回事。按照网上传统的调参方法,一般是先调P,I和D为0,逐渐增大P使得实际值快速到达目标…

【API生命周期看护】API监控与运维

一、基本概念 当接口完成发布、上线后,就进入了正常的运行与维护状态。此时,对于API本身的监控与运维则变得尤为重要,这是保障服务功能可用、SLA达成的重要手段。 监控与运维本身是一个非常大的概念,从DevOps这一词汇中也能看出…

Linux下做性能分析6:理解一些基础的CPU执行模型

[介绍] 前面介绍了两个典型的调度模型,如果调度没有问题,剩下的问题就是正面刚算法了。那个不是我这里要介绍的主题的。 但,Not Really。其实除了算法在消耗CPU,CPU还是有很多余力可以挖掘的,这一篇我们专门讨论一下…

MySQL “error: ‘fd’: 未知重写说明符”

文章目录 1、【问题】MySQL “error: ‘fd’: 未知重写说明符”2、【解决】增加引用头文件 1、【问题】MySQL “error: ‘fd’: 未知重写说明符” 有以下代码,mysql 的 include 和 lib 都已经加入附加目录,libmysql.lib 已经加入依赖库: #p…

IEEE ICME 2023论文|基于交互式注意力的语音情感识别联合网络

论文题目: A Joint Network Based on Interactive Attention for Speech Emotion Recognition 作者列表: 胡英,侯世静,杨华敏,黄浩,何亮 研究背景 语音情感识别(Speech Emotion Recognitio…

4. MySQL 的增删查改(重点 9000字详解)

目录 准备工作 一、数据的插入 (insert) 注意 1. 整行插入 2. 指定列的插入(常用) 3. 一次插入多行数据 4. 清空数据库的数据(truncate) 5. 拓展练习:对于数据库中的数据进行统计&#…

多智能体强化学习(MARL)研究汇总:行为分析、通信学习、协作学习、智能体建模

【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍:【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应…

第一百零七天学习记录:C++核心:类和对象Ⅷ(五星重要)多态

多态 多态的基本概念 多态是C面向对象三大特性之一 多态分为两类 1、静态多态:函数重载 和 运算符重载属于静态多态,复用函数名 2、动态多态:派生类和虚函数实现运行时多态 静态多态和动态多态的区别: 1、静态多态的函数地址早绑…

Arthas的火焰图生成

之前说过用idea自带的工具生成火焰图,但是idea是在本地的,在机器上如何生成呢? 我觉得方法有很多,这里用arthas工具简单搞一搞 Arthas官网地址 下载Arthas 如果在机器上要下载整个包,arthas-boot.jar需要依赖其他的j…

上门按摩系统如何运营才能做大

预约上门按摩系统是一种在线平台或应用程序,用于帮助用户预约并安排专业按摩师上门提供按摩服务。这种系统通常为用户提供一个简便的方式来选择按摩服务类型、时间和地点,并与合适的按摩师进行预约。用户可以通过应用程序或网站浏览按摩师的资料和评论&a…

用googletest写cpp单测

框架概述 Google Test(也称为 googletest)是由 Google 开发的 C 单元测试框架。它的首个版本是在2004年发布的,作为 Google 内部的测试框架使用。随后,Google Test 在开源社区中得到广泛应用,并在许多项目和组织中成为…

总结927

今晚用了40分钟进行回顾,但这40分钟,能回顾一天所学?一共四门课,每门用10分钟回顾,光是书籍,资料的切换都需要30秒。10分钟回顾对于政治来说是足够的,但对于数学,能重做2~3道题就很不…

centos环境搭建nsq单点

简言 下载 启动nsq(单节点) 1. 启动nsqd 2. 启动nsqlookupd 3. 启动nsqadmin 查看状态 简言 1. nsq是go语言实现的分布式消息处理平台,类似我们常用的kafka,rocket mq等,目的是用来大规模地处理每天数以十亿计级别的消息。它具有分布式和…

前端:UI 交互式特效 —— Css、Js

😷😊🤺🤺🤺前期回顾 打造极简风格动效 —— 5 分钟轻松实现惊艳、震撼人心的视觉效果_彩色之外的博客-CSDN博客 😁 css动画 —— 把你喜欢css动画嵌入到浏览器中_css做的动画效果怎么嵌入网页_彩色之外的…