From 3bd658cc1f015b8e40a36d4d8479fad3302a5ece Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 12 Jan 2026 14:15:16 +0800 Subject: [PATCH] =?UTF-8?q?refactor(clickhouse):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=99=AF=E7=82=B9=E7=BB=9F=E8=AE=A1=E6=95=B0=E6=8D=AE=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将原有的 scenicId 参数匹配条件替换为子查询方式 - 统一使用 enterScenicTraceIdSubQuery 方法处理景点访问轨迹ID筛选 - 移除重复的时间范围过滤条件以提高查询效率 - 保持 LOAD 和 FACE_UPLOAD 操作的数据统计一致性 - 简化 LAUNCH 操作的时间范围过滤逻辑 - 提高代码可维护性和查询性能 --- .../impl/ClickHouseStatsQueryServiceImpl.java | 24 +++++++------------ 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/ycwl/basic/clickhouse/service/impl/ClickHouseStatsQueryServiceImpl.java b/src/main/java/com/ycwl/basic/clickhouse/service/impl/ClickHouseStatsQueryServiceImpl.java index 8a015624..8b887300 100644 --- a/src/main/java/com/ycwl/basic/clickhouse/service/impl/ClickHouseStatsQueryServiceImpl.java +++ b/src/main/java/com/ycwl/basic/clickhouse/service/impl/ClickHouseStatsQueryServiceImpl.java @@ -106,7 +106,9 @@ public class ClickHouseStatsQueryServiceImpl implements StatsQueryService { sql.append("INNER JOIN t_stats s ON r.trace_id = s.trace_id "); sql.append("WHERE r.action = 'LOAD' "); sql.append("AND r.identifier = 'pages/videoSynthesis/buy' "); - sql.append("AND JSONExtractString(r.params, 'scenicId') = '").append(query.getScenicId()).append("' "); + sql.append("AND r.trace_id IN ("); + appendEnterScenicTraceIdSubQuery(sql, query.getScenicId(), query.getStartTime(), query.getEndTime()); + sql.append(") "); sql.append("AND JSONExtractString(r.params, 'share') = '' "); if (query.getStartTime() != null) { sql.append("AND r.create_time >= ").append(formatDateTime(query.getStartTime())).append(" "); @@ -167,7 +169,9 @@ public class ClickHouseStatsQueryServiceImpl implements StatsQueryService { sql.append("FROM t_stats_record r "); sql.append("INNER JOIN t_stats s ON r.trace_id = s.trace_id "); sql.append("WHERE r.action = 'FACE_UPLOAD' "); - sql.append("AND JSONExtractString(r.params, 'scenicId') = '").append(query.getScenicId()).append("' "); + sql.append("AND r.trace_id IN ("); + appendEnterScenicTraceIdSubQuery(sql, query.getScenicId(), query.getStartTime(), query.getEndTime()); + sql.append(") "); if (query.getStartTime() != null) { sql.append("AND s.create_time >= ").append(formatDateTime(query.getStartTime())).append(" "); } @@ -183,7 +187,9 @@ public class ClickHouseStatsQueryServiceImpl implements StatsQueryService { sql.append("SELECT DISTINCT r.identifier FROM t_stats_record r "); sql.append("INNER JOIN t_stats s ON r.trace_id = s.trace_id "); sql.append("WHERE r.action = 'FACE_UPLOAD' "); - sql.append("AND JSONExtractString(r.params, 'scenicId') = '").append(query.getScenicId()).append("' "); + sql.append("AND r.trace_id IN ("); + appendEnterScenicTraceIdSubQuery(sql, query.getScenicId(), query.getStartTime(), query.getEndTime()); + sql.append(") "); if (query.getStartTime() != null) { sql.append("AND s.create_time >= ").append(formatDateTime(query.getStartTime())).append(" "); } @@ -357,12 +363,6 @@ public class ClickHouseStatsQueryServiceImpl implements StatsQueryService { sql.append(") "); sql.append("AND r.action = 'LAUNCH' "); sql.append("AND JSONExtractInt(r.params, 'scene') IN (1047, 1048, 1049) "); - if (query.getStartTime() != null) { - sql.append("AND s.create_time >= ").append(formatDateTime(query.getStartTime())).append(" "); - } - if (query.getEndTime() != null) { - sql.append("AND s.create_time <= ").append(formatDateTime(query.getEndTime())).append(" "); - } sql.append("GROUP BY toStartOfHour(s.create_time) "); sql.append("ORDER BY toStartOfHour(s.create_time)"); @@ -386,12 +386,6 @@ public class ClickHouseStatsQueryServiceImpl implements StatsQueryService { sql.append(") "); sql.append("AND r.action = 'LAUNCH' "); sql.append("AND JSONExtractInt(r.params, 'scene') IN (1047, 1048, 1049) "); - if (query.getStartTime() != null) { - sql.append("AND s.create_time >= ").append(formatDateTime(query.getStartTime())).append(" "); - } - if (query.getEndTime() != null) { - sql.append("AND s.create_time <= ").append(formatDateTime(query.getEndTime())).append(" "); - } sql.append("GROUP BY toStartOfDay(s.create_time) "); sql.append("ORDER BY toStartOfDay(s.create_time)");