mysql—在查询执行完成后自动更改logstash jdbc查询

ohfgkhjo  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(307)

我正在尝试使用logstash jdbc输入将所有订单数据导入elasticsearch。sql查询涉及7个表之间的联接,联接后不可能建立索引,并且表之间存在一对多关系。连接后大约有3米排。
我想每天导入订单数据,因为将有较少的记录,而不是运行整个查询对完整的订单,直到日期和分页。如果我查询的是整个数据,数据库在计算自己的记录数时会感到震惊。
如何日复一日地运行导入而不停止日志存储和动态配置sql日期参数。
这是我当前的日志存储作业配置

input {
jdbc { 
jdbc_connection_string => "jdbc:mysql://dbhostname:3306/mydatabase?zeroDateTimeBehavior=CONVERT_TO_NULL"
jdbc_user => "username"
jdbc_password => "password"
jdbc_driver_library => "/home/username/mysql-connector-java-8.0.11.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
statement => "select * from table1 t1, table2 t2 ,table3 t3 , table4 t4, table5 t5, table6 t6 where some_condition and some_other_condition and t1.created_at between 'date1_start' and 'date1_end'"
}
}
output {
stdout { codec => json_lines }
elasticsearch {
"hosts" => "localhost:9200"
"index" => "orderdata_prod"
"document_type" => "data"
}
}

我想用新的日期值动态更改配置中提供的语句。我怎样才能做到这一点?或者是否有其他方法导入此类数据?

ijxebb2r

ijxebb2r1#

我猜您可能担心生产数据库可能会崩溃,但是您可以使用logstash的分页将单个查询分解为多个较小的查询来降低风险。但是您应该一次性运行导入,因为不能保证在查询之间排序。
如果要将每个查询限制为下载100000行,请在logstsh conf文件中添加以下两个参数:

jdbc_paging_enabled => true
jdbc_page_size => 100000

您还可以尝试使用fetch size参数,方法是将其与db的默认值相比降低,但请注意,此参数只是对jdbc的一个提示,有时可能不起作用。例如,oracle将默认的fetch size设置为10,因此可以将其降低到5:

jdbc_fetch_size => 5

相关问题