|
@@ -34,6 +34,7 @@ import static org.elasticsearch.xpack.esql.telemetry.FeatureMetric.INLINE_STATS;
|
|
import static org.elasticsearch.xpack.esql.telemetry.FeatureMetric.KEEP;
|
|
import static org.elasticsearch.xpack.esql.telemetry.FeatureMetric.KEEP;
|
|
import static org.elasticsearch.xpack.esql.telemetry.FeatureMetric.LIMIT;
|
|
import static org.elasticsearch.xpack.esql.telemetry.FeatureMetric.LIMIT;
|
|
import static org.elasticsearch.xpack.esql.telemetry.FeatureMetric.LOOKUP_JOIN;
|
|
import static org.elasticsearch.xpack.esql.telemetry.FeatureMetric.LOOKUP_JOIN;
|
|
|
|
+import static org.elasticsearch.xpack.esql.telemetry.FeatureMetric.LOOKUP_JOIN_ON_EXPRESSION;
|
|
import static org.elasticsearch.xpack.esql.telemetry.FeatureMetric.MV_EXPAND;
|
|
import static org.elasticsearch.xpack.esql.telemetry.FeatureMetric.MV_EXPAND;
|
|
import static org.elasticsearch.xpack.esql.telemetry.FeatureMetric.RENAME;
|
|
import static org.elasticsearch.xpack.esql.telemetry.FeatureMetric.RENAME;
|
|
import static org.elasticsearch.xpack.esql.telemetry.FeatureMetric.ROW;
|
|
import static org.elasticsearch.xpack.esql.telemetry.FeatureMetric.ROW;
|
|
@@ -65,7 +66,8 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(0, drop(c));
|
|
assertEquals(0, drop(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, rename(c));
|
|
- assertEquals(0, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(0, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(1, function("concat", c));
|
|
assertEquals(1, function("concat", c));
|
|
}
|
|
}
|
|
@@ -87,7 +89,8 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(0, drop(c));
|
|
assertEquals(0, drop(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, rename(c));
|
|
- assertEquals(0, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(0, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(1, function("length", c));
|
|
assertEquals(1, function("length", c));
|
|
}
|
|
}
|
|
@@ -109,7 +112,8 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(0, drop(c));
|
|
assertEquals(0, drop(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, rename(c));
|
|
- assertEquals(0, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(0, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(1, function("concat", c));
|
|
assertEquals(1, function("concat", c));
|
|
}
|
|
}
|
|
@@ -131,7 +135,8 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(0, drop(c));
|
|
assertEquals(0, drop(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, rename(c));
|
|
- assertEquals(0, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(0, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(0, inlineStats(c));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -152,7 +157,8 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(0, drop(c));
|
|
assertEquals(0, drop(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, rename(c));
|
|
- assertEquals(0, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(0, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(0, inlineStats(c));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -173,7 +179,8 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(0, drop(c));
|
|
assertEquals(0, drop(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, rename(c));
|
|
- assertEquals(0, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(0, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(1, function("max", c));
|
|
assertEquals(1, function("max", c));
|
|
}
|
|
}
|
|
@@ -195,7 +202,8 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(0, drop(c));
|
|
assertEquals(0, drop(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, rename(c));
|
|
- assertEquals(0, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(0, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(0, inlineStats(c));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -216,7 +224,8 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(0, drop(c));
|
|
assertEquals(0, drop(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, rename(c));
|
|
- assertEquals(0, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(0, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(0, inlineStats(c));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -257,7 +266,8 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(0, drop(c));
|
|
assertEquals(0, drop(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, rename(c));
|
|
- assertEquals(0, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(0, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(0, inlineStats(c));
|
|
|
|
|
|
assertEquals(1, function("length", c));
|
|
assertEquals(1, function("length", c));
|
|
@@ -343,7 +353,8 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(1L, keep(c));
|
|
assertEquals(1L, keep(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(0, inlineStats(c));
|
|
- assertEquals(0, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(0, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
assertEquals(1, function("to_string", c));
|
|
assertEquals(1, function("to_string", c));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -374,7 +385,8 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(1L, keep(c));
|
|
assertEquals(1L, keep(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(0, inlineStats(c));
|
|
- assertEquals(0, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(0, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
}
|
|
}
|
|
|
|
|
|
public void testShowInfo() {
|
|
public void testShowInfo() {
|
|
@@ -395,7 +407,8 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(0, inlineStats(c));
|
|
- assertEquals(0, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(0, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
assertEquals(1, function("count", c));
|
|
assertEquals(1, function("count", c));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -417,7 +430,8 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(0, inlineStats(c));
|
|
- assertEquals(0, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(0, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
}
|
|
}
|
|
|
|
|
|
public void testDropAndRename() {
|
|
public void testDropAndRename() {
|
|
@@ -438,7 +452,8 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(1L, rename(c));
|
|
assertEquals(1L, rename(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(0, inlineStats(c));
|
|
- assertEquals(0, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(0, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
assertEquals(1, function("count", c));
|
|
assertEquals(1, function("count", c));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -465,7 +480,8 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(1L, keep(c));
|
|
assertEquals(1L, keep(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(0, inlineStats(c));
|
|
- assertEquals(0, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(0, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
}
|
|
}
|
|
|
|
|
|
public void testCategorize() {
|
|
public void testCategorize() {
|
|
@@ -490,7 +506,8 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(1L, keep(c));
|
|
assertEquals(1L, keep(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(0, inlineStats(c));
|
|
- assertEquals(0, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(0, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
assertEquals(1, function("count", c));
|
|
assertEquals(1, function("count", c));
|
|
assertEquals(1, function("categorize", c));
|
|
assertEquals(1, function("categorize", c));
|
|
}
|
|
}
|
|
@@ -517,7 +534,8 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(1L, inlineStats(c));
|
|
assertEquals(1L, inlineStats(c));
|
|
- assertEquals(0, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(0, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
assertEquals(1, function("max", c));
|
|
assertEquals(1, function("max", c));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -544,7 +562,8 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(1L, inlineStats(c));
|
|
assertEquals(1L, inlineStats(c));
|
|
- assertEquals(0, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(0, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
assertEquals(1, function("max", c));
|
|
assertEquals(1, function("max", c));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -570,7 +589,40 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, inlineStats(c));
|
|
assertEquals(0, inlineStats(c));
|
|
- assertEquals(1L, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(1L, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
|
|
+ assertEquals(1, function("max", c));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void testBinaryPlanAfterStatsExpressionJoin() {
|
|
|
|
+ assumeTrue(
|
|
|
|
+ "requires LOOKUP JOIN ON boolean expression capability",
|
|
|
|
+ EsqlCapabilities.Cap.LOOKUP_JOIN_ON_BOOLEAN_EXPRESSION.isEnabled()
|
|
|
|
+ );
|
|
|
|
+ Counters c = esql("""
|
|
|
|
+ from employees
|
|
|
|
+ | eval language_code = languages
|
|
|
|
+ | stats m = max(salary) by language_code
|
|
|
|
+ | rename language_code as language_code_left
|
|
|
|
+ | lookup join languages_lookup on language_code_left >= language_code""");
|
|
|
|
+ assertEquals(0, dissect(c));
|
|
|
|
+ assertEquals(1L, eval(c));
|
|
|
|
+ assertEquals(0, grok(c));
|
|
|
|
+ assertEquals(0, limit(c));
|
|
|
|
+ assertEquals(0, sort(c));
|
|
|
|
+ assertEquals(1L, stats(c));
|
|
|
|
+ assertEquals(0, where(c));
|
|
|
|
+ assertEquals(0, enrich(c));
|
|
|
|
+ assertEquals(0, mvExpand(c));
|
|
|
|
+ assertEquals(0, show(c));
|
|
|
|
+ assertEquals(0, row(c));
|
|
|
|
+ assertEquals(1L, from(c));
|
|
|
|
+ assertEquals(0, drop(c));
|
|
|
|
+ assertEquals(0, keep(c));
|
|
|
|
+ assertEquals(1L, rename(c));
|
|
|
|
+ assertEquals(0, inlineStats(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(1L, lookupJoinOnExpression(c));
|
|
assertEquals(1, function("max", c));
|
|
assertEquals(1, function("max", c));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -597,7 +649,8 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, keep(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(0, rename(c));
|
|
assertEquals(1L, inlineStats(c));
|
|
assertEquals(1L, inlineStats(c));
|
|
- assertEquals(1L, lookupjoin(c));
|
|
|
|
|
|
+ assertEquals(1L, lookupJoinOnFields(c));
|
|
|
|
+ assertEquals(0, lookupJoinOnExpression(c));
|
|
assertEquals(1, function("max", c));
|
|
assertEquals(1, function("max", c));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -665,10 +718,14 @@ public class VerifierMetricsTests extends ESTestCase {
|
|
return c.get(FEATURES_PREFIX + INLINE_STATS);
|
|
return c.get(FEATURES_PREFIX + INLINE_STATS);
|
|
}
|
|
}
|
|
|
|
|
|
- private long lookupjoin(Counters c) {
|
|
|
|
|
|
+ private long lookupJoinOnFields(Counters c) {
|
|
return c.get(FEATURES_PREFIX + LOOKUP_JOIN);
|
|
return c.get(FEATURES_PREFIX + LOOKUP_JOIN);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private long lookupJoinOnExpression(Counters c) {
|
|
|
|
+ return c.get(FEATURES_PREFIX + LOOKUP_JOIN_ON_EXPRESSION);
|
|
|
|
+ }
|
|
|
|
+
|
|
private long function(String function, Counters c) {
|
|
private long function(String function, Counters c) {
|
|
return c.get(FUNC_PREFIX + function);
|
|
return c.get(FUNC_PREFIX + function);
|
|
}
|
|
}
|