48 lines
1006 B
Go
48 lines
1006 B
Go
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
|
|
}
|