DataX 是个不错用的数据迁移工具。在实际使用的过程中,我做过各种数据库之间的迁移工作。
如:

  • Hive 到 MySQL
  • MySQL 到 OSS
  • MySQL 到 CVS
  • OSS 到 ClickHouse

其中也遇到过些问题,比如:DataX 是没有通过 jdbc 连接方式读取 hive 数据的 reader,当时没太注意有 rdbmsreader 这个官方提供的通用 RDBMS 读取插件,情急之下就自己根据插件开发规范写了个 hivejdbcreader 插件。至于用 rdbmsreader 插件能不能用 jdbc 方式从 hive 读取数据,因为有了前者至今也没试过。

下面就来说说如何使用 DataX 读取 ClickHouse 中的数据。DataX 只提供了 clickhousewriter,没有提供 clickhousereader。这次没打算直接再写个 ClickHouse 的 reader ,而是打算试试 rdbmsreader 能不能搞定 读取 ClickHouse 的事。首先,看了下 rdbmsreader 的文档,配置什么的基本都是差不多,就不多说了,只是有两个地方需要注意下:

  1. 需要修改 rdbmsreader 插件下的 plugin.json 文件,将 ClickHouse 的驱动类名“ru.yandex.clickhouse.ClickHouseDriver”加到配置文件的 drivers 里面;
  2. 将 ClickHouse 驱动相关的 jar 放到 rdbmsreader 插件下 libs 文件夹中。

在实际用的时候,ClickHouse 驱动使用的是 clickhouse-jdbc-0.2.4.jar,运行的分别报了两次的找不到类,根据提示又放入了 lz4-1.3.0.jar、guava-19.0.jar 两个包,问题搞定了。

两个配置文件如下:

plugin.json

{
  "name": "rdbmsreader",
  "class": "com.alibaba.datax.plugin.reader.rdbmsreader.RdbmsReader",
  "description": "useScene: prod. mechanism: Jdbc connection using the database, execute select sql, retrieve data from the ResultSet. warn: The more you know about the database, the less problems you encounter.",
  "developer": "alibaba",
  "drivers": [
    "dm.jdbc.driver.DmDriver", 
    "com.sybase.jdbc3.jdbc.SybDriver", 
    "com.edb.Driver", 
    "ru.yandex.clickhouse.ClickHouseDriver"
  ]
}

作业配置文件

{
  "job": {
    "setting": {
      "speed": {
        "channel": 4,
        "record": -1,
        "byte": -1,
        "batchSize": 1024
      }
    },
    "content": [{
      "reader": {
        "name": "rdbmsreader",
        "parameter": {
          "username": "aaa",
          "password": "123456",
          "column": [
            "id",
            "station_code"
          ],
          "connection": [{
            "querySql": [
              " SELECT * FROM test_210812 "
            ],
            "jdbcUrl": [
              "jdbc:clickhouse://192.168.11.22:8123/CL_TEST"
            ]
          }],
          "fetchSize": 1024,
          "where": " station_code like '2A%' "
        }
      },
      "writer": {
        "name": "streamwriter",
        "parameter": {
          "print": true
        }
      }
    }]
  }
}

更多推荐