首页 > 其他分享 >Hive中的FileFormat、RowFormat和SerDe总结

Hive中的FileFormat、RowFormat和SerDe总结

时间:2024-05-01 16:12:09浏览次数:27  
标签:SerDe RowFormat Hive 文件格式 格式 FileFormat

Hive如何读写数据?

我们知道,hive表的数据是存储在hdfs文件系统中的。那么Hive是如何将hdfs上的数据文件,映射成一张张表呢,今天就来理清楚这个问题。

官方文档中对于Hive读数据的流程如下:

 

精炼一下:Hive的执行引擎首先通过InputFormat读取一条一条的数据记录,接着调用Serde.destrialize()来执行记录的反序列化,即将各种格式的数据反序列化为行对象,其中就包括切分和解析字段。

可以简单理解为:Hive使用FileFormat和SerDe读写数据。以读数据为例:InputFormat用于将数据拆成一条一条的记录,SerDe用于从一条记录中拆分字段。

什么是FileFormat?

FileFormat即文件格式,Hive内置文件格式包括textfile、orc、parquet、avro、jsonfile等,在建表语句中的stored as ...中指定。 其中,textfile是Hive默认的文件存储格式,可以通过hive.default.fileformat配置。

这几种文件格式,都有各自默认的SerDe、InputFormat和OutputFormat,举个例子:当我们指定Stored as orc的时候,等同于指定了下面三个配置:

 

需要注意的是,同一种文件格式的每一行数据的行格式也会有所不同,这就涉及到另一个概念:RowFormat。

什么是RowFormat?

RowFormat即行格式。比如同样是textFile文件,其中的行格式可以是RegEx正则类型、Json类型、CSV/TSV等。行格式不同,从一条记录中拆分字段的方式也不同。此时就需要指定不同的SerDe。

什么是SerDe?

SerDe是Serialize/Deserilize的简称,用于序列化和反序列化,SerDe能为表解析、拆分列,且对列指定相应的数据。在建表语句中有两种定义行格式方式:row format delimited或serde ,填写delimited表示使用默认的LazySimpleSerDe类来处理数据,对一行记录按照特定分隔符进行分割;填写SerDe表示使用其他的SerDe,甚至是用户自己自定义的SerDe。如果在建表时没有通过row format语法指定分隔符,则采用默认分隔符:\001。

除了内置的文件格式,Hive还支持用户开发的文件格式,此时,需要显式的指定inputformat 和outputformat,此时若不指定SerDe,会使用默认的SerDe。

标签:SerDe,RowFormat,Hive,文件格式,格式,FileFormat
From: https://www.cnblogs.com/ji-lei/p/18169414

相关文章

  • SerDes
    serdes为什么需要serdes传输?传统的数据和时钟同步传输在低速信号没有问题,在高速信号传输时由于传输线的时延不一致,高速信号的抖动,导致接收端无法正确的采集数据,因而采用CDR(即从数据中恢复时钟的方式)去采样数据。为什么需要8/10b编码,64/66编码?提供足够的跳变来恢复时钟;直流均......
  • OSERDES与HDMI
    参考之前笔记:Hdmi接口与XAPP460-CSDN博客原语:串并转换器-CSDN博客手册:XAPP460UG472AMD技术信息门户例化两次,其中一个调成slave,实现10转1;//例化OSERDESE2原语,实现并串转换,Master模式OSERDESE2#(.DATA_RATE_OQ("DDR"),//设置双倍数据速率.DATA_RA......
  • serdes介绍
    高速通信接口:SERDES技术被广泛应用于高速通信接口,如PCIe、USB、SATA、Ethernet等。它能够将大量数据并行化转换为高速串行数据流,以实现高带宽和远距离传输。光纤通信:在光纤通信中,SERDES用于将电信号转换为光信号,并进行光电信号的互转。光纤通信中的SERDES技术可以实......
  • rust结构体包含另一个结构体引用时,serde序列化问题
    代码如下useserde::{Deserialize,Serialize};#[derive(Serialize,Deserialize)]structPerson{id:String,name:String,}#[derive(Serialize,Deserialize)]structMsg<'a>{id:String,person:&'aPerson,}fnmain(){......
  • src.serviceImpl.UserDetailsServiceImpl
    packagecom.oep.backend.serviceImpl;importcom.baomidou.mybatisplus.core.conditions.query.QueryWrapper;importcom.oep.backend.mapper.AccountMapper;importcom.oep.backend.pojo.Account;importcom.oep.backend.serviceImpl.utils.UserDetailsImpl;importor......
  • src.backend.serviceImpl.UserDetailsServiceImpl
    packagecom.oep.backend.serviceImpl;importcom.oep.backend.pojo.Account;importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;importorg.springframework.security.core.GrantedAuthority;importorg.springframework.securit......
  • Linux命令:userdel 删除用户账户
    userdel命令使用1.删除用户账户$sudouserdeluser12.删除用户账户,并删除用户『主目录』和『邮件』【-r/--remove】$sudouserdel-ruser19$sudouserdel--removeuser203.强制删除用户账户【-f/--force】$sudouserdel-fuser1$sudouserdel--force......
  • 25从零开始用Rust编写nginx,序列化之serde是如何工作的
    wmproxywmproxy已用Rust实现http/https代理,socks5代理,反向代理,静态文件服务器,四层TCP/UDP转发,内网穿透,后续将实现websocket代理等,会将实现过程分享出来,感兴趣的可以一起造个轮子项目地址国内:https://gitee.com/tickbh/wmproxygithub:https://github.com/tickbh/wmproxy序......
  • serdes的RAM
    serdesIP内部有RAM吗?是的,serdes内部有RAM进行数据读写。同时部分内部带有大的RAM存放FW,眼图,算法采集的数据。部分需要在外部加RAM一般是8K,16K,32K,64K大小。多个物理IP之间不能共享RAM,同时RAM比较大,不能用REG进行搭建。这些RAM一般和IP内部的MCU直接相连,初始时将FW写入的......
  • 一个参数解决userdel无法删除已存在用户的问题
    最近人行委派机构正在对公司额度系统进行检测,在检测要求中就有一项是这样的:删除系统内无用账号。按照这个要求,我立马对系统内无用账号进行了删除处理。在删除过程中遇到了无法删除账号的问题,以删除postfix为例。[Security@GeekDevOps~]$sudouserdel-rpostfixuserdel:userpo......