使用dataX将pg库单表数据同步至es中
背景:
后台系统使用的数据库是pg库,需要上线一个统一查询的功能,考虑使用es中的模糊查询来实现,故需要将pg库中数据表的数据同步至es。
环境
- dataX程序包(直接官网下载tar.gz包即可,上传到服务器上解压)
- postgresQL(版本12.12)
- es(版本7.4.2)
dataX配置文件
xxx.json文件
{
"job": {
"setting": {
"speed": {
"channel": 5
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "postgresqlreader",
"parameter": {
"username": "xxx", //这里填写pg库的账号
"password": "xxx", //这里填写pg库的密码
"connection": [
{
"querySql":[
"select id,name, data, detail from xxx_table"
],
// pg库的连接地址
"jdbcUrl": [
"jdbc:postgresql://x.x.x.x:5432/xxx"
]
}
]
}
},
"writer": {
"name": "elasticsearchwriter",
"parameter": {
// es的目标端地址
"endpoint": "http://x.x.x.x:9200",
// 创建的索引名称
"index": "your_index_name",
"type": "default",
"cleanup": true,
"settings": {"index" :{"number_of_shards": 1, "number_of_replicas": 0}},
"discovery": false,
"batchSize": 1000,
"splitter": ",",
// 这边的列要与上面sql里面定义的查询列一一对应,包括数据类型
"column": [
{"name":"id", "type":"long"},
{"name":"name", "type":"text"},
{"name":"data", "type":"text"},
{"name":"detail", "type":"text"}
]
}
}
}
]
}
}
启动dataX
我这边使用的是通过后端程序,定时任务的方式,连接到目标服务器上执行对应的命令这样的逻辑来实现定时同步,具体的后端代码就不展示了,只列举要执行的远程命令。
上面官网下载下来的tar.gz包解压后(tar -zxvf dataX.tar.gz)会得到一个datax的文件夹,进入到该文件夹下的bin目录,将上面定义的xxx.json文件上传到bin目录下,执行python datax.py xxx.json
即可
TIP:在测试中,通过后端程序ssh到目标主机执行远程命令时遇到问题的可以参考以下内容
在执行命令之前加上以下内容bash -l -c cd bin文件夹的目录;python datax.py xxx.json
即可。