Обновить

Комментарии 8

Недавно тоже занимался подобной задачей. Доработал свое приложение ImportExportDataSql (работает только под Windows)
ImportExportDataSql теперь поддерживает копирование данных из MSSQL в ClickHouse и обратно (из ClickHouse в MSSQL).
Под капотом используется драйвер ClickHouse.Client и вставка работает блоками (количество строк в блоке можно задать пользователем) через классы ClickHouse.Client.Copy.ClickHouseBulkCopy и SqlBulkCopy.
Кроме этого, встроил SSRS отчеты для ClickHouse, теперь можно генерить отчеты одновременно подключаясь к MSSQL и ClickHouse в одном отчете.
Сам отчет создается в ReportBuilder, а ImportExportDataSql читает XML-файл отчета и генерит его в форматах PDF, Excel (xls и xlsx), Word (doc, docx), Image (tiff)
В универсальном конверторе ImportExportDataSql есть еще:

  • выгрузка из БД в файл [CSV, Excel, SQL] и обратно

  • выгрузка структуры БД в один файл или с разбиением по объектам

  • поддержка командной строки

Скриншоты приложения ImportExportDataSql
Конвертация данных из одной СУБД в другую
Конвертация данных из одной СУБД в другую
Настройка RDL (SSRS) отчета
Настройка RDL (SSRS) отчета

Судя по описанию, это больше похоже на интеграцию, которая у нас происходит через Kafka. Хотелось бы, конечно, ссылку на github, а не на vk. Но всё равно интересно. Спасибо.

ImportExportDataSql читает XML-файл отчета и генерит его в форматах PDF, Excel (xls и xlsx), Word (doc, docx), Image (tiff)

Вы что, полностью SSRS переписали?

По факту используется лишь компонент Microsoft.ReportViewer для отображения отчета. Сам SSRS не требуется устанавливать. Получается очень удобная embedded (портативная) версия SSRS, которая потребляет ресурсы лишь только во время построения отчета (запуска приложения ImportExportDataSql). Далее, готовый отчет отправляется на почту.

можно генерить отчеты одновременно подключаясь к MSSQL и ClickHouse в одном отчете.

SSRS поддерживает подключение к ClickHouse только через OLE DB for ODBC, что, как я описал в статье, катастрофически медленно и из-за этого почти не имеет практического применения.

ImportExportDataSql использует драйвер ClickHouse.Client, поэтому тормозов не наблюдается.

Не понимаю связи между кодом, на который Вы отказываетесь дать ссылку, и возможностями SSRS. Вы хотите сказать, что реализовали полностью пользовательский ,NET Data Provider для ClickHouse? Но тогда при чем тут ImportExportDataSql, если это по определению отдельный компонент в отдельной DLL?

Никакой магии в моем коде нет. Стандартная работа с классом Microsoft.Reporting.WinForms.ReportViewer. Выполняем SQL запрос к СУБД (ClickHouse, MSSQL или любой другой с нормальным провайдером), получаем DataTable и отправляем его в ReportViewer, строим отчет и получаем его в нужном формате.

Просто ImportExportDataSql делает это динамически, читает параметры и SQL запросы из RDLC (по факту это XML) файла используя провайдер ClickHouse.Client. В скором времени добавлю туда другие СУБД, которые не поддерживаются стандартным SSRS.

Выполняем SQL запрос к СУБД (ClickHouse, MSSQL или любой другой с нормальным провайдером), получаем DataTable и отправляем его в ReportViewer, строим отчет и получаем его в нужном формате

Вы не видите разницы между этим, и тем что Вы написали ранее?

можно генерить отчеты одновременно подключаясь к MSSQL и ClickHouse в одном отчете

Ну ладно, на пальцах:

SELECT ...
FROM mssqldatasource.mssqldb.dbo.table1 M1
JOIN clickhousedatasource.clickhousedb.table2 C1
  ON M1.some_field = C1.some_field
WHERE M1.another_field = ? AND С2.another_field = ?

Так как ClickHouse ODBC не поддерживает четырехуровневое именование, то такой запрос на MS SQL не реализуем. Как этот запрос в SSRS будет обработан средствами ImportExportDataSql? Будем считать, что кардинальность some_field низкая только в сочетании с another_field. То есть, для примера, пусть фильтрация только по another_field даёт миллион записей, а всего запрос возвращает тысячу записей.

Если бы SSRS работал с MS SQL и ClickHouse через соответствующие .NET Data Provider, то он бы выполнил push-down. А что происходит у Вас?

P.S. Обратите внимание, что в решении, описанном в статье, реализовать push-down в ClickHouse не представляет проблем и не требует передачи миллионов строк по сети.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации