diff --git a/benchmarks/sql_benchmarks/clickbench_extended/benchmarks/q13.benchmark b/benchmarks/sql_benchmarks/clickbench_extended/benchmarks/q13.benchmark new file mode 100644 index 0000000000000..66f832f3cb2a6 --- /dev/null +++ b/benchmarks/sql_benchmarks/clickbench_extended/benchmarks/q13.benchmark @@ -0,0 +1,19 @@ +name Q13 +group clickbench_extended +subgroup ${CLICKBENCH_TYPE:-single} + +init sql_benchmarks/clickbench/init/set_config.sql + +load sql_benchmarks/clickbench/init/load-${CLICKBENCH_TYPE:-single}.sql + +assert I +SELECT COUNT(*) > 0 from hits; +---- +true + +run +SELECT SUM("CounterID") AS counter_id_sum +FROM hits +WHERE "URL" < 'zzzz'; + +result sql_benchmarks/clickbench_extended/results/q13.csv diff --git a/benchmarks/sql_benchmarks/h2o/benchmarks/window/q13.benchmark b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q13.benchmark new file mode 100644 index 0000000000000..20382d65ba57d --- /dev/null +++ b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q13.benchmark @@ -0,0 +1,23 @@ +subgroup window + +name Q13 +group h2o + +echo Loading ${H2O_BENCH_SIZE:-small} window ${H2O_FILE_TYPE:-csv} h2o data + +load sql_benchmarks/h2o/init/load_window_${H2O_BENCH_SIZE:-small}_${H2O_FILE_TYPE:-csv}.sql + +assert I +SELECT COUNT(*) > 0 FROM x +---- +true + +run +-- Window Top-N (ROW_NUMBER top-2 per partition) +SELECT id2, largest2_v2 FROM ( + SELECT id2, v2 AS largest2_v2, + ROW_NUMBER() OVER (PARTITION BY id2 ORDER BY v2 DESC) AS order_v2 + FROM x WHERE v2 IS NOT NULL +) sub_query WHERE order_v2 <= 2; + +result sql_benchmarks/h2o/results/window/${H2O_BENCH_SIZE:-small}/q13.csv diff --git a/benchmarks/sql_benchmarks/h2o/benchmarks/window/q14.benchmark b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q14.benchmark new file mode 100644 index 0000000000000..0617791988c55 --- /dev/null +++ b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q14.benchmark @@ -0,0 +1,26 @@ +subgroup window + +name Q14 +group h2o + +echo Loading ${H2O_BENCH_SIZE:-small} window ${H2O_FILE_TYPE:-csv} h2o data + +load sql_benchmarks/h2o/init/load_window_${H2O_BENCH_SIZE:-small}_${H2O_FILE_TYPE:-csv}.sql + +assert I +SELECT COUNT(*) > 0 FROM x +---- +true + +run +-- Window Top-N partition cardinality sweep (id3 % N gives N distinct partitions). +-- These exercise PartitionedTopKExec across cardinalities to validate it stays +-- competitive with the SortExec+Filter baseline as partition count grows. +-- Window Top-N: 100 partitions +SELECT pk, largest2_v2 FROM ( + SELECT id3 % 100 AS pk, v2 AS largest2_v2, + ROW_NUMBER() OVER (PARTITION BY id3 % 100 ORDER BY v2 DESC) AS order_v2 + FROM x WHERE v2 IS NOT NULL +) sub_query WHERE order_v2 <= 2; + +result sql_benchmarks/h2o/results/window/${H2O_BENCH_SIZE:-small}/q14.csv diff --git a/benchmarks/sql_benchmarks/h2o/benchmarks/window/q15.benchmark b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q15.benchmark new file mode 100644 index 0000000000000..f030b249db5a5 --- /dev/null +++ b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q15.benchmark @@ -0,0 +1,23 @@ +subgroup window + +name Q15 +group h2o + +echo Loading ${H2O_BENCH_SIZE:-small} window ${H2O_FILE_TYPE:-csv} h2o data + +load sql_benchmarks/h2o/init/load_window_${H2O_BENCH_SIZE:-small}_${H2O_FILE_TYPE:-csv}.sql + +assert I +SELECT COUNT(*) > 0 FROM x +---- +true + +run +-- Window Top-N: 1,000 partitions +SELECT pk, largest2_v2 FROM ( + SELECT id3 % 1000 AS pk, v2 AS largest2_v2, + ROW_NUMBER() OVER (PARTITION BY id3 % 1000 ORDER BY v2 DESC) AS order_v2 + FROM x WHERE v2 IS NOT NULL +) sub_query WHERE order_v2 <= 2; + +result sql_benchmarks/h2o/results/window/${H2O_BENCH_SIZE:-small}/q15.csv diff --git a/benchmarks/sql_benchmarks/h2o/benchmarks/window/q16.benchmark b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q16.benchmark new file mode 100644 index 0000000000000..3356f4f463057 --- /dev/null +++ b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q16.benchmark @@ -0,0 +1,23 @@ +subgroup window + +name Q16 +group h2o + +echo Loading ${H2O_BENCH_SIZE:-small} window ${H2O_FILE_TYPE:-csv} h2o data + +load sql_benchmarks/h2o/init/load_window_${H2O_BENCH_SIZE:-small}_${H2O_FILE_TYPE:-csv}.sql + +assert I +SELECT COUNT(*) > 0 FROM x +---- +true + +run +-- Window Top-N: 10,000 partitions +SELECT pk, largest2_v2 FROM ( + SELECT id3 % 10000 AS pk, v2 AS largest2_v2, + ROW_NUMBER() OVER (PARTITION BY id3 % 10000 ORDER BY v2 DESC) AS order_v2 + FROM x WHERE v2 IS NOT NULL +) sub_query WHERE order_v2 <= 2; + +result sql_benchmarks/h2o/results/window/${H2O_BENCH_SIZE:-small}/q16.csv diff --git a/benchmarks/sql_benchmarks/h2o/benchmarks/window/q17.benchmark b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q17.benchmark new file mode 100644 index 0000000000000..3228204558a1e --- /dev/null +++ b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q17.benchmark @@ -0,0 +1,23 @@ +subgroup window + +name Q17 +group h2o + +echo Loading ${H2O_BENCH_SIZE:-small} window ${H2O_FILE_TYPE:-csv} h2o data + +load sql_benchmarks/h2o/init/load_window_${H2O_BENCH_SIZE:-small}_${H2O_FILE_TYPE:-csv}.sql + +assert I +SELECT COUNT(*) > 0 FROM x +---- +true + +run +-- Window Top-N: 100,000 partitions +SELECT pk, largest2_v2 FROM ( + SELECT id3 % 100000 AS pk, v2 AS largest2_v2, + ROW_NUMBER() OVER (PARTITION BY id3 % 100000 ORDER BY v2 DESC) AS order_v2 + FROM x WHERE v2 IS NOT NULL +) sub_query WHERE order_v2 <= 2; + +result sql_benchmarks/h2o/results/window/${H2O_BENCH_SIZE:-small}/q17.csv diff --git a/benchmarks/sql_benchmarks/h2o/benchmarks/window/q18.benchmark b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q18.benchmark new file mode 100644 index 0000000000000..666b4a6810af7 --- /dev/null +++ b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q18.benchmark @@ -0,0 +1,27 @@ +subgroup window + +name Q18 +group h2o + +echo Loading ${H2O_BENCH_SIZE:-small} window ${H2O_FILE_TYPE:-csv} h2o data + +load sql_benchmarks/h2o/init/load_window_${H2O_BENCH_SIZE:-small}_${H2O_FILE_TYPE:-csv}.sql + +assert I +SELECT COUNT(*) > 0 FROM x +---- +true + +run +-- Window Top-N (RANK top-2 per partition, ~100 partitions) +-- The RANK queries below mirror the ROW_NUMBER cardinality sweep +-- above and add heavy-ties variants. RANK semantics retain boundary +-- ties (`WHERE rk <= K` may keep more than K rows per partition), so +-- this exercises PartitionedTopKRank's ties-Vec path. +SELECT pk, largest_v2 FROM ( + SELECT (id3 % 100) AS pk, v2 AS largest_v2, + RANK() OVER (PARTITION BY (id3 % 100) ORDER BY v2 DESC) AS rk_v2 + FROM x WHERE v2 IS NOT NULL +) sub_query WHERE rk_v2 <= 2; + +result sql_benchmarks/h2o/results/window/${H2O_BENCH_SIZE:-small}/q18.csv diff --git a/benchmarks/sql_benchmarks/h2o/benchmarks/window/q19.benchmark b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q19.benchmark new file mode 100644 index 0000000000000..2ddf98d5de2ff --- /dev/null +++ b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q19.benchmark @@ -0,0 +1,23 @@ +subgroup window + +name Q19 +group h2o + +echo Loading ${H2O_BENCH_SIZE:-small} window ${H2O_FILE_TYPE:-csv} h2o data + +load sql_benchmarks/h2o/init/load_window_${H2O_BENCH_SIZE:-small}_${H2O_FILE_TYPE:-csv}.sql + +assert I +SELECT COUNT(*) > 0 FROM x +---- +true + +run +-- Window Top-N (RANK top-2 per partition, ~1K partitions) +SELECT pkey, largest_v2 FROM ( + SELECT (id3 % 1000) AS pkey, v2 AS largest_v2, + RANK() OVER (PARTITION BY (id3 % 1000) ORDER BY v2 DESC) AS rk_v2 + FROM x WHERE v2 IS NOT NULL +) sub_query WHERE rk_v2 <= 2; + +result sql_benchmarks/h2o/results/window/${H2O_BENCH_SIZE:-small}/q19.csv diff --git a/benchmarks/sql_benchmarks/h2o/benchmarks/window/q20.benchmark b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q20.benchmark new file mode 100644 index 0000000000000..ca31c84334ac4 --- /dev/null +++ b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q20.benchmark @@ -0,0 +1,25 @@ +subgroup window + +name Q20 +group h2o + +echo Loading ${H2O_BENCH_SIZE:-small} window ${H2O_FILE_TYPE:-csv} h2o data + +load sql_benchmarks/h2o/init/load_window_${H2O_BENCH_SIZE:-small}_${H2O_FILE_TYPE:-csv}.sql + +assert I +SELECT COUNT(*) > 0 FROM x +---- +true + +run +-- Window Top-N (RANK top-2 per partition, ~1K partitions, heavy ties) +-- v2 % 10 forces 10 distinct OBY values, so most rows tie at the boundary +-- and exercise PartitionedTopKRank's ties-Vec path. +SELECT pkey, largest_v2 FROM ( + SELECT (id3 % 1000) AS pkey, v2 AS largest_v2, + RANK() OVER (PARTITION BY (id3 % 1000) ORDER BY (v2 % 10) DESC) AS rk_v2 + FROM x WHERE v2 IS NOT NULL +) sub_query WHERE rk_v2 <= 2; + +result sql_benchmarks/h2o/results/window/${H2O_BENCH_SIZE:-small}/q20.csv diff --git a/benchmarks/sql_benchmarks/h2o/benchmarks/window/q21.benchmark b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q21.benchmark new file mode 100644 index 0000000000000..b26fbc264e763 --- /dev/null +++ b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q21.benchmark @@ -0,0 +1,23 @@ +subgroup window + +name Q21 +group h2o + +echo Loading ${H2O_BENCH_SIZE:-small} window ${H2O_FILE_TYPE:-csv} h2o data + +load sql_benchmarks/h2o/init/load_window_${H2O_BENCH_SIZE:-small}_${H2O_FILE_TYPE:-csv}.sql + +assert I +SELECT COUNT(*) > 0 FROM x +---- +true + +run +-- Window Top-N (RANK top-2 per partition, ~10K partitions, low ties) +SELECT id2, largest_v2 FROM ( + SELECT id2, v2 AS largest_v2, + RANK() OVER (PARTITION BY id2 ORDER BY v2 DESC) AS rk_v2 + FROM x WHERE v2 IS NOT NULL +) sub_query WHERE rk_v2 <= 2; + +result sql_benchmarks/h2o/results/window/${H2O_BENCH_SIZE:-small}/q21.csv diff --git a/benchmarks/sql_benchmarks/h2o/benchmarks/window/q22.benchmark b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q22.benchmark new file mode 100644 index 0000000000000..cbe2dbe5589d9 --- /dev/null +++ b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q22.benchmark @@ -0,0 +1,23 @@ +subgroup window + +name Q22 +group h2o + +echo Loading ${H2O_BENCH_SIZE:-small} window ${H2O_FILE_TYPE:-csv} h2o data + +load sql_benchmarks/h2o/init/load_window_${H2O_BENCH_SIZE:-small}_${H2O_FILE_TYPE:-csv}.sql + +assert I +SELECT COUNT(*) > 0 FROM x +---- +true + +run +-- Window Top-N (RANK top-2 per partition, ~10K partitions, heavy ties) +SELECT id2, largest_v2 FROM ( + SELECT id2, v2 AS largest_v2, + RANK() OVER (PARTITION BY id2 ORDER BY (v2 % 10) DESC) AS rk_v2 + FROM x WHERE v2 IS NOT NULL +) sub_query WHERE rk_v2 <= 2; + +result sql_benchmarks/h2o/results/window/${H2O_BENCH_SIZE:-small}/q22.csv diff --git a/benchmarks/sql_benchmarks/h2o/benchmarks/window/q23.benchmark b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q23.benchmark new file mode 100644 index 0000000000000..b86b2f742c3f5 --- /dev/null +++ b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q23.benchmark @@ -0,0 +1,23 @@ +subgroup window + +name Q23 +group h2o + +echo Loading ${H2O_BENCH_SIZE:-small} window ${H2O_FILE_TYPE:-csv} h2o data + +load sql_benchmarks/h2o/init/load_window_${H2O_BENCH_SIZE:-small}_${H2O_FILE_TYPE:-csv}.sql + +assert I +SELECT COUNT(*) > 0 FROM x +---- +true + +run +-- Window Top-N (RANK top-2 per partition, ~100K partitions) +SELECT pk, largest_v2 FROM ( + SELECT (id3 % 100000) AS pk, v2 AS largest_v2, + RANK() OVER (PARTITION BY (id3 % 100000) ORDER BY v2 DESC) AS rk_v2 + FROM x WHERE v2 IS NOT NULL +) sub_query WHERE rk_v2 <= 2; + +result sql_benchmarks/h2o/results/window/${H2O_BENCH_SIZE:-small}/q23.csv diff --git a/benchmarks/sql_benchmarks/h2o/benchmarks/window/q24.benchmark b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q24.benchmark new file mode 100644 index 0000000000000..0241fb6f153c8 --- /dev/null +++ b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q24.benchmark @@ -0,0 +1,28 @@ +subgroup window + +name Q24 +group h2o + +echo Loading ${H2O_BENCH_SIZE:-small} window ${H2O_FILE_TYPE:-csv} h2o data + +load sql_benchmarks/h2o/init/load_window_${H2O_BENCH_SIZE:-small}_${H2O_FILE_TYPE:-csv}.sql + +assert I +SELECT COUNT(*) > 0 FROM x +---- +true + +run +-- Window Top-N (DENSE_RANK top-2 per partition, ~100 partitions) +-- The DENSE_RANK queries below mirror the RANK cardinality sweep above. +-- DENSE_RANK semantics keep every row whose ORDER BY value is among the +-- K distinct-greatest values in the partition, so total kept per partition +-- is unbounded in rows-per-distinct-value — exercises PartitionedTopKDenseRank's +-- HashMap-of-groups path. +SELECT pk, largest_v2 FROM ( + SELECT (id3 % 100) AS pk, v2 AS largest_v2, + DENSE_RANK() OVER (PARTITION BY (id3 % 100) ORDER BY v2 DESC) AS dr_v2 + FROM x WHERE v2 IS NOT NULL +) sub_query WHERE dr_v2 <= 2; + +result sql_benchmarks/h2o/results/window/${H2O_BENCH_SIZE:-small}/q24.csv diff --git a/benchmarks/sql_benchmarks/h2o/benchmarks/window/q25.benchmark b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q25.benchmark new file mode 100644 index 0000000000000..0110f94892526 --- /dev/null +++ b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q25.benchmark @@ -0,0 +1,23 @@ +subgroup window + +name Q25 +group h2o + +echo Loading ${H2O_BENCH_SIZE:-small} window ${H2O_FILE_TYPE:-csv} h2o data + +load sql_benchmarks/h2o/init/load_window_${H2O_BENCH_SIZE:-small}_${H2O_FILE_TYPE:-csv}.sql + +assert I +SELECT COUNT(*) > 0 FROM x +---- +true + +run +-- Window Top-N (DENSE_RANK top-2 per partition, ~1K partitions) +SELECT pkey, largest_v2 FROM ( + SELECT (id3 % 1000) AS pkey, v2 AS largest_v2, + DENSE_RANK() OVER (PARTITION BY (id3 % 1000) ORDER BY v2 DESC) AS dr_v2 + FROM x WHERE v2 IS NOT NULL +) sub_query WHERE dr_v2 <= 2; + +result sql_benchmarks/h2o/results/window/${H2O_BENCH_SIZE:-small}/q25.csv diff --git a/benchmarks/sql_benchmarks/h2o/benchmarks/window/q26.benchmark b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q26.benchmark new file mode 100644 index 0000000000000..d5080c92b74db --- /dev/null +++ b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q26.benchmark @@ -0,0 +1,26 @@ +subgroup window + +name Q26 +group h2o + +echo Loading ${H2O_BENCH_SIZE:-small} window ${H2O_FILE_TYPE:-csv} h2o data + +load sql_benchmarks/h2o/init/load_window_${H2O_BENCH_SIZE:-small}_${H2O_FILE_TYPE:-csv}.sql + +assert I +SELECT COUNT(*) > 0 FROM x +---- +true + +run +-- Window Top-N (DENSE_RANK top-2 per partition, ~1K partitions, heavy ties) +-- v2 % 10 forces 10 distinct OBY values; most rows share the top-2 distinct +-- values so appends dominate — exercises the "Case A" append-to-existing-Vec +-- fast path in PartitionedTopKDenseRank. +SELECT pkey, largest_v2 FROM ( + SELECT (id3 % 1000) AS pkey, v2 AS largest_v2, + DENSE_RANK() OVER (PARTITION BY (id3 % 1000) ORDER BY (v2 % 10) DESC) AS dr_v2 + FROM x WHERE v2 IS NOT NULL +) sub_query WHERE dr_v2 <= 2; + +result sql_benchmarks/h2o/results/window/${H2O_BENCH_SIZE:-small}/q26.csv diff --git a/benchmarks/sql_benchmarks/h2o/benchmarks/window/q27.benchmark b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q27.benchmark new file mode 100644 index 0000000000000..72eaa36b3ed1c --- /dev/null +++ b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q27.benchmark @@ -0,0 +1,23 @@ +subgroup window + +name Q27 +group h2o + +echo Loading ${H2O_BENCH_SIZE:-small} window ${H2O_FILE_TYPE:-csv} h2o data + +load sql_benchmarks/h2o/init/load_window_${H2O_BENCH_SIZE:-small}_${H2O_FILE_TYPE:-csv}.sql + +assert I +SELECT COUNT(*) > 0 FROM x +---- +true + +run +-- Window Top-N (DENSE_RANK top-2 per partition, ~10K partitions, low ties) +SELECT id2, largest_v2 FROM ( + SELECT id2, v2 AS largest_v2, + DENSE_RANK() OVER (PARTITION BY id2 ORDER BY v2 DESC) AS dr_v2 + FROM x WHERE v2 IS NOT NULL +) sub_query WHERE dr_v2 <= 2; + +result sql_benchmarks/h2o/results/window/${H2O_BENCH_SIZE:-small}/q27.csv diff --git a/benchmarks/sql_benchmarks/h2o/benchmarks/window/q28.benchmark b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q28.benchmark new file mode 100644 index 0000000000000..d71e994e15417 --- /dev/null +++ b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q28.benchmark @@ -0,0 +1,23 @@ +subgroup window + +name Q28 +group h2o + +echo Loading ${H2O_BENCH_SIZE:-small} window ${H2O_FILE_TYPE:-csv} h2o data + +load sql_benchmarks/h2o/init/load_window_${H2O_BENCH_SIZE:-small}_${H2O_FILE_TYPE:-csv}.sql + +assert I +SELECT COUNT(*) > 0 FROM x +---- +true + +run +-- Window Top-N (DENSE_RANK top-2 per partition, ~10K partitions, heavy ties) +SELECT id2, largest_v2 FROM ( + SELECT id2, v2 AS largest_v2, + DENSE_RANK() OVER (PARTITION BY id2 ORDER BY (v2 % 10) DESC) AS dr_v2 + FROM x WHERE v2 IS NOT NULL +) sub_query WHERE dr_v2 <= 2; + +result sql_benchmarks/h2o/results/window/${H2O_BENCH_SIZE:-small}/q28.csv diff --git a/benchmarks/sql_benchmarks/h2o/benchmarks/window/q29.benchmark b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q29.benchmark new file mode 100644 index 0000000000000..e6eade7e14905 --- /dev/null +++ b/benchmarks/sql_benchmarks/h2o/benchmarks/window/q29.benchmark @@ -0,0 +1,23 @@ +subgroup window + +name Q29 +group h2o + +echo Loading ${H2O_BENCH_SIZE:-small} window ${H2O_FILE_TYPE:-csv} h2o data + +load sql_benchmarks/h2o/init/load_window_${H2O_BENCH_SIZE:-small}_${H2O_FILE_TYPE:-csv}.sql + +assert I +SELECT COUNT(*) > 0 FROM x +---- +true + +run +-- Window Top-N (DENSE_RANK top-2 per partition, ~100K partitions) +SELECT pk, largest_v2 FROM ( + SELECT (id3 % 100000) AS pk, v2 AS largest_v2, + DENSE_RANK() OVER (PARTITION BY (id3 % 100000) ORDER BY v2 DESC) AS dr_v2 + FROM x WHERE v2 IS NOT NULL +) sub_query WHERE dr_v2 <= 2; + +result sql_benchmarks/h2o/results/window/${H2O_BENCH_SIZE:-small}/q29.csv diff --git a/benchmarks/sql_benchmarks/smj/benchmarks/q24.benchmark b/benchmarks/sql_benchmarks/smj/benchmarks/q24.benchmark index 893eb1fb78733..44ad0c677474f 100644 --- a/benchmarks/sql_benchmarks/smj/benchmarks/q24.benchmark +++ b/benchmarks/sql_benchmarks/smj/benchmarks/q24.benchmark @@ -5,6 +5,7 @@ init set datafusion.optimizer.prefer_hash_join=false; expect_plan SortMergeJoinExec +expect_plan LeftMark run -- Q24: LEFT MARK 1M x 10M | 1:10 | 1% diff --git a/benchmarks/sql_benchmarks/smj/benchmarks/q25.benchmark b/benchmarks/sql_benchmarks/smj/benchmarks/q25.benchmark new file mode 100644 index 0000000000000..a1ec8dcf76905 --- /dev/null +++ b/benchmarks/sql_benchmarks/smj/benchmarks/q25.benchmark @@ -0,0 +1,33 @@ +name Q25 +group smj + +init +set datafusion.optimizer.prefer_hash_join=false; + +expect_plan SortMergeJoinExec +expect_plan LeftMark + +run +-- Q25: LEFT MARK 1M x 10M | 1:10 | 50% +WITH t1_sorted AS ( + SELECT value % 100000 as key, value as data +FROM range(1000000) +ORDER BY key, data + ), + t2_sorted AS ( +SELECT value % 100000 as key, value as data +FROM range(10000000) +ORDER BY key, data + ) +SELECT t1_sorted.key, t1_sorted.data +FROM t1_sorted +WHERE t1_sorted.data < 0 + OR EXISTS ( + SELECT 1 FROM t2_sorted + WHERE t2_sorted.key = t1_sorted.key + AND t2_sorted.data <> t1_sorted.data + AND t2_sorted.data % 2 = 0 +) + +cleanup +reset datafusion.optimizer.prefer_hash_join; diff --git a/benchmarks/sql_benchmarks/smj/benchmarks/q26.benchmark b/benchmarks/sql_benchmarks/smj/benchmarks/q26.benchmark new file mode 100644 index 0000000000000..b164817d2be59 --- /dev/null +++ b/benchmarks/sql_benchmarks/smj/benchmarks/q26.benchmark @@ -0,0 +1,33 @@ +name Q26 +group smj + +init +set datafusion.optimizer.prefer_hash_join=false; + +expect_plan SortMergeJoinExec +expect_plan LeftMark + +run +-- Q26: LEFT MARK 1M x 10M | 1:10 | 90% +WITH t1_sorted AS ( + SELECT value % 100000 as key, value as data +FROM range(1000000) +ORDER BY key, data + ), + t2_sorted AS ( +SELECT value % 100000 as key, value as data +FROM range(10000000) +ORDER BY key, data + ) +SELECT t1_sorted.key, t1_sorted.data +FROM t1_sorted +WHERE t1_sorted.data < 0 + OR EXISTS ( + SELECT 1 FROM t2_sorted + WHERE t2_sorted.key = t1_sorted.key + AND t2_sorted.data <> t1_sorted.data + AND t2_sorted.data % 10 <> 0 +) + +cleanup +reset datafusion.optimizer.prefer_hash_join;