本文主要包含如下内容:

  • ClickHouse适用场景
  • ClickHouse缺点
  • ClickHouse优点
  • ClickHouse表引擎-合并树
  • ClickHouse表引擎-合并树-稀疏索引
  • ClickHouse表引擎-内存引擎
  • ClickHouse表引擎-其他引擎
  • ClickHouse数据同步
  • ClickHouse数据类型
  • ClickHouse调优建议

整型

有符号整型(-2n-1~2n-1-1):

  • Int8 - [-128 : 127]
  • Int16 - [-32768 : 32767]
  • Int32 - [-2147483648 : 2147483647]
  • Int64 - [-9223372036854775808 : 9223372036854775807]

无符号整型范围(0~2n-1):

  • UInt8 - [0 : 255]
  • UInt16 - [0 : 65535]
  • UInt32 - [0 : 4294967295]
  • UInt64 - [0 : 18446744073709551615]

浮点型

  • Float32 - float
  • Float64 – double

布尔型

没有单独的类型来存储布尔值。可以使用 UInt8 类型,取值限制为 0 或 1。

字符串

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

  • 定长字符串 FixedString(N)
    固定长度 N 的字符串,N 必须是严格的正自然数。当服务端读取长度小于 N 的字符串时候,通过在字符串末尾添加空字节来达到 N 字节长度。 当服务端读取长度大于 N 的字符串时候,将返回错误消息。
    与String相比,极少会使用FixedString,因为使用起来不是很方便。

枚举类型

  • Enum8 用 'String'= Int8 对描述。
  • Enum16 用 'String'= Int16 对描述。

Enum 保存 'string'= integer 的对应关系。在 ClickHouse 中,尽管用户使用的是字符串常量,但所有含有 Enum 数据类型的操作都是按照包含整数的值来执行。这在性能方面比使用 String 数据类型更有效。
举例:

#新建一张带Enum8类型的表:
localhost :) CREATE TABLE enum_t ( et Enum8('a' = 1, 'b' = 2, 'c' =3)) ENGINE = TinyLog;
localhost :) DESC enum_t ;
┌─name─┬─type─────────────────────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ et │ Enum8('a' = 1, 'b' = 2, 'c' = 3) │ │ │ │ │ │
└──────┴──────────────────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘ #插入数据
localhost :) INSERT INTO enum_t(et) VALUES ('a'),('a'),('b'); #查看
localhost :) SELECT * FROM enum_t ;
┌─et─┐
│ a │
│ a │
│ b │
└────┘ #如果需要看到对应行的数值,则必须将 Enum 值转换为整数类型:
localhost :) SELECT CAST(et, 'Int8') FROM enum_t ;
┌─CAST(et, 'Int8')─┐
│ 1 │
│ 1 │
│ 2 │
└──────────────────┘

数据组

  • Array(T)

由 T 类型元素组成的数组。T 可以是任意类型,包含数组类型,但不推荐使用多维数组,ClickHouse 对多维数组的支持有限。
可以使用array()函数和中括号来创建数组

举例:

#新建两张带Array类型的表:
localhost :) CREATE TABLE array_t (arr Array(UInt8)) ENGINE = TinyLog;
localhost :) CREATE TABLE array_ta (arr Array(String)) ENGINE = TinyLog; #插入数组
localhost :) INSERT INTO array_t VALUES([1,2,3,4,5]),(array(11,22,33,44,55));
localhost :) INSERT INTO array_ta VALUES(['a','b','c']),(array('x','y','z','123')); #查看结果
localhost :) SELECT * FROM array_t ;
┌─arr──────────────┐
│ [1,2,3,4,5] │
│ [11,22,33,44,55] │
└──────────────────┘ localhost :) SELECT * FROM array_ta;
┌─arr─────────────────┐
│ ['a','b','c'] │
│ ['x','y','z','123'] │
└─────────────────────┘

元组

  • Tuple(T1, T2, ...)

元组,其中每个元素都有单独的类型。

举个例子:

#创建一张带tuple字段的表:
localhost :) CREATE TABLE tuple_t (ttt Tuple(Int8, String, Array(String), Array(Int8))) ENGINE = TinyLog; #插入数据
localhost :) INSERT INTO tuple_t VALUES((1, 'a', ['a', 'b', 'c'], [1, 2, 3])),(tuple(11, 'A', ['A', 'B', 'C'], [11, 22, 33])); #查看数据
localhost :) SELECT * FROM tuple_t ;
┌─ttt───────────────────────────────┐
│ (1,'a',['a','b','c'],[1,2,3]) │
│ (11,'A',['A','B','C'],[11,22,33]) │
└───────────────────────────────────┘

日期

  • Date

用两个字节存储,表示从 1970-01-01 (无符号) 到当前的日期值, 最小值输出为0000-00-00。

时间戳

  • DateTime

用四个字节(无符号的)存储 Unix 时间戳,允许存储与日期类型相同的范围内的值。最小值为 0000-00-00 00:00:00,时间戳类型值精确到秒。

ClickHouse学习笔记--ClickHouse的整体特性的更多相关文章

  1. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  2. C++ 学习笔记(一些新特性总结3)

    C++ 学习笔记(一些新特性总结3) public.protected 和 private 继承 public 继承时,基类的存取限制是不变的. class MyClass { public: // ...

  3. CSS学习笔记之CSS3新特性

    目录 1.边框 2.背景 3.文本 4.字体 5.转换 6.过渡 7.动画 8.多列 9.自定义尺寸 CSS 用于控制网页的样式和布局,而 CSS3 是最新的 CSS 标准,这篇文章将着重介绍 CSS ...

  4. ClickHouse 研讨会学习笔记(clickhouse tips and tricks)

    一.显示执行日志 clickhouse-client --send_logs_level=trace 或者进入client session 后输入 set send_logs_level = 'tra ...

  5. ClickHouse学习笔记

    1. 概述 ClickHouse是一个用于联机分析(OLAP:Online Analytical Processing)的列式数据库管理系统(DBMS:Database Management Syst ...

  6. linux初级学习笔记五:bash特性详解!(视频序号:03_2,3)

    本节学习的命令:history,alias,ualias,\CMD 本节学习的技能:   bash的特性 光标跳转 查看命令历史 命令历史的使用技巧 给命令起别名 命令替换 文件名通配符 shell: ...

  7. 【Pro ASP.NET MVC 3 Framework】.学习笔记.1.主要语言特性

    C# 是一个富有特性的语言,并不是所有的程序员都熟悉本书依赖的所有特性.在本章,我们看看作为一个好的MVC程序员需要知道的C#特性. 1 C#主要特性 } 1.1 使用扩展方法 扩展方法 在你不能拥有 ...

  8. LinQ实战学习笔记(二) C#增强特性

    C# 为支持LINQ添加了许多语言特性: 隐式类型局部变量 对象初始化器 Lambda表达式 扩展方法 匿名类型 了解这些新特性是全面了解LINQ的重要先解条件,因此请不要忽视它们. (一)  隐式类 ...

  9. [学习笔记] CDQ分治&整体二分

    突然诈尸.png 这两个东西好像都是离线骗分大法... 不过其实这两个东西并不是一样的... 虽然代码长得比较像 CDQ分治 基本思想 其实CDQ分治的基本思想挺简单的... 大概思路就是长这样的: ...

  10. HTML学习笔记之HTML5新特性

    目录 1.拖放 2.画布 3.可伸缩矢量图形 4.地理定位 5.Web 存储 6.应用缓存 7.Web Worker 1.拖放 拖放是一种常见的特性,用于抓取对象以后拖到另一个位置,它是 HTML5 ...

随机推荐

  1. 你也能成为“黑客”高手——趣谈Linux Shell编程语言

    作者:京东零售 杜兴文 我们看过很多在电脑命令行敲一些命令并给观众展示很高科技的画面感的电影,比如<盗梦空间><操作系统革命><代码>等等, 再想想电影黑客帝国中的 ...

  2. 百度指数 Cipher-Text、百度翻译 Acs-Token 逆向分析

    K 哥之前写过一篇关于百度翻译逆向的文章,也在 bilibili 上出过相应的视频,最近在 K 哥爬虫交流群中有群友提出,百度翻译新增了一个请求头参数 Acs-Token,如果不携带该参数,直接按照以 ...

  3. github clone或访问慢

    做技术的我们经常会访问github.com,有时出现github访问非常慢或者git clone速度很慢,git push也很慢 原因很简单:github被高高的墙屏蔽了. 所以解决方案就是手动把 c ...

  4. vim 从嫌弃到依赖(16)——宏

    终于到了我第二喜欢的vim功能了(当然了,最喜欢的是.命令).我原本计划在介绍完.命令之后介绍宏,以便让各位小伙伴们能了解到vim对于重复操作进行的强大的优化.但是由于宏本身跟寄存器息息相关,所以还是 ...

  5. TienChin 验证码响应结果分析&验证码生成接口分析

    验证码响应结果分析 首先从前端开始进行分析,进入到登录页面,打开开发者工具(f12),找到 network,f5 刷新一下页面,然后,筛选一下,筛选内容为 Fetch/XHR: 你会发现列表中有两项内 ...

  6. 小白学k8s(3)什么是内网穿透

    什么是内网穿透 内网穿透 工作方式 通信的一方处于内网 通信的双方都处于内网 NAT穿透的原理 UDP内网穿透的实现流程 参考 什么是内网穿透 内网穿透 什么是内网穿透呢? 百度百科的描述 内网穿透, ...

  7. python实现zip分卷压缩与解压

    1. python实现zip分卷压缩 WinHex 开始16进制一个一个文件对比 WinRar 创建的分卷压缩和单个 zip 文件的差异. 如果想把单个大文件 test.zip -> 分卷文件  ...

  8. C/C++ 反汇编:分析类的实现原理

    反汇编即把目标二进制机器码转为汇编代码的过程,该技术常用于软件破解.外挂技术.病毒分析.逆向工程.软件汉化等领域,学习和理解反汇编对软件调试.系统漏洞挖掘.内核原理及理解高级语言代码都有相当大的帮助, ...

  9. PVE上启用Intel核显的SR-IOV vGPU

    介绍 Intel SR-IOV vGPU是一种硬件虚拟化技术,它允许多个虚拟机共享单个物理GPU,而不会降低性能.SR-IOV定义了一种标准方法,通过将设备分区为多个虚拟功能来共享物理设备功能.每个虚 ...

  10. .NET 大数据实时计算--学习笔记

    摘要 纯 .Net 自研大数据实时计算平台,在中通快递服务数百亿包裹,处理数据万亿计!将分享大数据如何落地以及设计思路,技术重难点. 目录 背景介绍 计算平台架构 项目实战 背景介绍 计算平台架构 分 ...