샘플 데이터: TPC-H

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

“TPC-H는 결정 지원 벤치마크로, 비즈니스 지향 애드혹 쿼리 및 동시 데이터 수정 모음으로 구성됩니다. 데이터베이스를 채우는 쿼리와 데이터는 광범위한 업계 전반에서 연관성을 갖도록 선택되었습니다. 이 벤치마크는 대규모 데이터를 검사하고 매우 복잡한 쿼리를 실행하며 중요한 비즈니스 질문에 대한 답변을 제공하는 의사결정 지원 시스템을 보여줍니다.”

이 항목의 내용:

데이터베이스 및 스키마

TPC-H는 다양한 배율 인수를 테스트하기 위해 다양한 크기의 데이터 세트와 함께 제공됩니다. 설명을 위해 Snowflake는 4가지 버전의 TPC-H 데이터를 제공합니다. 데이터는 SNOWFLAKE_SAMPLE_DATA 공유 데이터베이스의 다음 스키마에서 제공됩니다.

  • TPCH_SF1: 기본 행 크기로 구성됩니다(수백만 개의 요소).

  • TPCH_SF10: 기본 행 크기 x 10으로 구성됩니다.

  • TPCH_SF100: 기본 행 크기 x 100으로 구성됩니다(수억 개의 요소).

  • TPCH_SF1000: 기본 행 크기 x 1000으로 구성됩니다(수십억 개의 요소).

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

TPC-H의 구성 요소는 별도의 개별 테이블 8개(기본 테이블)로 구성됩니다. 이러한 테이블에서 열 사이의 관계에 대한 설명은 다음 ER 다이어그램에서 제공됩니다.

TPC-H 벤치마크 데이터의 스키마

(출처: TPC 벤치마크 H 표준 사양)

쿼리 정의

각 TPC-H 쿼리는 비즈니스 관련 질문을 하며 질문에 답하기 위한 해당 쿼리가 포함됩니다. 일부 TPC-H 쿼리는 Snowflake의 시작하기 자습서에 포함되어 있습니다.

이 섹션에서는 해당 쿼리 중 1개를 설명합니다. TPC-H 및 모든 관련 쿼리에 대한 자세한 내용은 공식 TPC 벤치마크 H 표준 사양 에서 확인할 수 있습니다.

Q1: 가격 요약 보고서 쿼리

이 쿼리는 청구, 배송 및 반품된 비즈니스 금액을 보고합니다.

비즈니스 질문

Pricing Summary Report Query는 지정된 날짜에 배송된 모든 품목에 대한 요약 가격 보고서를 제공합니다. 날짜는 데이터베이스에 포함된 가장 늦은 배송 날짜로부터 60~120일 이내입니다.

기능 쿼리 정의

이 쿼리는 총 금액, 할인된 총 금액, 할인된 총 금액 + 세금, 평균 수량, 평균 총 금액 및 평균 할인에 대한 합계를 나열합니다. 이러한 집계는 RETURNFLAG 및 LINESTATUS를 기준으로 그룹화되며 RETURNFLAG 및 LINESTATUS의 오름차순으로 나열됩니다. 각 그룹의 품목 수에 포함되는 사항은 다음과 같습니다.

use schema snowflake_sample_data.tpch_sf1;   -- or snowflake_sample_data.{tpch_sf10 | tpch_sf100 | tpch_sf1000}

select
       l_returnflag,
       l_linestatus,
       sum(l_quantity) as sum_qty,
       sum(l_extendedprice) as sum_base_price,
       sum(l_extendedprice * (1-l_discount)) as sum_disc_price,
       sum(l_extendedprice * (1-l_discount) * (1+l_tax)) as sum_charge,
       avg(l_quantity) as avg_qty,
       avg(l_extendedprice) as avg_price,
       avg(l_discount) as avg_disc,
       count(*) as count_order
 from
       lineitem
 where
       l_shipdate <= dateadd(day, -90, to_date('1998-12-01'))
 group by
       l_returnflag,
       l_linestatus
 order by
       l_returnflag,
       l_linestatus;
Copy