ClickHouse для переноса Parquet в MySQL

ClickHouse для переноса Parquet в MySQL

ClickHouse добавил удобный способ загружать данные из Parquet-файлов напрямую в MySQL. Инженеры получают инструмент для разовых и регулярных задач миграции без написания отдельного ETL-кода. Решение опирается на table functions и named collections, что упрощает подключение и повторное использование настроек.

Этот подход решает проблему отсутствия встроенного коннектора между форматом Parquet и MySQL. Раньше приходилось либо вручную конвертировать файлы, либо поднимать промежуточные скрипты на Python или Spark. Теперь ClickHouse выступает как быстрый посредник: он читает Parquet из S3 или локальных путей и сразу пишет в целевую таблицу MySQL. Table functions позволяют обращаться к внешним источникам как к обычным таблицам, а named collections хранят параметры подключения в одном месте для удобства и безопасности. Такой метод полезен при решении вопроса о переносе данных, когда нужно оценить скорость внедрения и минимизировать разработку собственного кода. Он подходит для тех случаев, где важна простота разовых операций или периодических обновлений без сложных конвейеров.

 

Как устроена загрузка

ClickHouse использует mysql table function для записи. В запросе указывают хост, базу, таблицу и учётные данные, после чего передают результат SELECT из url-функции или s3. Данные преобразуются на лету: ClickHouse сам приводит типы Parquet к типам MySQL, включая DateTime с миллисекундами и беззнаковые целые. Table function mysql даёт возможность выполнять вставку напрямую, избегая промежуточных файлов и снижая риск потери информации при конвертации. Функции для чтения Parquet из удалённых хранилищ или локальных путей обеспечивают гибкость источников, что важно при оценке, стоит ли применять инструмент для конкретного объёма данных.

Named collections позволяют вынести параметры подключения в конфигурацию. Это снижает риск ошибок при повторных запусках и упрощает передачу скриптов между окружениями. Вместо длинной строки с паролем в команде остаётся только имя коллекции. Такое разделение настроек помогает при принятии решения о регулярном использовании, поскольку упрощает поддержку и аудит доступа без раскрытия учётных данных в скриптах.

Производительность зависит от объёма и сети. В примере с 2,3 млн строк обработка заняла около 16 секунд. Для больших файлов важно следить за памятью и разбивать загрузку на части, если MySQL не справляется с единовременной вставкой. При оценке решения следует учитывать факторы сети, доступную память на сервере ClickHouse и возможности целевой базы принимать большие пакеты данных за раз. Это позволяет понять, подойдёт ли подход для задач с жёсткими временными ограничениями или лучше выбрать другие методы при очень больших объёмах.

 

Ограничения при работе

MySQL не поддерживает все конструкции ClickHouse. При передаче подзапроса ClickHouse пытается преобразовать синтаксис, но сложные выражения вроде tuple() могут вызвать ошибку на стороне MySQL. В таких случаях приходится писать чистый MySQL-SQL и передавать его как строку. Ограничение синтаксиса требует дополнительной проверки запросов перед запуском, что важно учитывать при решении о внедрении для сложных преобразований данных.

Отсутствует встроенная идемпотентность. При повторном запуске INSERT данные добавятся заново, если не предусмотреть уникальные ключи или предварительную очистку таблицы. Также нет автоматической обработки ошибок сети или таймаутов — при сбое придётся перезапускать весь процесс. Отсутствие идемпотентности и обработки ошибок означает дополнительную работу по контролю дубликатов и восстановлению после сбоев, что влияет на выбор метода для production-сценариев с высокими требованиями к целостности.

Для production-использования стоит добавить контроль типов и размера батчей. Parquet может содержать nullable-поля или вложенные структуры, которые MySQL не примет без явного преобразования в ClickHouse. Проверка совместимости типов и структур данных перед миграцией помогает избежать ошибок вставки и оценить объём доработок, необходимых для успешного переноса.

 

Применение в российских контурах

В изолированных сетях и на собственных серверах ClickHouse часто уже стоит рядом с MySQL. Инженеры могут использовать локальную сборку clickhouse-local для разовых переносов без поднятия дополнительных сервисов. Это особенно полезно при миграции отчётов или исторических данных из озёр Parquet в операционные базы. Локальное использование снижает затраты на инфраструктуру и упрощает запуск в закрытых контурах, где важно минимизировать внешние зависимости при оценке инструмента для внутренних задач.

Named collections упрощают передачу настроек между командами и окружениями. Достаточно скопировать фрагмент конфига, не раскрывая пароли в скриптах. При этом остаётся возможность запускать запросы к MySQL прямо из ClickHouse для проверки результатов без отдельных клиентов. Упрощение обмена настройками и возможность верификации напрямую из ClickHouse помогают при командной работе и аудите, влияя на решение о долгосрочном применении.

Перед внедрением стоит проверить совместимость типов и объём данных. Если файлы Parquet обновляются регулярно, имеет смысл обернуть загрузку в скрипт с проверкой контрольных сумм и логированием количества вставленных строк. Предварительная проверка и добавление контроля при регулярных запусках позволяют снизить риски и понять, оправдан ли выбор ClickHouse как посредника в конкретной инфраструктуре.

 

Источник

Это краткий разбор материала ClickHouse. Полная версия с примерами кода, схемами и деталями реализации — в оригинале: ClickHouse для переноса Parquet в MySQL.

Курс по теме — Построение DWH на ClickHouse

 

Построение DWH на ClickHouse

Код курса
CLICH
Ближайшая дата курса
12 октября, 2026
Продолжительность
24 ак.часов
Стоимость обучения
76 800