大连个人网站开发制作,通州 网站建设,如何找到网站管理员,wordpress素材网主题1. 表引擎的使用
表引擎是 ClickHouse 的一大特色。可以说#xff0c; 表引擎决定了如何存储表的数据。包括#xff1a;
➢ 数据的存储方式和位置#xff0c;写到哪里以及从哪里读取数据。 默认存放在/var/lib/clickhouse/data
➢ 支持哪些查询以及如何支持。
➢ 并发数…1. 表引擎的使用
表引擎是 ClickHouse 的一大特色。可以说 表引擎决定了如何存储表的数据。包括
➢ 数据的存储方式和位置写到哪里以及从哪里读取数据。 默认存放在/var/lib/clickhouse/data
➢ 支持哪些查询以及如何支持。
➢ 并发数据访问。
➢ 索引的使用如果存在。
➢ 是否可以执行多线程请求。
➢ 数据复制参数。
表引擎的使用方式就是必须显式在创建表时定义该表使用的引擎以及引擎使用的相关 参数。
特别注意引擎的名称大小写敏感 2. TinyLog
以列文件的形式保存在磁盘上不支持索引没有并发控制。一般保存少量数据的小表 生产环境上作用有限。可以用于平时练习测试用。 如 create table t_tinylog ( id String, name String) engineTinyLog; 3. Memory
内存引擎数据以未压缩的原始形式直接保存在内存当中服务器重启数据就会消失。 读写操作不会相互阻塞不支持索引。简单查询下有非常非常高的性能表现超过 10G/s。
一般用到它的地方不多除了用来测试就是在需要非常高的性能同时数据量又不太 大上限大概 1 亿行的场景。 4. MergeTree
ClickHouse 中最强大的表引擎当属 MergeTree合并树引擎及该系列*MergeTree 中的其他引擎支持索引和分区地位可以相当于 innodb 之于 Mysql。而且基于 MergeTree 还衍生除了很多小弟也是非常有特色的引擎。 1建表语句 create table t_order_mt(id UInt32,sku_id String,total_amount Decimal(16,2),create_time Datetime
) engine MergeTreepartition by toYYYYMMDD(create_time)primary key (id)order by (id,sku_id); 2插入数据 insert into t_order_mt values
(101,sku_001,1000.00,2020-06-01 12:00:00) ,
(102,sku_002,2000.00,2020-06-01 11:00:00),
(102,sku_004,2500.00,2020-06-01 12:00:00),
(102,sku_002,2000.00,2020-06-01 13:00:00),
(102,sku_002,12000.00,2020-06-01 13:00:00),
(102,sku_002,600.00,2020-06-02 12:00:00);
MergeTree 其实还有很多参数(绝大多数用默认值即可)但是三个参数是更加重要的 也涉及了关于 MergeTree 的很多概念。 主键不唯一按照年月日来进行分区同时他们的排序是分区内的排序排序中规定的id,sku_id表示如果id相同就会进行sku_id排序。 4.1 partition by 分区(可选) 1作用 学过 hive 的应该都不陌生分区的目的主要是降低扫描的范围优化查询速度 2如果不填 只会使用一个分区(all)。 3分区目录 MergeTree 是以列文件索引文件表定义文件组成的但是如果设定了分区那么这些文 件就会保存到不同的分区目录中。
bin文件数据文件
mrk文件标记文件标记文件在 idx索引未见和bin数据文件之间起到了桥梁的作用。以mrk2结尾的文件表示该表启用了自适应索引间隔。
primary.idx文件主键索引文件用于加快查询效率。
minmax_create_time.idx分区键的最大最小值
checksums.txt校验文件用于校验各个文件的正确性。存放各个文件的size以及hash值。
分区目录名的解释 》Level合并的层级被合并的次数。合并次数越多层级越大。 4并行 分区后面对涉及跨分区的查询统计ClickHouse 会以分区为单位并行处理。 5数据写入与分区合并 任何一个批次的数据写入都会产生一个临时分区不会纳入任何一个已有的分区。写入后的某个时刻大概 10-15 分钟后ClickHouse 会自动执行合并操作等不及也可以手动 通过 optimize 执行把临时分区的数据合并到已有分区中。 optimize table xxxx final; 6例如再次执行上面的插入操作 insert into t_order_mt values
(101,sku_001,1000.00,2020-06-01 12:00:00) ,
(102,sku_002,2000.00,2020-06-01 11:00:00),
(102,sku_004,2500.00,2020-06-01 12:00:00),
(102,sku_002,2000.00,2020-06-01 13:00:00),
(102,sku_002,12000.00,2020-06-01 13:00:00),
(102,sku_002,600.00,2020-06-02 12:00:00);
查看数据并没有纳入任何分区 手动 optimize 之后
hadoop102 :) optimize table t_order_mt final;
再次查询 4.2 primary key 主键(可选)
ClickHouse 中的主键和其他数据库不太一样它只提供了数据的一级索引但是却不是唯一约束。这就意味着是可以存在相同 primary key 的数据的。
主键的设定主要依据是查询语句中的 where 条件。
根据条件通过对主键进行某种形式的二分查找能够定位到对应的 index granularity,避免了全表扫描。
index granularity 直接翻译的话就是索引粒度指在稀疏索引中两个相邻索引对应数 据的间隔。ClickHouse 中的 MergeTree 默认是 8192。官方不建议修改这个值除非该列存在大量重复值比如在一个分区中几万行才有一个不同数据。 稀疏索引(查找时类似于一个二分查找法) 稀疏索引的好处就是可以用很少的索引数据定位更多的数据代价就是只能定位到索 引粒度的第一行然后再进行进行一点扫描。 4.3 order by必选
order by 设定了分区内的数据按照哪些字段顺序进行有序保存。
order by 是 MergeTree 中唯一一个必填项甚至比 primary key 还重要因为当用户不设置主键的情况很多处理会依照 order by 的字段进行处理比如后面会讲的去重和汇总。
要求主键必须是 order by 字段的前缀字段。
比如 order by 字段是 (id,sku_id) 那么主键必须是 id 或者(id,sku_id) 4.4 二级索引
目前在 ClickHouse 的官网上二级索引的功能在 v20.1.2.4 之前是被标注为实验性的在 这个版本之后默认是开启的。 1老版本使用二级索引前需要增加设置 是否允许使用实验性的二级索引v20.1.2.4 开始这个参数已被删除默认开启
set allow_experimental_data_skipping_indices1; 2创建测试表 create table t_order_mt2(id UInt32,sku_id String,total_amount Decimal(16,2),create_time Datetime,
INDEX a total_amount TYPE minmax GRANULARITY 5
) engine MergeTreepartition by toYYYYMMDD(create_time)primary key (id)order by (id, sku_id);
其中 GRANULARITY N 是设定二级索引对于一级索引粒度的粒度。 3插入数据 insert into t_order_mt2 values
(101,sku_001,1000.00,2020-06-01 12:00:00) ,
(102,sku_002,2000.00,2020-06-01 11:00:00),
(102,sku_004,2500.00,2020-06-01 12:00:00),
(102,sku_002,2000.00,2020-06-01 13:00:00),
(102,sku_002,12000.00,2020-06-01 13:00:00),
(102,sku_002,600.00,2020-06-02 12:00:00); 4对比效果 那么在使用下面语句进行测试可以看出二级索引能够为非主键字段的查询发挥作用。
clickhouse-client --send_logs_leveltrace select
* from t_order_mt2 where total_amount toDecimal32(900., 2); 4.5 数据 TTL
TTL 即 Time To LiveMergeTree 提供了可以管理数据表或者列的生命周期的功能。 1列级别 TTL 1创建测试表
create table t_order_mt3(id UInt32,sku_id String,total_amount Decimal(16,2) TTL create_timeinterval 10 SECOND,create_time Datetime
) engine MergeTree
partition by toYYYYMMDD(create_time)primary key (id)order by (id, sku_id);
2插入数据注意根据实际时间改变
insert into t_order_mt3 values
(106,sku_001,1000.00,2021-01-26 11:26:30),
(107,sku_002,2000.00,2021-01-26 11:26:30),
(110,sku_003,600.00,2021-01-26 11:26:00);
3手动合并查看效果 到期后指定的字段数据归 0然后退出命令行再次进入
hadoop101 :) optimize table t_order_mt3 final; 2表级 TTL 下面的这条语句是数据会在 create_time 之后 10 秒丢失
alter table t_order_mt3 MODIFY TTL create_time INTERVAL 10 SECOND;
涉及判断的字段必须是 Date 或者 Datetime 类型推荐使用分区的日期字段。
能够使用的时间周期
- SECOND
- MINUTE
- HOUR
- DAY
- WEEK
- MONTH
- QUARTER
- YEAR 5. ReplacingMerge Tree
ReplacingMerge Tree 是 MergeTree 的一个变种它存储特性完全继承 MergeTree只是多了一个去重的功能。 尽管 MergeTree 可以设置主键但是 primary key 其实没有唯一约束 的功能。如果你想处理掉重复的数据可以借助这个 ReplacingMergeTree。 1去重时机 数据的去重只会在合并的过程中出现。合并会在未知的时间在后台进行所以你无法预 先作出计划。有一些数据可能仍未被处理。 2去重范围 如果表经过了分区去重只会在分区内部进行去重不能执行跨分区的去重。
所以 ReplacingMergeTree 能力有限 ReplacingMergeTree 适用于在后台清除重复的数 据以节省空间但是它不保证没有重复的数据出现。 3案例演示 1创建表
create table t_order_rmt(id UInt32,sku_id String,total_amount Decimal(16,2) ,create_time Datetime
) engine ReplacingMergeTree(create_time)partition by toYYYYMMDD(create_time)primary key (id)order by (id, sku_id);
ReplacingMergeTree() 填入的参数为版本字段重复数据保留版本字段值最大的。
如果不填版本字段默认按照插入顺序保留最后一条。
2向表中插入数据
insert into t_order_rmt values
(101,sku_001,1000.00,2020-06-01 12:00:00) ,
(102,sku_002,2000.00,2020-06-01 11:00:00),
(102,sku_004,2500.00,2020-06-01 12:00:00),
(102,sku_002,2000.00,2020-06-01 13:00:00),
(102,sku_002,12000.00,2020-06-01 13:00:00),
(102,sku_002,600.00,2020-06-02 12:00:00);
3执行第一次查询
hadoop102 :) select * from t_order_rmt; 4手动合并
OPTIMIZE TABLE t_order_rmt FINAL;
5再执行一次查询
hadoop102 :) select * from t_order_rmt; 4通过测试得到结论 ➢ 实际上是使用 order by 字段作为唯一键
➢ 去重不能跨分区
➢ 只有同一批插入新版本或合并分区时才会进行去重
➢ 认定重复的数据保留版本字段值最大的
➢ 如果版本字段相同则按插入顺序保留最后一笔 6. SummingMerge Tree
对于不查询明细只关心以维度进行汇总聚合结果的场景。如果只使用普通的MergeTree 的话无论是存储空间的开销还是查询时临时聚合的开销都比较大。
ClickHouse 为了这种场景提供了一种能够“预聚合”的引擎 SummingMergeTree 1案例演示 1创建表
create table t_order_smt(id UInt32,sku_id String,total_amount Decimal(16,2) ,create_time Datetime
) engine SummingMergeTree(total_amount)partition by toYYYYMMDD(create_time)primary key (id)order by (id,sku_id );
2插入数据
insert into t_order_smt values
(101,sku_001,1000.00,2020-06-01 12:00:00),
(102,sku_002,2000.00,2020-06-01 11:00:00),
(102,sku_004,2500.00,2020-06-01 12:00:00),
(102,sku_002,2000.00,2020-06-01 13:00:00),
(102,sku_002,12000.00,2020-06-01 13:00:00),
(102,sku_002,600.00,2020-06-02 12:00:00);
3执行第一次查询
hadoop102 :) select * from t_order_smt; 4手动合并
OPTIMIZE TABLE t_order_smt FINAL;
5再执行一次查询
hadoop102 :) select * from t_order_smt; 2通过结果可以得到以下结论 ➢ 以 SummingMergeTree中指定的列作为汇总数据列
➢ 可以填写多列必须数字列如果不填以所有非维度列且为数字列的字段为汇总数据列
➢ 以 order by 的列为准作为维度列
➢ 其他的列按插入顺序保留第一行
➢ 不在一个分区的数据不会被聚合
➢ 只有在同一批次插入(新版本)或分片合并时才会进行聚合 3开发建议 设计聚合表的话唯一键值、流水号可以去掉所有字段全部是维度、度量或者时间戳。 4问题 能不能直接执行以下 SQL 得到汇总值
select total_amount from XXX where province_name’’ and create_date’xxx’
不行可能会包含一些还没来得及聚合的临时明细
如果要是获取汇总值还是需要使用 sum 进行聚合这样效率会有一定的提高但本 身 ClickHouse 是列式存储的效率提升有限不会特别明显。 select sum(total_amount) from province_name’’ and create_date‘xxx’
文章转载自: http://www.morning.bnbzd.cn.gov.cn.bnbzd.cn http://www.morning.dnmgr.cn.gov.cn.dnmgr.cn http://www.morning.rdlfk.cn.gov.cn.rdlfk.cn http://www.morning.twwts.com.gov.cn.twwts.com http://www.morning.ygztf.cn.gov.cn.ygztf.cn http://www.morning.bzqnp.cn.gov.cn.bzqnp.cn http://www.morning.ngdkn.cn.gov.cn.ngdkn.cn http://www.morning.txfzt.cn.gov.cn.txfzt.cn http://www.morning.fnlnp.cn.gov.cn.fnlnp.cn http://www.morning.hrpmt.cn.gov.cn.hrpmt.cn http://www.morning.mxmdd.cn.gov.cn.mxmdd.cn http://www.morning.jwcmq.cn.gov.cn.jwcmq.cn http://www.morning.wcjk.cn.gov.cn.wcjk.cn http://www.morning.ntnml.cn.gov.cn.ntnml.cn http://www.morning.djwpd.cn.gov.cn.djwpd.cn http://www.morning.tdgwg.cn.gov.cn.tdgwg.cn http://www.morning.wnjbn.cn.gov.cn.wnjbn.cn http://www.morning.dygsz.cn.gov.cn.dygsz.cn http://www.morning.fkyqt.cn.gov.cn.fkyqt.cn http://www.morning.tjmfz.cn.gov.cn.tjmfz.cn http://www.morning.tbknh.cn.gov.cn.tbknh.cn http://www.morning.qfgwx.cn.gov.cn.qfgwx.cn http://www.morning.sgbss.cn.gov.cn.sgbss.cn http://www.morning.zwwhq.cn.gov.cn.zwwhq.cn http://www.morning.jljiangyan.com.gov.cn.jljiangyan.com http://www.morning.mqgqf.cn.gov.cn.mqgqf.cn http://www.morning.qgtbx.cn.gov.cn.qgtbx.cn http://www.morning.cttti.com.gov.cn.cttti.com http://www.morning.blqsr.cn.gov.cn.blqsr.cn http://www.morning.wpmqq.cn.gov.cn.wpmqq.cn http://www.morning.qkwxp.cn.gov.cn.qkwxp.cn http://www.morning.ktsth.cn.gov.cn.ktsth.cn http://www.morning.jkmjm.cn.gov.cn.jkmjm.cn http://www.morning.fxkgp.cn.gov.cn.fxkgp.cn http://www.morning.qpqb.cn.gov.cn.qpqb.cn http://www.morning.tntqr.cn.gov.cn.tntqr.cn http://www.morning.ghkgl.cn.gov.cn.ghkgl.cn http://www.morning.gkmwx.cn.gov.cn.gkmwx.cn http://www.morning.ksgjn.cn.gov.cn.ksgjn.cn http://www.morning.nqbkb.cn.gov.cn.nqbkb.cn http://www.morning.redhoma.com.gov.cn.redhoma.com http://www.morning.kybpj.cn.gov.cn.kybpj.cn http://www.morning.mdrnn.cn.gov.cn.mdrnn.cn http://www.morning.nhdw.cn.gov.cn.nhdw.cn http://www.morning.jlschmy.com.gov.cn.jlschmy.com http://www.morning.kpzrf.cn.gov.cn.kpzrf.cn http://www.morning.leboju.com.gov.cn.leboju.com http://www.morning.nwfpl.cn.gov.cn.nwfpl.cn http://www.morning.mgtrc.cn.gov.cn.mgtrc.cn http://www.morning.jnbsx.cn.gov.cn.jnbsx.cn http://www.morning.wftrs.cn.gov.cn.wftrs.cn http://www.morning.ndxss.cn.gov.cn.ndxss.cn http://www.morning.zkbxx.cn.gov.cn.zkbxx.cn http://www.morning.glncb.cn.gov.cn.glncb.cn http://www.morning.gkdqt.cn.gov.cn.gkdqt.cn http://www.morning.ypqwm.cn.gov.cn.ypqwm.cn http://www.morning.bnmrp.cn.gov.cn.bnmrp.cn http://www.morning.xldpm.cn.gov.cn.xldpm.cn http://www.morning.qmnhw.cn.gov.cn.qmnhw.cn http://www.morning.btypn.cn.gov.cn.btypn.cn http://www.morning.cnprt.cn.gov.cn.cnprt.cn http://www.morning.rmpkn.cn.gov.cn.rmpkn.cn http://www.morning.gpfuxiu.cn.gov.cn.gpfuxiu.cn http://www.morning.hhpkb.cn.gov.cn.hhpkb.cn http://www.morning.ddqdl.cn.gov.cn.ddqdl.cn http://www.morning.ruifund.com.gov.cn.ruifund.com http://www.morning.bqhlp.cn.gov.cn.bqhlp.cn http://www.morning.qbfqb.cn.gov.cn.qbfqb.cn http://www.morning.cwgn.cn.gov.cn.cwgn.cn http://www.morning.cjqcx.cn.gov.cn.cjqcx.cn http://www.morning.srwny.cn.gov.cn.srwny.cn http://www.morning.nmfwm.cn.gov.cn.nmfwm.cn http://www.morning.jykzy.cn.gov.cn.jykzy.cn http://www.morning.jhtrb.cn.gov.cn.jhtrb.cn http://www.morning.zxgzp.cn.gov.cn.zxgzp.cn http://www.morning.flpjy.cn.gov.cn.flpjy.cn http://www.morning.rqsr.cn.gov.cn.rqsr.cn http://www.morning.swkzk.cn.gov.cn.swkzk.cn http://www.morning.gmztd.cn.gov.cn.gmztd.cn http://www.morning.prgyd.cn.gov.cn.prgyd.cn