【发布时间】:2018-10-20 15:58:54
【问题描述】:
我正在尝试使用 logstash jdbc 输入将我们所有的订单数据导入 elasticsearch。 sql查询涉及跨7个表的join,join后不能建立索引,表之间是一对多的关系。加入后大约有 3M 行。
我想每天导入订单数据,因为记录的数量会减少,而不是针对截至日期的完整订单运行整个查询并对其进行分页。如果我要查询整个数据,数据库会自动计算记录数。
如何在不停止 logstash 和动态配置 SQL 日期参数的情况下日复一日地运行导入。
这是我当前的 logstash 作业配置
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"
}
}
我想用新的日期值动态更改配置中提供的语句。我怎样才能做到这一点?或者有没有其他方法可以导入此类数据?
【问题讨论】:
-
一次下载整个历史记录有这么大的问题吗?我不得不下载超过 2000 万条记录,并且用了 logstash 一整天,但最终都下载了它们。每天下载数据甚至可能需要更多时间。
-
@MichaelDz 我担心服务器是否会因数据加载而崩溃。这就是为什么我认为如果我们可以每天运行会很好,它可以处理得更快。现在,我们增加了实例的内存并开始使用单个查询导入数据。但是,我想知道是否可以这样做。
标签: mysql elasticsearch logstash logstash-configuration