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
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 |
|
}
|
|
|