Skip to content

TPC-DS-OBT Q54

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

Representative SQL

Rendered for DataFusion with default parameters.

WITH my_customers AS (
SELECT DISTINCT
obt.bill_customer_c_customer_sk,
obt.bill_customer_c_current_addr_sk
FROM tpcds_sales_returns_obt AS obt
CROSS JOIN (
SELECT
obt.sold_date_sk AS sold_date_sk,
obt.bill_customer_sk AS customer_sk,
obt.item_sk AS item_sk
FROM tpcds_sales_returns_obt AS obt
WHERE
channel = 'catalog'
UNION ALL
SELECT
obt.sold_date_sk AS sold_date_sk,
obt.bill_customer_sk AS customer_sk,
obt.item_sk AS item_sk
FROM tpcds_sales_returns_obt AS obt
WHERE
channel = 'web'
) AS cs_or_ws_sales
WHERE
(
obt.sold_date_sk = obt.sold_date_d_date_sk
AND obt.item_sk = obt.item_i_item_sk
AND obt.item_i_category = '0'
AND obt.item_i_class = '0'
AND obt.bill_customer_c_customer_sk = cs_or_ws_sales.customer_sk
AND obt.sold_date_d_moy = 1
AND obt.sold_date_d_year = 1998
)
AND channel IN ('catalog', 'store', 'web')
), my_revenue AS (
SELECT
obt.bill_customer_c_customer_sk,
SUM(obt.ext_sales_price) AS revenue
FROM tpcds_sales_returns_obt AS obt
CROSS JOIN my_customers AS my_customers
WHERE
(
obt.bill_customer_c_current_addr_sk = obt.bill_addr_ca_address_sk
AND obt.bill_addr_ca_county = obt.store_s_county
AND obt.bill_addr_ca_state = obt.store_s_state
AND obt.sold_date_sk = obt.sold_date_d_date_sk
AND obt.bill_customer_c_customer_sk = obt.ship_customer_sk
AND obt.sold_date_d_month_seq BETWEEN (
SELECT DISTINCT
obt.sold_date_d_month_seq + 1
FROM tpcds_sales_returns_obt AS obt
WHERE
(
obt.sold_date_d_year = 1998 AND obt.sold_date_d_moy = 1
)
AND channel IN ('catalog', 'store', 'web')
) AND (
SELECT DISTINCT
obt.sold_date_d_month_seq + 3
FROM tpcds_sales_returns_obt AS obt
WHERE
(
obt.sold_date_d_year = 1998 AND obt.sold_date_d_moy = 1
)
AND channel IN ('catalog', 'store', 'web')
)
)
AND channel = 'store'
GROUP BY
obt.bill_customer_c_customer_sk
), segments AS (
SELECT
CAST((
CAST(revenue AS DOUBLE PRECISION) / 50
) AS INT) AS segment
FROM my_revenue
)
SELECT
segment,
COUNT(*) AS num_customers,
segment * 50 AS segment_base
FROM segments
GROUP BY
segment
ORDER BY
segment,
num_customers
LIMIT 100

Representative DataFrame

No DataFrame implementation is registered for this query.

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

Source

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