Below you will find pages that utilize the taxonomy term “Apache Hive”
mggg's 博客
Apache Hive实现自定义存储格式
Apache Hive实现自定义存储格式 背景 在某些业务场景中,下游处理系统需要直接处理数据文件。虽然Hive官方支持text, orc, parquet等格式,但为了应对更多样化的业务场景,学习如何开发自定义存储格式变得十分重要。Hive目前提供了ROW FORMAT SERDE机制来实现这一需求。
ROW FORMAT SERDE Hive的ROW FORMAT SERDE是一个关键的数据格式化概念,它定义了如何解析和映射存储在Hive表中的数据。SERDE代表序列化和反序列化,这涉及到数据在写入Hive表时和从Hive表读取时的转换过程。
快速开始 考虑一种业务场景,我们希望数据本身没有列分隔符,而是采用固定宽度的字段。在Hive中,设置列分隔符为空字符串是不被直接支持的。为了解决这个问题,接下来将实现一个自定义的SerDe。
首先从结果出发:
代码打包后的jar名称为 hive-fixed-serde-1.0-SNAPSHOT.jar
添加自定义serde jar包
add jar hdfs:///path/hive-fixed-serde-1.0-SNAPSHOT.jar 建表指定实现类org.apache.hadoop.hive.serde2.fixed.FixedLengthTextSerDe, 且每个字段定长分别为10, 5, 8 CREATE TABLE fixed_length_table ( column1 STRING, column2 STRING, column3 STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.fixed.FixedLengthTextSerDe' WITH SERDEPROPERTIES ( "field.lengths"="10,5,8" ) STORED AS TEXTFILE; 当写入数据不满足定长时候, 向后补充空格, 写入 insert into fixed_length_table values ("1", "1", "1") 实际文件内容:
1 1 1 实现 FixedLengthTextSerDe 继承自org.apache.hadoop.hive.serde2.AbstractSerDe,需要实现以下方法:
initialize: 创建建表语句中field.lengths的配置。 getSerDeStats: 返回统计信息。 deserialize: 将文件内容里的数据转换为Hive的ROW。 serialize: 将Hive的ROW转换为实际写文件的内容。本次目的是将数据补位,按空格补充到规定要求的定长。 getSerializedClass: 仅针对text格式。 完整代码:
mggg's Blog
Implementing Custom Storage Formats in Apache Hive
Implementing Custom Storage Formats in Apache Hive Background In certain business scenarios, downstream processing systems need to handle data files directly. Although Hive officially supports formats like text, orc, parquet, etc., learning how to develop custom storage formats is crucial for addressing a more diverse range of business scenarios. Hive currently offers the ROW FORMAT SERDE mechanism for this purpose.
ROW FORMAT SERDE The ROW FORMAT SERDE in Hive is a key data formatting concept, defining how to parse and map data stored in Hive tables.