2016-10-18 9 views
0

postgresqlからレコードを引き出し、弾性検索で文書を作成しているログ隠しがありますが、postgresのレコードを更新しようとしているときは常に弾性検索に反映されません。ここは私の入力です& OUTPUT私がここに何かが欠けているかどうか私に知らせてください。文書の更新

input { 
    jdbc { 
    # Postgres jdbc connection string to our database, mydb 
    jdbc_connection_string => "jdbc:postgresql://127.0.0.1:5009/data" 
    # The user we wish to execute our statement as 
    jdbc_user => "data" 
    jdbc_password=>"data" 
    # The path to our downloaded jdbc driver 
    jdbc_driver_library => "/postgresql-9.4.1209.jar" 
    # The name of the driver class for Postgresql 
    jdbc_driver_class => "org.postgresql.Driver" 
    #sql_log_level => "debug" 
    jdbc_paging_enabled => "true" 
    jdbc_page_size => "5000" 
    schedule => "* * * * *" 
    # our query 
    clean_run => true 
    last_run_metadata_path => "/logstash/.test_metadata" 
    #use_column_value => true 
    #tracking_column => id 
    statement => "SELECT id,name,update_date from data where update_date > :sql_last_value" 
    } 
    } 

    output { 
    elasticsearch{ 
    hosts => ["127.0.0.1"] 
    index => "test_data" 
    action => "index" 
    document_type => "data" 
    document_id => "%{id}" 
    upsert => ' { 
    "name" : "%{data.name}", 
    "update_date" : "%{data.update_date}" 
    } ' 
    } 
    } 

答えて

0

私はidカラムの代わりに日付/タイムスタンプカラムを追跡する必要があると思います。各更新時に変更されるUPDATE_DATE列がある場合は、それが良いでしょう。

SELECTステートメントは新しいレコード(つまりid > last_id)を取得するだけで、レコードを更新するとそのIDは変更されないため、更新されたレコードは次に実行されたときにjdbc入力によってピックアップされません。

+0

おかげで、私はtracking_column => UPDATE_DATE 声明=> "ID、名前、データID>からUPDATE_DATE SELECT:sql_last_valueを" – GG0424

+0

以下に変更する必要があります 'あなたは、デフォルトでとして' tracking_column'も 'use_column_value'が必要でもない – GG0424

+0

:sql_last_value'にはタイムスタンプが含まれます – Val

関連する問題