ClickHouse使用(一)
安装和部署
文章目录
一、目录结构
(1)/etc/clickhouse-server 服务端的配置文件目录
(2)/var/lib/clickhouse 默认数据存储目录
(3)/var/log/clickhouse-server 默认保存日志的目录
(4)配置文件部分
(1)/etc/security/limits.d/clickhouse.conf 文件句柄数量配置
clickhouse soft nofile 262144
clickhouse hard nofile 262144
(2)corn 定时任务配置,恢复因异常情况中断的ClickHouse服务进程
(每隔10分钟启动一次服务进程,如果正在运行则跳过)
(1)clickhouse:主程序的可执行文件
(2)clickhouse-client:软连接,供客户端连接使用
(3)clickhouse-server:软连接,供服务端启动使用
(4)clickhouse-compressor:内置提供的压缩工具
二、启动服务
(2)修改默认的存储路径,所以需要将目录的Owner设置为clickhouse用户
chown clickhouse.clickhouse /chbase/data/ -R
clickhouse用户由安装程序自动创建,启动脚本会基于子用户启动服务
(3)启动
激活用户
usermod -s /bin/bash clickhouse
切换用户
su clickhouse
service clickhouse-server --config-file=/etc/click-house-server/config-cd5.xml
(1)config.xml 配置文件修改数据默认的保存目录
<path></path>
<tem_path></tem_path>
<user_files_path></user_files_path>
(2)修改默认的存储路径,所以需要将目录的Owner设置为clickhouse用户
chown clickhouse.clickhouse /chbase/data/ -R
clickhouse用户由安装程序自动创建,启动脚本会基于子用户启动服务
(3)启动
激活用户
usermod -s /bin/bash clickhouse
切换用户
su clickhouse
service clickhouse-server --config-file=/etc/click-house-server/config-cd5.xml
三、客户端的访问接口
CLI 默认 9000 ,协议TCP
1.交互式执行
利用
clickhouse-client进行连接,使用sql进行查询
2.非交互式执行
批处理场景
利用clickhouse-client --query=“sql” 可以接收标准的操作系统文件输入和输出:例如
cat /chbase/test_fetch.tsv | clickhouse-client --query=“insert into test_fetch format tsv”
clickhouse-client --query=“select * from test_fetch”>/chbase/test_fetch.tsv
多条语句执行
clickhouse-client -h 10.37.8.11 --multiquery --query=“sql1;sql2”
四、JDBC 默认 8123 ,协议HTTP
1.标准形式
2.高可用模式,允许多个host,每次随机选择一个进行连接
3.实用小工具
clickhouse-local
单机版微型内核,只能使用File 表引擎
clickhouse-benchmark
运行指标报告
五、数据定义
1.支持完整的DML,insert,select,update,delete; update 和 delete 存在性能问题(借助alter来实现的)
2.ClickHouse 在基础数据类型方面,相比其他的常规数据库更加精炼,但是也提供了实用的复合数据类型
六、数据类型
1.基础类型:
数值(Int Float Decimal),字符串(String FixedString UUID),时间(DateTime DateTime64 Date)
2.符合类型 :
Array (array(String)拥有类型推断的能力,实用最小存储代价的类型),
Tuple(tuple(String,Int8)),
Enum(Enum8(String:Int8) Enum16(String:Int16),不能重复,不能为空,性能比String更好)
Nested(1-》n关系,但每个嵌套只支持一级,访问时 用 .来访问嵌套内的字段)
3.特殊类型
1.Nullable(表示某个字段可以是Null值 1.只能和基础类型搭配使用 2.会影响查询和写入性能)
2.Domain(IPv4基于Int32封装 IPv6基于FixString(16)封装))
七、如何定义数据表
1.数据库
数据库引擎:
1.Ordinary 默认引擎 ,此数据库下可以使用任何的表引擎
2.Dictionary 字典引擎,
3.Memory 内存引擎,此数据库中的表只停留在内存中,会随着服务器的重启而丢失
4.lazy 日志引擎,此数据库表中只能使用Log系列的表引擎
5.MySQL MySQL引擎,自动拉取远程MySQL数据,并自动创建MySQL表引擎的数据表
2.数据表
复制表结构,
修改表引擎,
导入表数据,
删除表
默认值,可以 指定默认值,或者同时指定默认值和默认类型
临时表:
1.生命周期与会话同步,会话结束表销毁,只支持Memory表引擎
2.临时表不属于任何数据库
3.临时表和普通表重名,会优先读取临时表的数据
分区表:
分区针对本地数据而言,数据可以按照分区进行删除,替换和重置。只有表引擎为 MergeTree时,才可以使用数据分区
视图
普通视图 不存储数据 只是为了使得查询语句更加易懂,对性能无任何帮助
物化视图 支持表引擎 原表写入新数据,物化视图会同步更新 ,populate 参数存在 会在创建视图时同步数据,不存在 会同步创建之后新增的数据
3.数据表的基本操作
1.只有MergeTree Merge Distributed表引擎支持 Alter 查询
2.追加新字段
3.修改数据类型
4.修改备注
5.删除字段
6.移动数据表
rename table default.testcol_v1 to dbtest.testcol_v2 将数据库表 testcol_v1 从defautl数据库 移动到 dbtest数据库的 testcol_v2 (用一个库可以实现重命名,移动的两个数据库实例必须为同一个服务器节点)
7.清空数据表
4.数据分区操作
1.只有 MergeTree 系列表引擎 支持分区
2.查询分区信息
3.删除指定分区
4.复制分区数据(表结构相同,分区键相同)
5.重置分区数据 (alter table partition2 clear colum url in partition 2021)清空对应分区的对应字段数据
6.卸载和装在分区(alter table p_2 detach partiotion 2021)卸载分区2021 将分区文件放到 detached的子目录下,alter table p_2 attach partition 2021
4.分布式ddl
CREATE TABLE heaven_eye_apm_log.users [on cluster ch_cluster] (
id Int64,
first_id String,
second_id String
) ENGINE = MergeTree()
partition by time
order by id
5.数据写入
1.insert into table values(v1,v2,v3),(v1,v2,v3)
2.insert into table format csv
v1,v2,v3
v1,v2,v3
3.insert into table select …
6.数据删除和修改
ClickHouse提供了Delete和Update的能力,这类操作被称为 Mutation
虽然能最终实现修改和删除,但是适用于批量操作,不支持事务,异步后台过程,语句被提交后会立即返回,并不代表逻辑执行完成
alter table p_2 delete where id =‘111’;
建立后台执行任务,异步执行,建立新目录,重写数据时过滤掉删除的数据,保存执行命令文件,保存旧的数据文件,执行MergeTree操作,删除旧数据文件
八、数据字典
1.内置字典
默认关闭
可以通过配置打开
没有内置数据需要导入初始化数据,提供了取数规则
select regionToName(tiUInt32(2009))
2.外部扩展字典(7中类型的内存布局,4类数据来源)
flat,hashed,catche,complex_key_hashed,complex_key_catche
range_hashed
ip_trie
配置文件元素:
name:字典名称,唯一标识
structure:数据结构
layout:字典类型
source:字典的数据源
lifetime:字典更新时间
3.扩展字典的数据结构 1.key, 2.attribute
//id 或者是 key 数值型 //id 或者是 key,复合型4.扩展字典数据源
1.文件(本地文件,可执行文件,远程文件)
2.数据库(mysql,clickhouse,mongodb)
3.其他(odbc)
5.在线更新
字典的作用:能够有效的帮助我们消除不必要的join操作(如:根据id查询名称),优化sql查询提高查询性能
九、MergeTree 原理解析
1.支持 主键索引,数据分区,数据副本,数据采样,alter相关操作
2.内存合并,片段写入
3.语法
语法:
(1)Partition By 分区键 (单个字段或者,元组形式使用多个字段)
(2)Order By 排序键 默认与主键相同(可以重复)(ReplacingMergeTree)
(3)Primary key 默认情况下与排序字段相同
(4) sample by 抽样 例如 sample by intHash32(UserID) 配合 sample子句使用
(5)settings:index_granularity 索引粒度 默认 8192
(6)settings:index_granularity_byte 索引粒度按照写入数据大小自适应 默认 10M 设置为0表示不开启
(7)settings:index_mixed_granularity_parts设置是否开启自适应
(8)settings:index_with_ttl_timeout ttl(Time of live 存活时间) 相关功能
(9)settings:storage_policy 多路径存储策略