本文介紹在PolarDB-X中使用load data進行資料導入的相關限制和注意事項。
注意事項
- 使用load data進行資料導入時,load data語句并非一個事務,是以各種原因(如資料庫當機等)可能導緻部分資料插入,剩餘部分未插入。
- 用戶端需要開啟local-infile。
文法
LOAD DATA
[LOCAL]
INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number {LINES | ROWS}]
[(col_name_or_mask [, col_name_or_mask] ...)]
參數說明
參數名稱 | 說明 |
LOAD DATA [LOCAL] INFILE | 檔案位于服務端還是client端。 |
file_name | 使用相對路徑時,為相對于用戶端啟動時的路徑。 |
REPLACE | 導入資料時,遇到主鍵重複則強制用目前資料覆寫已有資料。 |
IGNORE | 導入資料時,遇到主鍵重複則自動忽略該行。 |
[FIELDS] TERMINATED BY 'string' | 定義每行資料的分隔符,預設為\t。 |
[FIELDS] ENCLOSED BY 'char' | 每列資料的包圍符。例如,某一列資料為"test",定義enclosed by '"'後,導入資料時先将"test"前後的"移除,然後再導入資料。 |
[LINES] TERMINATED BY 'string' | 定義行分隔符,預設為\n。 |
IGNORE number LINES | 導入資料時忽略開始的某幾行。例如, ,導入資料時忽略第一行資料。 |
(col_name_or_mask [, col_name_or_mask] ...) |
|
示例
建立測試表:
CREATE TABLE test ( a int(11) NOT NULL DEFAULT '0', b varchar(8) NOT NULL, PRIMARY KEY (a) ) DBPARTITION by hash(a);
本地待導入檔案:
x,y
test1,2
test2,3
test3,4
test4,5
test5,6
test7,8
test8,9
load data語句:
LOAD DATA LOCAL INFILE '~/test.txt' IGNORE INTO TABLE test FIELDS TERMINATED BY ',' LINES STARTING BY 'test' TERMINATED BY '\n' IGNORE 1 LINES;
結果如下:
mysql> select * from test order by a;
+------+------+
| a | b |
+------+------+
| 1 | 2 |
| 2 | 3 |
| 3 | 4 |
| 4 | 5 |
| 5 | 6 |
| 7 | 8 |
| 8 | 9 |
+------+------+
7 rows in set (0.02 sec)