大数据 -135 ClickHouse 集群连通性自检 + 数据类型避坑实战|10 分钟跑通 ON CLUSTER

TL;DR
场景:三节点集群已安装完毕,如何 10 分钟内验证连通 / 复制 / 分片 / 分布式查询都正常?
结论:按本文 SOP,一条脚本跑完连通性检查 → 创建 ReplicatedMergeTree/Distributed → 跨分片写读压测。
产出:cluster_check.sql(系统表体检)、ddl_on_cluster.sql(建表)、mini_bench.sql(压测)。
版本矩阵
最小可运行示例
测试连接
如果可以从 122 连接到 121 说明你的服务已经搭建好了。你可以测试以下,是否三台节点之间都是互通的,确保服务和服务之间一切正常,方便我们后续的学习研究。
检验集群
任意连接一个节点,我们进行测试
h121
h122
h123
数据类型
简单介绍
ClickHouse 作为一个面向 OLAP 场景的高性能列式数据库,在数据处理语言(DML)支持方面有其独特的设计。与传统的关系型数据库不同,ClickHouse 通过以下特性来优化数据处理性能:
复合数据类型支持:
提供 Array、Tuple、Nested 等复合数据类型
支持 Map、JSON 等半结构化数据格式
例如:
Array(String)可以存储字符串数组,Tuple(Int32, String)可以存储不同类型的组合数据数据修改操作的实现:
Update 和 Delete 操作是通过 ALTER TABLE 语句的变种实现的
例如:
ALTER TABLE table_name DELETE WHERE condition又如:
ALTER TABLE table_name UPDATE column=value WHERE condition这种设计避免了传统数据库的锁机制,提高了批量操作的效率
性能优化特点:
采用批量处理而非单行操作
适合大批量数据的分析场景
通过 MergeTree 引擎实现高效的数据修改
修改操作是异步执行的,会生成新的数据部分(part)而非原地修改
这种设计使 ClickHouse 在保持高性能的同时,也能支持必要的数据修改操作,特别适合数据仓库和分析型应用场景。
启动测试
我这里采用了 h121 机器的服务,当然如果你使用别的机器的服务也可以。
整型
固定长度的整型,包括有符号整型,和无符号整型。
执行的结果截图如下图:
浮点型
建议尽可能以整数形式存储数据,例如,将固定精度的数字转换为整数值,如时间用毫秒为单位表示,因为浮点型计算行为可能引起四舍五入的误差。
执行的结果如下图:
Decimal
如果要求更高精度,可以选择 Decimal 类型,格式:Decimal(P,S)
P:代表精度,决定总位数(正数部分+小数部分),取值 0-38
S:代表规模,决定小数位数,取值范围是 0-P
ClickHouse 对 Decimal 提供三种简写:
Decimal32
Decimal64
Decimal128
相加、减精度取大
运行结果的截图如下图所示:
相乘精度取和
运行结果的截图如下图所示:
相除精度取被除数
运行结果的截图如下图所示:
字符串
String
字符串可以任意长度,它可以包含任意的字符集,包含空字节。
FixedString(N)
固定长度为 N 的字符串,N 必须是严格的正自然数。当服务端读取长度小于 N 的字符串时候,通过在字符串末尾添加空字节来达到 N 字节长度。当服务端读取长度小于 N 的字符串的时候,将返回错误。
执行结果如下图:
UUID
ClickHouse 将 UUID 这种在传统数据库中充当主键的类型直接做成了数据类型
创建新表
执行结果如下图:
插入数据
执行结果如下图:
查询结果
执行结果如下图:
枚举类型
包括 Enum8 和 Enum16 类型,保存 string = integer 的对应关系。Enum8 用 String = Int8 对描述 Enum16 用 String = Int16 对描述。
创建新表
执行结果如下所示:
注意:这个列 x 只能存储定义列出的值,“Hello” 或者 “world”,如果插入其他值则会报错。
插入数据
执行结果如下图:
查询数据
如果需要看到对应行的数值,则必须将 Enum 转换为整数类型。
执行结果如下图:
数组
Array(T):由 T 类型元素组成的数组。T 可以是任意类型,包含数组类型,但不推荐使用多维数组,ClickHouse 对多维数组的支持有限。例如,不能再 MergeTree 表中存储多维数组。
创建数组
执行结果如下图:
如果是声明字段的时候,则需要指明数据类型:
元组
Tuple(T1,T2):元组,每个元素都有单独的类型。创建元组的示例:
执行的结果如下图:
注意:在定义表字段的时候也需要指明数据类型。
Date、DateTime
日期类型、用两个字节存储,表示 1970-01-01 (无符号)到当前的日期值。
布尔型
没有单独的类型来存储布尔值,可以使用 UInt8 类型,取值限制为 0 或 1。
错误速查
其他系列
🚀 AI 篇持续更新中(长期更新)
AI 炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私有部署 测试上手 架构研究,持续打造实用 AI 工具指南!AI-调查研究-108-具身智能 机器人模型训练全流程详解:从预训练到强化学习与人类反馈🔗 AI模块直达链接
💻 Java 篇持续更新中(长期更新)
Java-154 深入浅出 MongoDB 用 Java 访问 MongoDB 数据库 从环境搭建到 CRUD 完整示例 MyBatis 已完结,Spring 已完结,Nginx 已完结,Tomcat 已完结,分布式服务正在更新!深入浅出助你打牢基础!🔗 Java模块直达链接
📊 大数据板块已完成多项干货更新(300 篇):
包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT 案例 详解🔗 大数据模块直达链接
版权声明: 本文为 InfoQ 作者【武子康】的原创文章。
原文链接:【http://xie.infoq.cn/article/a4381deb081adcbaf109ca2bc】。文章转载请联系作者。







评论