Краткое руководство
Сведения о подключении
Сведения о подключении для вашего сервиса ClickHouse Cloud доступны в консоли ClickHouse Cloud.
Выберите сервис, к которому хотите подключиться, и нажмите Connect:
Выберите Native — сведения будут показаны в примере команды
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 использовать и какой транспорт использовать. В сочетании они дают четыре режима подключения:
Выбор API: Выбирайте API ClickHouse, если нужна максимальная производительность и полный набор возможностей (обратные вызовы прогресса, столбцовые вставки, расширенная поддержка типов). Выбирайте
database/sql, если нужна интеграция с ORM или инструментами, которым требуется стандартный интерфейс базы данных Go.
Выбор транспорта: TCP быстрее и используется по умолчанию. Переключайтесь на HTTP, если этого требует ваша инфраструктура — например, при подключении через HTTP-балансировщик или proxy, либо если вам нужны специфичные для HTTP возможности, такие как сеансы с временными таблицами или дополнительные алгоритмы сжатия (gzip, deflate, br).
Оба API используют собственное двоичное кодирование независимо от транспорта, поэтому HTTP не добавляет накладных расходов на serialization.
Выбор клиента
interface{} (any), что упрощает работу.
Для рабочих нагрузок запросов, ориентированных на агрегации, или вставки с меньшей пропускной способностью clickhouse-go предоставляет привычный интерфейс database/sql и более простую модель работы со строками. При необходимости вы также можете использовать HTTP в качестве транспортного протокола и воспользоваться вспомогательными функциями для маршалинга строк в структуры и обратно.
Установка
require github.com/ClickHouse/clickhouse-go/v2 main
Или клонируйте репозиторий:
Версионирование
Совместимость с ClickHouse
- Все версии ClickHouse, которые в настоящее время поддерживаются и перечислены здесь. Когда поддержка версий ClickHouse прекращается, они также перестают проходить активное тестирование на совместимость с релизами клиента.
- Все версии ClickHouse в течение 2 лет с даты релиза клиента. Обратите внимание: активно тестируются только LTS-версии.
Совместимость с Golang
Рекомендации
- По возможности используйте API ClickHouse, особенно для примитивных типов. Это позволяет избежать существенных накладных расходов на рефлексию и дополнительные уровни косвенности.
- Если вы читаете большие наборы данных, рассмотрите возможность изменить
BlockBufferSize. Это увеличит потребление памяти, но позволит декодировать больше блоков параллельно при итерации по строкам. Значение по умолчанию — 2; оно выбрано с запасом и минимизирует накладные расходы по памяти. Чем выше значение, тем больше блоков будет находиться в памяти. Здесь требуется тестирование, так как разные запросы могут создавать блоки разного размера. Поэтому этот параметр можно задавать на уровне запроса через Context. - При вставке данных явно указывайте типы. Хотя клиент старается быть гибким — например, позволяет разбирать строки как UUID или IP-адреса, — это требует проверки данных и влечет дополнительные затраты во время вставки.
- По возможности используйте столбцовые вставки. Они также должны быть строго типизированы, чтобы клиенту не приходилось преобразовывать ваши значения.
- Следуйте рекомендациям ClickHouse для достижения оптимальной производительности вставки.
Следующие шаги
- Конфигурация — настройки подключения, TLS, аутентификация, логирование, сжатие
- API ClickHouse — нативный API Go для запросов и операций вставки
- API Database/SQL — стандартный интерфейс
database/sql - Типы данных — сопоставление типов Go и поддержка сложных типов