问题描述
Hive LazySimpleSerDe
的具体格式是什么?
像 ParquetHiveSerDe 这样的格式告诉我 Hive 将读取 parquet 格式的 HDFS 文件。
但什么是LazySimpleSerDe
?鉴于 LazySimpleSerDe 用于分隔文件,为什么不将其称为 CommaSepHiveSerDe
或 TabSepHiveSerDe
之类的明确名称?
解决方法
LasySimpleSerde
- 快速简单的 SerDe,它不识别带引号的值,虽然它可以使用不同的分隔符,不仅仅是逗号,默认是 TAB (\t
) .您可以在表 DDL 中指定 STORED AS TEXTFILE
,将使用 LasySimpleSerDe
。对于带引号的值,使用 OpenCSVSerDe,它不如 LasySimpleSerDe
快,但可以正确处理带引号的值。
LasySimpleSerDe 为了性能而简单,它也以懒惰的方式创建对象,以提供更好的性能,这就是为什么它在可能的情况下更可取(对于文本文件)。
使用竖线分隔 (|
) 文件格式查看此示例:https://stackoverflow.com/a/68095278/2700344
show create table
命令将 serde 类打印为 org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
,STORED AS TEXTFILE 为 shortcut。