Amostra de dados: TPC-DS

Como descrito na especificação TPC Benchmark™ DS (TPC-DS):

“O TPC-DS modela as funções de suporte à decisão de um fornecedor de produtos de varejo. O esquema de suporte contém informações comerciais vitais, tais como dados de clientes, pedidos e produtos.

A fim de abordar a enorme variedade de tipos de consulta e comportamentos de usuários encontrados por um sistema de suporte à decisão, o TPC-DS utiliza um modelo de consulta generalizada. Este modelo permite que o benchmark capture aspectos importantes da natureza interativa e iterativa do processamento analítico on-line (OLAP), as consultas complexas de longo prazo de mineração de dados e descoberta de conhecimento, e o comportamento mais planejado de consultas de relatórios bem conhecidas.”

Neste tópico:

Banco de dados e esquemas

O Snowflake fornece ambas as versões do TPC-DS, de 10 TB e 100 TB, em esquemas chamados TPCDS_SF10TCL e TPCDS_SF100TCL, respectivamente, dentro do banco de dados compartilhado SNOWFLAKE_SAMPLE_DATA.

Entidades, relacionamentos e características do banco de dados

O TPC-DS consiste em 7 tabelas de fatos e 17 dimensões nos seguintes esquemas:

  • TPCDS_SF100TCL: A versão de 100 TB (fator de escala de 100.000) representa 100 milhões de clientes e mais de 500.000 itens armazenados, com dados de vendas abrangendo 3 canais – lojas, catálogos e a Web – cobrindo um período de 5 anos. A maior tabela, STORE_SALES, contém quase 300 bilhões de linhas, e as tabelas contêm mais de 560 bilhões de linhas no total.

  • TPCDS_SF10TCL: A versão de 10 TB (fator de escala de 10.000) representa 65 milhões de clientes e mais de 400.000 itens armazenados, com dados de vendas abrangendo 3 canais – lojas, catálogos e a Web – cobrindo um período de 5 anos. A maior tabela, STORE_SALES, contém quase 29 bilhões de linhas, e as tabelas contêm mais de 56 bilhões de linhas no total.

As relações entre fatos e dimensões são representadas através de junções em chaves alternativas. As relações detalhadas são muito numerosas para serem exibidas aqui, mas podem ser encontradas na especificação TPC-DS.

Definições de consulta

O TPC-DS contém um conjunto de 99 consultas com grande variação de complexidade e diversidade de dados verificados. Cada consulta TPC-DS faz uma pergunta comercial e inclui a consulta correspondente para responder à pergunta. Geramos amostras de todas as 99 consultas TPC-DS para que você possa explorar. Alternativamente, você pode usar as ferramentas no Kit de benchmark do TPC-DS para gerar muitas versões diferentes destas consultas que variam de acordo com os valores dos parâmetros.

Para a versão de 10 TB, o conjunto completo de 99 consultas TPC-DS deve ser concluído em menos de 45 minutos usando um warehouse Snowflake 2X-Large. Se você usar a versão de 100 TB, as consultas devem ser concluídas em menos de 1 hora usando um warehouse 4X-Large.

Abaixo, descrevemos apenas uma das consultas. Mais informações sobre TPC-DS e todas as consultas envolvidas podem ser encontradas na especificação oficial do TPC-DS.

Q57: Catalog Sales Call Center Outliers

Esta consulta analisa os dados da tabela CATALOG_SALES de um ano e revela as categorias e marcas em que as vendas em um mês variam mais de 10% em relação à média para um determinado call center.

Questão comercial

Encontre as marcas e categorias de itens para cada call center e seus números de vendas mensais para um determinado ano onde o número de vendas mensais desviou mais de 10% da média de vendas mensais do ano, classificadas por desvio e call center. Relate o desvio de vendas em relação aos mês anterior e seguinte.

Definição da consulta funcional

A consulta relaciona os seguintes totais:

  • Preço estendido

  • Preço estendido com desconto

  • Preço estendido com desconto mais imposto

  • Quantidade média

  • Preço estendido médio

  • Desconto médio

Estes agregados são agrupados por RETURNFLAG e LINESTATUS e são listados em ordem crescente de RETURNFLAG e LINESTATUS. Está incluída uma contagem do número de itens de linha em cada grupo:

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;
Copy