Предварительные требования
ClickHouse можно собирать на Linux, FreeBSD и macOS. Если вы используете Windows, вы все равно можете собрать ClickHouse в виртуальной машине под управлением Linux, например, с помощью VirtualBox с Ubuntu.
Создание репозитория на GitHub
Чтобы начать разработку для ClickHouse, вам понадобится аккаунт на GitHub. Пожалуйста, также создайте локально SSH-ключ (если у вас его еще нет) и загрузите публичный ключ на GitHub, так как это является предварительным требованием для внесения исправлений.
Затем, сделайте форк репозитория ClickHouse в своем личном аккаунте, нажав кнопку "fork" в правом верхнем углу.
Чтобы внести изменения, например, исправление для проблемы или реализацию функции, сначала зафиксируйте свои изменения в ветке вашего форка, затем создайте "Pull Request" с изменениями в основной репозиторий.
Для работы с Git-репозиториями установите Git. Например, в Ubuntu выполните:
Шпаргалку по Git можно найти здесь. Подробную документацию по Git можно найти здесь.
Клонирование репозитория на вашу рабочую машину
Сначала загрузите исходные файлы на вашу рабочую машину, т.е. клонируйте репозиторий:
Эта команда создает директорию ClickHouse/
, содержащую исходный код, тесты и другие файлы. Вы можете указать пользовательскую директорию для извлечения после URL, но важно, чтобы этот путь не содержал пробелов, так как это может нарушить сборку позже.
Git-репозиторий ClickHouse использует подмодули для подключения сторонних библиотек. Подмодули по умолчанию не извлекаются. Вы можете либо
-
запустить
git clone
с опцией--recurse-submodules
, -
если
git clone
выполнен без--recurse-submodules
, выполнитеgit submodule update --init --jobs <N>
, чтобы явно извлечь все подмодули. (<N>
можно установить, например, на12
для параллельной загрузки.) -
если
git clone
выполнен без--recurse-submodules
и вы хотите использовать sparse и shallow извлечение подмодулей, чтобы опустить ненужные файлы и историю в подмодулях и сэкономить место (около 5 ГБ вместо около 15 ГБ), выполните./contrib/update-submodules.sh
. Этот способ используется CI, но не рекомендуется для локальной разработки, так как это делает работу с подмодулями менее удобной и медленной.
Чтобы проверить статус Git-подмодулей, выполните git submodule status
.
Если вы получите следующее сообщение об ошибке
значит отсутствуют SSH-ключи для подключения к GitHub. Эти ключи обычно находятся в ~/.ssh
. Чтобы SSH-ключи были признаны, их нужно загрузить в настройках GitHub.
Вы также можете клонировать репозиторий по HTTPS:
Однако это не позволит вам отправлять ваши изменения на сервер. Вы все равно можете временно использовать его и добавить SSH-ключи позже, заменив адрес удаленного репозитория с помощью команды git remote
.
Вы также можете добавить адрес оригинального репозитория ClickHouse в ваш локальный репозиторий, чтобы получать обновления оттуда:
После успешного выполнения этой команды вы сможете получать обновления из основного репозитория ClickHouse, выполнив команду git pull upstream master
.
Пожалуйста, не используйте дословно git push
, вы можете отправить в неправильный удаленный репозиторий и/или в неправильную ветку. Лучше явно указывать имена удаленного репозитория и ветки, например git push origin my_branch_name
.
Написание кода
Ниже приведены несколько быстрых ссылок, которые могут быть полезны при написании кода для ClickHouse:
- Архитектура ClickHouse.
- Руководство по стилю кода.
- Сторонние библиотеки
- Написание тестов
- Открытые проблемы
IDE
Visual Studio Code и Neovim – два варианта, которые в прошлом хорошо работали для разработки ClickHouse. Если вы используете VS Code, мы рекомендуем использовать расширение clangd, чтобы заменить IntelliSense, так как оно работает гораздо быстрее.
CLion – еще один отличный вариант. Однако он может быть медленнее на больших проектах, таких как ClickHouse. Несколько вещей, которые стоит иметь в виду при использовании CLion:
- CLion создает путь
build
самостоятельно и автоматически выбираетdebug
для типа сборки - Он использует версию CMake, которая определена в CLion, а не установленную вами
- CLion будет использовать
make
для выполнения задач сборки вместоninja
(это нормально)
Другие IDE, которые вы можете использовать: Sublime Text, Qt Creator или Kate.
Создание Pull Request
Перейдите в ваш форк репозитория в интерфейсе GitHub. Если вы разрабатывали в ветке, вам нужно выбрать эту ветку. На экране будет кнопка "Pull request". По сути, это означает "создать запрос на принятие моих изменений в основной репозиторий".
Pull request можно создать даже если работа еще не завершена. В этом случае, пожалуйста, добавьте слово "WIP" (работа в процессе) в начале заголовка, его можно будет изменить позже. Это полезно для совместного ревью и обсуждения изменений, а также для запуска всех доступных тестов. Важно, чтобы вы предоставили краткое описание ваших изменений, оно позже будет использовано для генерации списка изменений в релизе.
Тестирование начнется, как только сотрудники ClickHouse пометят ваш PR тегом "можно тестировать". Результаты некоторых первых проверок (например, стиль кода) будут доступны через несколько минут. Результаты проверки сборки поступят в течение получаса. Основной набор тестов сообщит о себе в течение часа.
Система подготовит бинарные сборки ClickHouse для вашего pull request индивидуально. Чтобы получить эти сборки, нажмите на ссылку "Details" рядом с записью "Builds" в списке проверок. Там вы найдете прямые ссылки на собранные .deb пакеты ClickHouse, которые вы можете развернуть даже на своих производственных серверах (если вас это не пугает).
Написание документации
Каждый pull request, который добавляет новую функцию, должен сопровождаться соответствующей документацией. Если вы хотите просмотреть изменения в вашей документации, инструкции по сборке страницы документации локально доступны в файле README.md здесь. При добавлении новой функции в ClickHouse вы можете использовать приведенный ниже шаблон в качестве ориентира:
Использование тестовых данных
Разработка ClickHouse часто требует загрузки реалистичных наборов данных. Это особенно важно для тестирования производительности. У нас есть специально подготовленный набор анонимизированных данных веб-аналитики. Для этого требуется дополнительно около 3 ГБ свободного дискового пространства.
В clickhouse-client:
Импорт данных: