TPC-DS

TPC-DS (2012)

TPC-DS는 TPC-H를 기반으로 하되 스노우플레이크 스키마로 데이터를 저장해 조인 수를 크게 늘린 벤치마크입니다. 복잡한 조인과 랜덤 치환을 포함한 99개의 보고·임시(ad-hoc) 쿼리로 구성되어 있어 ClickHouse의 복잡한 쿼리 성능을 검증하기에 좋습니다.

출처: 문서

본문

Star Schema Benchmark (SSB)과 유사하게 TPC-DS는 TPC-H를 기반으로 하지만, 반대 방향으로 진행했습니다. 즉 데이터를 복잡한 스노우플레이크 스키마(테이블 8개 대신 24개)로 저장해 필요한 조인 수를 늘린 것입니다. 데이터 분포는 편향되어 있습니다(예: 정규분포와 푸아송분포). 랜덤 치환을 포함한 99개의 보고·임시 쿼리가 포함됩니다.

참고문헌

데이터 생성 및 임포트 (Data Generation and Import)

먼저 TPC-DS 저장소를 체크아웃하고 데이터 생성기를 컴파일합니다:

git clone https://github.com/gregrahn/tpcds-kit.git
cd tpcds-kit/tools
make

그런 다음 데이터를 생성합니다. -scale 매개변수가 스케일 팩터를 지정합니다.

./dsdgen -scale 1

이제 ClickHouse에 테이블을 생성합니다. 테이블 정의는 ClickHouse 저장소의 init.sql에 있습니다.

데이터는 다음과 같이 임포트할 수 있습니다:

clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO call_center FORMAT CSV" < call_center.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO catalog_page FORMAT CSV" < catalog_page.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO catalog_returns FORMAT CSV" < catalog_returns.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO catalog_sales FORMAT CSV" < catalog_sales.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO customer FORMAT CSV" < customer.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO customer_address FORMAT CSV" < customer_address.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO customer_demographics FORMAT CSV" < customer_demographics.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO date_dim FORMAT CSV" < date_dim.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO household_demographics FORMAT CSV" < household_demographics.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO income_band FORMAT CSV" < income_band.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO inventory FORMAT CSV" < inventory.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO item FORMAT CSV" < item.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO promotion FORMAT CSV" < promotion.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO reason FORMAT CSV" < reason.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO ship_mode FORMAT CSV" < ship_mode.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO store FORMAT CSV" < store.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO store_returns FORMAT CSV" < store_returns.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO store_sales FORMAT CSV" < store_sales.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO time_dim FORMAT CSV" < time_dim.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO warehouse FORMAT CSV" < warehouse.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO web_page FORMAT CSV" < web_page.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO web_returns FORMAT CSV" < web_returns.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO web_sales FORMAT CSV" < web_sales.dat
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO web_site FORMAT CSV" < web_site.dat

그런 다음 생성된 쿼리들을 실행합니다.

쿼리 (Queries)

99개의 TPC-DS 쿼리는 ClickHouse 저장소의 여기에서 찾을 수 있습니다.

SQL 표준 호환 동작과 기대 결과를 얻으려면 settings.json의 설정을 적용하세요. 특정 쿼리의 알려진 문제와 참고사항은 README를 확인하세요.

정확성

다른 언급이 없는 한 쿼리 결과는 공식 결과와 일치합니다. TPC-DS 사양이 허용하는 사소한 정밀도 차이가 있을 수 있습니다.

성능 벤치마크 (Performance benchmark)

ClickHouse는 릴리스된 모든 버전에 걸쳐 TPC-DS 쿼리 성능을 추적합니다. ClickHouse versions benchmark 페이지(스케일 팩터 32)에서 99개 모든 TPC-DS 쿼리의 실행 시간을 살펴보고 성능이 시간에 따라 어떻게 진화했는지 확인할 수 있습니다.

더 알아보기 (Learn more)