特点
存储,查询快
难理解
向量化执行引擎:它是基于物理硬件cpu部分的,简单来说,就是cpu中的simd指令(单条命令执行多条数据),通过数据并行以提高性能的一种实现方式,原理是在cpu寄存器层面实现数据的并行操作。
replacingmergetree引擎:与merge不同的是他会去重,去重的并不是主键相同的,而是排序相同的(order By),但是当插入数据的时候,因为它是并行工作的,所以可能得到的并不是最新的数据,这时候用engine=ReplacingMergeTree(version) , version在数据中定义一个int,这样插入数据的时候,按照int的数值最大的为最后的更新,也可以配置时间为参数
sql
with 语法
with ‘2’ as a select * from user where id=a
with (select count(1) from user) as a select (sum(age) )
查询最近7日的情况
select toDate(row_create_time),count(1) from track_all where row_create_time >= toDate((now()) - interval 7 day )group by toDate(row_create_time);
查询的热度
select article.article_id, article.article_title,article.article_type,count(article_id) as “hot” from article left join track_all on track_all.article_id=CAST(article.article_id as String)
where track_all.row_create_time >= toDate((now())- interval 7 day)
group by article_id,article_title,article_type order by hot desc limit 12
查询最近7天的某个事件的热度
select event,toDate(row_create_time),count(1) from track_all
where row_create_time>=toDate(now()- interval 7 day)
group by event,toDate(row_create_time) order by toDate(row_create_time)
创表
39 40
CREATE TABLE saas_binlog.article_binlog
(
`logId` Int64 COMMENT '日志id',
`operate_time` DateTime COMMENT '操作时间',
`operator` String COMMENT '操作人员',
`module` String COMMENT '所属模块',
`targetId` Int64 COMMENT '操作对象id稿件id',
`action` String COMMENT '操作类型',
`detail` String COMMENT '日志内容(操作人 新建|修改|删除 稿件id(修改字段))',
`fieldChange` String COMMENT '最新值/旧值',
`tenantId` Int64 COMMENT '租户ID',
`appId` Int64 COMMENT '应用ID',
`dwd_json` String COMMENT '原有字符串'
)
ENGINE =ReplicatedReplacingMergeTree ('/clickhouse/tables/{layer}-{shard}/article_binlog','{replica}')
PARTITION BY toYYYYMM(operate_time)
PRIMARY KEY logId
ORDER BY (logId, operate_time)
39
create TABLE saas_binlog.article_binlog_all AS saas_binlog.article_binlog ENGINE = Distributed(perftest_2shards_1replicas,saas_binlog, article_binlog, rand());
参考
https://clickhouse.tech/docs/zh/