首批通过分布式安全可靠测评,为关键业务系统打造
使用 LOAD DATA 语句旁路导入数据
更新时间:2024-09-10 11:46:15
LOAD DATA 语句通过 Hint 使用 direct 来表示是否走旁路导入。
使用限制
- 不能两个语句同时写一个表,因为导入的过程中会先加表锁。
- 不支持在触发器(Trigger)使用。
- 支持
lob类型,但是性能比较差,lob会走原来事务写入数据的路径。 - 不能在多行事务中运行。
- OceanBase 数据库 V4.1.0 版本不建议开启 Online 统计信息收集,建议在
LOAD DATA完成后,手动收集统计信息。有关收集统计信息的详细信息,请参见 在线统计信息收集 和 手动统计信息收集。
语法
LOAD DATA /*+ direct(need_sort,max_error) parallel(N) */ INFILE 'file_name' ...
更多 LOAD DATA 语法的信息,请参见 LOAD DATA。
参数解释:
| 参数 | 描述 |
|---|---|
| direct | 表示走旁路导入。 |
| need_sort | 表示是否需要 OceanBase 数据库对数据进行排序。 值为 bool 类型:
|
| max_error | 表示最大的容忍的错误的行数。值为 INT 类型,超过这个数值LOAD DATA 会报失败。 |
| parallel(N) | 加载数据的并行度,必填项,取值是大于 1 的整数。 |
示例
登录到要连接 OBServer 节点所在的机器,在
/home/admin目录下创建测试数据。说明
OceanBase 数据库中的
LOAD DATA语句仅支持加载 OBServer 节点本地的输入文件。因此,需要在导入之前将文件拷贝到某台 OBServer 上。[xxx@xxx /home/admin]# ssh admin@10.10.10.1 [admin@xxx /home/admin]# vi tbl1.csv 1,11 2,22 3,33设置导入的文件路径。
使用管理员用户(MySQL 模式:
root;Oracle 模式:SYS)登录到租户,设置系统变量secure_file_priv,配置导入或导出文件时可以访问的路径。注意
由于安全原因,只能使用通过本地连接的 Client 执行修改
secure_file_priv的 SQL 语句。详细信息请参见 secure_file_priv。登录到要连接 OBServer 节点所在的机器。
[xxx@xxx /home/admin]# ssh admin@10.10.10.1连接租户
mysql001。V4.1.0 BP3 之前版本执行以下命令,使用 OBClient 客户端通过直连的方式连接租户
mysql001。obclient -h10.10.10.1 -P2881 -uroot@mysql001 -p****** -AV4.1.0 BP3 及之后版本执行以下命令,通过本地 Unix Socket 连接方式连接租户
mysql001。obclient -S /home/admin/oceanbase/run/sql.sock -uroot@mysql001 -p******设置导入路径为
/home/admin。obclient [(none)]> SET GLOBAL secure_file_priv = "/home/admin"; Query OK, 0 rows affected
重新连接数据库后,使用
LOAD /*+ direct */ DATA语句导入数据。obclient [test]> CREATE TABLE tbl1(col1 INT PRIMARY KEY,col2 INT); Query OK, 0 rows affected obclient [test]> SELECT * FROM tbl1; Empty set obclient [test]> LOAD DATA /*+ direct(true,1024) parallel(16) */INFILE '/home/admin/tbl1.csv' INTO TABLE tbl1 FIELDS TERMINATED BY ','; Query OK, 3 rows affected Records: 3 Deleted: 0 Skipped: 0 Warnings: 0 obclient [test]> SELECT * FROM tbl1; +------+------+ | col1 | col2 | +------+------+ | 1 | 11 | | 2 | 22 | | 3 | 33 | +------+------+ 3 rows in set