【详述】starrocks SQL 指纹diget有些为空
【背景】做慢查询推送和治理,发现starrocks SQL 指纹diget有些为空
【业务影响】
【StarRocks版本】3.1.13 和2.5.13 这2个版本都验证过
【集群规模】3fe + 3be
【联系方式】
查了下源码: public String computeStatementDigest(StatementBase queryStmt) {
if (queryStmt == null ) {
return "" ;
}
String digest = SqlDigestBuilder.build(queryStmt);
try {
MessageDigest md = MessageDigest.getInstance( "MD5" );
md.reset();
md.update(digest.getBytes());
return Hex.encodeHexString(md.digest());
} catch (NoSuchAlgorithmException e) {
return "" ;
}
}
public class SqlDigestBuilder {
public static String build(StatementBase statement) {
return new SqlDigestBuilderVisitor().visit(statement);
}
private static class SqlDigestBuilderVisitor extends AstToStringBuilder.AST2StringBuilderVisitor {
@Override
public String visitLiteral(LiteralExpr expr, Void context) {
return "?" ;
}
@Override
public String visitLimitElement(LimitElement node, Void context) {
if (node.getLimit() == - 1 ) {
return "" ;
}
StringBuilder sb = new StringBuilder( " LIMIT " );
if (node.getOffset() != 0 ) {
sb.append( " ?, " );
}
sb.append( " ? " );
return sb.toString();
}
}
}
确认一下,哪个版本修复了。digest为空的原因是?如何解决?
之前有个类似的帖子:请问为什么大部分sql,审计日志sql指纹为空
