【发布时间】:2017-11-06 08:46:52
【问题描述】:
我正在尝试在现有的 avro 文件上创建一个外部配置单元表。以下是查询。
CREATE EXTERNAL TABLE sample
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
location '/user/sshusr/sample/'
TBLPROPERTIES ('avro.schema.url'='/user/sshusr/avsc_files/sample.avsc');
表已创建,我可以使用简单的 SELECT 查询查看数据。但是,avro 中很少有列可以有换行符。例如,cmets 列数据可以有段落(带有换行符)。因此,数据没有正确加载到表中(无论 avro serde 在列中遇到换行符的任何位置,它都将其视为下一条记录/行)。我在互联网上找不到任何示例。有什么办法可以解决这种情况吗?
提前致谢。
【问题讨论】:
-
您是否使用 sqoop 导入来获取此 '/user/sshusr/avsc_files/sample.avsc' 数据?如果是这样,您可以在导入时使用 --hive-delims-replacement "" 作为参数之一。
-
您好,感谢您的回复。我使用的
avsc文件用于加载表模式。avsc文件没有问题。唯一的问题是实际的表数据。单元格中的数据包含换行符。因此,serde 无法正确反序列化 avro。
标签: hive avro hive-serde