窗口函数加partition by报runtime error: index out of range错误

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:5.7.25-TiDB-v3.0.2
  • 集群节点分布 】 tidb集群:两个tidb,三个tikv,三个pd
  • 【问题描述】:窗口函数rank和lag加了partition by就报 “ runtime error: index out of range ”错误

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出打印结果,请务必全选并复制粘贴上传。

加了partition by分组后开始报错,rank窗口函数也是同样的问题,row_number函数没有问题

涉及敏感数据,做了一个测试表

建表语句:
CREATE TABLE kkk (
id bigint(20) DEFAULT NULL,
name varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

sql语句: SELECT id,name,lag(id/id,1,0) OVER ( PARTITION BY name ORDER BY id ) from kkk;

数据量30W时会出现

但是有时候执行会成功,不是每次都runtime error: index out of range

在github上找到一篇文章
https://github.com/pingcap/tidb/issues/11612
不知道是不是同一个问题

请提供上述两个 sql 的文本以及表结构

您好,我更新了下问题文档

lag是你们自己创建的一个函数吗? 方便发一下创建语句吗? 我们这边好按照你的环境模拟一下,多谢

不是啊,就是一个窗口函数,官方也是说支持

3.0.3 版本修复了一些窗口函数 引起的 index out of range 的问题 。建议升级到新版本。

好吧,近期考虑升级,看看是否可以解决问题

如果有问题,再进行沟通