ClickHouse 本地Docker版搭建及Go链接体验Demo
1,Win10 用Docker 启动单机版本ClickHouse
Win10上用WSL搭建Docker 环境部署就不讲了,直接上ClickHouse的镜像部署;
找到官方Docker 镜像库,搜索选中:
clickhouse/clickhouse-server
https://hub.docker.com/r/clickhouse/clickhouse-server#networking
下载镜像和部署命令:
docker pull clickhouse/clickhouse-serverdocker run -d --name some-clickhouse-server --ulimit nofile=262144:262144 clickhouse/clickhouse-server
这里有个问题,就是部署完毕后,我不能直接访问,无论如何都连不上,后来想到docker的网络及端口问题(以前遇到过);
这里的解决办法是在Docker Hub 内移除之前启动的 容器,重新配置参数开启
我还是原端口映射的,配置好了以后,可以再去试试联通
参考资料:
https://hub.docker.com/r/clickhouse/clickhouse-server#networking 如何用Docker部署CK 单机版
https://clickhouse.com/docs/en/interfaces/http/ 如何验证CK 联通
https://docs.docker.com/config/containers/container-networking/#published-ports 如何配置Docker 端口映射
2,找一个可视化的工具访问CK的数据库和表
我找了这个,https://github.com/dbeaver; ClickHouse 会需要安装驱动,具体步骤简单,直接贴 一个别人的文档,我就不赘述了。
https://blog.csdn.net/duketyson2009/article/details/98206721, 作者:杜克泰森
对了,上面CK 部署好了,默认的用户名是default,无需密码链接;
这边用default 链接上后,可以执行简单命令创建 helloworld的数据库,显示执行成功;如下图:
然后通过SQL 创建一个测试数据库和表吧;首先通过, docker exec -it xiami-ck /bin/bash 进入container 内部;再通过 clickhouse-client 进入数据库
docker exec -it ck-server /bin/bash # 进入container clickhouse-client #进入数据库
执行创建命令(可以在Container 内部执行,也可以在DBeaver 中执行)
create database if not exists testUSER;
DROP TABLE if exists testUSER.test_user;
CREATE TABLE if not exists testUSER.test_user (
`id` Nullable(Int64),
`age` Nullable(Int64),
`name` Nullable(String)
) ENGINE = Memory
insert into testUSER.test_user (age, name) values(17,'xiaoming');
注意:如果遇到创建出错,需要Drop掉再执行,参考文档:https://clickhouse.com/docs/en/sql-reference/statements/drop
但是,还有一种情况是,drop无法执行,也无法创建;
这需要去删除 meta下的 database 文件;
3,写一个简单的Go程序链接 ClickHouse
其中 使用了
package main import ( "context" "fmt" "github.com/uptrace/go-clickhouse/ch" "github.com/uptrace/go-clickhouse/chdebug" ) func GetClickHouseDSN() string { return fmt.Sprintf( "clickhouse://%s:%s@%s:%d/%s?sslmode=disable", "default", "", "localhost", 9000, "testUSER", ) } func main() { ctx := context.Background() constr := config.GetClickHouseDSN() db := ch.Connect( ch.WithDSN(constr), ch.WithTimeout(5*time.Second), ch.WithDialTimeout(5*time.Second), ch.WithReadTimeout(5*time.Second), ch.WithWriteTimeout(5*time.Second), ch.WithPoolSize(100), ) //打印Query Error db.AddQueryHook(chdebug.NewQueryHook(chdebug.WithVerbose(true))) //联通测试 if err := db.Ping(ctx); err != nil { panic(err) } // 测试打印Query var num int if err := db.QueryRowContext(ctx, "SELECT 123").Scan(&num); err != nil { panic(err) } fmt.Println(num) //测试Drop和Create Table if err := db.ResetModel(ctx, (*Model)(nil)); err != nil { panic(err) } //测试写入一行 src := &Model{ID: 1, Text: "hello", Time: time.Now()} if _, err := db.NewInsert().Model(src).Exec(ctx); err != nil { panic(err) } //测试筛选where dest := new(Model) if err := db.NewSelect().Model(dest).Where("id = ?", src.ID).Limit(1).Scan(ctx); err != nil { panic(err) } fmt.Println(dest) }
执行结果
4, 参考资料
- 讲述ClickHouse 基本操作, https://www.cnblogs.com/qlqwjy/p/16592571.html
- Docker 启动Ck的命令行说明:https://www.lixin.help/2021/05/16/ClickHouse-Docker-Install.html
- CK 和LADP 打通用户,这个没体验:https://mp.weixin.qq.com/s?__biz=MzIzMDk0Njc1Nw==&mid=2247484197&idx=1&sn=f3bee19ac7175b6e5e0928e8acd77e1b&scene=21#wechat_redirect