TPC-H Q9 — Product Type Profit Measure
TPC-H benchmark · all TPC-H queries
Profit on a given line of parts
Representative SQL
Rendered for DataFusion with default parameters.
SELECT nation, o_year, SUM(amount) AS sum_profitFROM ( SELECT n_name AS nation, EXTRACT(YEAR FROM o_orderdate) AS o_year, l_extendedprice * ( 1 - l_discount ) - ps_supplycost * l_quantity AS amount FROM part, supplier, lineitem, partsupp, orders, nation WHERE s_suppkey = l_suppkey AND ps_suppkey = l_suppkey AND ps_partkey = l_partkey AND p_partkey = l_partkey AND o_orderkey = l_orderkey AND s_nationkey = n_nationkey AND p_name LIKE '%green%') AS profitGROUP BY nation, o_yearORDER BY nation, o_year DESCRepresentative DataFrame
Expression family (Polars, PySpark, DataFusion), default parameters.
def q9_expression_impl(ctx: DataFrameContext) -> Any: part = ctx.get_table("part") supplier = ctx.get_table("supplier") lineitem = ctx.get_table("lineitem") partsupp = ctx.get_table("partsupp") orders = ctx.get_table("orders") nation = ctx.get_table("nation") col = ctx.col lit = ctx.lit
params = get_tpch_parameters(9) color = params["color"]
return ( part.filter(col("p_name").str.contains(color)) .join(lineitem, left_on="p_partkey", right_on="l_partkey") .join(supplier, left_on="l_suppkey", right_on="s_suppkey") .join( partsupp, left_on=["l_suppkey", "p_partkey"], right_on=["ps_suppkey", "ps_partkey"], ) .join(orders, left_on="l_orderkey", right_on="o_orderkey") .join(nation, left_on="s_nationkey", right_on="n_nationkey") .with_columns( col("o_orderdate").dt.year().alias("o_year"), (col("l_extendedprice") * (lit(1) - col("l_discount")) - col("ps_supplycost") * col("l_quantity")).alias( "amount" ), ) .group_by(col("n_name").alias("nation"), "o_year") .agg(col("amount").sum().alias("sum_profit")) .sort(["nation", "o_year"], descending=[False, True]) )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 TPCH
bench = TPCH(scale_factor=0.01) # your scale factorqueries = bench.get_queries(dialect="datafusion") # your platform's dialect; drop dialect= for native SQLprint(queries['9'])Parameter substitution for this benchmark is seed-driven; pass a seed for a specific stream’s parameters:
print(bench.get_query(9, scale_factor=0.01, seed=42, dialect="datafusion"))For the DataFrame form:
from benchbox.core.query_catalog import get_dataframe_render
print(get_dataframe_render('tpch', '9', family="expression").source) # or family="pandas"Source
Query text: benchbox/_binaries/tpc-h/templates/queries/9.sql