2017-08-14 122 views
0

我同步Oracle數據庫和ElasticSearch實例中的數據。
數據庫表"SYNC_TABLE"包含以下列:"ID"這是NUMBER,"LAST_MODIFICATION" - TIMESTAMP,"TEXT" - VARCHAR2。初始sql_last_value的Logstash jdbc-input-plugin配置

我使用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 } 
} 

我想導入在第一次運行的所有數據,然後syncronise只有上次運行和當前時間之間的差異。 因此,我希望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使用當前的時間戳,而不是默認的(「1970年1月1日00:00」)?

回答

1

問題出在.logstash_jdbc_last_run文件中,該文件包含之前運行的sql_last_value。 我已刪除此文件並重新啓動logstash。