目前在用的是社群版的infobright,不支援DML功能,隻能用LOAD DATA方式導入資料。
如果中繼資料中有特殊控制字元,導入過程中經常會報錯,很是惱火。應對政策有兩種方法:
-
設定Reject File
導入之前,設定 @BH_REJECT_FILE_PATH 和 @BH_ABORT_ON_COUNT 就可以忽略多少條導入失敗的記錄,并且将這些記錄儲存在指定檔案
/** when the number of rows rejected reaches 10, abort process **/
set @BH_REJECT_FILE_PATH = '/tmp/reject_file';
set @BH_ABORT_ON_COUNT = 10;
BH_ABORT_ON_COUNT 設定為 -1 的話,表示永不忽略。
也可以設定 BH_ABORT_ON_THRESHOLD 選項,該選項表示有最多多少百分比的資料允許被忽略,是以該選項的值是小數格式,例如 BH_ABORT_ON_THRESHOLD = 0.03(表示3%)
-
導出時指定結束符
此外,還可以在導出資料時制定結束符,并且設定忽略哪些轉義字元(\、"、' 等字元),例如:
select fields_list... into outfile '/tmp/outfile.csv' fields terminated by '||' ESCAPED BY '\\' lines terminated by '\r\n' from mytable;
-
或者,将行間隔符設定為其他特殊辨別,例如:
select fields_list... into outfile '/tmp/outfile.csv' fields terminated by '||' ESCAPED BY '\\' lines terminated by '$$$$$' from mytable;
當然了,這種情況下,實際資料行中就不能存在 "$$$$$" 這個值了,否則會被當成換行辨別。