Skip to content

TPC-DS-OBT Q2 — obt_channel_distribution

TPC-DS-OBT benchmark · all TPC-DS-OBT queries

Count sales rows by channel

Representative SQL

Rendered for DataFusion with default parameters.

WITH wscs AS (
SELECT
sold_date_sk,
sales_price
FROM (
SELECT
obt.sold_date_sk AS sold_date_sk,
obt.ext_sales_price AS sales_price
FROM tpcds_sales_returns_obt AS obt
WHERE
channel = 'web'
UNION ALL
SELECT
obt.sold_date_sk AS sold_date_sk,
obt.ext_sales_price AS sales_price
FROM tpcds_sales_returns_obt AS obt
WHERE
channel = 'catalog'
)
), wswscs AS (
SELECT
obt.sold_date_d_week_seq AS d_week_seq,
obt.sold_date_d_year AS d_year,
SUM(
CASE
WHEN (
obt.sold_date_d_day_name = 'Sunday'
)
THEN obt.sales_price
ELSE NULL
END
) AS sun_sales,
SUM(
CASE
WHEN (
obt.sold_date_d_day_name = 'Monday'
)
THEN obt.sales_price
ELSE NULL
END
) AS mon_sales,
SUM(
CASE
WHEN (
obt.sold_date_d_day_name = 'Tuesday'
)
THEN obt.sales_price
ELSE NULL
END
) AS tue_sales,
SUM(
CASE
WHEN (
obt.sold_date_d_day_name = 'Wednesday'
)
THEN obt.sales_price
ELSE NULL
END
) AS wed_sales,
SUM(
CASE
WHEN (
obt.sold_date_d_day_name = 'Thursday'
)
THEN obt.sales_price
ELSE NULL
END
) AS thu_sales,
SUM(
CASE
WHEN (
obt.sold_date_d_day_name = 'Friday'
)
THEN obt.sales_price
ELSE NULL
END
) AS fri_sales,
SUM(
CASE
WHEN (
obt.sold_date_d_day_name = 'Saturday'
)
THEN obt.sales_price
ELSE NULL
END
) AS sat_sales
FROM tpcds_sales_returns_obt AS obt
WHERE
obt.sold_date_d_date_sk = obt.sold_date_sk AND channel IN ('catalog', 'web')
GROUP BY
d_week_seq,
d_year
)
SELECT
d_week_seq1,
ROUND(CAST(sun_sales1 AS DOUBLE PRECISION) / sun_sales2, 2),
ROUND(CAST(mon_sales1 AS DOUBLE PRECISION) / mon_sales2, 2),
ROUND(CAST(tue_sales1 AS DOUBLE PRECISION) / tue_sales2, 2),
ROUND(CAST(wed_sales1 AS DOUBLE PRECISION) / wed_sales2, 2),
ROUND(CAST(thu_sales1 AS DOUBLE PRECISION) / thu_sales2, 2),
ROUND(CAST(fri_sales1 AS DOUBLE PRECISION) / fri_sales2, 2),
ROUND(CAST(sat_sales1 AS DOUBLE PRECISION) / sat_sales2, 2)
FROM (
SELECT
wswscs.d_week_seq AS d_week_seq1,
sun_sales AS sun_sales1,
mon_sales AS mon_sales1,
tue_sales AS tue_sales1,
wed_sales AS wed_sales1,
thu_sales AS thu_sales1,
fri_sales AS fri_sales1,
sat_sales AS sat_sales1
FROM wswscs AS wswscs
WHERE
(
d_year = 1998
)
) AS y, (
SELECT
wswscs.d_week_seq AS d_week_seq2,
sun_sales AS sun_sales2,
mon_sales AS mon_sales2,
tue_sales AS tue_sales2,
wed_sales AS wed_sales2,
thu_sales AS thu_sales2,
fri_sales AS fri_sales2,
sat_sales AS sat_sales2
FROM wswscs AS wswscs
WHERE
(
d_year = 1998 + 1
)
) AS z
WHERE
d_week_seq1 = d_week_seq2 - 53
ORDER BY
d_week_seq1

Representative DataFrame

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

def impl(ctx: DataFrameContext) -> Any:
table = ctx.get_table(OBT_TABLE)
for column, op, value in spec.filters:
table = table.filter(_FILTER_OPS[op](ctx.col(column), ctx.lit(value)))
aggregates = [getattr(ctx.col(column), func)().alias(alias) for alias, column, func in spec.aggregations]
if spec.group_keys:
result = table.group_by(*spec.group_keys).agg(*aggregates)
else:
result = table.select(*aggregates)
if spec.sort_keys:
descending = list(spec.descending) if spec.descending else [False] * len(spec.sort_keys)
result = result.sort(list(spec.sort_keys), descending=descending)
if spec.limit:
result = result.limit(spec.limit)
return result

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 TPCDSOBT
bench = TPCDSOBT(scale_factor=1.0) # your scale factor
queries = bench.get_queries(dialect="datafusion") # your platform's dialect; drop dialect= for native SQL
print(queries['2'])

For the DataFrame form:

from benchbox.core.query_catalog import get_dataframe_render
print(get_dataframe_render('tpcds_obt', '2', family="expression").source) # or family="pandas"

Source

Query text: benchbox/core/tpcds_obt/queries.py