package storage import ( "context" "fmt" "github.com/ClickHouse/clickhouse-go/v2" "github.com/ClickHouse/clickhouse-go/v2/lib/driver" ) type ClickHouseConfig struct { Host string User string Password string Database string } func OpenClickHouse(cfg ClickHouseConfig) (driver.Conn, error) { conn, err := clickhouse.Open(&clickhouse.Options{ Addr: []string{cfg.Host}, Auth: clickhouse.Auth{ Database: cfg.Database, Username: cfg.User, Password: cfg.Password, }, Settings: clickhouse.Settings{ "max_execution_time": 60, }, Compression: &clickhouse.Compression{ Method: clickhouse.CompressionLZ4, }, DialTimeout: 30, MaxOpenConns: 10, MaxIdleConns: 5, ConnMaxLifetime: 3600, ConnOpenStrategy: clickhouse.ConnOpenInOrder, }) if err != nil { return nil, fmt.Errorf("clickhouse connect: %w", err) } if err := conn.Ping(context.Background()); err != nil { return nil, fmt.Errorf("clickhouse ping: %w", err) } return conn, nil }