sql - 在对clickhouse中的各个值求和后计算每秒峰值
问题描述
我目前正在使用 Clickhouse 集群(2 个分片,2 个副本)从我的服务器读取事务日志。日志包含时间戳、传递的字节数、ttms 等字段。我的表结构如下:
CREATE TABLE db.log_data_local ON CLUSTER '{cluster}' (
timestamp DateTime,
bytes UInt64,
/*lots of other fields */
) ENGINE = ReplicatedMergeTree('/clickhouse/{cluster}/db/tables/logs/{shard}','{replica}')
PARTITION BY toYYYYMMDD(timestamp)
ORDER BY timestamp
TTL timestamp + INTERVAL 1 MONTH;
CREATE TABLE db.log_data ON CLUSTER '{cluster}'
AS cdn_data.http_access_data_local
ENGINE = Distributed('{cluster}','db','log_data_local',rand());
我正在从 Kafka 摄取数据并使用物化视图来填充此表。现在我需要从这个表中计算每秒的峰值吞吐量。所以基本上我需要总结每秒字节字段,然后找到 5 分钟期间的最大值。
我尝试将 ReplicatedAggregatingMergeTree 与聚合函数一起用于吞吐量,但与直接查询原始表时获得的值相比,我得到的峰值要小得多。
问题是,在创建材料视图以填充峰值时,直接查询分布式表不会给出任何结果,但如果我查询本地表,则只考虑部分数据集。我尝试使用中间表来计算每秒总数,然后创建具体化但我遇到了同样的问题。
这是我的 peaks 表的架构和我正在尝试创建的物化视图:
CREATE TABLE db.peak_metrics_5m_local ON CLUSTER '{cluster}'
(
timestamp DateTime,
peak_throughput AggregateFunction(max,UInt64),
)
ENGINE=ReplicatedAggregatingMergeTree('/clickhouse/{cluster}/db/tables/peak_metrics_5m_local/{shard}','{replica}')
PARTITION BY toYYYYMMDD(timestamp)
ORDER BY (timestamp)
TTL timestamp + toIntervalDay(90);
CREATE TABLE db.peak_metrics_5m ON CLUSTER '{cluster}'
AS cdn_data.peak_metrics_5m_local
ENGINE = Distributed('{cluster}','db','peak_metrics_5m_local',rand());
CREATE MATERIALIZED VIEW db.peak_metrics_5m_mv ON CLUSTER '{cluster}'
TO db.peak_metrics_5m_local
AS SELECT
toStartOfFiveMinute(timestamp) as timestamp,
maxState(bytes) as peak_throughput,
FROM (
SELECT
timestamp,
sum(bytes) as bytes,
FROM db.log_data_local
GROUP BY timestamp
)
GROUP BY timestamp;
请帮我解决这个问题。
解决方案
用 MV 是不可能实现的。MV 是一个插入触发器。
sum(bytes) as bytes, ... GROUP BY timestamp
适用于插入的缓冲区并且不从 log_data_local 表中读取数据。
https://github.com/ClickHouse/ClickHouse/issues/14266#issuecomment-684907869
推荐阅读
- maven - 是否可以在 CLI 中添加 MVN 选项?
- r-lavaan - 使用多个 DV 在 lavaan 中进行调解
- python - 无法脱离登录系统
- android - Appium。如何在具有 `android:launchMode="singleInstance"` 标志的活动上查找元素?
- java - 如何正确保存关联实体?
- php - WordPress PHP 警告:需要(/home/cluster-sites/6/e/expertfaculty.org/public_html/wp-includes/class-wp-widget.php):无法打开流
- git - 查找 git 中的所有子模块及其提交
- mysql - ER_NOT_SUPPORTED_AUTH_MODE:客户端不支持服务器请求的认证协议;考虑升级 MySQL 客户端
- r - 计算 data.table 中的百分比汇总
- sql - 包括 NULL 值的 SQL 内连接