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-server
docker 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

其中 使用了 

  "github.com/uptrace/go-clickhouse/ch"
  "github.com/uptrace/go-clickhouse/chdebug"
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

 

posted @ 2022-08-20 13:52  小侠女  阅读(467)  评论(0编辑  收藏  举报