Beispieldaten: TPC-DS

Wie im TPC Benchmark ™ DS (TPC-DS)-Spezifikation beschrieben:

„TPC-DS modelliert die Entscheidungsunterstützungsfunktionen eines Produktlieferanten im Einzelhandel. Das unterstützende Schema enthält wichtige Geschäftsinformationen wie Kunden-, Auftrags- und Produktdaten.

Um die enorme Bandbreite an Abfragetypen und Benutzerverhalten eines Entscheidungsunterstützungssystems zu berücksichtigen, verwendet TPC-DS ein generalisiertes Abfragemodell. Dieses Modell ermöglicht es der Benchmark, wichtige Aspekte der interaktiven, iterativen Natur von OLAP-Abfragen (On-Line Analytical Processing), die zeitaufwändige Ausführung komplexer Abfragen in Data Mining und Knowledge Discovery sowie das planmäßigere Verhalten von bekannten Berichtsabfragen abzudecken.“

Unter diesem Thema:

Datenbank und Schemas

Snowflake stellt sowohl 10-TB- als auch 100-TB-Versionen von TPC-DS in Schemas mit den Namen TPCDS_SF10TCL bzw. TPCDS_SF100TCL innerhalb der freigegebenen SNOWFLAKE_SAMPLE_DATA-Datenbank zur Verfügung.

Entitäten, Beziehungen und Eigenschaften der Datenbank

TPC-DS besteht aus 7 Faktentabellen und 17 Dimensionen in den folgenden Schemas:

  • TPCDS_SF100TCL: Die 100-TB-Version (Skalierungsfaktor 100.000) repräsentiert 100 Millionen Kunden und über 500.000 gespeicherte Artikel, wobei die Verkaufsdaten 3 Kanäle – Geschäfte, Kataloge und Internet – über einen Zeitraum von 5 Jahren umfassen. Die größte Tabelle, STORE_SALES, enthält fast 300 Milliarden Zeilen, und die Faktentabellen enthalten insgesamt über 560 Milliarden Zeilen.

  • TPCDS_SF10TCL: Die 10-TB-Version (Skalierungsfaktor 10.000) repräsentiert 65 Millionen Kunden und über 400.000 gespeicherte Artikel, wobei die Verkaufsdaten 3 Kanäle – Geschäfte, Kataloge und Internet – über einen Zeitraum von 5 Jahren umfassen. Die größte Tabelle, STORE_SALES, enthält fast 29 Milliarden Zeilen, und die Faktentabellen enthalten insgesamt über 56 Milliarden Zeilen.

Die Beziehungen zwischen Fakten und Dimensionen werden durch Joins auf Ersatzschlüsseln dargestellt. Die detaillierten Beziehungen sind zu zahlreich, um sie hier anzuzeigen, sie sind aber in der Spezifikation zu TPC-DS zu finden.

Abfragedefinitionen

TPC-DS enthält ein Set von 99 Abfragen mit großen Unterschieden in Komplexität und Umfang der gescannten Daten. Jede TPC-DS-Abfrage steht für eine Geschäftsfrage und enthält die entsprechende Abfrage zur Beantwortung der Frage. Wir haben Beispiele für alle 99 TPC-DS-Abfragen für Sie generiert. Alternativ können Sie die Tools des TPC-DS-Benchmark-Kits verwenden, um viele verschiedene Versionen dieser Abfragen zu generieren, die sich durch die Parameterwerte unterscheiden.

Für die 10-TB-Version sollte das volle Set von 99 TPC-DS-Abfragen in deutlich weniger als 2 Stunden mit einem Snowflake 2X-Large-Warehouse abgeschlossen sein. Wenn Sie die 100-TB-Version verwenden, sind für die Abfragen etwa 3 Stunden mit einem 4X-Large-Warehouse zu veranschlagen.

Im Folgenden beschreiben wir nur eine der Abfragen. Weitere Informationen zu TPC-DS und allen damit verbundenen Fragen finden Sie in der offiziellen TPC-DS-Spezifikation.

Q57: Callcenter-Ausreißer im Katalog-Vertrieb

Bei dieser Abfrage wird der Wert von CATALOG_SALES-Tabellendaten über ein Jahr betrachtet, und es werden die Kategorien und Marken aufgezeigt, bei denen die Umsätze eines Monats um mehr als 10 % vom Durchschnitt eines bestimmten Callcenters abweichen.

Geschäftsfrage

Suchen Sie die Artikelmarken und -kategorien für jedes Callcenter und deren monatliche Verkaufszahlen für ein bestimmtes Jahr, wobei die monatlichen Verkaufszahlen um mehr als 10 % vom durchschnittlichen Monatsumsatz des Jahres abweichen, sortiert nach Abweichung und Callcenter. Melden Sie die Umsatzabweichung gegenüber den Vormonaten und den Folgemonaten.

Definition der funktionalen Abfrage

Die Abfrage listet die folgenden Summen auf:

  • Erweiterter Preis

  • Ermäßigter erweiterter Preis

  • Ermäßigter erweiterter Preis zuzüglich Mehrwertsteuer

  • Durchschnittliche Menge

  • Durchschnittlicher erweiterter Preis

  • Durchschnittlicher Rabatt

Diese Summen sind nach RETURNFLAG und LINESTATUS gruppiert und werden in aufsteigender Reihenfolge von RETURNFLAG und LINESTATUS aufgelistet. Ein Zähler für die Anzahl der Einzelelemente in jeder Gruppe ist enthalten:

use schema snowflake_sample_data.tpcds_sf10Tcl;

-- QID=TPC-DS_query57

with v1 as(
  select i_category, i_brand, cc_name, d_year, d_moy,
        sum(cs_sales_price) sum_sales,
        avg(sum(cs_sales_price)) over
          (partition by i_category, i_brand,
                     cc_name, d_year)
          avg_monthly_sales,
        rank() over
          (partition by i_category, i_brand,
                     cc_name
           order by d_year, d_moy) rn
  from item, catalog_sales, date_dim, call_center
  where cs_item_sk = i_item_sk and
       cs_sold_date_sk = d_date_sk and
       cc_call_center_sk= cs_call_center_sk and
       (
         d_year = 1999 or
         ( d_year = 1999-1 and d_moy =12) or
         ( d_year = 1999+1 and d_moy =1)
       )
  group by i_category, i_brand,
          cc_name , d_year, d_moy),
v2 as(
  select v1.i_category ,v1.d_year, v1.d_moy ,v1.avg_monthly_sales
        ,v1.sum_sales, v1_lag.sum_sales psum, v1_lead.sum_sales nsum
  from v1, v1 v1_lag, v1 v1_lead
  where v1.i_category = v1_lag.i_category and
       v1.i_category = v1_lead.i_category and
       v1.i_brand = v1_lag.i_brand and
       v1.i_brand = v1_lead.i_brand and
       v1.cc_name = v1_lag.cc_name and
       v1.cc_name = v1_lead.cc_name and
       v1.rn = v1_lag.rn + 1 and
       v1.rn = v1_lead.rn - 1)
select  *
from v2
where  d_year = 1999 and
        avg_monthly_sales > 0 and
        case when avg_monthly_sales > 0 then abs(sum_sales - avg_monthly_sales) / avg_monthly_sales else null end > 0.1
order by sum_sales - avg_monthly_sales, 3
limit 100;