文档中心>日志服务>实践教程>定时 SQL 分析>使用定时 SQL 解决检索分析超时

使用定时 SQL 解决检索分析超时

最近更新时间:2024-06-07 17:23:13

我的收藏

背景

检索分析日志时提示查询超时的处理方法:
1. 如果是由于查询时间范围过长,导致单次查询的数据量过大,推荐您使用定时 SQL 分析,将该查询拆分成多个小范围查询,然后再汇总结果。
2. 如果您的查询结果都是数值类型,也可通过定时SQL分析,将 日志转为指标 Metric,再使用 PromQL 对指标计算分析,其查询性能比日志要高,可有效解决日志查询超时的问题。
本文介绍将查询拆分成多个小范围查询,然后再汇总结果的详细操作。

操作步骤

思路:拆分查询时间范围

通过定时 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,对源日志数据预计算(拆分查询范围)之后,然后在目标日志主题中进行检索,或者配置仪表盘、告警,可有效提升对日志数据的计算分析能力。