# Отчет: Реализация отправки данных о пользователе в ClickHouse с использованием Go ## Введение В рамках задачи было необходимо реализовать отправку данных о пользователе в ClickHouse с использованием языка программирования Go. В отчете описаны выполненные шаги, включая настройку окружения, создание таблицы в ClickHouse, написание кода на Go и проверку результатов. ## Выполненные действия ### Установка ClickHouse Для начала работы с ClickHouse была выполнена его установка на сервер. Использовалась команда для Ubuntu/Debian: ```bash sudo apt-get install clickhouse-server clickhouse-client ``` После установки сервер был запущен, и доступ к нему был проверен с помощью клиента clickhouse-client. ### Создание таблицы в ClickHouse Для хранения данных о пользователях была создана таблица users с использованием следующего SQL-запроса: ```sql CREATE TABLE users ( user_id UInt32, name String, email String, registered_at DateTime ) ENGINE = MergeTree() ORDER BY (user_id); ``` Таблица была успешно создана, и её структура проверена с помощью команды: ```sql DESCRIBE users; ``` ### Установка библиотеки clickhouse-go Для работы с ClickHouse в Go была установлена библиотека clickhouse-go. Установка выполнена с помощью команды: ```bash go get github.com/ClickHouse/clickhouse-go/v2 ``` ### Написание кода на Go Был написан код на Go для отправки данных о пользователе в ClickHouse. Код включает следующие шаги: 1. Подключение к ClickHouse. 2. Подготовка данных о пользователе. 3. Выполнение SQL-запроса для вставки данных. Код: ```go package main import ( "context" "database/sql" "fmt" "log" "time" _ "github.com/ClickHouse/clickhouse-go/v2" ) func main() { // Подключение к ClickHouse connect, err := sql.Open("clickhouse", "tcp://127.0.0.1:9000?username=default&password=&database=default") if err != nil { log.Fatalf("Ошибка подключения к ClickHouse: %v", err) } defer connect.Close() // Проверка соединения if err := connect.Ping(); err != nil { log.Fatalf("Ошибка проверки соединения: %v", err) } // Данные о пользователе userID := uint32(1) name := "John Doe" email := "john.doe@example.com" registeredAt := time.Now() // SQL-запрос для вставки данных query := ` INSERT INTO users (user_id, name, email, registered_at) VALUES (?, ?, ?, ?) ` // Выполнение запроса _, err = connect.ExecContext(context.Background(), query, userID, name, email, registeredAt) if err != nil { log.Fatalf("Ошибка при выполнении запроса: %v", err) } fmt.Println("Данные успешно отправлены в ClickHouse") } ``` ### Проверка данных в ClickHouse После выполнения кода была выполнена проверка данных в таблице users с помощью SQL-запроса: ```sql SELECT * FROM users; ``` Результат: ``` ┌─user_id─┬─name─────┬─email────────────────┬────registered_at────┐ │ 1 │ John Doe │ john.doe@example.com │ 2025-10-01 12:00:00 │ └─────────┴──────────┴──────────────────────┴─────────────────────┘ ``` Данные были успешно добавлены в таблицу. ## Заключение Задача по реализации отправки данных о пользователе в ClickHouse с использованием Go была успешно выполнена. Были выполнены следующие шаги: