Как настроить процессор Execute SQL для получения объекта BLOB из Oracle 11g, выпуск 2, вместо того, чтобы выдавать ошибку метода в Apache Nifi? - PullRequest
0 голосов
/ 06 января 2020

Я настроил задание на передачу данных, чтобы получить данные из базы данных Oracle и поместить данные в Google Bigquery.

Поток заданий: Выполнить SQL -> AvroTo Json -> PutBigQueryBatch

Я передал все таблицы, в которых нет объекта BLOB. Когда я запускаю это задание для таблицы с объектом BLOB, при выполнении SQL процессор выдает следующую ошибку:

ExecuteSQL failed to process session due to oracle.sql.BLOB.free()V; 
Processor Administratively Yielded for 1 sec: java.lang.AbstractMethodError: oracle.sql.BLOB.free()V

Этот ответ предлагает использовать процессор Выполнить SQL для получить данные BLOB из Oracle, но я использую Execute SQL, и он показывает эту ошибку. Что я делаю неправильно при использовании Execute SQL?

Конфигурация:

  1. Исходная база данных: Oracle 11g Release 2
  2. Источник JDB C драйвер: источник
  3. Назначение: Bigquery
  4. Активные службы для задания: DBCPConnectionPool, GCPCredentialsControllerService

Конфигурация DBCPConnectionPool:

  1. URL-адрес подключения к базе данных: jdbc:oracle:thin:@IP:host:sid
  2. Имя класса драйвера базы данных: oracle.jdbc.driver.OracleDriver
  3. Расположение драйверов базы данных: C:\Users\91918\Desktop\OJDBC-Full\ojdbc5.jar,C:\Users\91918\Desktop\OJDBC-Full\ojdbc6.jar,C:\Users\91918\Desktop\OJDBC-Full\ons.jar,C:\Users\91918\Desktop\OJDBC-Full\orai18n.jar,C:\Users\91918\Desktop\OJDBC-Full\simplefan.jar,C:\Users\91918\Desktop\OJDBC-Full\ucp.jar,C:\Users\91918\Desktop\OJDBC-Full\xdb6.jar
  4. Пользователь базы данных: username
  5. Пароль: password
  6. Запрос проверки: SELECT 1 FROM DUAL

Выполнение SQL конфигурация:

  1. Служба пула соединений с базой данных: DBCPConnectionPool
  2. SQL запрос на выборку: select * from schema.table
  3. Макс. Время ожидания: 0,1 с c
  4. Нормализация имен таблиц / столбцов : False
  5. Использовать логические типы Avro: False
  6. Формат сжатия: отсутствует
  7. Десятичная точность по умолчанию: 10

Oracle схема:

WAFERMAPID                CHAR(16)      
CDOTYPEID                 NUMBER(10)    
CHANGECOUNT               NUMBER(10)    
MAPCONVERTID              CHAR(16)      
ISFROZEN                  NUMBER(10)    
NAME                      VARCHAR2(120) 
WAFERMAP                  BLOB         

Мое намерение с данными:

Считать двоичный объект объекта BLOB в виде строки, вставить его в запрос Bigquery. .

Информация о BLOB: Объект BLOB является файлом GZ. Пример: file.txt.gz. Файл внутри GZ содержит текстовый файл с текстом XML. Чтение текста внутри файла и помещение его в Bigquery будет конечным результатом.

1 Ответ

2 голосов
/ 09 января 2020

Я думаю, это потому, что у вас есть ojdbc5.jar в вашем свойстве «Database Driver Location (s)», так что, если там есть класс драйвера, это, вероятно, тот, который загружается, в этом случае метод free() не делает существует (проверьте эту ошибку NB для более подробной информации). Удалите это, и он должен использовать ojdbc6.jar для загрузки класса, и, надеюсь, эта ошибка исчезнет go.

...