Перейти к основному содержимому
Перейти к основному содержимому

Сторонние библиотеки

ClickHouse использует сторонние библиотеки для различных целей, например, для подключения к другим базам данных, для декодирования/кодирования данных при загрузке/сохранении на/с диска или для реализации определённых специализированных SQL функций. Для того чтобы быть независимым от доступных библиотек в целевой системе, каждая сторонняя библиотека импортируется как подмодуль Git в дерево исходного кода ClickHouse и компилируется и связывается с ClickHouse. Список сторонних библиотек и их лицензий можно получить следующим запросом:

Обратите внимание, что указанные библиотеки находятся в директории contrib/ репозитория ClickHouse. В зависимости от параметров сборки некоторые библиотеки могут не быть скомпилированы, и, как следствие, их функциональность может быть недоступна во время выполнения.

Пример

Добавление и поддержка сторонних библиотек

Каждая сторонняя библиотека должна располагаться в отдельной директории под директории contrib/ репозитория ClickHouse. Избегайте копирования внешнего кода в директорию библиотеки. Вместо этого создайте подмодуль Git, чтобы получить сторонний код из внешнего репозитория.

Все подмодули, используемые ClickHouse, перечислены в файле .gitmodule.

  • Если библиотека может использоваться как есть (что является стандартным случаем), вы можете ссылаться на внешний репозиторий напрямую.
  • Если библиотеку необходимо модифицировать, создайте форк внешнего репозитория в организации ClickHouse на GitHub.

В последнем случае мы стремимся изолировать пользовательские патчи от коммитов из основного репозитория. Для этого создайте ветку с префиксом ClickHouse/ от ветки или тега, который вы хотите интегрировать, например, ClickHouse/2024_2 (для ветки 2024_2) или ClickHouse/release/vX.Y.Z (для тега release/vX.Y.Z). Избегайте следования основным веткам разработки master/ main / dev (т.е. создавайте ветки с префиксом ClickHouse/master / ClickHouse/main / ClickHouse/dev в форк-репозитории). Такие ветки являются изменяющимися целями, что усложняет правильное версионирование. "Префиксные ветки" гарантируют, что пуллы из основного репозитория в форк не затронут пользовательские ветки ClickHouse/. Подмодули в contrib/ должны отслеживать только ветки ClickHouse/ форкнутых сторонних репозиториев.

Патчи применяются только к веткам ClickHouse/ внешних библиотек.

Существует два способа это сделать:

  • вам нужно сделать новый фикс против ветки с префиксом ClickHouse/ в форкнутом репозитории, например, исправление санитайзера. В этом случае отправьте фикс как ветку с префиксом ClickHouse, например, ClickHouse/fix-sanitizer-disaster. Затем создайте PR из новой ветки против пользовательской отслеживаемой ветки, например, ClickHouse/2024_2 <-- ClickHouse/fix-sanitizer-disaster и объедините PR.
  • вы обновляете подмодуль и нужно повторно применить прежние патчи. В этом случае повторное создание старых PR - это избыточно. Вместо этого просто выберите старые коммиты в новую ветку ClickHouse/ (соответствующую новой версии). Не стесняйтесь уменьшать количество коммитов PR, которые имели множество коммитов. В лучшем случае, мы внесли пользовательские патчи обратно в основной репозиторий и можем опустить патчи в новой версии.

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

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