샘플 데이터: TPC-DS

TPC-DS 는 리테일 제품 공급업체의 의사결정 지원 시스템을 모델링한 벤치마크입니다. 고객, 주문, 제품 데이터가 있습니다. Snowflake는 SNOWFLAKE_SAMPLE_DATA 공유 데이터베이스 내에서 각각 TPCDS_SF 10TCL 및 TPCDS_SF 100TCL 라는 스키마로 TPC-DS 데이터의 10TB 및 100TB 버전을 제공합니다.

TPC Benchmark™ DS (TPC-DS) 사양에서의 설명에 따르면:

“의사결정 지원 시스템에서 수행되는 매우 방대한 범위의 쿼리 타입 및 사용자 동작을 처리하기 위해 TPC-DS 에서는 일반화된 쿼리 모델을 사용합니다. 이 모델을 통해 벤치마크에서 온라인 분석 처리(OLAP) 쿼리의 반복적인 대화형 특성, 데이터 마이닝 및 정보 검색을 위한 복잡한 장기 실행 쿼리, 잘 알려진 리포트 쿼리의 계획된 동작에 대한 중요한 측면을 캡처할 수 있습니다.

이 항목의 내용:

TPC-DS 데이터 세트를 내 계정에 추가하려면 어떻게 하나요?

TPC-DS 데이터 세트는 Snowflake Marketplace 의 Snowsight 에서 직접 액세스할 수 있습니다. Snowflake Marketplace 에서 TPC-DS 데이터 가져오기 섹션을 참조하십시오. 다운로드: 스크립트 </samples/tpc-ds-all-queries.sql> 를 다운로드하여 TPC-DS 쿼리 목록에 액세스할 수도 있습니다.

데이터베이스 항목, 관계 및 특성

TPC-DS 데이터 세트는 다음 스키마의 7개의 팩트 테이블과 17개의 차원으로 구성되어 있습니다.

  • TPCDS_SF100TCL: 100 TB(배율 인자 100,000) 버전은 5년 동안 매장, 카탈로그 및 웹의 3개 채널에 전체에서의 판매 데이터와 함께 1억 명의 고객과 500,000개 이상의 항목이 저장되어 있음을 나타냅니다. 가장 큰 테이블인 STORE_SALES에는 약 3,000억 개의 행이 있고 정보 테이블에는 총 5,600억 개 이상의 행이 있습니다.

  • TPCDS_SF10TCL: 10 TB(배율 인자 10,000) 버전은 5년 동안 매장, 카탈로그 및 웹의 3개 채널에 전체에서의 판매 데이터와 함께 6,500만 명의 고객과 400,000개 이상의 항목이 저장되어 있음을 나타냅니다. 가장 큰 테이블인 STORE_SALES에는 약 2,900억 개의 행이 있고 정보 테이블에는 총 560억 개 이상의 행이 있습니다.

정보와 차원 사이의 관계는 대체 키에서의 조인을 통해 표시됩니다. 자세한 관계는 매우 방대하여 여기에 표시할 수 없지만, TPC-DS 사양에서 확인할 수 있습니다.

쿼리 정의

TPC-DS에는 스캔된 데이터의 복잡성과 범위가 매우 다양한 99개의 쿼리 세트가 포함되어 있습니다. 각 TPC-DS 쿼리는 비즈니스 관련 질문을 하며 질문에 답하기 위한 해당 쿼리가 포함됩니다. Snowflake는 사용자가 탐색할 수 있는 총 99개의 TPC-DS 쿼리 샘플을 생성해 두었습니다. 또는, TPC-DS Benchmark Kit의 도구를 사용하여 매개 변수 값에 따라 달라지는 이러한 쿼리의 다양한 버전을 생성할 수도 있습니다.

아래에서는 쿼리 중 1개에 대한 설명이 제공됩니다. TPC-DS 및 모든 관련 쿼리에 대한 자세한 내용은 공식 TPC-DS 사양에서 확인할 수 있습니다.

Snowflake가 제공하는 TPC-DS 스크립트 에는 TPC-DS 쿼리의 전체 목록이 포함되어 있습니다. 파일을 로컬 파일 시스템에 저장하여 참조할 수 있습니다.

예시: 카탈로그 영업 콜센터 이상값(Q57)

이 쿼리는 1년치의 CATALOG_SALES 테이블 데이터를 살펴보고 특정 콜 센터의 1개월 매출이 평균과 비교하여 10%를 초과하여 차이가 있는 카테고리 및 브랜드를 보여줍니다.

비즈니스 질문

각 콜 센터의 품목 브랜드 및 카테고리와 지정된 연도의 월간 매출 수치를 찾습니다. 여기서, 월간 매출 수치는 해당 연도의 평균 월간 매출과 10%를 초과하여 차이가 있으며, 편차 및 콜 센터를 기준으로 정렬됩니다. 이전 및 다음 달의 매출 편차를 보고합니다.

기능 쿼리 정의

이 쿼리에서 나열되는 총합은 다음과 같습니다.

  • 총 금액

  • 할인된 총 금액

  • 할인된 총 금액 + 세금

  • 평균 수량

  • 평균 총 금액

  • 평균 할인

이러한 집계는 RETURNFLAG 및 LINESTATUS를 기준으로 그룹화되며 RETURNFLAG 및 LINESTATUS의 오름차순으로 나열됩니다. 각 그룹의 품목 수에 포함되는 사항은 다음과 같습니다.

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 = 2001 or
          ( d_year = 2001-1 and d_moy =12) or
          ( d_year = 2001+1 and d_moy =1)
          )
  group by i_category, i_brand,
           cc_name , d_year, d_moy),
v2 as(
  select v1.i_brand
    ,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 = 2001 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, nsum
limit 100;
Copy

Snowflake Marketplace 에서 TPC-DS 데이터 가져오기

Snowsight 에서 Snowflake Marketplace 로 이동하여 TPC-DS 데이터에 직접 액세스할 수 있습니다. 다음 데이터 세트의 인스턴스를 직접 생성하고 쿼리할 수 있습니다.

관리되는 Iceberg 데이터 세트의 데이터는 Snowflake 독점 테이블 형식이 아닌 Iceberg 형식으로 물리적으로 저장됩니다. 두 데이터 세트를 모두 가져와서 두 형식의 동작을 비교할 수 있습니다.

이러한 데이터 세트를 가져오려면 다음을 수행합니다.

  1. Snowflake Marketplace 에서 TPC-DS 를 검색 합니다. (메시지가 표시되면 Snowsight 에 로그인합니다.)

  2. TPC-DS 데이터 세트 중 하나를 선택합니다.

  3. Get 를 선택합니다.

    필요한 경우 관리자에게 액세스 권한을 요청하십시오. 로그인 역할에 이러한 데이터 세트에 대한 액세스 권한이 없을 수 있습니다.

  4. Options 에서 TPC-DS 데이터베이스에 사용자 정의 이름을 지정하고 액세스하는 데 사용할 역할을 선택합니다. 또는 기본 선택 항목으로 진행합니다.

  5. Get it for Free 를 선택합니다.

    몇 초 후 다음 팝업 윈도우가 표시되며, 이는 TPC-DS 데이터베이스의 인스턴스가 생성되었으며 검사 및 쿼리할 수 있음을 나타냅니다.

    TPC-DS 데이터 세트가 쿼리할 수 있는 데이터베이스에 기록되었음을 보여주는 팝업 윈도우입니다.
  6. Query Data 를 선택합니다.

  7. 제공된 워크시트 또는 모든 쿼리가 포함된 TPC-DS 스크립트 를 사용하여 데이터베이스의 데이터를 쿼리합니다.

이미 Get 을 사용하여 이러한 데이터베이스 중 하나를 생성한 경우 마켓플레이스 검색 결과 에서 Open 을 선택하여 해당 데이터베이스로 이동할 수 있습니다.