TPC-DS Q38 — Three-Channel Customer INTERSECT
TPC-DS benchmark · all TPC-DS queries
Count customers who bought in all three channels on same date
Representative SQL
Rendered for DataFusion with default parameters.
SELECT COUNT(*)FROM ( SELECT DISTINCT c_last_name, c_first_name, d_date FROM store_sales, date_dim, customer WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk AND store_sales.ss_customer_sk = customer.c_customer_sk AND d_month_seq BETWEEN 1212 AND 1212 + 11 INTERSECT SELECT DISTINCT c_last_name, c_first_name, d_date FROM catalog_sales, date_dim, customer WHERE catalog_sales.cs_sold_date_sk = date_dim.d_date_sk AND catalog_sales.cs_bill_customer_sk = customer.c_customer_sk AND d_month_seq BETWEEN 1212 AND 1212 + 11 INTERSECT SELECT DISTINCT c_last_name, c_first_name, d_date FROM web_sales, date_dim, customer WHERE web_sales.ws_sold_date_sk = date_dim.d_date_sk AND web_sales.ws_bill_customer_sk = customer.c_customer_sk AND d_month_seq BETWEEN 1212 AND 1212 + 11) AS hot_custLIMIT 100Representative DataFrame
Expression family (Polars, PySpark, DataFusion), default parameters.
def q38_expression_impl(ctx: DataFrameContext) -> Any: return _three_channel_customer_count_expression(ctx, 38, "intersect")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 TPCDS
bench = TPCDS(scale_factor=1.0) # your scale factorqueries = bench.get_queries(dialect="datafusion") # your platform's dialect; drop dialect= for native SQLprint(queries['38'])Parameter substitution for this benchmark is seed-driven; pass a seed for a specific stream’s parameters:
print(bench.get_query(38, scale_factor=1.0, seed=42, dialect="datafusion"))For the DataFrame form:
from benchbox.core.query_catalog import get_dataframe_render
print(get_dataframe_render('tpcds', '38', family="expression").source) # or family="pandas"Source
Query text: _sources/tpc-ds/query_templates/query38.tpl