1、软件包
公众号软件包下载
2、简介
ClickHouse 是一个用于联机分析 (OLAP) 的列式数据库管理系统 (DBMS). 由俄罗斯搜索引擎巨头 Yandex 开源. 主要用于数据分析领域, 目前国内社区火热, 各个大厂纷纷跟进大规模用于 OLAP 领域。
一起来看下 ClickHouse 官网怎么介绍它的一些特性:
快速:ClickHouse会充分利用所有可用的硬件,以尽可能快地处理每个查询。单个查询的峰值处理性能超过每秒 2 TB(解压缩后,仅使用的列)。在分布式设置中,读取健康副本之间自动平衡的,以避免增加延迟。
容错:ClickHouse支持多主机异步复制,并且可以跨多个数据中心进行部署。所有节点都相等,这可以避免出现单点故障。单个节点或整个数据中心的停机时间不会影响系统的读写可用性。
可伸缩:ClickHouse可以在垂直和水平方向上很好地缩放。ClickHouse易于调整以在具有数百或数千个节点的群集上或在单个服务器上,甚至在小型虚拟机上执行。当前,每个单节点安装的数据量超过数万亿行或数百兆兆字节。
易用:ClickHouse简单易用,开箱即用。它简化了所有数据处理:将所有结构化数据吸收到系统中,并且立即可用于构建报告。SQL允许表达期望的结果,而无需涉及某些DBMS中可以找到的任何自定义非标准API。
3、充分利用硬件
ClickHouse与具有相同的可用I/O吞吐量和CPU容量的传统面向性的系统相比,其处理典型的分析查询要快两到三个数量级。列式存储格式允许在RAM中容纳更多热数据,从而缩短了响应时间。
提高CPU效率:向量化查询执行涉及相关的SIMD处理器指令和运行时代码生成。处理列中的数据会提高CPU行缓存的命中率。
优化磁盘访问:ClickHouse可以最大程度地减少范围查询的次数,从而提高了使用旋转磁盘驱动器的效率,因为它可以保持连续存储数据。
最小化数据传输:ClickHouse使公司无需使用专门针对高性能计算的专用网络即可管理其数据。
4、功能丰富
友好的SQL:ClickHouse具有用户友好的SQL查询,并具有许多内置分析功能。除了大多数DBMS中可以找到的常用功能外,ClickHouse还提供了许多特定的功能。
高效管理非规范化数据:ClickHouse的面向列性质允许每个表具有数百或数千列,而不会减慢SELECT查询的速度。通过利用广泛的数据组织选项,例如数组,元组和嵌套数据结构,可以打包更多数据。
连接分布式或共置数据:ClickHouse提供了用于联接表的各种选项。连接既可以是本地群集,也可以访问存储在外部系统中的数据。还有一个外部字典支持,它提供了另一种更简单的语法,用于从外部源访问数据。
近似查询处理:用户可以控制结果准确性和查询执行时间之间的权衡,这在处理多个TB或PB的数据时非常方便。ClickHouse还提供了概率数据结构,可快速有效地计算基数和分位数
5、可靠
ClickHouse一直在管理PB级数据,这些数据为俄罗斯领先的搜索提供商,欧洲最大的IT公司之一Yandex的大量高负载大众受众服务提供服务。自2012年以来,ClickHouse一直为公司的网络分析服务,比较电子商务平台,公共电子邮件服务,在线广告平台,商业智能工具和基础架构监控提供强大的数据库管理。
ClickHouse可以配置为位于独立节点上的纯分布式系统,而没有任何单点故障。
软件和硬件故障或配置错误不会导致数据丢失。ClickHouse不会删除“损坏的”数据,而是将其保存或询问您在启动前该怎么做。每次对磁盘或网络进行读取或写入之前,所有数据均经过校验和。几乎不可能意外删除数据,因为即使存在人为错误,也有保护措施。
ClickHouse提供了对查询复杂性和资源使用情况的灵活限制,可以通过设置对其进行微调。可以同时为多个高优先级低延迟请求和一些具有后台优先级的长时间运行的查询提供服务。
6、ClickHouse使用场景
何时使用ClickHouse
用于分析结构良好且不可变的事件或日志流,建议将每个此类流放入具有预连接维度的单个宽表中。
何时不使用ClickHouse
不适合事务性工作负载(OLTP)、高价值的键值请求、Blob或文档存储。
7、ClickHouse 安装教程
ClickHouse 可以在任何具有 x86_64 ,AArch64 或 PowerPC64LE CPU 架构的 Linux ,FreeBSD 或 Mac OS X 上运行。貌似不能在 Windows 系统下安装,不过 ClickHouse 同样支持 Docker 部署,Windows 系统可以在 Docker 下安装 ClickHouse 。
根据官方文档推荐:Debian 或 Ubuntu 系统可以使用官方预编译的 deb 软件包来安装,CentOS 、RedHat 等Linux发行版可以使用官方预编译的 rpm 包 来安装,如果您的操作系统不支持安装 deb 或 rpm 包,也可以使用 tgz 软件包或直接源码编译安装。下面我们以 CentOS 系统为例,以 rpm 方式来安装下 ClickHouse。
# 查看系统版本
[root@ecs-148b-0202920 ~]# more etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
# 检测当前CPU是否支持SSE 4.2
[root@ecs-148b-0202920 ~]# grep -q sse4_2 proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
SSE 4.2 supported
# 添加官方存储库
[root@ecs-148b-0202920 ~]# sudo yum install yum-utils
[root@ecs-148b-0202920 ~]# sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
[root@ecs-148b-0202920 ~]# sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64
# 安装clickhouse
[root@ecs-148b-0202920 ~]# sudo yum install clickhouse-server clickhouse-client
# 启动clickhouse
[root@ecs-148b-0202920 ~]# sudo etc/init.d/clickhouse-server start
8、clickhouse遇到的报错问题及解决方法
指定配置文件启动
#启动报错
[root@ecs-148b-0202920 ~]# sudo clickhouse-server --config-file=/etc/clickhouse-server/config.xml
2020.08.20 18:49:28.189321 [ 29338 ] {} <Error> Application: DB::Exception: Effective user of the process (root) does not match the owner of the data (clickhouse). Run under 'sudo -u clickhouse'
#解决办法,已经有了提示,Run under ‘sudo -u clickhouse’.
[root@ecs-148b-0202920 ~]# sudo -u clickhouse clickhouse-server --config-file=/etc/clickhouse-server/config.xml
9、进入clickhouse客户端
[root@ecs-148b-0202920 ~]# clickhouse-client
ClickHouse client version 20.12.5.14 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.12.5 revision 54442.
localhost :) select 1;
SELECT 1
Query id: 42f5e589-2f81-44e2-9fb8-de45e682acfc
┌─1─┐
│ 1 │
└───┘
1 rows in set. Elapsed: 0.002 sec.
localhost :) select now();
SELECT now()
Query id: c4c867a9-ae0e-4d6c-bb19-057e96cf6624
┌───────────────now()─┐
│ 2021-01-13 10:19:14 │
└─────────────────────┘
1 rows in set. Elapsed: 0.004 sec.
10、Clickhouse远程登录
[root@ecs-148b-0202920 ~]# vim etc/clickhouse-server/config.xml
找到<listent_host>::</listen_host> 去掉注释

11、客户端连接(DBeaver)
1.主机:Clickhouse远程登录服务器的IP
2.用户名、密码:默认default,密码为空
3.Dbeaver有社区版的,因为是客户端,操作起来会比tabix更方便、好用一些


12、ClickHouse 简单操作
ClickHouse 支持有限的 SQL 操作,SQL 语法和传统的关系型数据库有相似之处,ClickHouse 的基础语法。
# 1.创建数据库
# 语法:
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)]
# 示例:
[root@ecs-148b-0202920 ~]# clickhouse-client
ClickHouse client version 20.12.5.14 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.12.5 revision 54442.
localhost :) create database test;
CREATE DATABASE test
Query id: c17cbf32-ab8c-45a0-8ebb-a7b0bdb88efe
Ok.
0 rows in set. Elapsed: 0.015 sec.
localhost :) use test;
USE test
Query id: 4eeadf20-e8bc-4b84-a953-71cf16e133b6
Ok.
0 rows in set. Elapsed: 0.001 sec.
# 2.创建表
# 语法:
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [compression_codec] [TTL expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [compression_codec] [TTL expr2],
...
) ENGINE = engine
# 示例:
[root@ecs-148b-0202920 ~]# clickhouse-client
ClickHouse client version 20.12.5.14 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.12.5 revision 54442.
localhost :) use test;
USE test
Query id: 37248a4f-36ec-4ed3-a08a-c345db228c98
Ok.
0 rows in set. Elapsed: 0.001 sec.
localhost :) create table t1 (id Int32,name String) engine=TinyLog;
CREATE TABLE t1
(
`id` Int32,
`name` String
)
ENGINE = TinyLog
Query id: 8296c170-72fa-4852-8447-ab548fa3b7b8
Ok.
0 rows in set. Elapsed: 0.230 sec.
localhost :) show tables;
SHOW TABLES
Query id: 7da8d2d5-e4ed-45f1-b96c-4d23924512ba
┌─name─┐
│ t1 │
└──────┘
1 rows in set. Elapsed: 0.007 sec.
# TinyLog是最简单的表的引擎,用于将数据存储在磁盘上。常用于小表。
# 3.插入数据
# 示例:
[root@ecs-148b-0202920 ~]# clickhouse-client
ClickHouse client version 20.12.5.14 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.12.5 revision 54442.
localhost :) use test;
USE test
Query id: 71a1de2a-17fe-4a0b-b9b6-7e934016892e
Ok.
0 rows in set. Elapsed: 0.001 sec.
localhost :) insert into t1 (id, name) values (1, 'abc'), (2, 'bbbb'),(3,'sdfg');
INSERT INTO t1 (id, name) VALUES
Query id: d4982851-8b52-4158-949f-fa94cd7d8ff3
Ok.
3 rows in set. Elapsed: 0.002 sec.
localhost :) select * from t1;
SELECT *
FROM t1
Query id: b73f366c-702e-4bda-b519-cb087754bbad
┌─id─┬─name─┐
│ 1 │ abc │
│ 2 │ bbbb │
│ 3 │ sdfg │
└────┴──────┘
3 rows in set. Elapsed: 0.002 sec.
虽然 SQL 语法和关系型数据库有相似之处,但还是要摒弃已有的思维来学习 ClickHouse 。特别是数据类型、表引擎及其他特性,这些都是陌生的,学习下来还是有难度的。
欢迎大家扫码关注:

本公众号只写原创,不接广告、不接广告、不接广告。下期小伙伴想学习什么技术,可以私信发我吆。





