ClinkHouse基本使用说明

1.clickhouse的下载安装

这部分没有什么需要特别说明的,按照官方文档下载安装即可。
官方帮助文档
提前需要准备linux环境:准备clickhouse安装环境,如Mac OS或Linux(虚拟机或云服务器均可)
这里使用的是云服务器。

2.clickhousse的基本使用

实验内容:

  • 上传下发的employee.csv文件到clickhouse的employee表 ,并通过控制台打印出来。employee的列名称为id,name(员工姓名),bonus(奖金),department(部门)
  • 使用某种语言连接clickhouse,新建library表,上传library.csv文件到library表
  • 使用HTTP请求方式查询library表

参考文档:
https://clickhouse.com/docs/zh/interfaces/http
https://clickhouse.com/docs/zh/interfaces/jdbc
https://clickhouse.com/docs/zh/interfaces/cli
https://clickhouse.com/docs/zh/sql-reference/statements/

2.1建表与上传文件

执行bash,进入容器

sudo docker exec -it some-clickhouse-server bash

image-20220515005100736

进入clickclient

image-20220515005015339

创建数据库:

create database clickhousetest

image-20220515010324157

在数据库中创建两个表:employeelibrary

  • employee
CREATE TABLE clickhousetest.employee (`id` Int32, `name` String, `bonus` Int32, `department` String) ENGINE = MergeTree ORDER BY id SETTINGS index_granularity=8192

image-20220515011028336

  • library
CREATE TABLE clickhousetest.library (`id` Int32, `visit_date` String, `people` Int32) ENGINE = MergeTree ORDER BY id SETTINGS index_granularity=8192

image-20220515011421068

上传两个CSV文件到服务器的文件中:

image-20220515005909365

进入docker命令行,将服务器中文件导入到docker容器的目录sunyunqi下:

docker cp /home/ubuntu/clickhouse some-clickhouse-server:/sunyunqi/

image-20220515010304069

然后执行下面的命令,将employee表中的内容以csv的格式读入到clickhouse.employee表中:

clickhouse-client --query="INSERT INTO clickhousetest.employee FORMAT CSV" < ./sunyunqi/employee.csv

image-20220515012349764

library操作一样,结果如下:

clickhouse-client --query="INSERT INTO clickhousetest.library FORMAT CSV" < ./sunyunqi/library.csv

image-20220515012323510

2.2 HTTP形式查询library表

执行bash后,执行下面命令可以得到结果为OK

curl 'http://localhost:8123'

image-20220515013359549

下面查询employee表:

echo 'SELECT * FROM clickhousetest.employee' | curl 'http://localhost:8123/' --data-binary @-

image-20220515014106626

3.OLAP查询

3.1 查询employee表每个部门的奖金最高的前两个人
select e1.name, e1.bonus, e1.department, e1.ranks from (
     select name, bonus, department, 
            dense_rank() over (partition by department order by bonus desc) as ranks
     from clickhousetest.employee) as e1
 where e1.ranks<=3

在这里插入图片描述


功能描述:根据PARTITION BY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置。组内的数据按PARTITION BY子句排序,然后给每一行赋一个号,从而形成一个序列,该序列从1开始,往后累加。每次ORDER BY表达式的值发生变化时,该序列也随之增加。有同样值的行得到同样的数字序号(认为null时相等的)。密集的序列返回的时没有间隔的数.

3.2 查询图书馆浏览次数大于99人,而且id连续的行数不止3行的数据
SELECT id, visit_date, people from
(
    select *, count(*) over (partition by differ) as count
    from
    (
        select id, visit_date, people, (id - g) as differ
			from 	
                (select id, visit_date, people, row_number() OVER (order by id) as g
                 from clickhousetest.library as s
                 WHERE s.people > 99) as temp
    ) as s1
) as s2
where s2.count >= 3 order by id
  • 首先需要得到访问人数大于99人的表:temp,并且在这个表中我们记录现在的行号g

  • 使用原来的id减去现在的行号g,得到一个结果记做differ,这个differ反映了数据是否是连续的

在这里插入图片描述

  • 根据这个是否连续的值进行分组,计算这个组的有多少行,作为一个新的属性count

    image-20220515102244470

  • 在上表的结果中挑选出count大于3的即为最终结果。

image-20220515102440100

4.目录结构

image-20220515105008756

image-20220515103040565

随便找一个employee表进去:

image-20220515103422458

  • 分区目录

all_1_1_0和all_2_2_0都是分区目录

分区ID_最小数据块编号_最大数据块编号_层级构成。在本例中,分区ID是all, 最小数据块编号是1,最大数据库编号是1,层级是0

image-20220515103400482

  • 卸载后的表分区目录

通过DETACH语句卸载后的表分区存放位置

  • 插入一条数据后查看存储文件发生变化
clickhouse-client --query="INSERT INTO clickhousetest.employee (*) values (8, 'sunyunqi', 1000, 'GWY')"

image-20220515104508397
image-20220515104802787

层级构成发生变化,可能是发生了合并?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blanche117

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值