【详述】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指纹为空