如何取消掉正在执行的sql

为了更快的定位您的问题,请提供以下信息,谢谢
【详述】通过jdbctemplate.query提交sql到sr,没返回类似trino的job_id,没办法对该作业进行取消管理。
【背景】我们尝试过select connection_id(),配合kill 连接id,但是存在该杀sql的运行完了,不想杀的被杀掉了
【业务影响】影响跑批管理的取消操作
【是否存算分离】否,存算一体
【StarRocks版本】3.2.10
【集群规模】例如:3fe(1 leader + 2 follower)+40be(fe与be不混部)
【机器信息】CPU虚拟核/内存/网卡,例如:64C/128G/万兆
【联系方式】为了在解决问题过程中能及时联系到您获取一些日志信息,请补充下您的联系方式,例如:社区群4-小李或者邮箱,谢谢

我们希望能够像trino提交sql一样,能同步返回作业id,方便后续对作业的管理;或者可以指定作业id也可以;如果有其它解决办法,麻烦大佬提供一下,非常感谢。

https://github.com/StarRocks/starrocks/pull/48114 这个PR之后支持了自定义query_id 通过kill 自定义query id 可以实现你想要的效果

好的,谢谢

大佬,我现在觉得他们这样设计,是能达到效果,但为什么不在用户代码提交sql的时候就可以直接获取到jobid呢,进而作业无论重试几次jobid都不变,用户代码把job_id保存起来就可以了?当然用户代码指定作业id也有存在的意义哈

想要这种效果 :
jdbcTemplate.query(con-> {
// 伪代码

return preparedStatement;
}, res -> {
ResultSet rawResultSet = ((DruidPooledResultSet) res).getRawResultSet();
TrinoResultSet trinoResultSet = (TrinoResultSet) rawResultSet;
String queryId = trinoResultSet.getQueryId();
// 获取queryId,根据主键更新表中QueryId字段,在作业管理页面会根据表中的QueryId单个/批量kill作业

}

)

ResultSet rawResultSet = ((DruidPooledResultSet) res).getRawResultSet(); 这一步应该会卡住直到执行完成吧。这个是Mysql 协议决定的

是的,就像你说的是协议决定的,因为实际sql执行中,我们分析场景有漏斗,归因、分布、旅程等非常复杂的sql,数据量也比较大,之前在trino执行分钟,甚至十几分钟的,在starrocks上表现特别优秀,所以,通过你的帮助和我们场景的需要,我们现在已经根据starrocks的特性做了调整。我现在了解,为什么kill 会把杀掉connection_id和query_id放到一起了。谢谢