Skip to content

使用 DataX 将数据写入 MatrixOne

本文介绍如何使用 DataX 工具将 Oracle 数据离线写入 MatrixOne 数据库。

开始前准备

在开始使用 DataX 将数据写入 MatrixOne 之前,需要完成安装以下软件:

操作步骤

使用 Oracle 的 scott 用户

本次使用 Oracle 中用户 scott 来创建表(当然也可以用其他用户),在 Oracle 19c 中,scott 用户需要手动创建,可以使用 sqlplus 工具通过命令将其解锁。

sqlplus / as sysdba
create user scott identified by tiger;
grant dba to scott;

后续就可以通过 scott 用户登录访问:

sqlplus scott/tiger

创建 Oracle 测试数据

在 Oracle 中创建 employees_oracle 表:

create table employees_oracle(
  id number(5),
  name varchar(20)
);
--插入示例数据:
insert into employees_oracle values(1,'zhangsan');
insert into employees_oracle values(2,'lisi');
insert into employees_oracle values(3,'wangwu');
insert into employees_oracle values(4,'oracle');
-- 在 sqlplus 中,默认不退出就不会提交事务,因此插入数据后需手动提交事务(或通过 DBeaver 等工具执行插入)
COMMIT;

创建 MatrixOne 测试表

由于 DataX 只能同步数据,不能同步表结构,所以在执行任务前,我们需要先在目标数据库(MatrixOne)中手动创建好表。

CREATE TABLE `oracle_datax` (
     `id` bigint(20) NOT NULL,
     `name` varchar(100) DEFAULT NULL,
      PRIMARY KEY (`id`)
) ;

创建作业配置文件

DataX 中的任务配置文件是 json 格式,可以通过下面的命令查看内置的任务配置模板:

python datax.py -r oraclereader -w matrixonewriter

进入到 datax/job 路径,根据模板,编写作业文件 oracle2mo.json

{
  "job": {
    "setting": {
      "speed": {
        "channel": 8
      }
    },
    "content": [
      {
        "reader": {
          "name": "oraclereader",
          "parameter": {
            "username": "scott",
            "password": "tiger",
            "column": [
              '*'
            ],
            "connection": [
              {
                "table": [
                  "employees_oracle"
                ],
                "jdbcUrl": [
                  "jdbc:oracle:thin:@xx.xx.xx.xx:1521:ORCLCDB"
                ]
              }
            ]
          }
        },
        "writer": {
          "name": "matrixonewriter",
          "parameter": {
            "writeMode": "insert",
            "username": "root",
            "password": "111",
            "column": [
              '*'
            ],
            "connection": [
              {
                "jdbcUrl": "jdbc:mysql://xx.xx.xx.xx:6001/test",
                "table": [
                  "oracle_datax"
                ]
              }
            ]
          }
        }
      }
    ]
  }
}

启动 datax 作业

python /opt/module/datax/bin/datax.py /opt/module/datax/job/oracle2mo.json

查看 MatrixOne 表中数据

mysql> select * from oracle_datax;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
|    3 | wangwu   |
|    4 | oracle   |
+------+----------+
4 rows in set (0.00 sec)