首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Infobright 導入數據特殊字符報錯三大解決方案

     編輯:MySQL 資料庫相關知識

背景

Infobright 社區版不支持 DML,僅支持 LOAD DATA 導入。源數據含控制字符(\x00-\x1F)導入頻繁報錯。

方案一:設置拒絕文件容忍錯誤行

-- 設置拒絕文件路徑
SET @BH_REJECT_FILE_PATH = '/tmp/reject_file';

-- 容忍 10 行錯誤後中止
SET @BH_ABORT_ON_COUNT = 10;

-- 永不中止(慎用)
SET @BH_ABORT_ON_COUNT = -1;

-- 或按比例容忍(3%)
SET @BH_ABORT_ON_THRESHOLD = 0.03;

導入失敗行寫入拒絕文件,成功行正常入庫,事後分析拒絕文件修復補載。

方案二:導出時指定特殊分隔符與轉義

SELECT fields_list
INTO OUTFILE '/tmp/outfile.csv'
FIELDS TERMINATED BY '||' 
ESCAPED BY '\\'
LINES TERMINATED BY '\r\n'
FROM mytable;
  • TERMINATED BY '||':雙管道符作為列分隔,極低衝突概率
  • ESCAPED BY '\\':指定反斜杠為轉義字符
  • LINES TERMINATED BY '\r\n':標準 Windows 換行

方案三:自定義行分隔符(極罕見衝突)

SELECT fields_list
INTO OUTFILE '/tmp/outfile.csv'
FIELDS TERMINATED BY '||' 
ESCAPED BY '\\'
LINES TERMINATED BY '$$$$$\r\n'
FROM mytable;

前提:業務數據中**絕對不存在** $$$$$\r\n 序列。

方案對比與選型建議

方案優點缺點適用場景
拒絕文件零侵入源數據、自動記錄異常數據不完整、需人工補載少量髒數據、急需上線
特殊分隔符數據完整、標準化需控制導出端、分隔符需極罕見常規導入、可控導出
自定義行分隔極低衝突需業務承諾無衝突序列極髒數據、其他方案失效

最佳實踐組合拳

  1. 導出端:FIELDS TERMINATED BY '\x1f' ESCAPED BY '\x1e' LINES TERMINATED BY '\x1d\n'(使用 ASCII 控制字符 \x1f=US, \x1e=RS, \x1d=GS,極不可能出現在業務文本)
  2. 導入端:匹配相同分隔符 FIELDS TERMINATED BY '\x1f' ESCAPED BY '\x1e' LINES TERMINATED BY '\x1d\n'
  3. 兜底:啟用 @BH_REJECT_FILE_PATH + @BH_ABORT_ON_THRESHOLD=0.01

Infobright 導入參數速查

變量說明
@BH_REJECT_FILE_PATH拒絕文件路徑
@BH_ABORT_ON_COUNT允許拒絕行數,-1=不限
@BH_ABORT_ON_THRESHOLD允許拒絕比例 (0.01=1%)
@BH_FIXED_WIDTH固定寬度模式
@BH_DATA_FORMAT數據格式:txt/csv
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved