处理 hive 中的多行记录

Posted

技术标签:

【中文标题】处理 hive 中的多行记录【英文标题】:to handle multi line records in hive 【发布时间】:2018-02-07 15:57:41 【问题描述】:

我在 CSV 文件中有类似这样的数据:

1|abc|"Hello,
how are you"|pqr
2|xyz|I am fine|tuv
3|hjd|what abt you|klf

您可以看到我们在 CSV 中有一条多行记录。尽管我可以将它加载到 hive 表中。但它不会向我显示正确的结果。 如何处理多行记录以加载到配置单元中

【问题讨论】:

使用字段分隔符为 | (管道) 那不会帮助伙伴。我试过这个。问题在于多行记录 你考虑过使用 Spark 吗? 如果有帮助,请检查我的答案并点赞/接受。 【参考方案1】:

Hive 适用于结构化数据集,其中列序列和分隔符定义明确。在您的情况下,EOL 字符是行分隔符,也可以出现在数据集中。因此,数据是半结构化的。

你有几个选择:

    如果文件是由任何其他程序生成的,您应该 将行分隔符更改为换行符以外的其他内容。最好的 实践是使用 Ctrl+A 作为列分隔符和 Ctrl+B 作为行分隔符。

    如果选项 1 不可行,请使用自定义记录读取器实现编写 map-reduce,其中记录读取器可以确定一条记录的边界(即选择一条完整记录的逻辑)。在 map reduce 程序中重新格式化记录以输出用 Ctrl+A(列分隔符)和 Ctrl+B 分隔的记录kbd>(行分隔符)。现在,您可以在 hive 中加载文件了。

【讨论】:

以上是关于处理 hive 中的多行记录的主要内容,如果未能解决你的问题,请参考以下文章

SQL实现将多行记录合并成一行

SQL实现将多行记录合并成一行

SQL实现将多行记录合并成一行

SQL实现将多行记录合并成一行

SQL实现将多行记录合并成一行

SQL实现将多行记录合并成一行