当前位置: 首页 > news >正文

hive表字段里有换行符,导致一行变多行或者字段错乱

文章目录

  • 1,问题
  • 2,产生原因
  • 3,解决办法

1,问题

  • 制作测试数据:hue里面添加hbase表数据,在编辑器里面换行保存即可
  • 问题分析-- 字段内容有换行符,导致内容多一行: https://issues.apache.org/jira/browse/HIVE-1898
    ( LazySimpleSerDe.SerDeParameters --> which eliminates the newline chars during deserialization )
#################### hbase数据:字段有换行符号
hbase(main):001:0> get 'test','r2'
COLUMN                                   CELLf:age                                   timestamp=1599799051999, value=23f:name                                  timestamp=1600840740995, value=test2\x0Atest1\x0Aa\x0Aa\x0Aa\x0Aa
2 row(s) in 0.1930 secondshbase(main):003:0> get 'test','r4'
COLUMN                                   CELLf:id                                    timestamp=1600842800999, value=2f:name                                  timestamp=1600842800999, value=tom1\x0Dtom2\x0Dtom3
2 row(s) in 0.0050 seconds#################### hbase数据外表:hive查询换行
hive> show create table test_hbase_ext;
CREATE EXTERNAL TABLE `test_hbase_ext`(`rowkey` string COMMENT 'from deserializer',`name` string COMMENT 'from deserializer',`age` string COMMENT 'from deserializer')
ROW FORMAT SERDE'org.apache.hadoop.hive.hbase.HBaseSerDe'
STORED BY'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ('hbase.columns.mapping'=':key,f:name,f:age','serialization.format'='1')
TBLPROPERTIES ('hbase.table.name'='test','transient_lastDdlTime'='1600840936')
Time taken: 0.095 seconds, Fetched: 14 row(s)hive> select * from test_hbase_ext where rowkey ='r2';
Stage-Stage-1: Map: 1   Cumulative CPU: 5.51 sec   HDFS Read: 11818 HDFS Write: 26 SUCCESS
Total MapReduce CPU Time Spent: 5 seconds 510 msec
OK
test_hbase_ext.rowkey   test_hbase_ext.name     test_hbase_ext.age
r2      test2   NULL
test1   NULL    NULL
a       NULL    NULL
a       NULL    NULL
a       NULL    NULL
a       23      NULL
Time taken: 22.267 seconds, Fetched: 6 row(s)hive> select * from test_hbase_ext where rowkey ='r4';
Stage-Stage-1: Map: 1   Cumulative CPU: 5.37 sec   HDFS Read: 4368 HDFS Write: 21 SUCCESS
Total MapReduce CPU Time Spent: 5 seconds 370 msec
OK
test_hbase_ext.rowkey   test_hbase_ext.name     test_hbase_ext.age
r4      tom1    NULL
tom2    NULL    NULL
tom3    NULL    NULL
Time taken: 16.522 seconds, Fetched: 3 row(s)
hive>

2,产生原因

#-- 问题原因: (hbaes:\x0A|D  --> hive: data1换行data2换行data3--> 多一行 )
#-- 考虑: hive读取数据时,把数据里的换行转换为MYEOF这种自定义的换行符号
\x0A: 10  ASCII是\n
\x0D: 13  ASCII是\r

3,解决办法

hive(data1MYEOFdata2MYEOFdata3) --> java中间处理环节:string.replaceAll(MYEOF,"\n") —> 数据显示正常

hive> SELECT rowkey,regexp_replace(name,'\r|\n|\r\n','MYEOF') from test_hbase_ext2;
Stage-Stage-1: Map: 1   Cumulative CPU: 5.46 sec   HDFS Read: 4206 HDFS Write: 139 SUCCESS
rowkey  _c1
r1      test
r2      test2MYEOFtest1MYEOFaMYEOFaMYEOFaMYEOFa
r3      tom1MYEOFtom2MYEOFtom3
r4      tom1MYEOFtom2MYEOFtom3
Time taken: 15.117 seconds, Fetched: 4 row(s)

http://www.taodudu.cc/news/show-5435440.html

相关文章:

  • Java并发编程——相关基础概念
  • 【代码随想录算法训练营第37期 第七天 | LeetCode454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和】
  • 【35分钟掌握金融风控策略26】定价策略
  • springboot logback 日志注入安全问题 统一处理
  • 算法提高之矩阵距离
  • Element-UI 快速入门指南
  • mbuf(存储器缓存)详解【转】
  • TCP IP详解卷2之mbuf宏与函数
  • Unix/Linux编程:四种mbuf
  • 2022CTF培训(十三)虚拟化QEMU架构分析QEMU CVE示例分析
  • C++ Primer Plus(第6版) 第3章编程练习
  • 【python-docx 07】使用word样式
  • python读取docx文件,就是如此简单
  • Caused by: java.lang.ClassNotFoundException: freemarker.template.Configuration
  • A component required a bean of type ‘XXX‘ that could not be found 解决办法
  • spring aop 自定义注解配合swagger注解保存操作日志到mysql数据库含(源码)
  • 小而美 | Mac上鲜为人知,但极大提升效率的小工具
  • 防火墙体系结构的组合形式
  • E - B-莲子的机械动力学
  • 需要克服的缺点
  • 高版本springboot整合swagger
  • PHP. 03 .ajax传输XML、 ajax传输json、封装
  • ajax请求php返回xml数据格式,ajax传输的数据格式(XML,json)怎么获取解析
  • JavaScript基础之Ajax总结大全
  • Ajax入门和发送http请求
  • 04-Ajax传输json和XML
  • python网络爬虫——爬虫第三方库的使用(二)
  • ajax使用频率,11-Ajax详解
  • 使用Ajax发送http请求(getpost请求)
  • 人加智能FPGA应用实践-AI快速进化
  • Mac显示证书不受信任或者无效的解决办法
  • Mac | 解决证书不受信任问题
  • Java 解析CA证书 对数据进行签名和验签
  • ca证书 csr_什么是csr证书
  • 招行网银证书不见了
  • 网银的业务学习之道:数字证书的基础知识