TPC-DS-OBT Q14 — obt_bulk_sales
TPC-DS-OBT benchmark · all TPC-DS-OBT queries
Multi-unit sales volume and revenue by channel
Representative SQL
Rendered for DataFusion with default parameters.
WITH cross_items AS ( SELECT item_i_item_sk, item_i_brand_id, item_i_class_id, item_i_category_id FROM ( SELECT item_i_item_sk, item_i_brand_id, item_i_class_id, item_i_category_id, channel FROM tpcds_sales_returns_obt WHERE sold_date_d_year BETWEEN 1998 AND 1998 + 2 GROUP BY item_i_item_sk, item_i_brand_id, item_i_class_id, item_i_category_id, channel ) AS items_by_channel GROUP BY item_i_item_sk, item_i_brand_id, item_i_class_id, item_i_category_id HAVING COUNT(DISTINCT channel) = 3), avg_sales AS ( SELECT AVG(quantity * list_price) AS average_sales FROM tpcds_sales_returns_obt WHERE sold_date_d_year BETWEEN 1998 AND 1998 + 2)SELECT channel, i_brand_id, i_class_id, i_category_id, SUM(sales), SUM(number_sales)FROM ( SELECT channel, item_i_brand_id AS i_brand_id, item_i_class_id AS i_class_id, item_i_category_id AS i_category_id, SUM(quantity * list_price) AS sales, COUNT(*) AS number_sales FROM tpcds_sales_returns_obt WHERE item_sk IN ( SELECT item_i_item_sk FROM cross_items ) AND sold_date_d_year = 1998 + 2 AND sold_date_d_moy = 11 GROUP BY channel, item_i_brand_id, item_i_class_id, item_i_category_id HAVING SUM(quantity * list_price) > ( SELECT average_sales FROM avg_sales )) AS yGROUP BY ROLLUP ( channel, i_brand_id, i_class_id, i_category_id )ORDER BY channel, i_brand_id, i_class_id, i_category_idLIMIT 100Representative 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['14'])For the DataFrame form:
from benchbox.core.query_catalog import get_dataframe_render
print(get_dataframe_render('tpcds_obt', '14', family="expression").source) # or family="pandas"Source
Query text: benchbox/core/tpcds_obt/queries.py