Datax使用(TDengine数据转移MySQL)
这几天一直在研究ETL工具,本次记录的是TDengine到MySQL时,遇到的一些坑点
操作记录
1、TDengine数据信息如下
field | type | length | note |
=================================================================================
ts | TIMESTAMP | 8 | |
log_value | VARCHAR | 100 | |
is_monitor | TINYINT | 1 | |
log_type | TINYINT | 1 | |
identity | VARCHAR | 100 | |
mode | TINYINT | 1 | |
remark | NCHAR | 500 | |
device_id | BIGINT | 8 | TAG |
serial_number | VARCHAR | 50 | TAG |
user_id | BIGINT | 8 | TAG |
tenant_id | BIGINT | 8 | TAG |
user_name | NCHAR | 100 | TAG |
tenant_name | NCHAR | 100 | TAG |
device_name | NCHAR | 100 | TAG |
2、创建sql表
下面开始在对应的mysql中创建出一个表来存储数据
3、编写执行的job.json
{
"job": {
"content": [
{
"reader": {
"name": "tdengine30reader",
"parameter": {
"username": "****",
"password": "****",
"connection": [
{
"table": [
"device_log"
],
"jdbcUrl": [
"jdbc:TAOS-RS://****:6041/***?charset=utf-8"
]
}
],
"column": [
"ts",
"log_value",
"is_monitor",
"log_type",
"identity",
"mode",
"remark",
"device_id",
"serial_number",
"user_id",
"tenant_id",
"user_name",
"tenant_name",
"device_name"
],
"beginDateTime": "2023-04-13 18:36:16",
"endDateTime": "2023-04-13 18:36:17"
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"writeMode": "insert",
"username": "****",
"password": "****",
"column": [
"ts",
"log_value",
"is_monitor",
"log_type",
"identity",
"mode",
"remark",
"device_id",
"serial_number",
"user_id",
"tenant_id",
"user_name",
"tenant_name",
"device_name"
],
"session": [
"set session sql_mode='ANSI'"
],
"preSql": [
"delete from device_log"
],
"connection": [
{
"jdbcUrl": "jdbc:mysql://***:3306/test?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true",
"table": [
"device_log"
]
}
]
}
}
}
],
"setting": {
"speed": {
"channel": 1
}
}
}
}
4、执行命令
python datax.py ../job/tdengine_mysql_job.json
二、在使用过程也遇到一些坑点,本节会介绍一下
- 在使用以上内容job.json不变的情况下,将数据库表的一些bigint字段改为tinyint,将其完全对应tdengine的数据类型时,执行脚本的时候会发生报错信息,报错信息如下。
我大哥给我说是tdengine3的数据类型与mysql一样时,它的数据长度是可能不一样的,所以在数据库这边放大一些。
2. 在打包的过程中,最开始也是经常出现缺少plugin什么的,反正就是死活打不上,最后的解决办法是执行如下命令(maven)
- mvn clean install -U 更新本地 Maven 存储库并尝试重复构建程序
- mvn -U clean package assembly:assembly -Dmaven.test.skip=true 在项目的根目录执行,会生产一个target目录
- python datax.py ../job/tdengine_mysql_job.json 进入到target/datax/datax/bin目录执行该命令,job.josn的位置根据自己的实际情况变更