ClickHouse新手零基础入门教程|从零学会大数据实时分析(超详细无Docker实操版)
一、前言:为什么大数据时代必学ClickHouse?
很多刚入门大数据的同学,长期只用MySQL、Redis这类业务数据库,面对海量日志、用户行为、订单统计等场景时,经常遇到查询卡顿、统计超时、性能拉胯的问题。
这里给新手一句话通俗吃透ClickHouse:ClickHouse是一款开源、极速、轻量化的列式存储OLAP实时分析数据库,专门解决海量数据批量统计、聚合查询、实时报表场景的性能痛点。
日常开发中,这些场景首选ClickHouse:
-
用户运营:日活/月活统计、用户留存、访问行为分析
-
电商业务:订单销量排行、交易趋势、商品数据统计
-
运维监控:系统日志分析、接口调用统计、异常数据汇总
对于千万、亿级海量数据,MySQL聚合查询会越来越慢,分库分表也难以根治性能问题,而ClickHouse可以实现亿级数据秒级查询,是大数据分析的刚需工具。
本文摒弃晦涩理论,主打零基础、全实操、无踩坑,帮大家从部署到实战一站式入门!
二、核心基础概念(新手必懂,告别用错场景)
2.1 OLAP与OLTP的核心区别
数据库分为两大类型,搞懂这个,就不会混用MySQL和ClickHouse:
-
OLTP(事务型数据库):代表为MySQL、PostgreSQL。核心能力是高频增删改查、支持事务、保证数据一致性,用于存储核心业务数据(用户、订单、商品等)。
-
OLAP(分析型数据库):代表为ClickHouse、Doris、Hive。核心能力是海量数据批量写入、高效聚合统计、实时数据分析,不适合单条数据高频修改。
黄金场景区分(新手牢记):业务读写数据存MySQL,统计分析数据存ClickHouse!
2.2 为什么ClickHouse查询速度远超MySQL?
核心差异:MySQL行式存储,ClickHouse列式存储。
举个通俗例子:一张用户行为表包含用户ID、用户名、访问链接、访问时间、设备5个字段。
-
行式存储(MySQL):查询时会读取一整行所有字段,哪怕只统计访问量,也会加载大量冗余数据,IO开销大、速度慢。
-
列式存储(ClickHouse):数据按字段单独存储,统计数据时,仅读取需要的字段,大幅减少磁盘IO,查询效率呈指数级提升。
2.3 ClickHouse核心优缺点总结
新手快速掌握特性,精准适配业务场景:
-
查询极速:千万/亿级数据秒级聚合查询,碾压传统关系型数据库
-
写入高效:支持大批量、高并发实时数据写入
-
轻量化易部署:单节点部署简单、资源占用低、无需复杂架构
-
SQL兼容度高:语法贴近标准SQL,新手几乎零学习成本
-
短板明显:不支持高频单条数据更新、删除,仅适合批量数据清理
3.1 前置环境优化(必做,解决启动报错)
很多新手安装后出现启动失败、连接超限、性能异常问题,核心原因是Linux默认系统资源限制过低。安装前统一优化系统配置,适配ClickHouse运行要求。
1、修改文件句柄与进程限制
# 编辑系统资源限制配置 vim /etc/security/limits.d/20-clickhouse.conf
写入以下配置(解除文件、进程限制):
* soft nofile 65536 * hard nofile 65536 * soft nproc 131072 * hard nproc 131072
2、关闭透明大页(规避性能抖动)
# 临时生效 echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag # 永久生效(开机自动配置) vim /etc/rc.local
文件末尾添加两行:
echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 添加执行权限 chmod +x /etc/rc.local
3、关闭SELINUX(避免权限拦截)
# 临时关闭 setenforce 0 # 永久关闭 sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
配置完成后,重启服务器确保所有优化生效:reboot
3.2 官方源在线安装(替代失效packagecloud源)
重要说明:原教程packagecloud源已失效,会出现OS检测失败、下载超时等报错!以下为ClickHouse官方原生源,稳定无坑、适配CentOS7/8/9、Rocky、Ubuntu全系系统。
1、CentOS/RHEL/Rocky系统安装
# 安装基础依赖 yum install -y curl wget
# 导入官方GPG密钥 rpm --import https://packages.clickhouse.com/rpm/lts/repodata/repomd.xml.key
# 写入官方YUM源 wget -O /etc/yum.repos.d/clickhouse-lts.repo https://packages.clickhouse.com/rpm/lts/clickhouse.repo
# 清空并更新yum缓存 yum clean all && yum makecache
# 安装服务端+客户端(LTS长期稳定版,生产首选) yum install -y clickhouse-server clickhouse-client
如果显示签名无效,可按以下操作执行:
#清理旧的错误 ClickHouse 源文件:
rm -f /etc/yum.repos.d/clickhouse*.repo
#配置清华镜像 LTS 源(规避官方 404)
cat > /etc/yum.repos.d/clickhouse.repo <<'EOF'
[clickhouse]
name=ClickHouse LTS
baseurl=https://mirrors.tuna.tsinghua.edu.cn/clickhouse/rpm/lts/
gpgkey=https://packages.clickhouse.com/rpm/CLICKHOUSE-KEY.GPG
gpgcheck=1
enabled=1
EOF
#解决「软件包没有签名」报错(核心命令)
方案:关闭 GPG 签名校验(密钥地址 404 无法导入时最优解):
# 修改源配置关闭签名校验
sed -i 's/gpgcheck=1/gpgcheck=0/' /etc/yum.repos.d/clickhouse.repo
# 清理并重建yum缓存
yum clean all && yum makecache
#安装服务端 + 客户端
yum install -y clickhouse-server clickhouse-client
2、Ubuntu/Debian系统安装
# 更新依赖 apt update && apt install -y curl gnupg2 ca-certificates
# 导入官方密钥 curl -fsSL https://packages.clickhouse.com/DEB-GPG-KEY | gpg --dearmor > /usr/share/keyrings/clickhouse.gpg
# 添加官方源 echo "deb [signed-by=/usr/share/keyrings/clickhouse.gpg] https://packages.clickhouse.com/deb stable main" > /etc/apt/sources.list.d/clickhouse.list # 更新源并安装 apt update && apt install -y clickhouse-server clickhouse-client
安装完成后,可通过 clickhouse-client --version 验证安装是否成功。
三、零基础无Docker部署|Linux原生安装配置(全版本适配)
考虑到很多新手服务器无Docker环境,且生产环境多采用原生部署,本节详细讲解CentOS、Ubuntu全系Linux原生安装方案,包含配置修改、密码设置、开机自启、端口放行,一站式完成生产级部署。
部署优势:无容器依赖、资源占用更低、运行更稳定、支持开机自启、适配长期线上运行
环境要求:Linux服务器、具备root/sudo权限、服务器可正常联网
3.1 在线官方源安装(新手首选,自动适配系统)
3.2 核心配置修改(必做!否则无法远程连接)
ClickHouse默认仅支持本机访问,远程工具、本地客户端均无法连接,新手必须修改核心配置。
核心配置文件路径:/etc/clickhouse-server/config.xml
# 编辑核心配置文件 vim /etc/clickhouse-server/config.xml
修改1:开启全网远程访问
搜索 listen_host 配置,注释本地监听,开启全网监听:
<!-- 原配置(仅本机访问,注释掉)<listen_host>127.0.0.1</listen_host> -->
<listen_host>0.0.0.0</listen_host>
修改2:确认端口开放
默认端口已配置,只需确认存在以下配置,无需修改:
<http_port>8123</http_port> <tcp_port>9000</tcp_port>
端口说明:9000端口用于TCP客户端连接,8123端口用于HTTP接口和可视化工具访问。
3.3 配置登录密码(生产安全必备)
默认ClickHouse支持匿名无密码登录,公网部署存在极大安全风险,必须关闭匿名访问并设置密码。
用户权限配置文件路径:/etc/clickhouse-server/users.xml
# 编辑用户配置文件 vim /etc/clickhouse-server/users.xml
步骤1:关闭匿名登录
找到default用户配置,将匿名访问改为0:
<allow_anonymous>0</allow_anonymous>
步骤2:设置登录密码
找到password标签,取消注释,自定义密码(示例密码:123456):
<password>123456</password>
保存退出文件,重启服务后密码配置生效。
3.4 启动服务+设置开机自启
配置完成后,启动服务并配置开机自启,避免服务器重启后服务失效。
# 重启服务,加载最新配置 systemctl restart clickhouse-server
# 设置开机自启 systemctl enable clickhouse-server
# 查看服务运行状态 systemctl status clickhouse-server
页面显示 active (running) 绿色状态,代表服务启动成功!
3.5 放行防火墙/安全组端口(远程连接关键)
服务器防火墙、云服务器安全组默认拦截端口,必须放行8123、9000端口,否则外部无法连接数据库。
CentOS防火墙放行命令
# 放行TCP端口 firewall-cmd --permanent --add-port=8123/tcp firewall-cmd --permanent --add-port=9000/tcp
# 重载防火墙配置生效 firewall-cmd --reload
重要提醒:阿里云、腾讯云、华为云等云服务器,需在后台安全组策略中手动放行8123、9000端口!
3.6 本地客户端连接测试
执行密码登录命令,测试数据库是否正常可用:
# default用户密码登录(密码为前文设置的123456) clickhouse-client -u default --password 123456
出现 localhost :) 命令行提示符,代表完整部署+配置全部成功!
四、ClickHouse核心SQL实操(新手必学,兼容MySQL)
ClickHouse语法高度兼容MySQL,新手无需重新学习语法,仅需注意表引擎和数据类型差异即可。
本次操作在datagrip中进行,首先进行连接:

连接成功后会显示success,之后就可以进行数据库的操作啦。
4.1 数据库基础操作
-- 查看所有数据库 SHOW DATABASES;
-- 创建自定义数据库 CREATE DATABASE IF NOT EXISTS test_db;
-- 切换使用指定数据库 USE test_db;
-- 删除数据库 DROP DATABASE IF EXISTS test_db;
4.2 常用数据类型(新手够用版)
无需记忆全部类型,掌握以下常用类型即可满足90%开发场景:
-
数值类型:Int32、Int64、Float32、Float64
-
字符串类型:String(无长度限制,替代MySQL的Varchar)
-
时间类型:DateTime(精确到秒)、Date(仅年月日)
-
布尔替代:UInt8(用0/1代表false/true)
4.3 数据表创建(MergeTree核心引擎)
MergeTree是ClickHouse默认、最高性能的核心表引擎,支持排序、分区、索引,适配绝大多数数据分析场景,是新手唯一需要掌握的引擎。
实操创建用户行为测试表:
CREATE TABLE IF NOT EXISTS user_behavior
( user_id Int64,
username String,
visit_url String,
visit_time DateTime,
device String )
ENGINE = MergeTree()
ORDER BY visit_time; -- 排序字段,MergeTree引擎必填项
4.4 增删改查基础实操
1、批量插入测试数据
INSERT INTO user_behavior VALUES
(1001,'张三','/home','2026-06-20 10:20:30','手机'),
(1002,'李四','/detail','2026-06-20 10:25:20','电脑'),
(1001,'张三','/cart','2026-06-20 10:30:10','手机'),
(1003,'王五','/home','2026-06-20 11:10:00','平板');
2、基础条件查询
-- 查询全表数据 SELECT * FROM user_behavior;
-- 条件查询指定用户数据 SELECT * FROM user_behavior WHERE user_id = 1001;
-- 按访问时间倒序排序 SELECT * FROM user_behavior ORDER BY visit_time DESC;
3、聚合统计(核心核心场景)
聚合统计是ClickHouse的核心优势,函数用法与MySQL完全一致:
-- 统计总访问次数 SELECT COUNT(*) AS total_visit FROM user_behavior;
-- 统计每个用户的访问次数
SELECT user_id,username,COUNT(*) AS visit_count FROM user_behavior GROUP BY user_id,username;
-- 统计各设备的访问量 SELECT device,COUNT(*) AS count FROM user_behavior GROUP BY device;
4、数据删除(新手重点注意)
ClickHouse不支持高频单条数据删除,删除、更新均为异步操作,性能较差,仅适合批量清理数据:
-- 删除指定条件数据 ALTER TABLE user_behavior DELETE WHERE user_id = 1003;
-- 清空整张表数据 TRUNCATE TABLE user_behavior;
五、实战案例:日常数据分析场景落地
基于上面创建的用户行为表,实操两个企业常用数据分析需求,快速吃透ClickHouse实战用法。
案例1:统计每日用户访问数据
通过toDate()内置函数将时间戳转为日期,实现按天统计:
SELECT
toDate(visit_time) AS visit_date,
COUNT(DISTINCT user_id) AS active_user_num,
COUNT(*) AS total_visit_num
FROM user_behavior
GROUP BY visit_date;
案例2:统计高频访问页面排行
SELECT
visit_url,
COUNT(*) AS visit_count
FROM user_behavior
GROUP BY visit_url
ORDER BY visit_count DESC;
六、新手高频踩坑总结(完美避坑)
坑1:MergeTree引擎建表报错
原因:MergeTree引擎必须指定ORDER BY排序字段,不能为空,这是新手最常见报错。
坑2:数据插入成功但查询不到
原因:ClickHouse数据为异步落盘,少量测试数据存在延迟。
解决方案:执行命令强制刷新数据:OPTIMIZE TABLE 表名 FINAL;
坑3:远程连接超时、连接失败
常见原因:未开启0.0.0.0全网监听、服务器防火墙未放行端口、云服务器安全组未配置端口规则。
坑4:用ClickHouse做高频数据修改
避坑要点:ClickHouse是分析型数据库,不适合UPDATE/DELETE高频操作,业务数据修改全部交给MySQL,ClickHouse只负责查询和批量写入。
七、学习总结与进阶方向
本文核心知识点复盘
-
ClickHouse是OLAP分析型数据库,主打海量数据实时聚合统计,与MySQL场景互补
-
列式存储是其查询速度远超传统数据库的核心原理
-
原生Linux部署无需Docker,配置远程访问、密码、端口是部署关键
-
MergeTree是核心表引擎,掌握基础SQL即可完成入门数据分析
-
严格区分场景区分:业务读写用MySQL,海量分析用ClickHouse
后续进阶学习路线
-
进阶优化:表分区、主键索引、稀疏索引优化,提升大数据查询性能
-
数据同步:实现MySQL数据实时同步至ClickHouse
-
集群部署:搭建高可用集群、分片与副本配置
-
实时数仓:结合Flink+ClickHouse搭建实时数据仓库
结语
ClickHouse是大数据开发、后端开发的刚需技能,上手门槛极低,无需深厚的底层原理基础,只要会基础SQL就能快速落地使用。新手学习切忌眼高手低,先熟练掌握部署、基础SQL、简单数据分析,再逐步深入性能优化和集群架构,循序渐进就能快速吃透!
如果本文对你有帮助,欢迎点赞、收藏、关注,后续持续更新ClickHouse进阶优化、实时数仓实战、数据同步等干货教程!
更多推荐

所有评论(0)