You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

73 lines
1.7 KiB

package ck
import (
"sig-pub/pkg/config"
"sig-pub/pkg/zlog"
clickhousev2 "github.com/ClickHouse/clickhouse-go/v2"
"gorm.io/driver/clickhouse"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
type ClickhouseDB struct {
cfg config.ClickhouseConfig
db *gorm.DB
}
func NewClickhouseDB(cfg config.ClickhouseConfig) *ClickhouseDB {
return &ClickhouseDB{
cfg: cfg,
}
}
// InitClickhouse 初始化ck
// https://github.com/go-gorm/clickhouse
// dsn: clickhouse://gorm:gorm@localhost:9942/gorm?dial_timeout=10s&read_timeout=20s
func (c *ClickhouseDB) Init() (err error) {
gormConfig := &gorm.Config{}
if c.cfg.Logsql {
gormConfig.Logger = logger.Default.LogMode(logger.Info) // 打印sql
}
// initial db
options, err := c.cfg.Clickhousev2Options()
if err != nil {
return
}
ckDB := clickhousev2.OpenDB(options)
c.db, err = gorm.Open(clickhouse.New(clickhouse.Config{Conn: ckDB}), gormConfig)
if err != nil {
return
}
return
}
func (c *ClickhouseDB) DB() *gorm.DB {
return c.db
}
// sql查询数据
func (c *ClickhouseDB) Select(r interface{}, sql string, args ...any) (err error) {
return c.db.Raw(sql, args...).Scan(r).Error
}
// 批量插入
func (c *ClickhouseDB) Insert(data any) (err error) {
err = c.db.Create(data).Error
return
}
// AutoMigrateTables 自动对齐表结构,自动根据字段修改数据库表结构,只会加改不会删字段
func (c *ClickhouseDB) AutoMigrateTables(gormStructs ...any) (err error) {
if len(gormStructs) == 0 {
return
}
err = c.db.AutoMigrate(gormStructs...)
if err != nil {
zlog.Errorf("type auto migrate clickhouse table error: %v", err)
return
}
// db.Set("gorm:table_options", "ENGINE=Distributed(cluster, default, hits)").AutoMigrate(&entity.TradeRecord{})
return
}