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 zWHERE d_week_seq1 = d_week_seq2 - 53ORDER BY d_week_seq1Representative 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 resultGet 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 factorqueries = bench.get_queries(dialect="datafusion") # your platform's dialect; drop dialect= for native SQLprint(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