使用LOAD DATA语句导入数据

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