Я пытаюсь импортировать некоторые данные из разных баз данных SqlServer, используя ExecuteSQL в NiFi, но он возвращает мне ошибку.Я уже импортировал множество других таблиц из баз данных MySQL без каких-либо проблем, и я пытаюсь использовать ту же структуру рабочего процесса для базы данных SqlServer.
Структура выглядит следующим образом:
- Имеется файл
.txt
со списком импортируемых таблиц - Этот файл извлекается, разбивается и обновляется;так что есть FlowFile для каждой таблицы каждой базы данных, которая должна быть импортирована,
- Эти FlowFiles передаются в ExecuteSQL, который выполняет их содержимое
Например:
file.txt
table1
table2
table3
обновляется в 3 различных файлах потока:
FlowFile1
SELECT * FROM table1
FlowFile2
SELECT * FROM table2
FlowFile3
SELECT * FROM table3
, которые передаются в ExecuteSQL,
Здесь следует конфигурация ExecuteSQL (идентичная для таблиц SqlServer и MySQL)
ExecuteSQL
Как единственная разница с импортомиз базы данных MySQL находится в соединителях, вот как был настроен общий соединитель MySQL:
SETTINGSPROPERTIES
URL-адрес подключения к базе данных jdbc:mysql://00.00.00.00/DataBase?zeroDateTimeBehavior=convertToNull&autoReconnect=true
Имя класса драйвера базы данных com.mysql.jdbc.Driver
Расположение драйверов базы данных file:///path/mysql-connector-java-5.1.47-bin.jar
Пользователь базы данных user
Чувствительный к паролю value set
Макс. Время ожидания 500 millis
Макс. Всего подключений 8
Проверкаquery No value set
Вот как был настроен соединитель SqlServer:
SETTINGSPROPERTIES
URL-адрес подключения к базе данных jdbc:jtds:sqlserver://00.00.00.00/DataBase;useNTLMv2=true;integratedSecurity=true;
База данныхИмя класса драйвера net.sourceforge.jtds.jdbc.Driver
Расположение драйверов базы данных /path/connectors/jtds-1.3.1.jar
Пользователь базы данных user
Чувствительный к паролю value set
Максимальное время ожидания -1
Максимальное общее количество подключений 8
Запрос на проверку No value set
Следует отметить, что один (только один!) Коннектор SqlServer работает, и процессор ExecuteSQL без проблем импортирует данные.Еще более странно то, что база данных, которая подключается через этот соединитель, находится там же, где и другие две (URL-адрес подключения и user / psw идентичны), но работает только первая.
Обратите внимание, что я пытался добавить ?zeroDateTimeBehavior=convertToNull&autoReconnect=true
также к соединениям SqlServer, предположив, что это проблема типа даты, но она не дала никаких положительных изменений.
Вот возвращаемая ошибка:
12: 02: 46 ОШИБКА CEST f1553b83-a173-1c0f-93cb-1c32f0f46d1d 00.00.00.00:0000 ExecuteSQL [id = ****] ExecuteSQL [id = ****] не удалось обработать сессию из-за нуля;Процессор административно выдан в течение 1 секунды: java.lang.AbstractMethodError
Ошибка извлечена из журналов:
ОШИБКА [Управляемый по таймеру поток процессов-49] oanifi.processors.standard.ExecuteSQL ExecuteSQL [id = ****] ExecuteSQL [id = ****] не удалось обработать сеанс из-за java.lang.AbstractMethodError;Процессор административно сдан в течение 1 секунды: java.lang.AbstractMethodError java.lang.AbstractMethodError: null в net.sourceforge.jtds.jdbc.JtdsConnection.isValid (JtdsConnection.java:2833) в org.apachenee.dd.(DelegatingConnection.java:874) на org.apache.commons.dbcp2.PoolableConnection.validate (PoolableConnection.java:270) на org.apache.commons.dbcp2.PoolableConnectionFactory.validateConnection (PoolableConnectionFactory.jache.9).commons.dbcp2.BasicDataSource.validateConnectionFactory (BasicDataSource.java:2398) в org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory (BasicDataSource.java:2381)в org.apache.commons.dbcp2.BasicDataSource.createDataSource (BasicDataSource.java:2110)
на org.apache.commons.dbcp2.BasicDataSource.getConnection (BasicDataSource.java:1563)
в org.apache.nifi.dbcp.DBCPConnectionPool.getConnection (DBCPConnectionPool.java:305)
в org.apache.nifi.dbcp.DBCPService.getConnection (DBCPService.java:49)
at sun.reflect.GeneratedMethodAccessor1696.invoke (неизвестный источник)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
в java.lang.reflect.Method.invoke (Method.java:498)
в org.apache.nifi.controller.service.StandardControllerServiceInvocationHandler.invoke (StandardControllerServiceInvocationHandler.java:84)
на com.sun.proxy. $ Proxy449.getConnection (неизвестный источник)
в org.apache.nifi.processors.standard.AbstractExecuteSQL.onTrigger (AbstractExecuteSQL.java:195)
в org.apache.nifi.processor.AbstractProcessor.onTrigger (AbstractProcessor.java:27)
в org.apache.nifi.controller.StandardProcessorNode.onTrigger (StandardProcessorNode.java:1165)
в org.apache.nifi.controller.tasks.ConnectableTask.invoke (ConnectableTask.java:203)
в org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent $ 1.run (TimerDrivenSchedulingAgent.java:117)
в java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:511)
в java.util.concurrent.FutureTask.runAndReset (FutureTask.java:308)
в java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 301 (ScheduledThreadPoolExecutor.java:180)
в java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run (ScheduledThreadPoolExecutor.java:294)
в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149)
в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624)
at java.lang.Thread.run (Thread.java:748)