【问题标题】:Logstash jdbc-input-plugin configuration for initial sql_last_value初始 sql_last_value 的 Logstash jdbc-input-plugin 配置
【发布时间】:2017-08-15 00:59:54
【问题描述】:

我在 Oracle 数据库和 ElasticSearch 实例中同步数据。
数据库表 "SYNC_TABLE" 具有以下列:"ID" 这是一个数字,"LAST_MODIFICATION" - TIMESTAMP,"TEXT" - VARCHAR2。

我将 Logstash 与 jdbc-input-plugin 一起使用,以便定期执行数据同步。

这是 Logstash 配置文件:

input { 
  jdbc {
    jdbc_driver_library => "ojdbc6.jar"
    jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
    jdbc_connection_string => "jdbc:oracle:thin:@localhost:1521:XE"
    jdbc_user => "******"
    jdbc_password => "******"
    schedule => "* * * * *"
    statement => "SELECT * from SYNC_TABLE where LAST_MODIFICATION >= :sql_last_value"
    tracking_column => "LAST_MODIFICATION"
    tracking_column_type => "timestamp"
    use_column_value => true
  }
}
output {
  elasticsearch { 
    index => "SYNC_TABLE"
    document_type => "SYNCED_DATA"
    document_id => "%{ID}"
    hosts => "localhost:9200"
  }
  stdout { codec => rubydebug }
}

我想在第一次运行时导入所有数据,然后只同步上次运行和当前时间之间的差异。 所以我希望 Logstash 进行以下查询:

SELECT * from SYNC_TABLE where LAST_MODIFICATION >= '1 January 1970 00:00'

然后定期

SELECT * from SYNC_TABLE where LAST_MODIFICATION >= 'time of last run'

Documentation 表示初始值应该是 1970 年 1 月 1 日,但我在日志中看到它采用当前时间戳。 这是第一个查询:

SELECT * from SYNC_TABLE where LAST_MODIFICATION >= TIMESTAMP '2017-08-14 09:17:00.481000 +00:00'

logstash 配置文件中是否有任何错误导致 logstash 使用当前时间戳而不是默认时间戳('1 January 1970 00:00')?

【问题讨论】:

    标签: oracle elasticsearch logstash logstash-jdbc


    【解决方案1】:

    问题出在.logstash_jdbc_last_run 文件中,该文件包含先前运行的sql_last_value。 我已删除此文件并重新启动 logstash。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-19
      • 1970-01-01
      • 2016-12-28
      • 2023-03-06
      • 2021-03-05
      • 2016-10-24
      • 2017-03-15
      相关资源
      最近更新 更多