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

Библиотеки сторонних разработчиков

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

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

Пример

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

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

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

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

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

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

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

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

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

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