TPC-H Data Vault Q21 — Suppliers Who Kept Orders Waiting
TPC-H Data Vault benchmark · all TPC-H Data Vault queries
Suppliers who delayed orders they could fill (Data Vault)
Representative SQL
Rendered in the benchmark’s native SQL with default parameters (no dialect translation available).
SELECT ss.s_name, COUNT(*) AS numwaitFROM sat_supplier AS ssJOIN link_supplier_nation AS lsn ON ss.hk_supplier = lsn.hk_supplierJOIN sat_nation AS sn ON lsn.hk_nation = sn.hk_nation AND sn.load_end_dts IS NULLJOIN link_lineitem AS ll1 ON ss.hk_supplier = ll1.hk_supplierJOIN sat_lineitem AS sl1 ON ll1.hk_lineitem_link = sl1.hk_lineitem_link AND sl1.load_end_dts IS NULLJOIN sat_order AS so ON ll1.hk_order = so.hk_order AND so.load_end_dts IS NULLWHERE ss.load_end_dts IS NULL AND so.o_orderstatus = 'F' AND sl1.l_receiptdate > sl1.l_commitdate AND sn.n_name = 'SAUDI ARABIA' AND EXISTS( SELECT 1 FROM link_lineitem AS ll2 WHERE ll2.hk_order = ll1.hk_order AND ll2.hk_supplier <> ll1.hk_supplier ) AND NOT EXISTS( SELECT 1 FROM link_lineitem AS ll3 JOIN sat_lineitem AS sl3 ON ll3.hk_lineitem_link = sl3.hk_lineitem_link AND sl3.load_end_dts IS NULL WHERE ll3.hk_order = ll1.hk_order AND ll3.hk_supplier <> ll1.hk_supplier AND sl3.l_receiptdate > sl3.l_commitdate )GROUP BY ss.s_nameORDER BY numwait DESC, ss.s_nameLIMIT 100Representative DataFrame
Expression family (Polars, PySpark, DataFusion), default parameters.
def q21_expression_impl(ctx: DataFrameContext) -> Any:
params = get_parameters("Q21") col, lit = ctx.col, ctx.lit nation = params.get("nation", "SAUDI ARABIA")
ss = _strip_audit_columns(ctx.get_table("sat_supplier").filter(col("load_end_dts").is_null())) ll = _strip_audit_columns(ctx.get_table("link_lineitem")) sl = _strip_audit_columns(ctx.get_table("sat_lineitem").filter(col("load_end_dts").is_null())) so = _strip_audit_columns(ctx.get_table("sat_order").filter(col("load_end_dts").is_null())) lsn = _strip_audit_columns(ctx.get_table("link_supplier_nation")) sn = _strip_audit_columns(ctx.get_table("sat_nation").filter(col("load_end_dts").is_null()))
li = ll.join(sl, left_on="hk_lineitem_link", right_on="hk_lineitem_link") late_li = li.filter(col("l_receiptdate") > col("l_commitdate"))
failed_orders = so.filter(col("o_orderstatus") == lit("F")).select("hk_order")
supp_nation = ( ss.join(lsn, left_on="hk_supplier", right_on="hk_supplier") .join(sn, left_on="hk_nation", right_on="hk_nation") .filter(col("n_name") == lit(nation)) )
l1 = late_li.join(failed_orders, left_on="hk_order", right_on="hk_order")
order_suppliers = li.group_by("hk_order").agg(col("hk_supplier").n_unique().alias("n_suppliers")) order_late_suppliers = late_li.group_by("hk_order").agg(col("hk_supplier").n_unique().alias("n_late"))
df = ( l1.join(supp_nation, left_on="hk_supplier", right_on="hk_supplier") .join(order_suppliers, left_on="hk_order", right_on="hk_order") .filter(col("n_suppliers") > lit(1)) .join(order_late_suppliers, left_on="hk_order", right_on="hk_order") .filter(col("n_late") == lit(1)) )
result = df.group_by("s_name").agg(col("hk_order").count().alias("numwait")) return result.sort([("numwait", "desc"), ("s_name", "asc")]).limit(100)Get the exact query for your run
The blocks above are representative. To get the precise statement a specific platform runs at a specific scale, substitute your own values:
from benchbox import DataVault
bench = DataVault(scale_factor=0.01) # your scale factorqueries = bench.get_queries(dialect="datafusion") # your platform's dialect; drop dialect= for native SQLprint(queries[21])For the DataFrame form:
from benchbox.core.query_catalog import get_dataframe_render
print(get_dataframe_render('datavault', '21', family="expression").source) # or family="pandas"Source
Query text: benchbox/core/datavault/queries.py