Skip to content

Commit a4dec00

Browse files
HonestManXinYour Name
authored andcommitted
[feature] (nereids) generate sql digest for nereids prased stmt (#56256)
The stmt generated by the old parser has a toDigest method, so that auditlog can use the generated digest to generate SQL fingerprints, facilitating the troubleshooting of issues such as slow SQL
1 parent eaa7d32 commit a4dec00

File tree

69 files changed

+1124
-17
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+1124
-17
lines changed

fe/fe-core/src/main/java/org/apache/doris/analysis/TableSnapshot.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,12 @@ public String toString() {
6868
return " FOR TIME AS OF '" + value + "'";
6969
}
7070
}
71+
72+
public String toDigest() {
73+
if (this.type == VersionType.VERSION) {
74+
return " FOR VERSION AS OF " + '?';
75+
} else {
76+
return " FOR TIME AS OF '" + '?' + "'";
77+
}
78+
}
7179
}

fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundAlias.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,16 @@ public String toString() {
104104
return stringBuilder.toString();
105105
}
106106

107+
@Override
108+
public String toDigest() {
109+
StringBuilder sb = new StringBuilder();
110+
sb.append(child().toDigest());
111+
if (alias.isPresent()) {
112+
sb.append(" AS " + alias.get());
113+
}
114+
return sb.toString();
115+
}
116+
107117
@Override
108118
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
109119
return visitor.visitUnboundAlias(this, context);

fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundFunction.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,20 @@ public String toString() {
130130
return "'" + getName() + "(" + (isDistinct ? "distinct " : "") + params + ")";
131131
}
132132

133+
@Override
134+
public String toDigest() {
135+
StringBuilder sb = new StringBuilder();
136+
sb.append(getName().toUpperCase());
137+
sb.append("(");
138+
sb.append(isDistinct ? "distinct " : "");
139+
sb.append(
140+
children.stream().map(Expression::toDigest)
141+
.collect(Collectors.joining(", "))
142+
);
143+
sb.append(")");
144+
return sb.toString();
145+
}
146+
133147
@Override
134148
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
135149
return visitor.visitUnboundFunction(this, context);

fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundInlineTable.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,4 +84,10 @@ public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> groupExpr
8484
public List<Slot> computeOutput() {
8585
throw new UnboundException("output");
8686
}
87+
88+
@Override
89+
public String toDigest() {
90+
// TODO handle exprList?
91+
return "VALUES ?";
92+
}
8793
}

fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundOneRowRelation.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737

3838
import java.util.List;
3939
import java.util.Optional;
40+
import java.util.stream.Collectors;
4041

4142
/**
4243
* A relation that contains only one row consist of some constant expressions.
@@ -108,4 +109,15 @@ public String toString() {
108109
"projects", projects
109110
);
110111
}
112+
113+
@Override
114+
public String toDigest() {
115+
StringBuilder sb = new StringBuilder();
116+
sb.append("SELECT ");
117+
sb.append(
118+
projects.stream().map(Expression::toDigest)
119+
.collect(Collectors.joining(", "))
120+
);
121+
return sb.toString();
122+
}
111123
}

fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundRelation.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import java.util.List;
4343
import java.util.Objects;
4444
import java.util.Optional;
45+
import java.util.stream.Collectors;
4546

4647
/**
4748
* Represent a relation plan node that has not been bound.
@@ -187,6 +188,28 @@ public String toString() {
187188
return Utils.toSqlString("UnboundRelation", args.toArray());
188189
}
189190

191+
@Override
192+
public String toDigest() {
193+
StringBuilder sb = new StringBuilder();
194+
if (nameParts.size() > 0) {
195+
sb.append(nameParts.stream().collect(Collectors.joining(".")));
196+
sb.append(" ");
197+
}
198+
if (indexName.isPresent()) {
199+
sb.append("INDEX ").append(indexName.get()).append(" ");
200+
}
201+
if (tabletIds.size() > 0) {
202+
sb.append("TABLET(?)").append(" ");
203+
}
204+
if (scanParams != null) {
205+
sb.append("@").append(scanParams.getParamType()).append(" ");
206+
}
207+
if (tableSnapshot.isPresent()) {
208+
sb.append(tableSnapshot.get().toDigest()).append(" ");
209+
}
210+
return sb.substring(0, sb.length() - 1);
211+
}
212+
190213
@Override
191214
public boolean equals(Object o) {
192215
if (o == null || getClass() != o.getClass()) {

fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundResultSink.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,11 @@ public String toString() {
9191
return Utils.toSqlString("UnboundResultSink[" + id.asInt() + "]");
9292
}
9393

94+
@Override
95+
public String toDigest() {
96+
return child().toDigest();
97+
}
98+
9499
@Override
95100
public StmtType stmtType() {
96101
return StmtType.SELECT;

fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundSlot.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ public String getName() {
7070
}).reduce((left, right) -> left + "." + right).orElse("");
7171
}
7272

73+
@Override
74+
public String toDigest() {
75+
return computeToSql();
76+
}
77+
7378
@Override
7479
public List<String> getQualifier() {
7580
return nameParts.subList(0, nameParts.size() - 1);

fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundStar.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,21 @@ public String toString() {
156156
return toSql();
157157
}
158158

159+
@Override
160+
public String toDigest() {
161+
StringBuilder sb = new StringBuilder();
162+
if (qualifier.isEmpty()) {
163+
sb.append("*");
164+
} else {
165+
sb.append(qualifier.get(0) + ".*");
166+
}
167+
if (!exceptedSlots.isEmpty()) {
168+
sb.append(exceptedSlots.stream().map(NamedExpression::toDigest)
169+
.collect(Collectors.joining(", ", " EXCEPT(", ")")));
170+
}
171+
return sb.toString();
172+
}
173+
159174
public Optional<Pair<Integer, Integer>> getIndexInSqlString() {
160175
return indexInSqlString;
161176
}

fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundTVFRelation.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,4 +107,11 @@ public String toString() {
107107
"arguments", properties
108108
);
109109
}
110+
111+
@Override
112+
public String toDigest() {
113+
StringBuilder sb = new StringBuilder(functionName);
114+
sb.append("(?)");
115+
return sb.toString();
116+
}
110117
}

0 commit comments

Comments
 (0)