Doris专题16- 数据导入-MySQL Load

Doris专题16- 数据导入-MySQL Load

1. 概述

MySQL Load 是 Apache Doris 中一种同步导入方式,通过 MySQL 协议的 LOAD DATA 语法导入本地文件。

特点

  • 同步执行:执行后立即返回导入结果
  • 原子性:单批任务全部成功或全部失败
  • 适用规模:建议用于 10GB 以下文件
  • 协议兼容:使用标准 MySQL 语法

2. 使用场景与限制

支持格式

  • 客户端本地 CSV 文件
  • 程序数据流

重要限制

-- 空值表示:使用 \N
a, \N, b    -- 中间列为 NULL

-- 空字符串表示:直接置空
a, , b       -- 中间列为空字符串

3. 工作原理

MySQL Load 复用 Stream Load 的导入能力,流程如下:

4. 快速上手

前置检查

需要目标表的 INSERT 权限:

GRANT INSERT ON database.table TO 'user';

完整示例

  1. 准备测试数据 (client_local.csv)
1,10
2,20
3,30
4,40
5,50
6,60
  1. 连接客户端(必须使用 --local-infile
mysql --local-infile -h <fe_ip> -P <fe_query_port> -u root -D testdb
  1. 创建测试表
CREATE TABLE testdb.tl (
    pk INT,
    v1 INT SUM
) AGGREGATE KEY (pk)
DISTRIBUTED BY hash (pk);
  1. 执行导入命令
LOAD DATA LOCAL
INFILE 'client_local.csv'
INTO TABLE testdb.tl
COLUMNS TERMINATED BY ','
LINES TERMINATED BY '\n';

结果查看

成功结果

Query OK, 6 row affected (0.17 sec)
Records: 6 Deleted: 0 Skipped: 0 Warnings: 0

失败处理

-- 查看具体错误信息
SHOW LOAD WARNINGS WHERE label='b612907c-***f4-4ac2-82fe-107ece655f0f';

5. 完整语法参考

基础语法

LOAD DATA LOCAL
INFILE '<load_data_file>'
INTO TABLE [<db_name>.][<table_name>]
[PARTITION (partition_name[, ...])]
[COLUMNS TERMINATED BY '<column_terminated_operator>']
[LINES TERMINATED BY '<line_terminated_operator>']
[IGNORE <ignore_lines> LINES]
[(col_name_or_user_var[, ...])]
[SET col_name=[expr | DEFAULT], ...]
[PROPERTIES (key1 = value1[, ...])]

参数说明

参数 说明 默认值
max_filter_ratio 最大过滤率 (0-1) 0
timeout 超时时间(秒) 600
strict_mode 严格模式 false
timezone 时区 +08:00
exec_mem_limit 内存限制 2GB
trim_double_quotes 裁剪外层双引号 false
enclose 包围符 -
escape 转义符 -

6. 实用示例

6.1 设置超时时间

LOAD DATA LOCAL
INFILE 'testData'
INTO TABLE testDb.testTbl
PROPERTIES ("timeout"="100");

6.2 设置容错率

LOAD DATA LOCAL
INFILE 'testData'
INTO TABLE testDb.testTbl
PROPERTIES ("max_filter_ratio"="0.2");

6.3 列映射

LOAD DATA LOCAL
INFILE 'testData'
INTO TABLE testDb.testTbl
(k2, k1, v1);  -- 调整列顺序

6.4 指定分隔符

LOAD DATA LOCAL
INFILE 'testData'
INTO TABLE testDb.testTbl
COLUMNS TERMINATED BY ','
LINES TERMINATED BY '\n';

6.5 指定分区

LOAD DATA LOCAL
INFILE 'testData'
INTO TABLE testDb.testTbl
PARTITION (p1, p2);  -- 只导入到指定分区

6.6 设置时区

LOAD DATA LOCAL
INFILE 'testData'
INTO TABLE testDb.testTbl
PROPERTIES ("timezone"="Africa/Abidjan");

6.7 内存限制

LOAD DATA LOCAL
INFILE 'testData'
INTO TABLE testDb.testTbl
PROPERTIES ("exec_mem_limit"="10737418240");  -- 10GB

7. 注意事项

  1. 连接参数:必须使用 --local-infileallowLoadLocalInfile=true
  2. 文件大小:建议单个文件 < 10GB
  3. 取消操作:无法手动取消,超时或错误后自动取消
  4. 错误排查:使用 SHOW LOAD WARNINGS 查看详细错误
  5. 数据格式:严格区分 NULL 和空字符串

8. 总结

MySQL Load 提供了熟悉且强大的数据导入方式,特别适合:

  • 小规模数据快速导入
  • 需要同步确认结果的场景
  • 从 MySQL 生态迁移的用户
转载请说明出处内容投诉
CSS教程网 » Doris专题16- 数据导入-MySQL Load

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买