Skip to content

TDengine Reader

TDengine Reader 插件用于从涛思公司的 TDengine 读取数据。

前置条件

考虑到性能问题,该插件使用了 TDengine 的 JDBC-JNI 驱动, 该驱动直接调用客户端 API(libtaos.so 或 taos.dll)将写入和查询请求发送到 taosd 实例。因此在使用之前需要配置好动态库链接文件。

首先将 plugin/reader/tdenginereader/libs/libtaos.so.2.0.16.0 拷贝到 /usr/lib64 目录,然后执行下面的命令创建软链接

ln -sf /usr/lib64/libtaos.so.2.0.16.0 /usr/lib64/libtaos.so.1
ln -sf /usr/lib64/libtaos.so.1 /usr/lib64/libtaos.so

示例

TDengine 数据自带了一个演示数据库 taosdemo , 我们从演示数据库读取部分数据并打印到终端

以下是配置文件

{
  "job": {
    "setting": {
      "speed": {
        "channel": 3
      },
      "errorLimit": {
        "record": 0,
        "percentage": 0.02
      }
    },
    "content": {
      "reader": {
        "name": "tdenginereader",
        "parameter": {
          "username": "root",
          "password": "taosdata",
          "beginDateTime": "2017-07-14 10:40:00",
          "endDateTime": "2017-08-14 10:40:00",
          "splitInterval": "1d",
          "connection": {
            "jdbcUrl": "jdbc:TAOS://127.0.0.1:6030/test",
            "querySql": [
              "select * from test.meters where ts <'2017-07-14 10:40:02' and  loc='beijing' limit 10"
            ]
          }
        }
      },
      "writer": {
        "name": "streamwriter",
        "parameter": {
          "print": true
        }
      }
    }
  }
}

将上述配置文件保存为 job/tdengine2stream.json

执行采集命令

执行以下命令进行数据采集

bin/addax.sh job/tdengine2stream.json

命令输出类似如下:

2021-02-20 15:32:23.161 [main] INFO  VMInfo - VMInfo# operatingSystem class => sun.management.OperatingSystemImpl
2021-02-20 15:32:23.229 [main] INFO  Engine -
{
    "content":
        {
            "reader":{
                "parameter":{
                    "password":"*****",
                    "connection":[
                        {
                            "querySql":[
                                "select * from test.meters where ts <'2017-07-14 10:40:02' and  loc='beijing' limit 100"
                            ],
                            "jdbcUrl":[
                                "jdbc:TAOS://127.0.0.1:6030/test"
                            ]
                        }
                    ],
                    "username":"root"
                },
                "name":"tdenginereader"
            },
            "writer":{
                "parameter":{
                    "print":true
                },
                "name":"streamwriter"
            }
    },
    "setting":{
        "errorLimit":{
            "record":0,
            "percentage":0.02
        },
        "speed":{
            "channel":3
        }
    }
}

2021-02-20 15:32:23.277 [main] INFO  PerfTrace - PerfTrace traceId=job_-1, isEnable=false, priority=0
2021-02-20 15:32:23.278 [main] INFO  JobContainer - Addax jobContainer starts job.
2021-02-20 15:32:23.281 [main] INFO  JobContainer - Set jobId = 0
java.library.path:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
....
2021-02-20 15:32:23.687 [0-0-0-reader] INFO  CommonRdbmsReader$Task - Begin to read record by Sql: [select * from test.meters where ts <'2017-07-14 10:40:02' and  loc='beijing' limit 100
] jdbcUrl:[jdbc:TAOS://127.0.0.1:6030/test].
2021-02-20 15:32:23.692 [0-0-0-reader] WARN  DBUtil - current database does not supoort TYPE_FORWARD_ONLY/CONCUR_READ_ONLY
2021-02-20 15:32:23.740 [0-0-0-reader] INFO  CommonRdbmsReader$Task - Finished read record by Sql: [select * from test.meters where ts <'2017-07-14 10:40:02' and  loc='beijing' limit 100
] jdbcUrl:[jdbc:TAOS://127.0.0.1:6030/test].

1500000001000   5   5   0   1   beijing
1500000001000   0   6   2   1   beijing
1500000001000   7   0   0   1   beijing
1500000001000   8   9   6   1   beijing
1500000001000   9   9   1   1   beijing
1500000001000   8   2   0   1   beijing
1500000001000   4   5   5   3   beijing
1500000001000   3   3   3   3   beijing
1500000001000   5   4   8   3   beijing
1500000001000   9   4   6   3   beijing

2021-02-20 15:32:26.689 [job-0] INFO  JobContainer -
任务启动时刻                    : 2021-02-20 15:32:23
任务结束时刻                    : 2021-02-20 15:32:26
任务总计耗时                    :                  3s
任务平均流量                    :              800B/s
记录写入速度                    :             33rec/s
读出记录总数                    :                 100
读写失败总数                    :                   0

参数说明

配置项 是否必须 类型 默认值 描述
jdbcUrl 是 list 无 对端数据库的JDBC连接信息,注意这里的 TAOS 必须大写
username 是 string 无 数据源的用户名
password 否 string 无 数据源指定用户名的密码
table 是 list 无 所选取的需要同步的表名,使用JSON数据格式,当配置为多张表时,用户自己需保证多张表是同一表结构
column 是 list 无 所配置的表中需要同步的列名集合,详细描述rdbmreader
where 否 string 无 针对表的筛选条件
querySql 否 list 无 使用自定义的SQL而不是指定表来获取数据,当配置了这一项之后,Addax系统就会忽略 table,column这些配置项
beginDateTime 是 string 无 数据的开始时间,Job迁移从 begineDateTime 到 endDateTime 的数据,格式为 yyyy-MM-dd HH:mm:ss
endDateTime 是 string 无 数据的结束时间,Job迁移从 begineDateTime 到 endDateTime 的数据,格式为 yyyy-MM-dd HH:mm:ss
splitInterval 是 string 无 按照 splitInterval 来划分 task, 每 splitInterval 创建一个 task

splitInterval

用来划分 task。 例如,20d 代表按照每 20 天的数据划分为 1 个 task。 可以配置的时间

  • d(天)
  • h(小时)
  • m(分钟)
  • s(秒)

使用 JDBC-RESTful 接口

如果不想依赖本地库,或者没有权限,则可以使用 JDBC-RESTful 接口来写入表,相比 JDBC-JNI 而言,配置区别是:

  • driverClass 指定为 com.taosdata.jdbc.rs.RestfulDriver
  • jdbcUrl 以 jdbc:TAOS-RS:// 开头;
  • 使用 6041 作为连接端口

所以上述配置中的 connection 应该修改为如下:

{
  "connection": [
    {
      "querySql": [
        "select * from test.meters where ts <'2017-07-14 10:40:02' and  loc='beijing' limit 100"
      ],
      "jdbcUrl": [
        "jdbc:TAOS-RS://127.0.0.1:6041/test"
      ],
      "driver": "com.taosdata.jdbc.rs.RestfulDriver"
    }
  ]
}

类型转换

Addax 内部类型 TDengine 数据类型
Long SMALLINT, TINYINT, INT, BIGINT, TIMESTAMP
Double FLOAT, DOUBLE
String BINARY, NCHAR
Boolean BOOL

当前支持版本

TDengine 2.0.16

注意事项

  • TDengine JDBC-JNI 驱动和动态库版本要求一一匹配,因此如果你的数据版本并不是 2.0.16,则需要同时替换动态库和插件目录中的JDBC驱动