本文介紹在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;
結果如下:
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)