Skip to content

TDengine Reader

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

前置条件

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

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

bash
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 , 我们从演示数据库读取部分数据并打印到终端

以下是配置文件

json
{
  "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

执行采集命令

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

bash
bin/addax.sh job/tdengine2stream.json

命令输出类似如下:

Details
txt
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

参数说明

配置项是否必须类型默认值描述
jdbcUrllist对端数据库的JDBC连接信息,注意这里的 TAOS 必须大写
usernamestring数据源的用户名
passwordstring数据源指定用户名的密码
tablelist所选取的需要同步的表名,使用JSON数据格式,当配置为多张表时,用户自己需保证多张表是同一表结构
columnlist所配置的表中需要同步的列名集合,详细描述rdbmreader
wherestring针对表的筛选条件
querySqllist使用自定义的SQL而不是指定表来获取数据,当配置了这一项之后,Addax系统就会忽略 tablecolumn这些配置项
beginDateTimestring数据的开始时间,Job迁移从 begineDateTimeendDateTime 的数据,格式为 yyyy-MM-dd HH:mm:ss
endDateTimestring数据的结束时间,Job迁移从 begineDateTimeendDateTime 的数据,格式为 yyyy-MM-dd HH:mm:ss
splitIntervalstring按照 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 应该修改为如下:

json
{
  "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 数据类型
LongSMALLINT, TINYINT, INT, BIGINT, TIMESTAMP
DoubleFLOAT, DOUBLE
StringBINARY, NCHAR
BooleanBOOL

当前支持版本

TDengine 2.0.16

注意事项

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