Автоматическое изменение jstbc-запроса logstash после завершения выполнения запроса - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь импортировать все данные наших заказов вasticsearch, используя входные данные jstbc logstash. Запрос sql включает в себя объединения 7 таблиц, и после объединения индексация невозможна, и между таблицами существует отношение один ко многим. После соединения осталось около 3 миллионов строк.

Я хочу импортировать данные о заказах изо дня в день, так как записей будет меньше, вместо того, чтобы выполнять весь запрос по всем заказам до даты и разбивать их на страницы. Если я запрашиваю все данные, база данных поражается при расчете количества записей.

Как я могу запускать импорт день за днем, не останавливая 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"
}
}

Я хочу динамически изменить оператор, представленный в конфигурации, на новые значения даты. Как я могу этого достичь? Или есть альтернативные способы импорта таких данных?

1 Ответ

0 голосов
/ 11 мая 2018

Полагаю, вы, вероятно, беспокоитесь о возможном сбое в производственной базе данных, но вы можете снизить риск, используя разбиение на страницы logstash, чтобы разбить один запрос на несколько меньших запросов. Но вы должны запустить импорт за один раз, потому что порядок между запросами не гарантирован.

Если вы хотите ограничить каждый запрос загрузкой 100 000 строк, добавьте эти два параметра в ваш файл logstsh conf:

jdbc_paging_enabled => true
jdbc_page_size => 100000

Вы также можете попробовать с параметром размера выборки, уменьшив его по сравнению со значением по умолчанию в БД, но имейте в виду, что этот параметр является просто подсказкой для jdbc и иногда может не работать. Например, в Oracle для размера выборки по умолчанию установлено значение 10, поэтому вы можете уменьшить его, скажем до 5:

jdbc_fetch_size => 5
...