【大数据面试】ClickHouse:介绍、特点、数据类型、引擎、操作、副本、分片
1、介绍
开源的列式存储数据库(DBMS),由C++编写,用于在线分析处理查询(OLAP)
可以通过SQL查询实时生成分析数据报告
解释:
DBMS:数据库管理系统
常见的列式存储数据库:Hbase、ClickHouse、Druid
OLAP:On-Line Analytical Processing,联机分析处理,做数据统计和分析的平台
OLTP:On-Line Transaction Processing,联机事务处理,业务数据处理的平台
2、特点
列式存储适用于聚合统计操作、便于压缩和缓存
兼容SQL语法和DBMS的功能
可以根据需求选择多种引擎
顺序写+压缩,保证了高吞吐写入能力
划多个分区及索引粒度,可以实现并行处理,可以充分利用CPU,但不适用于多条查询
3、常见的数据类型
整形:(U)Int8-64
浮点型:Float32-64,存在误差,适用于精度要求不高场景
×布尔型:无专门类型,常用UInt8表示,取值0/1
Decimal类型(可保持精度的有符号浮点类型):Decimal32(s)-128
字符串类型:任意长/定长字符串FixString(N)
枚举类型:Enum8/16,例如x Enum8('hello' = 1, 'world' = 2),插入是VALUES(‘hello’),(‘world’),或转换整形查询CAST(x,’Int8’)
时间类型:Date、Datetime、Datetime64
数组类型:array(1, 2) AS x或[1, 2] AS x
4、常见的表引擎
表引擎介绍:显式声明、决定存储方式和位置、并发索引多线程
TinyLog:保存到磁盘,无索引和并发控制,仅用于测试少量数据
Memory:存至内存,无索引,查询性能高,小数据量
MergeTree-合并树:可设置分区(不同文件、写入合并)、主键(非唯一约束,默认间隔8192)和排序字段(前缀字段必须为主键)、可设置表级别和列级别TTL生命周期
ReplacingMergeTree:去重合并树,避免了无唯一约束,重复数据保留版本字段大(参数, 常为时间)
SummingMergeTree:适用于根据维度进行汇总聚合,参数传递汇总列
5、常见操作
(1)插入
(2)更新/删除:
重操作,会改变分区(建议做批量变更)
语法:alter table t_order_smt delete/update
执行:先为新数据新建分区,把旧分区打失效标记,通过分区合并的触发,删除旧数据
(3)查询
支持子查询、CTE(Common Table Expression 公用表表达式/临时结果集,例如with a as xxx)、join、group by的各种小计操作:
with rollup:自右至左去掉维度小计
with cube:先自右至左,再自左至右进行小计
with totals: 计算合计
(4)修改字段操作
增删改字段
alter table tableName add / modify / drop column
(5)数据导出操作
clickhouse-client --query "select * from t_order_mt where create_time='2020-06-01 12:00:00'" --format CSVWithNames > /opt/module/data/rs1.csv1
6、副本-高可用性
写入流程:写入数据后将写入日志提交到zk,副本收到zk的写入日志后从主节点下载新数据
配置步骤:同步xml配置文件,分别建表,引擎采用ReplicatedMergeTree
参数传递:engine =ReplicatedMergeTree('/clickhouse0225/table/01/t_order_rep','rep_102')
7、分片集群
(1)解决问题:横向扩容、水平切分
(2)操作:不同分片在不同节点,使用Distributed 表引擎实现数据拼接
(3)读取流程:选择error count小的副本进行数据的读取
本文来自博客园,作者:哥们要飞,转载请注明原文链接:https://www.cnblogs.com/liujinhui/p/15823028.html