Получение бинарного контента от Avro - PullRequest
1 голос
/ 29 января 2020

У меня есть процессор Execute SQL, который возвращает поле SQL Сервер varbinary для конкретной строки:

select [File]
from dbo.Attachment
where attachmentid=?

Запрос найдет одну строку. Содержимое хранится в Avro. Полученный File может быть текстовым форматом (CSV, HTML, et c) или двоичным форматом (PDF, документы Office, изображения и т. Д. c).

Если содержимое является текстовым, я могу запустить его через ConvertAvroTo JSON, а затем EvaluateJsonPath, чтобы получить нужный мне контент. Это не работает с двоичным контентом, однако. Когда я загружаю содержимое потокового файла, например, с файлом PowerPoint, PowerPoint жалуется на содержимое.

Я бы хотел, чтобы Содержимое моего FlowFile было просто двоичным содержимым (позже я отправлю его на процессор PutMarkLogi c). Как я могу это сделать?

1 Ответ

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

Я не тестировал его.

, но вы можете использовать ExecuteGroovyScript в качестве обходного пути для записи двоичного поля непосредственно в содержимое файла.

SQL.mydb - добавить этот параметр на уровне процессор и связать его с требуемым пулом DBCP.

AttributeWithID - я предполагаю, что есть атрибут файла потока с этим именем, который содержит значение, которое будет использоваться в запросе sql для attachmentid

def ff=session.get()
if(!ff)return

SQL.mydb.eachRow("""
    select [File]
    from dbo.Attachment
    where attachmentid=${ff.AttributeWithID}
"""){row->
    ff.write{outStream-> 
        outStream << row.getBinaryStream(1)
    }
}
REL_SUCCESS << ff
...