Краткое руководство
Сведения о подключении
| Параметры | Описание |
|---|---|
HOST and PORT | Обычно используется порт 9440 при использовании TLS или 9000 без TLS. |
DATABASE NAME | По умолчанию доступна база данных default; используйте имя базы данных, к которой хотите подключиться. |
USERNAME and PASSWORD | По умолчанию используется имя пользователя default. Используйте имя пользователя, подходящее для вашего сценария. |
clickhouse-client.
Если вы используете самоуправляемый ClickHouse, сведения о подключении задаются администратором ClickHouse.
Инициализация модуля
Скопируйте пример кода
clickhouse-golang-example и сохраните его в файле main.go.
main.go
Запустите go mod tidy
Укажите сведения о подключении
main.go в функции connect():
Запустите пример
Подробнее
Обзор
- clickhouse-go - Высокоуровневый клиент, поддерживающий либо стандартный интерфейс Go
database/sql, либо API ClickHouse. - ch-go - Низкоуровневый клиент. Только нативный интерфейс.
Четыре способа подключения
clickhouse-go предоставляет два независимых варианта: какой API использовать и какой транспорт использовать. В сочетании они дают четыре режима подключения:
| TCP (собственный протокол, порт 9000/9440) | HTTP (порт 8123/8443) | |
|---|---|---|
API ClickHouse (clickhouse.Open) | По умолчанию — максимальная производительность | Укажите Protocol: clickhouse.HTTP |
API database/sql (OpenDB / sql.Open) | clickhouse://host:9000 | http://host:8123 |
database/sql, если нужна интеграция с ORM или инструментами, которым требуется стандартный интерфейс базы данных Go.
Выбор транспорта: TCP быстрее и используется по умолчанию. Переключайтесь на HTTP, если этого требует ваша инфраструктура — например, при подключении через HTTP-балансировщик или proxy, либо если вам нужны специфичные для HTTP возможности, такие как сеансы с временными таблицами или дополнительные алгоритмы сжатия (gzip, deflate, br).
Оба API используют собственное двоичное кодирование независимо от транспорта, поэтому HTTP не добавляет накладных расходов на serialization.
| Native format | TCP transport | HTTP transport | Bulk write | Struct marshaling | Сжатие | Обратные вызовы прогресса | |
|---|---|---|---|---|---|---|---|
| API ClickHouse | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
API database/sql | ✅ | ✅ | ✅ | ✅ | ✅ |
Выбор клиента
interface{} (any), что упрощает работу.
Для рабочих нагрузок запросов, ориентированных на агрегации, или вставки с меньшей пропускной способностью clickhouse-go предоставляет привычный интерфейс database/sql и более простую модель работы со строками. При необходимости вы также можете использовать HTTP в качестве транспортного протокола и воспользоваться вспомогательными функциями для маршалинга строк в структуры и обратно.
| Native format | Собственный протокол | HTTP-протокол | API с построчной моделью | API с моделью по столбцам | Гибкость типов | Сжатие | Плейсхолдеры запросов | |
|---|---|---|---|---|---|---|---|---|
| clickhouse-go | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| ch-go | ✅ | ✅ | ✅ | ✅ |
Установка
require github.com/ClickHouse/clickhouse-go/v2 main
Или клонируйте репозиторий:
Версионирование
Совместимость с ClickHouse
- Все версии ClickHouse, которые в настоящее время поддерживаются и перечислены здесь. Когда поддержка версий ClickHouse прекращается, они также перестают проходить активное тестирование на совместимость с релизами клиента.
- Все версии ClickHouse в течение 2 лет с даты релиза клиента. Обратите внимание: активно тестируются только LTS-версии.
Совместимость с Golang
| Версия клиента | Версии Golang |
|---|---|
| => 2.0 <= 2.2 | 1.17, 1.18 |
| >= 2.3, < 2.41 | 1.18+ |
| >= 2.41 | 1.21+ |
| >= 2.43 | 1.24+ |
Рекомендации
- По возможности используйте API ClickHouse, особенно для примитивных типов. Это позволяет избежать существенных накладных расходов на рефлексию и дополнительные уровни косвенности.
- Если вы читаете большие наборы данных, рассмотрите возможность изменить
BlockBufferSize. Это увеличит потребление памяти, но позволит декодировать больше блоков параллельно при итерации по строкам. Значение по умолчанию — 2; оно выбрано с запасом и минимизирует накладные расходы по памяти. Чем выше значение, тем больше блоков будет находиться в памяти. Здесь требуется тестирование, так как разные запросы могут создавать блоки разного размера. Поэтому этот параметр можно задавать на уровне запроса через Context. - При вставке данных явно указывайте типы. Хотя клиент старается быть гибким — например, позволяет разбирать строки как UUID или IP-адреса, — это требует проверки данных и влечет дополнительные затраты во время вставки.
- По возможности используйте столбцовые вставки. Они также должны быть строго типизированы, чтобы клиенту не приходилось преобразовывать ваши значения.
- Следуйте рекомендациям ClickHouse для достижения оптимальной производительности вставки.
Следующие шаги
- Конфигурация — настройки подключения, TLS, аутентификация, логирование, сжатие
- API ClickHouse — нативный API Go для запросов и операций вставки
- API Database/SQL — стандартный интерфейс
database/sql - Типы данных — сопоставление типов Go и поддержка сложных типов