LogStash 导入 oracle(mysql)数据
版本:
ES 7.13.3
LogStash 7.13.4
1. 背景
因为一些原因需要将oracle的数据导入到Es中,A、B两个表的数据构成商品信息,组成products索引。
分词器采用ik_max_word 对name相关的字段采用搜索自动补全功能。
2. 数据导入
首先默认我们已经按转好了 ES和Logstash环境。
下载 oracle驱动
2.1 编写sql文件
#ROWNUM 是oracle自带的 可以查出当前数据是第多少条数据,用于做#ROWNUM 是oracle自带的 可以查出当前数据是第多少条数据,用于做功能导入数据使用
#suggest 会根据这个字段做猜你所想的功能具体分下见下文
SELECT ROWNUM,NAME AS suggest,STATUS,AGE FORM A
SELECT ROWNUM,NAME AS suggest FROM B
2.1 编写数据输入源和输出源代文件
input:
1.配置数据库相关信息见注释
2.配置增量导入实现的标记,需要注意/path/id/ 文件夹是需要真实存在的 。当然我们也可以根据时间做增量,具体场景具体分析。
output
1.es配置 地址、账号、密码、类型和document_id等
2.分词器魔板文件,如果需要制定分析器的话。
input {
stdin {
}
jdbc {
jdbc_connection_string => "jdbc:oracle:thin:@ip/databaseName"
jdbc_user => "userName"
jdbc_password => "pwd"
jdbc_driver_library =>
"/path/ojdbc6.jar"
jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
codec => plain { charset => "UTF-8"}
statement_filepath => "/path/your.sql"
schedule => "*/2 * * * *"
type => "bp_dealer_rp"
use_column_value => "true"
record_last_run => "true"
# 增量数据需要,将最后一次查询的rownum存入到下边的配置文件中去,下次导入数据 直接从rownum之后导入,需要根据自己的场景选择对应的 增量导入模式
tracking_column => "rownum"
last_run_metadata_path=> "/path/id/file1"
clean_run =>"false"
}
}
filter {
}
output {
elasticsearch {
hosts => ["40.18.15.23:9200"]
user => "elastic"
password => "pwd"
index => "products"
# 因为是多个表导入到一个索引当中 后边添加type字段区分不同表的数据。
document_id => "%{rownum}-type1"
# 模板名称
template_name => "products"
#自定义配置位置 绝对路径
template => "/path/ik.json"
#重写模板
template_overwrite => true
#manage_template => false
}
stdout {
codec => json_lines
}
}
2.2 修改pipeline文件
pipeline 是logstash的一个工作流可以执行多个任务,path.conf配置的