Как работать с Clickhouse в Golang
Для работы с ClickHouse в Go можно использовать официальную библиотеку ClickHouse Go. Этот драйвер позволяет напрямую взаимодействовать с ClickHouse через протокол TCP. Вот базовый пример, который демонстрирует, как можно подключиться к ClickHouse, выполнять запросы и обрабатывать результаты.
Установка библиотеки
Сначала нужно установить библиотеку ClickHouse Go:
1 2 |
go get github.com/ClickHouse/clickhouse-go/v2 |
Пример подключения к ClickHouse
Ниже приведен пример программы на Go, которая подключается к серверу ClickHouse, выполняет простой SQL-запрос и выводит результаты.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
package main import ( "context" "fmt" "log" "github.com/ClickHouse/clickhouse-go/v2" ) func main() { // Настройка соединения conn, err := clickhouse.Open(&clickhouse.Options{ Addr: []string{"127.0.0.1:9000"}, // адрес ClickHouse Auth: clickhouse.Auth{ Database: "default", // база данных Username: "default", // пользователь Password: "", // пароль }, }) if err != nil { log.Fatal(err) } // Проверка соединения if err := conn.Ping(context.Background()); err != nil { log.Fatal("Connection failed:", err) } // Пример выполнения простого SELECT-запроса rows, err := conn.Query(context.Background(), "SELECT version()") if err != nil { log.Fatal(err) } defer rows.Close() // Обработка результатов for rows.Next() { var version string if err := rows.Scan(&version); err != nil { log.Fatal(err) } fmt.Println("ClickHouse version:", version) } if err := rows.Err(); err != nil { log.Fatal(err) } } |
Объяснение ключевых частей:
- Настройка подключения:
- Параметры
Addr
,Auth
указывают на адрес сервера и параметры аутентификации. - ClickHouse использует TCP-соединение по умолчанию, обычно на порту 9000.
- Параметры
- Проверка соединения:
- Используется метод
Ping
, чтобы убедиться, что соединение установлено корректно.
- Используется метод
- Выполнение запросов:
- Метод
Query
отправляет SQL-запрос к серверу, в данном примере запрашивается версия ClickHouse. - Далее, через цикл
rows.Next()
происходит обработка строк результата.
- Метод
- Обработка ошибок:
- Ошибки обрабатываются сразу после выполнения запросов или подключения.
Поддержка сложных запросов
ClickHouse поддерживает сложные аналитические запросы. Например, можно выполнить агрегации или вставки данных:
Вставка данных:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// Вставка данных в таблицу batch, err := conn.PrepareBatch(context.Background(), "INSERT INTO my_table (id, name) VALUES") if err != nil { log.Fatal(err) } for i := 0; i < 10; i++ { if err := batch.Append(i, fmt.Sprintf("Name %d", i)); err != nil { log.Fatal(err) } } if err := batch.Send(); err != nil { log.Fatal(err) } |
Выполнение агрегационного запроса:
Recommended Posts
Что такое oneof в Protobuf?
25.04.2024