更新时间:2024-09-05 GMT+08:00

使用LOAD DATA导入本地数据

此章节介绍如何通过LOAD DATA将本地数据导入GaussDB(for MySQL)。

语法

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 : 指定文件的编码,建议和GaussDB(for MySQL)实例上的编码一致,否则可能乱码。
  • 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的load data infile官方文档说明。其他参数的先后顺序不能乱,顺序参考官方说明

标准示例

前提条件:
  • 服务端必须开启local_infile开关,在目标实例的基本信息页面,进入参数修改页面里将此参数修改为ON。
  • 客户端必须开启local-infile开关,在my.cnf中配置local-infile或连接数据库使用 --local-infile=1 参数。
    [mysql]
    local-infile
  1. 将本地文件qq.txt中的数据导入test表中,qq.txt文件共有5行数据,列分隔符为',',行分隔符'\n',内容如下:
    1,a
    2,b
    3,c
    4,d
    5,"e"
  2. 创建对应表test,sql如下:
    CREATE TABLE test (
    `id` int NOT NULL,
    `a` varchar(4) NOT NULL, 
    PRIMARY KEY (`id`) 
    );
  3. 在客户端中执行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)
  1. 数据导入阶段会在一定程度上影响GaussDB(for MySQL)实例性能,请选择在业务低峰时间导入。
  2. 建议不要同时发起多个LOAD DATA请求。多个LOAD DATA同时进行,数据高并发写入,表锁竞争以及系统IO抢占会影响总体效率,可能会出现SQL事务超时现象,导致LOAD DATA全部失败。