ClickHouse 介绍

1、什么是ClickHouse

ClickHouse是俄罗斯的Yandex于2016年开源列式存储数据库(DBMS),主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。

2、优势

查询速度超快,支持秒亿行的吞吐。

3、使用

3.1 数据类型

注意:ClickHouse 的数据类型严格区分大小写。

3.1.1 整型

固定长度的整型,包括有符号整型或无符号整型。
整型范围(-2^(n-1) ~ 2^(n-1)-1):

Int8、Int16、Int32、Int64、Int128、Int256

无符号整型范围(0~ 2^(n)-1):
UInt8、UInt16、UInt32、UInt64、UInt128、UInt256

3.1.2 浮点型

Float32 - float
Float64 - double

尽可能以整数形式存储数据。例如,将固定精度的数字转换为整数值,例如货币数量或页面加载时间用毫秒为单位表示。因为浮点数进行计算可能引起四舍五入的误差。
与标准SQL相比,ClickHouse 支持以下类别的浮点数:

Inf  - 正无穷
-Inf - 负无穷
NaN  - 非数字

3.1.3 字符串

1)String
字符串可以任意长度的。它可以包含任意的字节集,包含空字节。

2) FixedString(N)
固定长度 N 的字符串(N 必须是严格的正自然数)。

当向ClickHouse中插入数据时:

  • 如果字符串包含的字节数少于N,将对字符串末尾进行空字节填充
  • 如果字符串包含的字节数大于N,将抛出 Too large value for FixedString(N) 异常。

当做数据查询时,ClickHouse不会删除字符串末尾的空字节。 如果使用WHERE子句,则须要手动添加空字节以匹配FixedString的值。

与String相比,极少会使用FixedString,因为使用起来不是很方便。

3.1.4 布尔值

从https://github.com/ClickHouse/ClickHouse/commit/4076ae77b46794e73594a9f400200088ed1e7a6e 之后,有单独的类型来存储布尔值。

在此之前的版本,没有单独的类型来存储布尔值。可以使用 UInt8 类型,取值限制为 0 或 1。具体见枚举类型。

3.1.5 枚举类型

枚举包括 Enum8Enum16 类型。Enum 保存 ‘String’=integer 的对应关系。

  • Enum8 用 ‘String’=Int8 描述。
  • Enum16 用 ‘String’=Int16 描述。

用法举例:
创建一个带有一个枚举 Enum8(‘hello’ = 1, ‘world’ = 2) 类型的列:

CREATE TABLE t_enum (
	x Enum8('hello' = 1, 'world' = 2)
) ENGINE = TinyLog

这个 x 列只能存储类型定义中列出的值:‘hello’ 或 ‘world’。如果您尝试保存任何其他值,ClickHouse 抛出异常。

注意:键值对不能同时为空,不允许重复,key允许为空字符串。

3.1.6 数组

Array(T) : 由 T 类型元素组成的数组。
T 可以是任意类型,包含数组类型。 但不推荐使用多维数组,ClickHouse 对多维数组的支持有限。例如,不能在 MergeTree 表引擎中存储多维数组。

创建数组:

array(T)[]	类型必须相同

举例:

SELECT array(1, 2) AS x
SELECT [1, 2] AS x

ClickHouse会自动检测数组元素,并根据元素计算出存储这些元素最小的数据类型。如果在元素中存在 NULL 或存在 可为空 类型元素,那么数组的元素类型将会变成 可为空

如果 ClickHouse 无法确定数据类型,它将产生异常。

3.1.6 元组

Tuple(T1, T2, …) :元组,其中每个元素都有单独的类型。

创建元组:

tuple(T1, T2, ...)		允许不同类型

举例:

 SELECT tuple(1,'a') AS x

3.1.7 日期

日期类型,用两个字节存储,表示从 1970-01-01 (无符号) 到当前的日期值。

DateDateTime、DateTime64
  • Date:精确到天。(2022-08-01)
  • DateTime:精确到秒。(2022-08-01 19:19:19)
  • DateTime64:精确到亚秒,可以设置精度。(2022-08-01 19:19:19.000)

3.2 表引擎

表引擎(即表的类型)决定了:

  • 数据的存储方式和位置,写到哪里以及从哪里读取数据。
  • 并发数据访问。
  • 索引的使用(如果存在)。
  • 是否可以执行多线程请求。
  • 数据复制参数。

3.2.1 TinyLog

最简单的表引擎,用于将数据存储在磁盘上。每列都存储在单独的压缩文件中,写入时,数据将附加到文件末尾

该引擎没有并发控制

  • 如果同时从表中读取和写入数据,则读取操作将抛出异常。
  • 如果同时写入多个查询中的表,则数据将被破坏。

这种表引擎的典型用法是 write-once : 首先只写入一次数据,然后根据需要多次读取。此引擎适用于相对较小的表(建议最多1,000,000行)。如果有许多小表,则使用此引擎是适合的,因为它需要打开的文件更少。当拥有大量小表时,可能会导致性能低下。

不支持索引。


3.2.2 Memory

内存引擎,数据以未压缩的原始形式直接保存在内存当中,服务器重启数据就会消失。读写操作不会相互阻塞,简单查询有非常高的查询性能(超过10G/s),因为没有磁盘读取,不需要解压缩或反序列化数据的过程。

不支持索引。

它可用于测试,适用于数据量又不太大(

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值