ClickHouse学习条记

[复制链接]
发表于 2026-2-6 10:09:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1 概述


      
  • ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库(DBMS),使用 C++语言编写,重要用于在线分析处置处罚查询(OLAP),可以大概使用 SQL 查询及时生因素析数据陈诉。  
  • ClickHouse特点:
         
    • 接纳列式存储   
    • 险些覆盖了标准 SQL 的大部门语法,包罗 DDL 和 DML,以及配套的各种函数,用户管理及权限管理,数据的备份与规复。   
    • 多样化引擎:ClickHouse 和 MySQL 雷同,把表级的存储引擎插件化,根据表的差别需求可以设定差别的存储引擎。如今包罗归并树、日志日志、接口和其他四大类 20 多种引擎。   
    • 高吞吐写入本事:ClickHouse 接纳类 LSM Tree的布局,数据写入后定期在背景 Compaction。通过类 LSM tree的布局,ClickHouse 在数据导入时全部是次序 append 写,写入后数据段不可更改,在背景compaction 时也是多个段 merge sort 后次序写回磁盘。次序写的特性,充实使用了磁盘的吞吐本事,即便在 HDD 上也有着优秀的写入性能。官方公开 benchmark 测试体现可以大概到达 50MB-200MB/s 的写入吞吐本事,按照每行100Byte 估算,约莫相称于 50W-200W 条/s 的写入速率。   
    • 数据分区与线程级并行:ClickHouse 将数据分别为多个 partition,每个 partition 再进一步分别为多个 index granularity(索引粒度),然后通过多个 CPU焦点分别处置处罚此中的一部门来实现并行数据处置处罚。在这种筹划下,单条 Query 就能使用整机全部 CPU。极致的并行处置处罚本事,极大的低落了查询延时。以是,ClickHouse 纵然对于大量数据的查询也可以大概化整为零平行处置处罚。但是有一个毛病就是对于单条查询使用多 cpu,就倒霉于同时并发多条查询。以是对于高 qps 的查询业务,ClickHouse 并不是刚强。   
    • ClickHouse 像很多 OLAP 数据库一样,单表查询速率由于关联查询,而且 ClickHouse的两者差距更为显着。   
      
2 安装


      
  • 准备工作:
         
    • 关闭防火墙
         
    • CentOS 取消打开文件数限定,并同步到三台集群节点
      1. # 在 hadoop102 的 /etc/security/limits.conf 文件的末尾加入以下内容
      2. * soft nofile 65536
      3. * hard nofile 65536
      4. * soft nproc 131072
      5. * hard nproc 131072
      6. # 在 hadoop102 的/etc/security/limits.d/20-nproc.conf 文件的末尾加入以下内容
      7. * soft nofile 65536
      8. * hard nofile 65536
      9. * soft nproc 131072
      10. * hard nproc 131072
      复制代码
         
    • 在三台集群节点上安装依靠
      1. sudo yum install -y libtool
      2. sudo yum install -y *unixODBC*
      复制代码
         
    • CentOS 取消 SELINUX,并同步到三台集群节点,重启收效
      1. # 修改/etc/selinux/config 中的 SELINUX=disabled
      2. [atguigu@hadoop102 ~]$ sudo vim /etc/selinux/config
      3. SELINUX=disabled
      复制代码
        
      
2.1 单机安装


      
  • 官网:https://clickhouse.tech/
    下载地点:http://repo.red-soft.biz/repos/clickhouse/stable/el7/
      
  • 单机安装步调
         
    • 在 hadoop102 的/opt/software 下创建 clickhouse 目次,并上传安装包,同步到三台节点

         
    • 在三台节点上安装这4个文件,会要求设置默认用户default的暗码,这里设置为admin,也可以直接回车不设置暗码;安装乐成后clickhouse的设置文件目次在/etc/clickhouse-*下,lib目次在/var/lib/clickhouse下,log目次在/var/log/clickhouse,下令在/usr/bin或/usr/sbin
      1. sudo rpm -ivh *.rpm
      复制代码
         
    • 修改设置文件/etc/clickhouse-server/config.xml,把 <listen_host>::</listen_host> 的表明打开,如许的话才气让 ClickHouse 被除本机以外的服务器访问,并分发设置文件
         
    • 在任一台节点上启动server
      1. sudo systemctl start clickhouse-server
      2. 或
      3. sudo clickhouse start
      4. # 查看clickhouse状态
      5.   sudo systemctl status clickhouse-server
      6.   或
      7.   sudo clickhouse status
      复制代码
         
    • 关闭开机自启
      1. sudo systemctl disable clickhouse-server
      复制代码
         
    • 使用client毗连server,-m :可以在下令窗口输入多行下令;–password输入默认用户名;其他参数可以通过–help来查察。
      1. clickhouse-client --password admin -m
      复制代码
        
      
2.2 集群安装

3 ClickHouse的数据范例

      
  • 有符号整型(-2(n-1)~2(n-1)-1)
    Int8 - [-128 : 127]
    Int16 - [-32768 : 32767]
    Int32 - [-2147483648 : 2147483647]
    Int64 - [-9223372036854775808 : 9223372036854775807]
      
  • 无符号整型
    UInt8 - [0 : 255]
    UInt16 - [0 : 65535]
    UInt32 - [0 : 4294967295]
    UInt64 - [0 : 18446744073709551615]
    整型使用场景:个数、数目、也可以存储型 id
      
  • 浮点型:发起尽大概以整数情势存储数据。比方,将固定精度的数字转换为整数值,如时间用毫秒为单位体现,由于浮点型举行盘算时大概引起四舍五入的偏差。
    Float32 - float
    Float64 – double
    浮点型使用场景:一样平常数据值比力小,不涉及大量的统计盘算,精度要求不高的时间。好比生存商品的重量。
      
  • 布尔型:没有单独的范例来存储布尔值。可以使用 UInt8 范例,取值限定为 0 或 1。
      
  • Decimal型:有符号的浮点数,可在加、减和乘法运算过程中保持精度。对于除法,最低有效数字会被扬弃(不舍入)。
    有三种声明:
    ➢ Decimal32(s),相称于 Decimal(9-s,s),有效位数为 1~9
    ➢ Decimal64(s),相称于 Decimal(18-s,s),有效位数为 1~18
    ➢ Decimal128(s),相称于 Decimal(38-s,s),有效位数为 1~38
    s 标识小数位
    使用场景: 一样平常金额字段、汇率、利率等字段为了包管小数点精度,都使用 Decimal举行存储。
      
  • 字符串:
    String:字符串可以恣意长度的。它可以包罗恣意的字节集,包罗空字节。
    FixedString(N):固定长度 N 的字符串,N 必须是严格的正自然数。当服务端读取长度小于 N 的字符串时间,通过在字符串末了添加空字节来到达 N 字节长度。 当服务端读取长度大于 N 的字符串时间,将返回错误消息。与 String 相比,少少会使用 FixedString,由于使用起来不是很方便。
    使用场景:名称、笔墨形貌、字符型编码。 固定长度的可以生存一些定长的内容,好比一些编码,性别等但是思量到肯定的变革风险,带来收益不敷显着,以是定长字符串使用意义有限。
      
  • 罗列范例:包罗 Enum8 和 Enum16 范例。Enum 生存 ‘string’= integer 的对应关系。Enum8 用 ‘String’= Int8 对形貌。Enum16 用 ‘String’= Int16 对形貌
    1. # 创建一个带有一个枚举 Enum8('hello' = 1, 'world' = 2) 类型的列,
    2. CREATE TABLE t_enum
    3. (
    4.     x Enum8('hello' = 1, 'world' = 2)
    5. )
    6. ENGINE = TinyLog;
    7. # 这个 x 列只能存储类型定义中列出的值:'hello'或'world'
    8. INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello');
    9. # 如果尝试保存任何其他值,ClickHouse 抛出异常
    10.   insert into t_enum values('a')
    11. #如果需要看到对应行的数值,则必须将 Enum 值转换为整数类型
    12. SELECT CAST(x, 'Int8') FROM t_enum;
    复制代码
    使用场景:对一些状态、范例的字段算是一种空间优化,也算是一种数据束缚。但是实际使用中通常由于一些数据内容的变革增长肯定的维护资本,乃至是数据丢失题目。以是审慎使用
      
  • 时间范例:如今 ClickHouse 有三种时间范例
    ➢ Date 担当年-月-日的字符串好比 ‘2019-12-16’
    ➢ Datetime 接*年-月-日 时:分:秒的字符串好比 ‘2019-12-16 20:50:10’
    ➢ Datetime64 担当年-月-日 时:分:秒.亚秒的字符串好比‘2019-12-16 20:50:10.66’
    日期范例,用两个字节存储,体现从 1970-01-01 (无符号) 到当前的日期值。
      
  • 数组:Array(T):由 T 范例元素构成的数组。T 可以是恣意范例,包罗数组范例。 但不保举使用多维数组,ClickHouse 对多维数组的支持有限。比方,不能在 MergeTree 表中存储多维数组。
    1. # 创建数组方式 1,使用 array 函数
    2. SELECT array(1, 2) AS x, toTypeName(x) ;
    3. # 创建数组方式 2:使用方括号
    4. SELECT [1, 2] AS x, toTypeName(x);
    复制代码

  • 另有很多数据布局,可以参考官方文档:https://clickhouse.yandex/docs/zh/data_types/

4 表引擎


      
  • 表引擎是 ClickHouse 的一大特色。可以说, 表引擎决定了怎样存储表的数据。包罗:
    ➢ 数据的存储方式和位置,写到那边以及从那边读取数据。
    ➢ 支持哪些查询以及怎样支持。
    ➢ 并发数据访问。
    ➢ 索引的使用(如果存在)。
    ➢ 是否可以实验多线程哀求。
    ➢ 数据复制参数。
    表引擎的使用方式就是必须显式在创建表时界说该表使用的引擎,以及引擎使用的相干
    参数。特殊注意:引擎的名称巨细写敏感。
      
  • TinyLog:以列文件的情势生存在磁盘上,不支持索引,没有并发控制。一样平常生存少量数据的小表,生产环境上作用有限。可以用于平常训练测试用。
    1. create table t_tinylog ( id String, name String) engine=TinyLog;
    复制代码
    <
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表