Skip to content

TPC-H Q8 — National Market Share

TPC-H benchmark · all TPC-H queries

Market share of a nation within a region

Representative SQL

Rendered for DataFusion with default parameters.

SELECT
o_year,
SUM(CASE WHEN nation = 'BRAZIL' THEN volume ELSE 0 END) / SUM(volume) AS mkt_share
FROM (
SELECT
EXTRACT(YEAR FROM o_orderdate) AS o_year,
l_extendedprice * (
1 - l_discount
) AS volume,
n2.n_name AS nation
FROM part, supplier, lineitem, orders, customer, nation AS n1, nation AS n2, region
WHERE
p_partkey = l_partkey
AND s_suppkey = l_suppkey
AND l_orderkey = o_orderkey
AND o_custkey = c_custkey
AND c_nationkey = n1.n_nationkey
AND n1.n_regionkey = r_regionkey
AND r_name = 'AMERICA'
AND s_nationkey = n2.n_nationkey
AND o_orderdate BETWEEN CAST('1995-01-01' AS DATE) AND CAST('1996-12-31' AS DATE)
AND p_type = 'ECONOMY ANODIZED STEEL'
) AS all_nations
GROUP BY
o_year
ORDER BY
o_year

Representative DataFrame

Expression family (Polars, PySpark, DataFusion), default parameters.

def q8_expression_impl(ctx: DataFrameContext) -> Any:
part = ctx.get_table("part")
supplier = ctx.get_table("supplier")
lineitem = ctx.get_table("lineitem")
orders = ctx.get_table("orders")
customer = ctx.get_table("customer")
nation = ctx.get_table("nation")
region = ctx.get_table("region")
col = ctx.col
lit = ctx.lit
params = get_tpch_parameters(8)
target_nation = params["target_nation"]
target_region = params["target_region"]
target_type = params["target_type"]
start_date = params["start_date"]
end_date = params["end_date"]
n2 = nation.select(col("n_nationkey").alias("n2_nationkey"), col("n_name").alias("nation"))
return (
part.filter(col("p_type") == lit(target_type))
.join(lineitem, left_on="p_partkey", right_on="l_partkey")
.join(supplier, left_on="l_suppkey", right_on="s_suppkey")
.join(n2, left_on="s_nationkey", right_on="n2_nationkey")
.join(orders, left_on="l_orderkey", right_on="o_orderkey")
.filter((col("o_orderdate") >= lit(start_date)) & (col("o_orderdate") <= lit(end_date)))
.join(customer, left_on="o_custkey", right_on="c_custkey")
.join(nation, left_on="c_nationkey", right_on="n_nationkey")
.join(region, left_on="n_regionkey", right_on="r_regionkey")
.filter(col("r_name") == lit(target_region))
.with_columns(
col("o_orderdate").dt.year().alias("o_year"),
(col("l_extendedprice") * (lit(1) - col("l_discount"))).alias("volume"),
)
.group_by("o_year")
.agg(
col("volume").filter(col("nation") == lit(target_nation)).sum().alias("nation_volume"),
col("volume").sum().alias("total_volume"),
)
.with_columns((col("nation_volume") / col("total_volume")).alias("mkt_share"))
.select("o_year", "mkt_share")
.sort("o_year")
)

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['8'])

Parameter substitution for this benchmark is seed-driven; pass a seed for a specific stream’s parameters:

print(bench.get_query(8, 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', '8', family="expression").source) # or family="pandas"

Source

Query text: benchbox/_binaries/tpc-h/templates/queries/8.sql