hive的数据存储(元数据,表数据)和内部表,外部表,分区表的创建和区别作用

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

转载https://blog.youkuaiyun.com/csdnliuxin123524/article/details/81052974

hive的数据存储:

首先弄清楚什么是元数据和表数据:元数据就是表的属性数据,表的名字,列信息,分区等标的属性信息,它是存放在RMDBS传统数据库中的(如,mysql)。表数据就是表中成千上万条数据了。

hive的存储过程:启动hive时,会初始化hive,这时会在mysql中生成大约36张表(后续随着业务的复杂会增加),然后创建表,会在mysql中存放这个表的信息(不是以表的形式存在的,而是把表的属性以数据的形式放在mysql中,这样在hive中使用sql命令一样是能够查到这张表的)。然后把本地的文本文件使用hive命令格式化导入到表中,这样这些数据就存放到hdfs中,而不是在mysql或hive中。

内部表,

 hive> create table student(id int, name string, sex string, age int, department string) row format delimited fields terminated by ",";

  

我创建了一个studetn表,在mysql中是看不到这个表的:


而是使用命令,查找上面的tbls这个表:

mysql> select * from hive.TBLS;
  


然后在导入数据(hive不能进行增删改,也就是不能使用insert into ,update,delete等命令;想一想我们做大数据统计是分析数据的,而不是修改数据,再者数据是以文本的形式放在hdfs中的,因此不能修改数据):我这里上传本地txt文件


  
  1. hive> load data local inpath "/home/xiaoye/students.txt" into table student;
  2. Copying data from file:/home/xiaoye/students.txt
  3. Copying file: file:/home/xiaoye/students.txt
  4. Loading data to table hive2.student
  5. Table hive2.student stats: [numFiles=1, numRows=0, totalSize=56, rawDataSize=0]
  6. OK
  7. Time taken: 6.346 seconds
  8. hive> select * from student;
  9. OK
  10. 1 小明 man 12 NULL
  11. 2 小红 woman 14 NULL
  12. 3 xiaoliang man 13 NULL
  13. Time taken: 0.964 seconds, Fetched: 3 row(s)
  14. hive> desc student;
  15. OK
  16. id int
  17. name string
  18. sex string
  19. age int
  20. department string

再到hdfs页面上有没有生成对应的数据:


说明没问题。

---------------------------------------------------------------------------------------------------------

外部表案例(这里就使用网友大神的博文,更美观):



  
  1. 0: jdbc:hive2://hadoop3:10000> create external table student_ext
  2. (id int, name string, sex string, age int,department string) row format delimited fields terminated by "," location "/hive/student";
  3. No rows affected (0.248 seconds)

--------------------------------------------------------------------------------------------------------------------------------

内部表外部表区别:

首先二者不是共存关系也不是修改关系,而是一开始创建表的使用要想好你到底需要什么样的表。

然后,  1、在导入数据到外部表,数据并没有移动到自己的数据仓库目录下(如果指定了location的话),也就是说外部表中的数据并不是由它自己来管理的!而内部表则不一样;

     2、在删除内部表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!

 3. 在创建内部表或外部表时加上location 的效果是一样的,只不过表目录的位置不同而已,加上partition用法也一样,只不过表目录下会有分区目录而已,load data local inpath直接把本地文件系统的数据上传到hdfs上,有location上传到location指定的位置上,没有的话上传到hive默认配置的数据仓库中。

外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。 

那么,应该如何选择使用哪种表呢?在大多数情况没有太多的区别,因此选择只是个人喜好的问题。但是作为一个经验,如果所有处理都需要由Hive完成,那么你应该创建表,否则使用外部表!


-----------------------------------------------------------------------------------------------------

分区表:


  
  1. 0: jdbc:hive2://hadoop3:10000> create external table student_ptn(id int, name string, sex string, age int,department string)
  2. . . . . . . . . . . . . . . .> partitioned by (city string)
  3. . . . . . . . . . . . . . . .> row format delimited fields terminated by ","
  4. . . . . . . . . . . . . . . .> location "/hive/student_ptn";
  5. No rows affected (0.24 seconds)

添加分区


  
  1. 0: jdbc:hive2://hadoop3:10000> alter table student_ptn add partition(city="beijing");
  2. No rows affected (0.269 seconds)
  3. 0: jdbc:hive2://hadoop3:10000> alter table student_ptn add partition(city="shenzhen");
  4. No rows affected (0.236 seconds)
  5. 0: jdbc:hive2://hadoop3:10000>

为什么要使用分区表呢?

看上面的例子很显然,这是个学生表,然后以城市分区,这样就能够根据学生所在市不同把不同的分区分在表中不同的子文件夹中.这样数据也就在不同的磁盘文件中,数据库对不同的分区会进行单独的管理,优化,最终的目的是加快我们数据查询的速度。


  

--------------------------------------------------------------------------------------------------------------------------------

最后还有个桶,这个有点难理解,就不做多说了就放个案例吧:


  
  1. 0: jdbc:hive2://hadoop3:10000> create external table student_bck(id int, name string, sex string, age int,department string)
  2. . . . . . . . . . . . . . . .> clustered by (id) sorted by (id asc, name desc) into 4 buckets
  3. . . . . . . . . . . . . . . .> row format delimited fields terminated by ","
  4. . . . . . . . . . . . . . . .> location "/hive/student_bck";

---------------------------------------------

增加 桶:

桶表(bucket table):

  原理:

    分区表是按照经常查询的字段做不同的分区,查询时就可以按分区进行查了.这样可以减小全局扫描提高查询的速度.分区表的缺陷就是选定了分区字段之后,结果会造成数据偏差特别大,有的分区数据特别大,有的分区数据特别小,这个时候作业的整个查询时间就受制于分区中数据特别大的那个分区,对整个作业的运行效率是不好的.
    桶表和分区表的区别在于:不是按照业务字段来进行分区,对里面的记录做一个hash,记录做完hash之后就没有规律了,可以简单的认为数据做完hash之后都不相同,然后我们让数据进行模10,数据就被分成了十份,模100就被分成100份,因为hash值几乎各不相同,所以模后的结果,分成10份或者100份,每一份的数据量几乎是一样多的,当你hash之后然后模一个数字,分的那些数据量,每一份应该是差不多的,如果这样的话,我们把这样的数据存起来,模5,10,100 模的这个数字叫做桶,模几就分成几个桶,桶实际上就是模的数字,我们的记录就被划分到这个桶里面了,那么hive在进行查询的时候就会按照5个桶或者10个桶来进行处理,这样的话,好处是各个map运行的时间差不多.
  桶表用的领域很少,一般用在表连接中,有两个表,有一个外键是连接字段,我们的这一个表里面的字段和另外一个的连接字段的值是相同的,hash后的值应该也相同,分桶的话会分到相同的桶中,在进行表连接的时候就比较方便了,只需要把对应的桶的数据连接一下然后再从里边查数据就方便了.

  还有一个优点就是在进行抽样查询的时候,我们的记录只有10亿条记录,要查一下北京的有多少个,没必要把十亿条记录全扫一遍,但是可以扫一万或者一百万看一下北京的有多少,然后就可以大体的判断一下北京的大约占多少百分比了.抽样不需要一个准确的值,只需要一个样本就可以了,这样样本只要符合统计学上的大小就可以了,那么我们在进行抽样的话,如果按照桶表来进行抽样更合理,如果按时间抽,统计结果就不准了.

  创建桶表:

    create table bucket_table(id int,name string) clustered by(id) into 3 buckets;

  加载数据:

    需要计算id的hash值,分桶.所以不能使用load data,load data加载方式是直接把数据从我们的磁盘复制到hdfs目录下,但是我们的分桶需要计算,计算需要走mapreduce,所以需要通过这种方式走mapreduce

    设置启用桶 set hive.enforce.bucketing=true;
  insert overwrite table bucket_table select id,name from jiuye;

  分桶之后是三个文件,分区表是文件夹.桶表和分区表目的都是为了把数据进行划分,只是划分的方式不一样,一个是从业务字段的角度来划分,一个是抛弃了业务字段从纯数据的角度来进行划分,纯数据的角度和查询就不搭界了,主要就是用于抽样,表连接.


数仓工具—Hive内部表和外部表(5) 未被external修饰的是内部表(managed table),被external修饰的为外部表(external table);因为默认情况下我们不加external关键字修饰,所以默认情况下是内部表 阅读详情

相关推荐

安卓模拟器绕过检测全解析:雷电、MuMu、蓝叠、逍遥、夜神与WSA完整指南

随着手机游戏和应用的普及,越来越多的用户选择在PC上通过模拟器来运行安卓应用。然而,许多应用和游戏为了防止作弊或出于安全考虑,会检测是否运行在模拟器环境中。本文将详细介绍各大主流模拟器的检测绕过方法,帮助用户在电脑上流畅体验各类安卓应用。1. 获取模拟器系统镜像2. 使用ROM厨房工具修改系统文件3. 替换模拟器的系统镜像雷电模拟器:适合游戏,推荐使用MAGISK + EdXposed方案MuMu模拟器:适合中度游戏,推荐太极框架蓝叠模拟器:适合国际应用,推荐MAGISK方案逍遥模拟器。

专注技术分享 3万+

数据库之元数据

那数据库中的元数据有什么作用呢? 主要有两个方面: 应用设计方面,例如代码生成器,它里面就需要用到数据库元数据。 如果你了解了数据库元数据,就能对数据库的一些框架有更深层次的了解,例如 jpa,Mybatis。.........

一切总会归于平淡 4793

ROS2通过ros2_socketcan实现CAN总线高效数据过滤与多节点通信

本文详细解析了ROS2通过ros2_socketcan实现CAN总线高效数据过滤与多节点通信的技术方案。文章重点探讨了CanFilterList的工作原理、多过滤器组合使用及动态配置策略,有效解决了工业应用中CAN总线数据过载问题,显著降低了CPU负载并提升了系统实时性。

n4o5p6q7r的博客 215

元数据的构建

orm 框架一般需要定义表的模型,然后模型与表生成映射关系,那么就一定少不了解析模型然后找到与之映射的数据库表,所以,元数据是解析模型获得的,这些元数据将被用于构建 SQL、执行校验,以及用 于处理结果集。模型:一般是指对应到数据库表的 Go 结构体定 义,也被称为 Schema、Table、Meta 等ORM 框架是怎么将一个结构体映射为一张表的(或者反过来)?核心就是依赖于元数据,元数据描述 了两者之间的映射关系。ORM 的元数据有什么用?在构造 SQL 的时候,用来将 Go 类型映射为表;

weixin_48943299的博客 1715

以太网硬件核心:MAC、PHY、MII与交换机原理与实战排查

计算机网络通信的基础依赖于一套完整的硬件协议栈。在OSI模型中,数据链路层和物理层是实现设备间可靠、高效数据传输的基石。其核心原理在于将上层数据包封装成帧,并通过特定的介质访问控制与物理信号转换机制进行传输。这一过程的技术价值在于为上层应用提供了透明、稳定的通信信道,是互联网和所有局域网通信的物理承载。在嵌入式系统、网络设备开发及运维等应用场景中,深入理解底层硬件交互至关重要。本文将聚焦于以太网硬件的两大核心组件:负责逻辑成帧与流量控制的MAC控制器,以及负责数模转换与链路协商的PHY芯片。它们通过MII、

dgqvhtlwq472235338的博客 422

Ubuntu视频播放器怎么选?VLC、mpv、SMPlayer硬解与字幕配置指南

在Linux系统中,视频播放体验取决于播放器、解码器与显卡驱动的协同。硬件解码通过VA-API或VDPAU将解码任务交给GPU,能显著降低CPU占用,解决4K高码率视频卡顿问题。对于Ubuntu用户,合理配置解码环境与播放器,可流畅播放HEVC、多音轨及ASS特效字幕视频。无论是日常观影、番剧追更还是家庭影院场景,选择合适的播放器并正确启用硬解,都是提升体验的关键。本文围绕Ubuntu平台,详解VLC、mpv、SMPlayer等播放器的安装、硬解配置与常见问题排查,帮助你在Linux上获得流畅的本地视频播放

weixin_33801856的博客 506

元数据概念与表的结构

在Hive中,元数据(Metastore)是关于数据仓库中数据的数据,用于描述数据的结构和位置信息。Hive使用元数据来提供表、字段、数据库以及数据之间的映射信息。元数据存储在关系型数据库中,如Derby、MySQL等。2、元数据包括以下信息:表的名字、表的列和分区及其属性、表的属性(是否为外部表等)、表的数据所在目录、3、Hive元数据存储在RDBMS中,有三种存储模式。·元数据存储在Derby数据库,是默认的存储方式。元数据存储了表的数据所在的HDFS目录。元数据存储了表的存储格式和分隔符。

m0_73889404的博客 1188

【论文精读】DisCo: Graph-Based Disentangled Contrastive Learning for Cold-Start Cross-Domain Recommendat

源域中具有相似偏好的用户在目标域中可能会表现出不同的兴趣。因此,直接迁移嵌入可能会引入不相关的源域协同信息。提出了一个基于图的解耦对比学习框架,以捕捉细粒度的用户意图并过滤掉不相关的协同信息,从而避免负迁移。 具体而言,对于每个域,我们使用多通道图编码器来捕捉多样化的用户意图。然后,我们在嵌入空间中构建亲和图,并执行多步随机游走以捕捉高阶用户相似性关系。将一个域视为目标域,我们提出了一种以用户相似性为指导的解耦意图对比学习方法,以优化跨域的用户意图桥接。

qq_52342142的博客 1227

Hive元数据存储和表数据存储

一、相关概念 1、元数据(metadata) 元数据(Meta Date),主要记录数据仓库中模型的定义、各层级间的映射关系、监控数据仓库的数据状态及 ETL 的任务运行状态。一般会通过元数据资料库(Metadata Repository)来统一地存储和管理元数据,其主要目的是使数据仓库的设计、部署、操作和管理能达成协同和一致。 元数据包括表的属性、表的名称、表的列、分区及其属性以及表数据所...

hyj 1万+

人工智能---什么是Transformer?

Transformer是一种强大的神经网络架构,最初由Google的研究人员在论文《Attention is All You Need》中提出,用于自然语言处理任务,特别是在机器翻译方面取得了巨大成功。Transformer的核心思想是完全基于自注意力机制(self-attention mechanism)来实现序列到序列(sequence-to-sequence)的学习。它在自然语言处理(NLP)和其他序列到序列任务中表现出色,逐渐成为该领域的主流模型。近些年也逐渐在自动驾驶领域有所应用。

智能汽车人的博客 3955

Linux Kernel入门到精通系列讲解(RV-Kernel 篇) 5.5 RTC设备编写与实现

4. Linux kernel RTC子系统goldfish_rtc driver分析。电脑,会需要时间,还比如 我们的手机、平板,都需要时间;驱动基本就是应用层需要什么数据你给什么数据就行,基本必须实现的就是。3.2 Linux kernel RTC 设备描述符讲解。中看到他的具体实现,也可以根据他的寄存器描述直接在。5. 将驱动添加进kernel和测试RTC驱动。系统来说,时间是一个非常重要的功能;之类的函数接口,接下来我们就开始讲解如何写。,所以我们直接移植设备树即可。,他的寄存器很简单,你可以从。

DSMGUOGUO的博客 568

如何判断 Hive 表是内部表还是外部表

在使用 Apache Hive 进行大数据处理时,理解表的类型(内部表或外部表)对于数据管理和维护至关重要。当删除内部表时,Hive 会删除元数据和存储在 Hive 仓库中的数据文件。:Hive 仅管理表的元数据,数据文件由用户自行管理。了解表的类型对于数据的生命周期管理非常重要,特别是在删除表时,可能会影响到数据的存储。了解表的类型有助于避免意外的数据丢失,并有助于制定合理的数据管理策略。:对于重要的数据,无论是内部表还是外部表,建议定期备份。:在删除表之前,务必确认表的类型,避免误删重要数据。

一个8年大数据开发工程师的碎碎念 1769

PCIe协议之 Equalization篇 之 理论篇 之 FFE

作为最后一道“精加工”工序,DFE利用其不放大噪声的优势,精准地消除残余的、强烈的后光标ISI,最终得到一个非常干净、张得很开的眼图,供判决器使用。信号经过信道衰减后变得模糊,首先由CTLE进行“粗调”,提供一个宽频带的增益,将眼图初步打开,为后面的DFE创造一个可以正常工作的信号环境。,它通过将输入信号在不同时间点上的多个副本(称为“抽头”)进行加权求和,来直接塑造或“整形”输出信号的波形。:这是最主要的信号路径,通常系数为正值,决定了信号的幅度。:将所有加权后的信号相加,产生最终的均衡输出。

那么菜的博客 753

hive内部表和外部表的区别

内部表&外部表 未被external修饰的是内部表(managed table)可省略,被external修饰的为外部表(external table); 区别:  内部表数据由Hive自身管理,外部表数据由HDFS管理;  内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse)加location '/input/t...

公号:一条coding 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

hive创建表(内部表和外部表)

一、理论 1)建表语法 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_nam

now 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Hive内部表和外部表的区别及如何创建

目前所创建的表都是所谓的管理表,有时也被称为内部表,因为这种表,Hive会(或多或少地)控制着数据的生命周期。 当删除一个管理表时,Hive也会删除这个表中的数据,管理表不方便和其他工作共享数据。 内部表(internal table/managed table): 没有external修饰,表数据保存在Hive默认的路径下,数据完全由Hive管理,删除表时元数据和表数据都会一起删除。 外部表...

qq_39783601的博客 1745

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Hive内部表和外部表的区别详解

Hive内部表和外部表的区别

Liu_Arvin的芝士小栈 13万+

Hadoop-Hive 内部表/外部表 分区表/分桶表区别

1)hive中内部表和外部表的区别 内部表:又叫管理表,表的创建,和删除都由hive自己决定。 外部表:表结构上同内部表,但是存储的数据时自己定义的,外部表在删除的时候只删除元数据,原始数据时不能删除的。 内部表和外部表的区别主要体现在两个方面: 删除:删除内部表,删除元数据和数据;删除外部表,删除元数据,保留数据。 使用:如果数据的所有处理都在 Hive 中进行,那么倾向于 选择内部表,但是如...

qichangjian的博客 2467

【Hive面试必知】Hive中的表类型详解:内部表、外部表、分区表与分桶表

Hive作为Hadoop生态系统中的重要数据仓库工具,提供了四种主要的表类型:内部表、外部表、分区表和分桶表。

IT成长日记的博客 2199

Hive内部表&外部表详解

内部表(managed table): 未被external修饰的表,也叫管理表。 外部表(external table):被external修饰的表。 内部表&外部表的区别: 内部表:删除表会删除表的元数据(metadata)和表数据(data)。 外部表:删除表会删除表的元数据(metadata),但不会删除表数据(data)。 数据管理方式: 数据(data)都存储在HDFS上,内部表由Hive自身管理,外部表数据由HDFS管理; 元数据(metadata)都存储在mysql上,由mysql管

baidu_41805096的博客 4296

Hive外部表和内部表区别以及相互转换

Hive建表语句 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name (col_name data_type [COMMENT 'col_comment'], ...) [PARTITIONED BY (col_name data_type [COMMENT 'col_comment'], ...)] [CO...

sharkdoodoo 1万+

hive创建表、内部表与外部表的区别

hive内部表与外部表的区别创建表内部表外部表总结 本文参考hive 内部表和外部表的区别和理解 ,加入实例。 创建表 语法: CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name (col_name data_type [COMMENT col_comment], ...) [PARTITIONED BY (col_name data_type, ...)] [CLUSTERED BY (col_name, col_name,

JMINO的博客 2774

Hive部分:hive中内部表和外部表的区别

以下是官网中关于external表的介绍: A table created without the EXTERNAL clause is called a managed table because Hive manages its data.  Managed and External Tables  By default Hive creates managed tables, where ...

wyqwilliam的博客 3310

hive 内部表 外部表 创建

hive 内部表 外部表 创建

qq_43192537的博客 2216

Hive编程指南-表创建、内部表、外部表

摘要:本文主要介绍了Hive创建表的一些知识,包含内部表、外部表、分区和分桶等。

Evankaka的专栏 5521
上一篇: hive元数据表结构详情
下一篇: yarn的三种调度器
Alwaysdazz
博客等级 码龄8年 24粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值