LOGSTASH - проблема с входом JDBC, подключенным к базе данных HSQL DB при выборе столбцов ARRAY - PullRequest
0 голосов
/ 21 октября 2019

У меня проблемы с успешным импортом HSQL DB содержимого базы данных с помощью входного плагина JDBC Logstash.

Проблема возникает при попытке извлечь столбец типа ARRAY .

Обратите внимание, что если я пытаюсь извлечь столбцы, не являющиеся массивами, все работает нормально.

Я получаю следующее сообщение об ошибке из Logstash:

[WARN ][logstash.inputs.jdbc     ] Exception when executing JDBC query {:exception=>#<Sequel::DatabaseError: Java::OrgLogstash::MissingConverterException: Missing Converter handling for full class name=org.hsqldb.jdbc.JDBCArray, simple name=JDBCArray>}
[INFO ][logstash.pipeline        ] Pipeline has terminated {:pipeline_id=>"hsql", :thread=>"#<Thread:0x7b626752 run>"}

Пожалуйста, найдите ниже входную часть файла конфигурации Logstash (PLATFORM_DESTINATION_CANDIDATES - это имя столбца в таблице.)

input {
  jdbc {
    jdbc_driver_library => "hsqldb_2.5.0.jar"
    jdbc_driver_class => "org.hsqldb.jdbc.JDBCDriver"
    jdbc_connection_string => "jdbc:hsqldb:hsql://localhost/probe"
    jdbc_user => "SA"
    statement => "SELECT PLATFORM_DESTINATION_CANDIDATES FROM PUBLIC.MESSAGES_SENT"
    connection_retry_attempts => 10
  }
}

Кто-нибудь из вас сталкивался с такой проблемой и какты решил это? Спасибо.

  • ОС : windows 10
  • Версия Logstash : 6.3.1
  • драйвер HSQLDBверсия : 2.5.0 ( LINK )

1 Ответ

0 голосов
/ 22 октября 2019

Я не знаю, является ли это лучшим решением, но мне удалось решить мою проблему. Вот как.

Я заменил строку:

statement => "SELECT PLATFORM_DESTINATION_CANDIDATES FROM PUBLIC.MESSAGES_SENT"

на:

 statement => SELECT concat_ws('', PLATFORM_DESTINATION_CANDIDATES , '') AS str_platforms

Это имеет значение для ввода в поле str_platforms типа строка данные, которые выглядят следующим образом: ARRAY[1,2,3,4]

С помощью следующей строки ruby ​​я удаляю нежелательные символы (ARRAY[ и ]) из поля:

ruby {
    code => "event.set('listRxUnits',event.get('str_platforms').split('ARRAY[')[1].split(']')[0])"
  }
...