目录
- 1 #概念
- 2 #部署
- 3 目录结构
- 4 操作客户端 #客户端 #client
- 5 操作数据库 #database
- 6 操作表 #table
- 7 #视图 #view
- 8 数据类型 #类型
1 #概念
1.1 clickhouse 介绍 #OLAP
1.1.1 特点
1.1.2 使用场景
1.1.3 #列式存储,按列存储
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T9oA4oH1-1658656927613)(https://clickhouse.com/docs/assets/images/column-oriented-b992c529fa4085b63b57452fbbeb27ba.gif#)]
1.1.4 #引擎 #engine
2 #部署
2.1 单机部署
2.1.1 通过yum源安装clickhouse服务器和客户端
2.1.2 启动服务器,连接客户端
clickhouse的端口9000
3 目录结构
3.1 #配置文件 #config.xml
3.1.1 重启服务器 #restart
设置完配置文件后,需要重启服务器
3.2 #工作目录
3.2.1 表数据目录 #data
数据库的数据目录中存放的是非Memory引擎所创建的表数据
Memory引擎创建的表数据在内存中,不会被持久化到本地的数据目录,但表的元数据是持久化到本地的元数据目录,需要手动维护
3.2.2 #元数据目录 #metadata
元数据目录可以理解成建表语句、表结构
3.2.2.1 人为维护Memory引擎创建的表的元数据,销毁Memory表
重启服务器后,并不会销毁Memory引擎创建的表,但由于表数据不会被持久化到data目录,因此重启后,Memory表数据丢失
如果人为删除Memory表的元数据文件,再重启服务器,此时才会销毁掉Memory引擎创建的表(无法查询到表)
3.2.3 人为删除表数据
删除表数据分为两步:删除data目录的表数据
和 删除metadata目录的表的元数据
3.3 #日志文件
4 操作客户端 #客户端 #client
4.1 客户端连接参数
4.2 允许换行执行sql命令 -m
4.3 指定要连接客户端的主机 -h
4.4 不进入客户端执行sql语句 -q -n
4.5 退出客户端 #quit
4.6 客户端命令补全
5 操作数据库 #database
clickhouse自己定义的关键字严格区分大小写,比如存储引擎名、函数名
对于sql的关键字,不会区分大小写
登录客户端后,默认使用的数据库是default
6 操作表 #table
由于clickhouse针对的是OLAP业务,update、delete操作在clickhouse中很少使用
只有
MergeTree
引擎和其家族系列*MergeTree
引擎才支持修改alter关键字的使用,对表进行修改操作
6.1 创建表 #create
6.2 #复制表 #as
复制表数据的前提是表结构相同
6.3 删除表 #drop
6.4 #rename
6.4.1 #重命名表
6.4.2 #移动表
6.5 导入csv格式文本数据到表中 #csv #导入
6.5.1 csv文件
数据用","分隔的是csv文件,用tab制表符分隔的是tsv文件
6.6 #分区表 #partition #MergeTree
6.6.1 创建分区表
6.6.1.1 通过系统表system.parts查看分区状态
6.6.1.2 持久化后的分区文件位置
6.6.1.3 例子
6.6.2 分区目录名的含义 #名字
6.6.2.1 分区创建、合并过程的分区目录名变化
6.6.3 #合并分区 #optimize
optimize把相同的分区块进行合并
按块进行插入数据后,不会自动进行分区合并,只有调用了optimize后,才会对相同的分区的块进行合并
合并完成后,过8min后会删除掉旧分区,最后只保留合并后的分区
6.6.3.1 对分区表的处理:合并相同分区
6.6.3.2 对不分区的表的处理:合并数据块
6.6.3.3 分区合并的过程
6.6.3.4 强制一次合并多个相同分区
6.6.4 删除分区数据 #drop
drop会把分区数据删掉,而detach不会删掉分区数据
6.6.5 卸载、装载分区 #detach #attach
6.6.5.1 卸载分区前后对比
6.6.6 #复制分区表
复制分区表数据的前提是分区表结构相同
6.7 #修改表 #alter #MergeTree
只有
MergeTree
引擎和其家族系列*MergeTree
引擎才支持修改alter关键字的使用,对表进行修改操作
6.7.1 修改表结构
6.7.2 #mutation 操作,记录更新和删除 #更新 #删除
6.7.2.1 修改记录的字段值 #update
6.7.2.2 删除记录 #delete
6.8 #with 定义查询变量 #变量
6.8.1.1 定义变量
6.8.1.2 变量值调用函数
6.8.1.3 变量值是子查询结果 #元组 #tuple #子查询
6.9 #from 读取数据 #函数
6.9.1 例子:file函数
6.9.2 例子: #numbers 函数
6.9.3 例子:mysql函数,远程连接mysql数据
6.9.4 例子:hdfs函数,远程连接hdfs数据
6.10 #limit
6.11 #分组查询 #group by
6.11.1 统计每组的记录数 #count
6.11.2 #with 分组查询模型
6.11.2.1 #with total
6.11.2.2 #with rollup
6.11.2.3 #with cube,分组查询立方体 #cube
6.12 #join 关联查询,不推荐
7 #视图 #view
7.1 #普通视图 ,本质是查表
普通视图即查询映射,本质还是查表实体,没有视图的数据文件
7.2 #物化视图 #materialized view,同步新写入数据
7.2.1 不使用populate创建物化视图,推荐
7.2.2 使用populate创建物化视图,不推荐 #populate
7.2.2.1 例子:AggregatingMergeTree物化视图,对MergeTree表使用聚合函数
8 数据类型 #类型
8.1.1 mysql类型和clickhouse类型的对应关系 #mysql#
8.2 查看字段类型
8.3 #数值类型
8.3.1 #整型 #Int #UInt
Int+二进制位数
默认int等价于Int32
8.3.1.1 #布尔值
8.3.2 #浮点型
8.3.2.1 #Float
8.3.2.2 特殊浮点数值 #inf #nan
8.3.2.3 #Decimal
8.3.2.3.1 运算精度变化 #精度
8.3.2.3.2 运算溢出问题 #溢出
8.4 #字串
8.4.1 #String,变长字串
8.4.2 #FixedString,定长字串
8.4.2.1 #UUID
8.5 #时间 #日期
时间类型均支持使用字符串插入数据
8.5.1 #Date,精确到日期
8.5.2 #DateTime,精确到秒
8.5.3 #DateTime64,精确到毫秒
8.6 #枚举 #Enum
8.7 #数组 #array,变长数组
只能存储同一种类型的元素,变长数组,不用定义数组size
8.7.1 #Nested #嵌套表 ,多维变长数组
8.7.2 #array join,展开数组 #left array join
8.7.2.1 展开嵌套表Nested #Nested
8.7.2.2 array join无法使用with定义的变量
8.7.2.3 例子:展开数组
8.7.2.4 展开数组的下标列表 #arrayEnumerate #下标
8.7.3 #groupArray 函数,把分组后的字段值转成数组
8.8 #元组 #tuple
8.9 #Map
8.9.1 元组转成map #tuple #cast
8.10 #ipv4 #ipv6
8.11 #Nullable,允许列值为空 #默认值
如果不赋值,列类型默认值通常为0或空字串,而不是NULL