在某些业务场景中,下游处理系统需要直接处理数据文件。虽然 Hive 官方支持 text, orc, parquet 等格式,但为了应对更多样化的业务场景,学习如何开发自定义存储格式变得十分重要。Hive 目前提供了ROW FORMAT 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, 8CREATE 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