export导出,文件名不断增长

为了更快的定位您的问题,请提供以下信息,谢谢
【详述】业务上使用export语句对数据库表导出为csv文件并通过broker写入hdfs操作,之前使用2.3.11版本时一切正常。升级到2.5.22后,导出文件会被自动切分,并且文件名会不断追加长度,最终超过hdfs的文件名长度限制,导致写入失败。
【背景】没有修改配置,仅按照官方文档升级sr 2.3.11->2.5.22,be/fe/broker
【业务影响】生产环境无法导出,影响正常业务
【是否存算分离】否
【StarRocks版本】2.5.22
【集群规模】例如:3fe(3 follower)+3be(fe与be混部)
【机器信息】CPU虚拟核/内存/网卡,例如:64C/256G/万兆
【表模型】明细模型
【导入或者导出方式】
EXPORT TABLE db.table PARTITION (p202412)
(a,b,c,d,e)
TO ‘hdfs://ip:port/path_to_file/’
PROPERTIES
(
‘column_separator’ = ‘\t’,
‘load_mem_limit’ = ‘2147483648’,
‘timeout’ = ‘3600’,
‘export_max_bytes_per_be_per_task’=‘2147483648’
)
WITH BROKER ‘hdfs_broker’
(
‘username’ = ‘’,
‘password’ = ‘’
);
【联系方式】社区群25-Sphinx,或帖子联系
【附件】
2.3.11时正常导出,效果如下

2.5.22导出异常结果如下

看2.5.22的源码,在ExportJob类中,表明了导出文件名的格式,应该是最后一个file-number在变更的时候,应该是replace,但写成了append

也可能是instance-number写的有问题。从源码看就是这两其中之一

找到问题了。
2.3.11版本代码里,在com.starrocks.qe.Coordinator.java中的toThrift方法,2296行,对于instance number的复制如下,fileNamePrefix的初始化是在for循环之外的,然后在for循环里进行字符串拼接

而在2.5.22版本里,同样这个类,把这一段代码抽成了toThriftForUniqueParams方法,3309行,通过外部传参的方式拼接instance number,在原先的toThrift方法里的for循环里调用这个私有方法。但是!!fileNamePrefix的获取,是直接get sink结构里的变量的!!

这就导致这段文件名会不断被get出来追加number,然后写回去,再取出来追加number。等价代码如下图
image

你懂我意思吧

经过github社区大佬 @srlch 的指点,可以用 select ... into outfile 的方式临时规避,经过验证,方法可行。希望社区能尽快确认这个bug的影响范围,早日修复