Skip to content

TPC-DS-OBT Q10 — obt_high_value_sales

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

Count and revenue of high-value sales

Representative SQL

Rendered for DataFusion with default parameters.

SELECT
bill_cdemo_cd_gender,
bill_cdemo_cd_marital_status,
bill_cdemo_cd_education_status,
COUNT(*) AS cnt1,
bill_cdemo_cd_purchase_estimate,
COUNT(*) AS cnt2,
bill_cdemo_cd_credit_rating,
COUNT(*) AS cnt3,
bill_cdemo_cd_dep_count,
COUNT(*) AS cnt4,
bill_cdemo_cd_dep_employed_count,
COUNT(*) AS cnt5,
bill_cdemo_cd_dep_college_count,
COUNT(*) AS cnt6
FROM tpcds_sales_returns_obt AS obt
WHERE
(
ship_customer_c_current_addr_sk = bill_addr_ca_address_sk
AND bill_addr_ca_county IN ('2', '2', '2', '2', '2')
AND bill_cdemo_cd_demo_sk = ship_customer_c_current_cdemo_sk
AND EXISTS(
SELECT
*
FROM tpcds_sales_returns_obt AS obt
WHERE
(
obt.ship_customer_c_customer_sk = obt.ship_customer_sk
AND obt.sold_date_sk = obt.sold_date_d_date_sk
AND obt.sold_date_d_year = 1999
AND obt.sold_date_d_moy BETWEEN 1 AND 1 + 3
)
AND channel = 'store'
)
AND (
EXISTS(
SELECT
*
FROM tpcds_sales_returns_obt AS obt
WHERE
(
obt.ship_customer_c_customer_sk = obt.bill_customer_sk
AND obt.sold_date_sk = obt.sold_date_d_date_sk
AND obt.sold_date_d_year = 1999
AND obt.sold_date_d_moy BETWEEN 1 AND 1 + 3
)
AND channel = 'web'
)
OR EXISTS(
SELECT
*
FROM tpcds_sales_returns_obt AS obt
WHERE
(
obt.ship_customer_c_customer_sk = obt.ship_customer_sk
AND obt.sold_date_sk = obt.sold_date_d_date_sk
AND obt.sold_date_d_year = 1999
AND obt.sold_date_d_moy BETWEEN 1 AND 1 + 3
)
AND channel = 'catalog'
)
)
)
AND channel IN ('catalog', 'store', 'web')
GROUP BY
bill_cdemo_cd_gender,
bill_cdemo_cd_marital_status,
bill_cdemo_cd_education_status,
bill_cdemo_cd_purchase_estimate,
bill_cdemo_cd_credit_rating,
bill_cdemo_cd_dep_count,
bill_cdemo_cd_dep_employed_count,
bill_cdemo_cd_dep_college_count
ORDER BY
bill_cdemo_cd_gender,
bill_cdemo_cd_marital_status,
bill_cdemo_cd_education_status,
bill_cdemo_cd_purchase_estimate,
bill_cdemo_cd_credit_rating,
bill_cdemo_cd_dep_count,
bill_cdemo_cd_dep_employed_count,
bill_cdemo_cd_dep_college_count
LIMIT 100

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

For the DataFrame form:

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

Source

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