一、背景
检索分析日志时提示查询超时的处理方法:
这篇说说将查询拆分成多个小范围查询,然后再汇总结果的详细操作。
二、思路:拆分查询时间范围
通过定时 SQL,可将在日志主题 A 一个长时间范围查询拆成多个短时间范围的查询:例如查询1天的数据,可以拆成12个2小时的查询,并将查询结果保存至新的日志主题B,你可在日志主题 B 中查看查询结果,或者在日志主题 B 中继续做检索分析,该方案已经在生产中得到应用,可有效解决检索分析超时问题。
三、案例:
1. 假定用户在源日志主题:cls_service_log,查询数据范围2023-12-13 12:00:00 – 2023-12-13 12:15:00,查询超时,语句如下:
select sum(etl_input_line) as input_lines ,sum(etl_failure_line) as failed_lines , etl_task_id group by etl_task_id
2. 使用定时 SQL 分析预计算源日志数据,参考 新建定时 SQL 任务。
定时 SQL 分析的配置如下:
·源日志主题:配置为需要拆分查询的日志主题,示例中为 cls_service_log。
·写入目标:选择日志主题,示例中为 sql_result。
·调度范围:2023-12-13 12:05:00 – 2023-12-13 12:15:00(实际查询的是12:00:00 -12:15:00的数据,你可在调度详情中查看 SQL 时间窗口,SQL 时间窗口是查询的范围)
·调度周期:5分种
·SQL 时间窗口:@m-5m,@m
·SQL 语句(CQL):
*|select sum(etl_input_line) as input_lines ,sum(etl_failure_line) as failed_lines , etl_task_id group by etl_task_id
注意:说明:
注意:示例中的定时 SQL 分析使用的语句和检索分析的一样,但在某些业务场景下,例如有 Distinct、Avg 、TOP N 计算时,需要你根据业务诉求调整 SQL 语句。
可以在定时 SQL 分析的调度详情中看到,将原来的1个15分钟范围的查询,拆分成了3个5分钟范围的查询。三个查询的 SQL 时间窗口加起来刚好是原来的时间范围12:00-12:15。
3. 打开目标主题 sql_result 查看数据:
可以看到定时 SQL 分析处理的数据如下。由于 input_lines 和 failed_lines 在定时 SQL 中,分三次(每次计算5分钟的 sum 值)后写入。因此我们需要将结果数据再做一次 sum,就可以得到原始业务场景中15分钟的 input_lines 和 failed_lines 的 sum 值。
4. 在目标日志主题中检索
在目标日志主题 sql_result 中执行 SQL 语句:
select sum(input_lines) as input_lines, sum(failed_lines) as failed_lines,etl_task_id group by etl_task_id
得到如下的结果,和在源日志主题:cls_service_log 直接检索分析的结果一致(没有超时的情况下)。
四、结论
当你的查询超时,你可通过定时 SQL,对源日志数据预计算(拆分查询范围)之后,然后在目标日志主题中进行检索,或者配置仪表盘、告警,可有效提升对日志数据的计算分析能力。