Skip to content

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_profit
FROM (
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 profit
GROUP BY
nation,
o_year
ORDER BY
nation,
o_year DESC

Representative 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 factor
queries = bench.get_queries(dialect="datafusion") # your platform's dialect; drop dialect= for native SQL
print(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