Title

flink或datax同步hbase到其他库错行问题

1 问题描述

1.1 datax

当前业务数据统一存储在hbase,某一天oracle/mysql需要一些同步数据时,我们用datax处理hbase到oracle/mysql时出现错行问题,即一条数据错成两条(或多条)来处理

1.2 doris

业务存储切换时,切换到doris时,由hbase的部分数据同步到doris中也存在了错行问题(flink处理),报错如下

Reason: actual column number is less than schema column number. actual number: 10 column separator: [$], line delimiter: [
], schema number: 15; . src line: [2105150472$3$3$2021-05-15$xxx$FSH$2.31$mIU/mL$$|3.5-12.5|4.7-21.5|1.7-7.7|25.8-134.8]; 
Reason: actual column number is less than schema column number. actual number: 6 column separator: [$], line delimiter: [
], schema number: 15; . src line: [$$$$$]; 

doris数据表数据使用$分割,有15列,可以看到数据接分成两份,从而导致同步失败

2 问题发现

2.1 hbase主键查询

hbase(main):013:0> get 'xxxtable','2021-05-15--210515047233'
COLUMN                                     CELL
 f:DCNY                                    timestamp=1635995303552, value=
 f:DCNY_TYPE                               timestamp=1635995303552, value=
 f:MEMO                                    timestamp=1635995303552, value=
 f:MIC                                     timestamp=1635995303552, value=
 f:RAD                                     timestamp=1635995303552, value=
 f:REF_VAL                                 timestamp=1635995303552, value=|3.5-12.5|4.7-21.5|1.7-7.7|25.8-134.8\x0A
.....

可以发现REF_VAL存在 \x0A,即换行符

2.2 flink的sql-client查询

这里我从REF_VAL的length为10开始

select SUBSTR(REF_VAL,10),RSLT_UNT,MIC,RAD from xxx where rowkey='2021-05-15--210515047233';

image-20211217140744358

可以看到数据出现错行

3 解决方案

3.1 数据处理

(耗时长,数据处理有风险)

处理掉存在换行的数据

3.2 函数处理

替换掉出现\n的字段

REGEXP_REPLACE(xxx,'\n','')

简单吧😆

posted @ 2021-12-17 17:02  apeGcWell  阅读(798)  评论(3编辑  收藏  举报