使用LOAD DATA導入本地數據
更新時間 2025-03-27 10:41:18
最近更新時間: 2025-03-27 10:41:18
分享文章
本節介紹了數據導入相關問題與處理方法。
此章節介紹如何通過LOAD DATA將本地數據導入TaurusDB。
語法
LOAD DATA LOCAL
INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
]
[LINES
[TERMINATED BY 'string']
]
[IGNORE number {LINES | ROWS}]
[(col_name_or_user_var
[, col_name_or_user_var] ...)]
參數
參數
- file_name :要導入的本地文件的路徑。
- REPLACE | IGNORE : 指定遇到重復記錄是替換還是忽略。
- tbl_name :要導入的目標表名。
- CHARACTER SET charset_name : 指定文件的編碼,建議和TaurusDB實例上的編碼一致,否則可能亂碼。
- FIELDS TERMINATED BY 'string' : 用來指定每列之間的分割符號,默認值為 \t 。
- [OPTIONALLY] ENCLOSED BY 'char' : 用來忽略數據源字段中的符號。
- LINES TERMINATED BY 'string' :可以指定行之間的換行符,默認值為 \n 。
說明有些windows上的文本文件的換行符可能為\r\n,由于是不可見字符,請仔細檢查。
- IGNORE number LINES :設置導入數據時忽略開始的某幾行。
- (column_name_or_user_var,...) :設置導入的列,如果不設置,默認按照列的順序來導入數據。
- 更多參數參考MySQL的官方文檔說明。其他參數的先后順序不能亂,順序參考。
標準示例
前提條件:
- 服務端必須開啟local_infile開關,在目標實例的基本信息頁面,進入參數修改頁面里將此參數修改為ON。
- 客戶端必須開啟local-infile開關,在my.cnf中配置local-infile或連接數據庫使用 --local-infile=1 參數。
[mysql]
local-infile
- 將本地文件qq.txt中的數據導入test表中,qq.txt文件共有5行數據,列分隔符為',',行分隔符'\n',內容如下:
1,a
2,b
3,c
4,d
5,"e"
- 創建對應表test,sql如下:
CREATE TABLE test (
`id` int NOT NULL,
`a` varchar(4) NOT NULL,
PRIMARY KEY (`id`)
);
- 在客戶端中執行LOAD DATA命令將qq.txt文件中的數據導入到test表中,設置字符集為 utf8,忽略數據源字段中的雙引號。
mysql> LOAD DATA LOCAL INFILE '/data/qq.txt' IGNORE INTO TABLE test CHARACTER SET 'utf8' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
Query OK, 5 rows affected, 1 warning (0.00 sec)
Records: 5 Deleted: 0 Skipped: 0 Warnings: 1
mysql> select * from test;
+----+---+
| id | a |
+----+---+
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
| 5 | e |
+----+---+
5 rows in set (0.00 sec)
注意
?數據導入階段會在一定程度上影響TaurusDB實例性能,請選擇在業務低峰時間導入。
建議不要同時發起多個LOAD DATA請求。多個LOAD DATA同時進行,數據高并發寫入,表鎖競爭以及系統IO搶占會影響總體效率,可能會出現SQL事務超時現象,導致LOAD DATA全部失敗。