Infobright 社區版 (ICE) 僅支援 LOAD DATA 導入,不支援 DML。當源數據包含控制字符、異常轉義符時,導入頻繁失敗。本文提供三大應對策略:拒絕文件容錯、導出端轉義控制、行分隔符重定義,助您實現高容錯、零亂碼導入。
在導入前設定會話變量,將錯誤行導向拒絕文件,不中斷主流程:
-- 設定拒絕文件路徑 SET @BH_REJECT_FILE_PATH = '/tmp/reject_file'; -- 允許最多 10 行失敗後中止,-1 表示永不中止 SET @BH_ABORT_ON_COUNT = 10; -- 或使用百分比閾值:允許 3% 數據失敗 SET @BH_ABORT_ON_THRESHOLD = 0.03;
導入完成後檢查 /tmp/reject_file 分析髒數據,修正源端再重導。
在導出數據時 (如從 MySQL 導出至 CSV) 顯式定義字段終止符、行終止符、轉義字符,避開數據衝突:
SELECT col1, col2, col3 INTO OUTFILE '/tmp/outfile.csv' FIELDS TERMINATED BY '||' -- 雙竄線作為字段分隔,極少出現在正常文本 ESCAPED BY '\\' -- 反斜線轉義 LINES TERMINATED BY '\r\n' -- 標準 Windows 換行 FROM source_table;
關鍵點:
TERMINATED BY 選用多字符組合 (如 ||, @@, ###) 大幅降低衝突概率。ESCAPED BY 明確指定轉義字符,防止引號、換行符破壞結構。FIELDS TERMINATED BY '||' ESCAPED BY '\\\\' LINES TERMINATED BY '\r\n'。當數據中包含任意可見字符、甚至雙竄線時,使用極低概率出現的字串作為行結束標記:
SELECT col1, col2 INTO OUTFILE '/tmp/outfile.csv' FIELDS TERMINATED BY '||' ESCAPED BY '\\' LINES TERMINATED BY '$$$$$\r\n' -- 5 個 $ + CRLF,極難衝突 FROM source_table;
前提:業務數據中絕不出現 $$$$$\r\n。導入時同樣指定 LINES TERMINATED BY '$$$$$\r\n'。
SET @bh_dataformat = 'txt_variable' (IB Loader 變長文本) → binary (二進制最快) → mysql (MySQL Loader 容錯最強但最慢)。brighthouse.ini 調大 LoaderMainHeapSize;啟用並發導入多線程寫入。txt_variable < binary < mysql,生產首選 binary 平衡速度與容錯。CHARSET=utf8 (或 utf8mb4)。iconv -f gbk -t utf8)。SET NAMES utf8。SELECT HEX(col) FROM tbl LIMIT 10 檢查字節序列。Infobright 導入特殊字符報錯,核心在於「分隔符衝突」與「轉義失效」。優先用 策略二 (多字符分隔符 + 顯式轉義) 解決 90% 場景;極端髒數據啟用 策略三 (自定義行分隔符);配合 策略一 (拒絕文件) 實現「不中斷、可審計、可重導」的工程化導入流程。