Skip to content

Commit 4cfb0c5

Browse files
author
B Vadlamani
committed
address_review_comments
1 parent ad83914 commit 4cfb0c5

1 file changed

Lines changed: 40 additions & 154 deletions

File tree

benchmarks/src/hj.rs

Lines changed: 40 additions & 154 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ use std::path::PathBuf;
2525

2626
use futures::StreamExt;
2727

28-
// TODO: Add existence joins
29-
3028
/// Run the Hash Join benchmark
3129
///
3230
/// This micro-benchmark focuses on the performance characteristics of Hash Joins.
@@ -304,193 +302,81 @@ const HASH_QUERIES: &[HashJoinQuery] = &[
304302
probe_size: "60M",
305303
},
306304
// RightSemi Join benchmarks with Int32 keys
307-
// Q16: RightSemi, 100% Density, 100% Hit rate
305+
// Q16: RightSemi, Small build (25 rows), 100% Hit rate
306+
// Build Side: nation (25 rows) | Probe Side: customer (1.5M rows)
308307
HashJoinQuery {
309-
sql: r###"SELECT l.k
310-
FROM (
311-
SELECT CAST(l_suppkey AS INT) as k FROM lineitem
312-
) l
313-
WHERE EXISTS (
314-
SELECT 1 FROM (SELECT CAST(s_suppkey AS INT) as k FROM supplier) s WHERE s.k = l.k
315-
)"###,
308+
sql: r###"SELECT c.k
309+
FROM (SELECT CAST(n_nationkey AS INT) as k FROM nation) n
310+
RIGHT SEMI JOIN (SELECT CAST(c_nationkey AS INT) as k FROM customer) c
311+
ON n.k = c.k"###,
316312
density: 1.0,
317313
prob_hit: 1.0,
318-
build_size: "100K",
319-
probe_size: "60M_RightSemi",
314+
build_size: "25",
315+
probe_size: "1.5M_RightSemi",
320316
},
321-
// Q17: RightSemi, 100% Density, 10% Hit rate
317+
// Q17: RightSemi, Medium build (100K rows), 100% Hit rate
318+
// Build Side: supplier (100K rows) | Probe Side: lineitem (60M rows)
322319
HashJoinQuery {
323320
sql: r###"SELECT l.k
324-
FROM (
325-
SELECT CAST(CASE WHEN l_suppkey % 10 = 0 THEN l_suppkey ELSE l_suppkey + 1000000 END AS INT) as k
326-
FROM lineitem
327-
) l
328-
WHERE EXISTS (
329-
SELECT 1 FROM (SELECT CAST(s_suppkey AS INT) as k FROM supplier) s WHERE s.k = l.k
330-
)"###,
321+
FROM (SELECT CAST(s_suppkey AS INT) as k FROM supplier) s
322+
RIGHT SEMI JOIN (SELECT CAST(l_suppkey AS INT) as k FROM lineitem) l
323+
ON s.k = l.k"###,
331324
density: 1.0,
332-
prob_hit: 0.1,
333-
build_size: "100K",
334-
probe_size: "60M_RightSemi",
335-
},
336-
// Q18: RightSemi, 50% Density, 100% Hit rate
337-
HashJoinQuery {
338-
sql: r###"SELECT l.k
339-
FROM (
340-
SELECT CAST(l_suppkey * 2 AS INT) as k FROM lineitem
341-
) l
342-
WHERE EXISTS (
343-
SELECT 1 FROM (SELECT CAST(s_suppkey * 2 AS INT) as k FROM supplier) s WHERE s.k = l.k
344-
)"###,
345-
density: 0.5,
346-
prob_hit: 1.0,
347-
build_size: "100K",
348-
probe_size: "60M_RightSemi",
349-
},
350-
// Q19: RightSemi, 50% Density, 10% Hit rate
351-
HashJoinQuery {
352-
sql: r###"SELECT l.k
353-
FROM (
354-
SELECT CAST(CASE
355-
WHEN l_suppkey % 10 = 0 THEN l_suppkey * 2
356-
WHEN l_suppkey % 10 < 9 THEN l_suppkey * 2 + 1
357-
ELSE l_suppkey * 2 + 1000000
358-
END AS INT) as k
359-
FROM lineitem
360-
) l
361-
WHERE EXISTS (
362-
SELECT 1 FROM (SELECT CAST(s_suppkey * 2 AS INT) as k FROM supplier) s WHERE s.k = l.k
363-
)"###,
364-
density: 0.5,
365-
prob_hit: 0.1,
366-
build_size: "100K",
367-
probe_size: "60M_RightSemi",
368-
},
369-
// Q20: RightSemi, 10% Density, 100% Hit rate
370-
HashJoinQuery {
371-
sql: r###"SELECT l.k
372-
FROM (
373-
SELECT CAST(l_suppkey * 10 AS INT) as k FROM lineitem
374-
) l
375-
WHERE EXISTS (
376-
SELECT 1 FROM (SELECT CAST(s_suppkey * 10 AS INT) as k FROM supplier) s WHERE s.k = l.k
377-
)"###,
378-
density: 0.1,
379325
prob_hit: 1.0,
380326
build_size: "100K",
381327
probe_size: "60M_RightSemi",
382328
},
383-
// Q21: RightSemi, 10% Density, 10% Hit rate
329+
// Q18: RightSemi, Medium build (100K rows), 10% Hit rate
330+
// Build Side: supplier (100K rows) | Probe Side: lineitem (60M rows)
384331
HashJoinQuery {
385332
sql: r###"SELECT l.k
386-
FROM (
387-
SELECT CAST(CASE
388-
WHEN l_suppkey % 10 = 0 THEN l_suppkey * 10
389-
WHEN l_suppkey % 10 < 9 THEN l_suppkey * 10 + 1
390-
ELSE l_suppkey * 10 + 1000000
391-
END AS INT) as k
333+
FROM (SELECT CAST(s_suppkey AS INT) as k FROM supplier) s
334+
RIGHT SEMI JOIN (
335+
SELECT CAST(CASE WHEN l_suppkey % 10 = 0 THEN l_suppkey ELSE l_suppkey + 1000000 END AS INT) as k
392336
FROM lineitem
393337
) l
394-
WHERE EXISTS (
395-
SELECT 1 FROM (SELECT CAST(s_suppkey * 10 AS INT) as k FROM supplier) s WHERE s.k = l.k
396-
)"###,
397-
density: 0.1,
338+
ON s.k = l.k"###,
339+
density: 1.0,
398340
prob_hit: 0.1,
399341
build_size: "100K",
400342
probe_size: "60M_RightSemi",
401343
},
402344
// RightAnti Join benchmarks with Int32 keys
403-
// Q22: RightAnti, 100% Density, 100% Hit rate (no output)
345+
// Q19: RightAnti, Small build (25 rows), 100% Hit rate (no output)
346+
// Build Side: nation (25 rows) | Probe Side: customer (1.5M rows)
404347
HashJoinQuery {
405-
sql: r###"SELECT l.k
406-
FROM (
407-
SELECT CAST(l_suppkey AS INT) as k FROM lineitem
408-
) l
409-
WHERE NOT EXISTS (
410-
SELECT 1 FROM (SELECT CAST(s_suppkey AS INT) as k FROM supplier) s WHERE s.k = l.k
411-
)"###,
348+
sql: r###"SELECT c.k
349+
FROM (SELECT CAST(n_nationkey AS INT) as k FROM nation) n
350+
RIGHT ANTI JOIN (SELECT CAST(c_nationkey AS INT) as k FROM customer) c
351+
ON n.k = c.k"###,
412352
density: 1.0,
413353
prob_hit: 1.0,
414-
build_size: "100K",
415-
probe_size: "60M_RightAnti",
354+
build_size: "25",
355+
probe_size: "1.5M_RightAnti",
416356
},
417-
// Q23: RightAnti, 100% Density, 10% Hit rate (90% output)
357+
// Q20: RightAnti, Medium build (100K rows), 100% Hit rate (no output)
358+
// Build Side: supplier (100K rows) | Probe Side: lineitem (60M rows)
418359
HashJoinQuery {
419360
sql: r###"SELECT l.k
420-
FROM (
421-
SELECT CAST(CASE WHEN l_suppkey % 10 = 0 THEN l_suppkey ELSE l_suppkey + 1000000 END AS INT) as k
422-
FROM lineitem
423-
) l
424-
WHERE NOT EXISTS (
425-
SELECT 1 FROM (SELECT CAST(s_suppkey AS INT) as k FROM supplier) s WHERE s.k = l.k
426-
)"###,
361+
FROM (SELECT CAST(s_suppkey AS INT) as k FROM supplier) s
362+
RIGHT ANTI JOIN (SELECT CAST(l_suppkey AS INT) as k FROM lineitem) l
363+
ON s.k = l.k"###,
427364
density: 1.0,
428-
prob_hit: 0.1,
429-
build_size: "100K",
430-
probe_size: "60M_RightAnti",
431-
},
432-
// Q24: RightAnti, 50% Density, 100% Hit rate (no output)
433-
HashJoinQuery {
434-
sql: r###"SELECT l.k
435-
FROM (
436-
SELECT CAST(l_suppkey * 2 AS INT) as k FROM lineitem
437-
) l
438-
WHERE NOT EXISTS (
439-
SELECT 1 FROM (SELECT CAST(s_suppkey * 2 AS INT) as k FROM supplier) s WHERE s.k = l.k
440-
)"###,
441-
density: 0.5,
442365
prob_hit: 1.0,
443366
build_size: "100K",
444367
probe_size: "60M_RightAnti",
445368
},
446-
// Q25: RightAnti, 50% Density, 10% Hit rate (90% output)
369+
// Q21: RightAnti, Medium build (100K rows), 10% Hit rate (90% output)
370+
// Build Side: supplier (100K rows) | Probe Side: lineitem (60M rows)
447371
HashJoinQuery {
448372
sql: r###"SELECT l.k
449-
FROM (
450-
SELECT CAST(CASE
451-
WHEN l_suppkey % 10 = 0 THEN l_suppkey * 2
452-
WHEN l_suppkey % 10 < 9 THEN l_suppkey * 2 + 1
453-
ELSE l_suppkey * 2 + 1000000
454-
END AS INT) as k
455-
FROM lineitem
456-
) l
457-
WHERE NOT EXISTS (
458-
SELECT 1 FROM (SELECT CAST(s_suppkey * 2 AS INT) as k FROM supplier) s WHERE s.k = l.k
459-
)"###,
460-
density: 0.5,
461-
prob_hit: 0.1,
462-
build_size: "100K",
463-
probe_size: "60M_RightAnti",
464-
},
465-
// Q26: RightAnti, 10% Density, 100% Hit rate (no output)
466-
HashJoinQuery {
467-
sql: r###"SELECT l.k
468-
FROM (
469-
SELECT CAST(l_suppkey * 10 AS INT) as k FROM lineitem
470-
) l
471-
WHERE NOT EXISTS (
472-
SELECT 1 FROM (SELECT CAST(s_suppkey * 10 AS INT) as k FROM supplier) s WHERE s.k = l.k
473-
)"###,
474-
density: 0.1,
475-
prob_hit: 1.0,
476-
build_size: "100K",
477-
probe_size: "60M_RightAnti",
478-
},
479-
// Q27: RightAnti, 10% Density, 10% Hit rate (90% output)
480-
HashJoinQuery {
481-
sql: r###"SELECT l.k
482-
FROM (
483-
SELECT CAST(CASE
484-
WHEN l_suppkey % 10 = 0 THEN l_suppkey * 10
485-
WHEN l_suppkey % 10 < 9 THEN l_suppkey * 10 + 1
486-
ELSE l_suppkey * 10 + 1000000
487-
END AS INT) as k
373+
FROM (SELECT CAST(s_suppkey AS INT) as k FROM supplier) s
374+
RIGHT ANTI JOIN (
375+
SELECT CAST(CASE WHEN l_suppkey % 10 = 0 THEN l_suppkey ELSE l_suppkey + 1000000 END AS INT) as k
488376
FROM lineitem
489377
) l
490-
WHERE NOT EXISTS (
491-
SELECT 1 FROM (SELECT CAST(s_suppkey * 10 AS INT) as k FROM supplier) s WHERE s.k = l.k
492-
)"###,
493-
density: 0.1,
378+
ON s.k = l.k"###,
379+
density: 1.0,
494380
prob_hit: 0.1,
495381
build_size: "100K",
496382
probe_size: "60M_RightAnti",

0 commit comments

Comments
 (0)