Hive load外部文件时如何区别分隔符与文本内容

Hive load外部文件时如何区别分隔符与文本内容,第1张

在测试hive的load性能时,我们在建表时指定使用 | 作为分隔符。这样就需要考虑一个问题:如果外部文本中 | 作为文本内容出现时,如何区分到底是分隔符还是清虚文本内容。

首先测试hive是否能智能区分分隔符与文本内容,结果表明:当分隔符与文本内容相同时,会产生数据混淆问题。

SQL如何解决这一问题

参考链接: 如何在sqlldr中导入多字符分隔符文件

SQL中对此的解决办法是采用多字符分隔符,以降低产生数据混淆的概率。

Hive中对这一问题的解决思路与SQL相同

然而hive中默认只支持单字符分割符,如果指定多字符分隔符将会报错。

参考链接: hive如何处理多分隔符数据

hive处理日志,自定义inputformat

hive创建表指定分隔符,不支持多个字符作为分隔符

解决办法:

1. 利用hive自带的序列化/反序列化的方式RegexSe

这种方式稍微复杂一点,对数据的控制能力也要弱一些,它使用正则表达式来匹配和处明橘理数据,性能也会有所影响。但它的优点是可以自定义表属性信息激正团 SERDEPROPERTIES ,在 SerDe 中通过这些属性信息可以有更多的定制行为。

2. 自定义 outputformat 和 inputformat

Hive 的 outputformat/inputformat 与 hadoop 的 outputformat/inputformat 相当类似, inputformat 负责把输入数据进行格式化,然后提供给 Hive,outputformat 负责把 Hive 输出的数据重新格式化成目标格式再输出到文件,这种对格式进行定制的方式较为底层,对其进行定制也相对简单,重写 InputFormat 中 RecordReader 类中的 next 方法即可。

问题信息如下:

在HiveServer2服务所在的ip-186-31-5-190.fayson.com服务器/data目录下创建a.txt数据文件

在cdh04服务器上使用beeline连接ip-186-31-5-190.fayson.com的HiveServer2服务,执行Load命令

总结

大数据视局灶坦频推荐:

腾讯课堂

CSDN

大数据语音推荐:

企业级大数据技术应用

大数据机器学习案例之推荐系辩仿统

自然语桐桐言处理

大数据基础

人工智能:深度学习入门到精通


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12321133.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存