admin管理员组文章数量:1642331
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/docs/zh/interfaces/http
https://clickhouse/docs/zh/interfaces/jdbc
https://clickhouse/docs/zh/interfaces/cli
https://clickhouse/docs/zh/sql-reference/statements/
2.1建表与上传文件
执行bash
,进入容器
sudo docker exec -it some-clickhouse-server bash
进入clickclient
创建数据库:
create database clickhousetest
在数据库中创建两个表:employee
和library
:
employee
表
CREATE TABLE clickhousetest.employee (`id` Int32, `name` String, `bonus` Int32, `department` String) ENGINE = MergeTree ORDER BY id SETTINGS index_granularity=8192
library
表
CREATE TABLE clickhousetest.library (`id` Int32, `visit_date` String, `people` Int32) ENGINE = MergeTree ORDER BY id SETTINGS index_granularity=8192
上传两个CSV文件到服务器的文件中:
进入docker命令行,将服务器中文件导入到docker容器的目录sunyunqi下:
docker cp /home/ubuntu/clickhouse some-clickhouse-server:/sunyunqi/
然后执行下面的命令,将employee表中的内容以csv的格式读入到clickhouse.employee
表中:
clickhouse-client --query="INSERT INTO clickhousetest.employee FORMAT CSV" < ./sunyunqi/employee.csv
library操作一样,结果如下:
clickhouse-client --query="INSERT INTO clickhousetest.library FORMAT CSV" < ./sunyunqi/library.csv
2.2 HTTP形式查询library表
执行bash后,执行下面命令可以得到结果为OK
curl 'http://localhost:8123'
下面查询employee表:
echo 'SELECT * FROM clickhousetest.employee' | curl 'http://localhost:8123/' --data-binary @-
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
-
在上表的结果中挑选出count大于3的即为最终结果。
4.目录结构
随便找一个employee表进去:
- 分区目录
all_1_1_0和all_2_2_0都是分区目录
分区ID_最小数据块编号_最大数据块编号_层级构成。在本例中,分区ID是all, 最小数据块编号是1,最大数据库编号是1,层级是0
- 卸载后的表分区目录
通过DETACH语句卸载后的表分区存放位置
- 插入一条数据后查看存储文件发生变化
clickhouse-client --query="INSERT INTO clickhousetest.employee (*) values (8, 'sunyunqi', 1000, 'GWY')"
层级构成发生变化,可能是发生了合并?
本文标签: 使用说明ClinkHouse
版权声明:本文标题:ClinkHouse基本使用说明 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1729329130a1196157.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论