TPC-DS-OBT Q11 — obt_item_channel_quantity
TPC-DS-OBT benchmark · all TPC-DS-OBT queries
Units sold by channel and item
Representative SQL
Rendered for DataFusion with default parameters.
WITH year_total AS ( SELECT obt.bill_customer_c_customer_id AS customer_id, obt.bill_customer_c_first_name AS customer_first_name, obt.bill_customer_c_last_name AS customer_last_name, obt.bill_customer_c_preferred_cust_flag AS customer_preferred_cust_flag, obt.bill_customer_c_birth_country AS customer_birth_country, obt.bill_customer_c_login AS customer_login, obt.bill_customer_c_email_address AS customer_email_address, obt.sold_date_d_year AS dyear, SUM(obt.ext_list_price - obt.ext_discount_amt) AS year_total, 's' AS sale_type FROM tpcds_sales_returns_obt AS obt WHERE ( obt.bill_customer_c_customer_sk = obt.ship_customer_sk AND obt.sold_date_sk = obt.sold_date_d_date_sk ) AND channel = 'store' GROUP BY obt.bill_customer_c_customer_id, obt.bill_customer_c_first_name, obt.bill_customer_c_last_name, obt.bill_customer_c_preferred_cust_flag, obt.bill_customer_c_birth_country, obt.bill_customer_c_login, obt.bill_customer_c_email_address, obt.sold_date_d_year UNION ALL SELECT obt.bill_customer_c_customer_id AS customer_id, obt.bill_customer_c_first_name AS customer_first_name, obt.bill_customer_c_last_name AS customer_last_name, obt.bill_customer_c_preferred_cust_flag AS customer_preferred_cust_flag, obt.bill_customer_c_birth_country AS customer_birth_country, obt.bill_customer_c_login AS customer_login, obt.bill_customer_c_email_address AS customer_email_address, obt.sold_date_d_year AS dyear, SUM(obt.ext_list_price - obt.ext_discount_amt) AS year_total, 'w' AS sale_type FROM tpcds_sales_returns_obt AS obt WHERE ( obt.bill_customer_c_customer_sk = obt.bill_customer_sk AND obt.sold_date_sk = obt.sold_date_d_date_sk ) AND channel = 'web' GROUP BY obt.bill_customer_c_customer_id, obt.bill_customer_c_first_name, obt.bill_customer_c_last_name, obt.bill_customer_c_preferred_cust_flag, obt.bill_customer_c_birth_country, obt.bill_customer_c_login, obt.bill_customer_c_email_address, obt.sold_date_d_year)SELECT t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_preferred_cust_flagFROM year_total AS t_s_firstyear, year_total AS t_s_secyear, year_total AS t_w_firstyear, year_total AS t_w_secyearWHERE t_s_secyear.customer_id = t_s_firstyear.customer_id AND t_s_firstyear.customer_id = t_w_secyear.customer_id AND t_s_firstyear.customer_id = t_w_firstyear.customer_id AND t_s_firstyear.sale_type = 's' AND t_w_firstyear.sale_type = 'w' AND t_s_secyear.sale_type = 's' AND t_w_secyear.sale_type = 'w' AND t_s_firstyear.dyear = 1998 AND t_s_secyear.dyear = 1998 + 1 AND t_w_firstyear.dyear = 1998 AND t_w_secyear.dyear = 1998 + 1 AND t_s_firstyear.year_total > 0 AND t_w_firstyear.year_total > 0 AND CASE WHEN t_w_firstyear.year_total > 0 THEN CAST(t_w_secyear.year_total AS DOUBLE PRECISION) / t_w_firstyear.year_total ELSE 0.0 END > CASE WHEN t_s_firstyear.year_total > 0 THEN CAST(t_s_secyear.year_total AS DOUBLE PRECISION) / t_s_firstyear.year_total ELSE 0.0 ENDORDER BY t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_preferred_cust_flagLIMIT 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['11'])For the DataFrame form:
from benchbox.core.query_catalog import get_dataframe_render
print(get_dataframe_render('tpcds_obt', '11', family="expression").source) # or family="pandas"Source
Query text: benchbox/core/tpcds_obt/queries.py