Hive中的FileFormat、RowFormat和SerDe总结

本文详细解释了Hive如何通过InputFormat读取HDFS数据,利用SerDe进行字段解析,以及FileFormat(如textfile、orc等)的角色。重点介绍了RowFormat和SerDe在数据格式处理中的重要性。
摘要由CSDN通过智能技术生成

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。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用:写:Row object=> Serializer=> <key,value>=> OurputFormat => HDFS File。 引用:常见的文件存储格式有行式存储,列式存储和混合式存储。在大数据系统,列式存储和混合式存储更常见。对于HDFS这样的文件存储系统来说,其实并不关心存储的是什么形式的存储文件。只是在解析数据时,需要知道是什么类型的文件。例如Hive对RCFile和ORCFile的支持就在于,Hive知道这两种文件数据的存储方式,并正确地解析数据并查询。 引用:FileFormat一般用于创建表的时候创建,或者修改表[分区]的时候使用使用。 根据以上引用内容,可以得出结论:fileformat是指文件的存储格式,用于描述数据在文件的组织方式,例如行式存储、列式存储、混合式存储等。在Hive,可以通过指定fileformat来创建表或修改表的存储格式,常见的fileformat包括ORC、Parquet、Avro等。而Hive SerDe则是用于数据的序列化和反序列化,用于将数据存储到文件或从文件读取数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [HiveFileFormats & SerDe,包含 ORC、Parquet、Json、Avro、正则等格式](https://blog.csdn.net/shufangreal/article/details/106732734)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [大数据系统常用文件存储格式File format](https://blog.csdn.net/OnlyQi/article/details/99594667)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值