全部產品
Search
文件中心

PolarDB:使用LOAD DATA語句匯入資料

更新時間:Jul 06, 2024

本文介紹在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

匯入資料時忽略開始的某幾行。例如,IGNORE 1 LINES,匯入資料時忽略第一行資料。

(col_name_or_mask [, col_name_or_mask] ...)

  1. 設定匯入的列,如果不設定,預設按照表中的列順序來匯入資料。

  2. 掩蓋掉檔案中的某些列,使檔案中對應列失效,例如,table test(x int, y int),匯入檔案有三列,匯入時使用 (x, @name, y) 則會忽略檔案中的第二列,使用第一列填充x,使用第三列填充y。

樣本

建立測試表:

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)