文件引擎其实是一个不常用的特殊表引擎,结合文件引擎的基础介绍
这边有一个需求:ClickHouse的日志数据存储在表中,不像其他数据库引擎有文件中的日志,能够方便同步和分析,那现在就想仿照其他数据库,将ClickHouse的查询日志表中数据部分过滤同步到文件中,便于其他日志组件将数据汇聚一起分析
table: query_log ---> filter comment with sql ---> create MATERIALIZED view ---> save into files
这边还需要引入一个概念:物化视图
什么是物化视图
物化视图(Materialized View)是一种特殊类型的表 它能够根据定义在其上的SQL查询结果自动更新数据 它并不存储查询表达式本身,而是实际计算和存储了该查询的结果集 当源表有新的数据插入、修改或满足特定条件时,物化视图会实时或者按照配置的策略执行预定义的聚合或其他计算,并将结果写入到物化视图对应的表中
使用场景
- 通过Select请求聚合并查询数据
- 在写入时将数据准备为新格式
- 在写入到特定聚合时准备数据
比较常见的使用:按月、按年分表同步,针对原始表按照指标定期做数据聚合产生中间统计表等
如何实现这个需求
建立一个使用表引擎的表,作为物化视图的目标表
CREATE TABLE default.query_log_file
(
`event_time` DateTime,
`user` LowCardinality(String),
`query_id` String,
`read_rows` UInt64,
`read_bytes` UInt64,
`result_rows` UInt64,
`result_bytes` UInt64,
`memory_usage` UInt64,
`exception` String
)
ENGINE = File(TabSeparated);
确定需要查询的SQL
SELECT
event_time,
user,
query_id AS query,
read_rows,
read_bytes,
result_rows,
result_bytes,
memory_usage,
exception
FROM clusterAllReplicas('cluster_name', system, query_log)
WHERE (event_date = yesterday()) AND query_duration_ms > 30000 AND (is_initial_query = 1) AND (query NOT LIKE 'INSERT INTO%')
ORDER BY query_duration_ms desc
LIMIT 100
创建物化视图
CREATE MATERIALIZED VIEW query_log_file_view TO default.query_log_file AS
SELECT
event_time,
user,
query_id,
read_rows,
read_bytes,
result_rows,
result_bytes,
memory_usage,
exception
FROM system.query_log
WHERE query_duration_ms > 3 AND (is_initial_query = 1) AND (query NOT LIKE 'INSERT INTO%')
测试
产生测试数据:执行一些查询、alter语句,最好是慢查询,查看是否被视图捕获,查看是否写入文件 如果写入文件,那么后续的采集就基于文件来处理即可,按周写入的format来解析
如果喜欢我的文章的话,可以去GitHub上给一个免费的关注吗?
Featured Tags
工具类
XML
JAVA
Java
Mybatis
反射
代理模式
日志
工厂方法模式
装饰器模式
结果集映射
Web
RESTful
WebAPI规范
SQL
Redis
Jira
SynapseRT
有限状态机 State Machine
statemachine
SpringBoot
IDEA
Tomcat
Vue
Docker
Springboot
Apache Ignite
项目发布与调试
白帽子讲web安全
黑名单
通用化
企业中台实践
MacOS
docker
minio
springboot
分布式存储
Postgres
数据备份
数据恢复
K8S
抖音小程序
开发实践
SpringCloud
Skywalking
Nacos
Kubernetes
Secret
ConfigMap
Git
GitOps
云原生
RocketMQ
ActiveMQ-Artemis
ClickHouse
Kamailio
sipp
Homer
heplify
heplify-server
HEP