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 }