diff --git a/.github/distro/docker-compose.yml b/.github/distro/docker-compose.yml index b044d5ca..e82ceec1 100644 --- a/.github/distro/docker-compose.yml +++ b/.github/distro/docker-compose.yml @@ -5,6 +5,7 @@ services: - "${DEEPHAVEN_PORT:-10000}:10000" volumes: - ./data:/data + - ./minio:/minio environment: - "START_OPTS=-Xmx24G -DAuthHandlers=io.deephaven.auth.AnonymousAuthenticationHandler" diff --git a/src/it/java/io/deephaven/benchmark/tests/standard/aggby/CountWhereTest.java b/src/it/java/io/deephaven/benchmark/tests/standard/aggby/CountWhereTest.java new file mode 100644 index 00000000..4b61283e --- /dev/null +++ b/src/it/java/io/deephaven/benchmark/tests/standard/aggby/CountWhereTest.java @@ -0,0 +1,36 @@ +/* Copyright (c) 2025-2026 Deephaven Data Labs and Patent Pending */ +package io.deephaven.benchmark.tests.standard.aggby; + +import org.junit.jupiter.api.*; +import io.deephaven.benchmark.tests.standard.StandardTestRunner; + +/** + * Standard tests for the countWhere table operation. Returns the number of rows for each group. + */ +public class CountWhereTest { + final StandardTestRunner runner = new StandardTestRunner(this); + + @BeforeEach + void setup() { + runner.setRowFactor(6); + runner.tables("source"); + + var setupStr = "from deephaven import agg"; + runner.addSetupQuery(setupStr); + } + + @Test + void countWhere1Group() { + runner.setScaleFactors(9, 0); + var q = "source.agg_by([agg.count_where(col='count', filters=['num1 > 3'])], by=['key1'])"; + runner.test("CountWhere-AggBy- Range 1 Group 100 Unique Vals", 100, q, "key1", "num1"); + } + + @Test + void countWhere2Group() { + runner.setScaleFactors(3, 2); + var q = "source.agg_by([agg.count_where(col='count', filters=['num1 % 3 = 0'])], by=['key1', 'key2'])"; + runner.test("CountWhere-AggBy- Equals 2 Groups 10K Unique Combos", 10100, q, "key1", "key2", "num1"); + } + +} diff --git a/src/it/java/io/deephaven/benchmark/tests/standard/updateby/CumCountWhereTest.java b/src/it/java/io/deephaven/benchmark/tests/standard/updateby/CumCountWhereTest.java new file mode 100644 index 00000000..40725d52 --- /dev/null +++ b/src/it/java/io/deephaven/benchmark/tests/standard/updateby/CumCountWhereTest.java @@ -0,0 +1,66 @@ +/* Copyright (c) 2025-2026 Deephaven Data Labs and Patent Pending */ +package io.deephaven.benchmark.tests.standard.updateby; + +import org.junit.jupiter.api.*; +import io.deephaven.benchmark.tests.standard.StandardTestRunner; + +/** + * Standard tests for the updateBy table operation. Calculates a cumulative countWhere for specified columns and places + * the result into a new column for each row. + */ +public class CumCountWhereTest { + final StandardTestRunner runner = new StandardTestRunner(this); + + void setup(int rowFactor, int staticFactor, int incFactor) { + runner.setRowFactor(rowFactor); + runner.setScaleFactors(staticFactor, incFactor); + runner.tables("timed"); + runner.addSetupQuery(""" + from deephaven.updateby import cum_count_where + from deephaven.filters import or_ + """); + } + + @Test + void cumCountWhereRange0Group1Col() { + setup(5, 10, 0); + var q = "timed.update_by(ops=cum_count_where(col='X', filters=['num1 > 3']))"; + runner.test("CumCountWhere- Range No Groups 1 Col", q, "num1"); + } + + @Test + void cumCountWhereEquals0Group1Col() { + setup(5, 8, 0); + var q = "timed.update_by(ops=cum_count_where(col='X', filters=['num1 % 3 = 0']))"; + runner.test("CumCountWhere- Equals No Groups 1 Col", q, "num1"); + } + + @Test + void cumCountWhereAnd0Group1Col() { + setup(5, 10, 0); + var q = "timed.update_by(ops=cum_count_where(col='X', filters=['num1 > 3','num1 % 3 = 0']))"; + runner.test("CumCountWhere- And No Groups 1 Col", q, "num1"); + } + + @Test + void cumCountWhereOr0Group1Col() { + setup(5, 3, 0); + var q = "timed.update_by(ops=cum_count_where(col='X', filters=or_(['num1 > 3','num1 % 3 = 0'])))"; + runner.test("CumCountWhere- Or No Groups 1 Col", q, "num1"); + } + + @Test + void cumCountWhereRange1Group1Col() { + setup(3, 10, 0); + var q = "timed.update_by(ops=cum_count_where(col='X', filters=['num1 > 3']), by=['key1'])"; + runner.test("CumCountWhere- Range 1 Group 100 Unique Vals", q, "key1", "num1"); + } + + @Test + void cumCountWhereEquals2Groups1Col() { + setup(2, 3, 1); + var q = "timed.update_by(ops=cum_count_where(col='X', filters=['num1 % 3 = 0']), by=['key1','key2'])"; + runner.test("CumCountWhere- Equals 2 Groups 10K Unique Combos", q, "key1", "key2", "num1"); + } + +} diff --git a/src/it/java/io/deephaven/benchmark/tests/standard/updateby/RollingCountWhereTickTest.java b/src/it/java/io/deephaven/benchmark/tests/standard/updateby/RollingCountWhereTickTest.java new file mode 100644 index 00000000..47dfee6c --- /dev/null +++ b/src/it/java/io/deephaven/benchmark/tests/standard/updateby/RollingCountWhereTickTest.java @@ -0,0 +1,39 @@ +/* Copyright (c) 2025-2026 Deephaven Data Labs and Patent Pending */ +package io.deephaven.benchmark.tests.standard.updateby; + +import org.junit.jupiter.api.*; +import io.deephaven.benchmark.tests.standard.StandardTestRunner; + +/** + * Standard tests for the updateBy table operation. Defines a tick-based rolling countWhere. The result table contains + * an additional column with windowed rolling countWhere. + *
+ * Note: This test must contain benchmarks and rev_ticks/fwd_ticks that are comparable to
+ * RollingCountWhereTimeTest
+ */
+public class RollingCountWhereTickTest {
+ final StandardTestRunner runner = new StandardTestRunner(this);
+ final Setup setup = new Setup(runner);
+ final String fifty = """
+ from deephaven.updateby import rolling_count_where_tick
+ contains_row = rolling_count_where_tick('X',filters=["num1 > 3"],rev_ticks=20,fwd_ticks=30)
+ """;
+
+
+ @Test
+ void rollingCountWhereTick1Group3Ops() {
+ setup.factors(5, 4, 0);
+ runner.addSetupQuery(fifty);
+ var q = "timed.update_by(ops=[contains_row], by=['key1'])";
+ runner.test("RollingCountWhereTick- 1 Group 100 Unique Vals", q, "key1", "num1");
+ }
+
+ @Test
+ void rollingCountWhereTick2Groups3Ops() {
+ setup.factors(2, 3, 1);
+ runner.addSetupQuery(fifty);
+ var q = "timed.update_by(ops=[contains_row], by=['key1','key2'])";
+ runner.test("RollingCountWhereTick- 2 Groups 10K Unique Combos", q, "key1", "key2", "num1");
+ }
+
+}
diff --git a/src/it/java/io/deephaven/benchmark/tests/standard/updateby/RollingCountWhereTimeTest.java b/src/it/java/io/deephaven/benchmark/tests/standard/updateby/RollingCountWhereTimeTest.java
new file mode 100644
index 00000000..51a08c4b
--- /dev/null
+++ b/src/it/java/io/deephaven/benchmark/tests/standard/updateby/RollingCountWhereTimeTest.java
@@ -0,0 +1,42 @@
+/* Copyright (c) 2025-2026 Deephaven Data Labs and Patent Pending */
+package io.deephaven.benchmark.tests.standard.updateby;
+
+import org.junit.jupiter.api.*;
+import io.deephaven.benchmark.tests.standard.StandardTestRunner;
+
+/**
+ * Standard tests for the updateBy table operation. Defines a time-based rolling countWhere. The result table contains
+ * an additional column with windowed rolling countWhere.
+ *
+ * Note: This test must contain benchmarks and rev_time/fwd_time that are comparable to
+ * RollingCountWhereTickTest
+ */
+public class RollingCountWhereTimeTest {
+ final StandardTestRunner runner = new StandardTestRunner(this);
+ final Setup setup = new Setup(runner);
+ final String fifty1Group = """
+ from deephaven.updateby import rolling_count_where_time
+ contains_row = rolling_count_where_time("timestamp",'X',filters=["num1 > 3"],rev_time="PT2S",fwd_time="PT3S")
+ """;
+ final String fifty2Groups = """
+ from deephaven.updateby import rolling_count_where_time
+ contains_row = rolling_count_where_time("timestamp",'X',filters=["num1 > 3"],rev_time="PT4M",fwd_time="PT5M")
+ """;
+
+ @Test
+ void rollingCountWhereTime1Group3Ops() {
+ setup.factors(4, 2, 0);
+ runner.addSetupQuery(fifty1Group);
+ var q = "timed.update_by(ops=[contains_row], by=['key1'])";
+ runner.test("RollingCountWhereTime- 1 Group 100 Unique Vals", q, "key1", "num1", "timestamp");
+ }
+
+ @Test
+ void rollingCountWhereTime2Groups3Ops() {
+ setup.factors(2, 2, 1);
+ runner.addSetupQuery(fifty2Groups);
+ var q = "timed.update_by(ops=[contains_row], by=['key1','key2'])";
+ runner.test("RollingCountWhereTime- 2 Groups 10K Unique Combos", q, "key1", "key2", "num1", "timestamp");
+ }
+
+}
diff --git a/src/main/resources/io/deephaven/benchmark/run/profile/queries/publish.py b/src/main/resources/io/deephaven/benchmark/run/profile/queries/publish.py
index 7a13ef0f..981e6fcd 100644
--- a/src/main/resources/io/deephaven/benchmark/run/profile/queries/publish.py
+++ b/src/main/resources/io/deephaven/benchmark/run/profile/queries/publish.py
@@ -9,7 +9,7 @@
with urlopen(root + '/deephaven-benchmark/benchmark_tables.dh.py') as r:
benchmark_storage_uri_arg = root + '/deephaven-benchmark'
benchmark_category_arg = 'nightly' # release | nightly
- benchnark_max_sets_arg = 45
+ benchmark_max_sets_arg = 45
benchmark_actor_filter_arg = 'deephaven'
benchmark_set_filter_arg = '[0-9]{4}([-][0-9]{2}){2}' # yyyy-mm-dd
exec(r.read().decode(), globals(), locals())