在某些业务场景中,下游处理系统需要直接处理数据文件。虽然 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, 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