Как добавить только новые строки SQL в Elasticsearch — Logstash — Kibana?

Я пытаюсь добавить некоторые данные из SQL-запроса в свой Elasticsearch, и в настоящее время он работает как вход Logstash jdbc следующим образом:

 jdbc {
        type => "database_log"
        jdbc_connection_string => "jdbc:sqlserver://(redacted)"
        jdbc_user => (redacted)
        jdbc_password => (redacted)
        jdbc_driver_library => "D:\ELK_56\sqljdbc4.jar"
        jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
        schedule => "0 * * * *"
        statement => "select user_id,First_Name from user_login"

Теперь проблема в том, что, как и каждый час, когда выполняется ввод, он просто добавляет весь результат запроса, около 124 тыс. строк. Мое намерение состоит в том, чтобы просто добавить новые строки (которых около 3-4 в час), которые появились с момента последнего запроса, и избежать дублирования.

Я не могу просто решить эту проблему, добавив в запрос предложение WHERE, поскольку в этой конкретной таблице нет столбца даты или какого-либо такого идентификатора.

Есть ли способ заставить сам logstash или elasticsearch вычесть предыдущий результат из последнего и просто добавить новые строки?

Спасибо за ваш ответ.


person Shiver McTimbers    schedule 14.09.2017    source источник


Ответы (1)


Единственный известный мне способ заставить Elasticsearch отфильтровать дубликаты — это сделать поле в вашем индексе, которое вы загружаете столбцом user_id из вашей базы данных, полем _id в индексе. Elasticsearch должен будет каждый раз обрабатывать и обновлять все 124 КБ записей, но это должно устранить повторяющиеся записи в вашем индексе.

Вы должны иметь возможность установить это в своей конфигурации Logstash, как указано в этом предыдущем вопросе: Change ID in elasticsearch

person Paige Cook    schedule 14.09.2017
comment
Спасибо, это на самом деле очень помогло. С помощью этого метода и небольшой настройки запроса я получил нужные мне результаты. Ваше здоровье! - person Shiver McTimbers; 15.09.2017