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','')

簡單吧😆


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM