Skip to content

Repository files navigation

tpcds-scripts

TPC-DS derived schemas, queries and runner scripts for Oracle, PostgreSQL, Vertica, ClickHouse and StarRocks.

Oracle, PostgreSQL, Vertica, ClickHouse, StarRocks 를 위한 TPC-DS 파생 스키마·쿼리·실행 스크립트.

📖 Documentation: https://litkhai.github.io/tpcds-scripts/ — 문서 사이트

⚠️ Results measured with these scripts are not TPC-DS results and are not comparable to published TPC-DS results. See NOTICE.md.

⚠️ 이 스크립트로 측정한 값은 TPC-DS 결과가 아니며 공표된 TPC-DS 결과와 비교할 수 없습니다. NOTICE.md 참고.


What this is / 개요

A single place to stand up the TPC-DS workload on five different databases and run it the same way on each. For every engine the repository carries the schema, the full 103-query set in that engine's dialect, a bulk loader that speaks that engine's native tool, and tuning scripts — driven by one common set of commands.

다섯 개의 서로 다른 데이터베이스에 TPC-DS 워크로드를 구성하고 동일한 방식으로 실행하기 위한 저장소입니다. 각 엔진에 대해 스키마, 해당 엔진 방언의 103개 쿼리 전체 세트, 엔진 고유 도구를 사용하는 벌크 로더, 튜닝 스크립트를 제공하며, 공통 명령 세트로 구동합니다.

Two things this repository takes seriously:

이 저장소가 특히 중요하게 다루는 두 가지:

  1. Provenance. Every SQL file states which upstream repository it came from, at which commit, under which licence, and exactly what was changed. Nothing is copy-pasted without attribution. 출처. 모든 SQL 파일에 상류 리포지토리, 커밋, 라이선스, 변경 내용이 명시되어 있습니다. 출처 없이 복사해 온 것은 없습니다.
  2. Licensing. The TPC-DS toolkit is TPC EULA material, not open source. It is never vendored here — you fetch it yourself, and it lands in a git-ignored directory. 라이선스. TPC-DS 툴킷은 오픈소스가 아닌 TPC EULA 자산입니다. 이 저장소에 포함하지 않으며, 직접 받은 결과물은 git 에서 제외되는 디렉터리에 저장됩니다.

History / 연혁

This repository began as a set of Oracle-only TPC-DS scripts: a single tpcds_oracle_ddl.sql, SQL*Loader control files, and 99 queries rewritten in Oracle dialect. That work is preserved — the Oracle assets are repo-native and were carried into the new layout with git mv, so their history is intact — and the repository was then restructured around a per-engine layout with four more engines added.

이 저장소는 Oracle 전용 TPC-DS 스크립트로 시작했습니다. 단일 tpcds_oracle_ddl.sql, SQL*Loader 컨트롤 파일, Oracle 방언으로 재작성한 99개 쿼리가 그것입니다. 해당 작업은 그대로 보존되어 있으며(Oracle 자산은 리포 고유 자산으로 git mv 로 새 구조에 이동해 이력이 유지됩니다), 이후 엔진별 구조로 재구성하고 네 개 엔진을 추가했습니다.

Engine support / 엔진 지원 현황

Engine / 엔진 Schema Queries Loader / 로더 Tuning / 튜닝 Docker
Oracle 103 SQL*Loader (sqlldr) indexes, DBMS_STATS ✖ (why / 이유)
PostgreSQL 103 COPY indexes, ANALYZE
Vertica 103 COPY ... DIRECT Database Designer guidance ✖ (why / 이유)
ClickHouse 103 INSERT ... FORMAT CSV schema ORDER BY keys
StarRocks 103 Stream Load ANALYZE, bucketing notes

103 = the 99 TPC-DS queries, where 14, 23, 24 and 39 each have two formulations.

103 = TPC-DS 99개 쿼리 기준, 14·23·24·39 는 각각 두 가지 정식화를 가집니다.

Verification / 검증

Run it yourself — one command per engine, no TPC EULA acceptance required:

직접 실행할 수 있습니다. 엔진당 한 명령이며 TPC EULA 동의가 필요하지 않습니다.

tools/verify.sh --all          # postgres, clickhouse, starrocks
tools/verify.sh --engine postgres
tools/verify-docs.sh           # the docs site, in a real browser / 문서 사이트, 실제 브라우저

tools/verify.sh starts the engine from docker/docker-compose.yml, applies the schema, loads a synthetic fixture generated by tools/make-fixture.py, and runs all 103 queries — then writes results/verification.md. The same thing runs in CI on every push. What it proves: the SQL runs. What it does not prove: that answers are correct (the official TPC-DS answer sets are TPC EULA material and are unavailable) or anything at all about performance.

tools/verify.shdocker/docker-compose.yml 로 엔진을 기동하고 스키마를 적용한 뒤, tools/make-fixture.py 가 생성한 합성 픽스처를 적재하고 103개 쿼리를 전부 실행한 다음 results/verification.md 를 작성합니다. CI 에서도 push 마다 동일하게 실행됩니다. 증명하는 것은 SQL 이 실행된다는 사실이며, 정답 정확성(공식 TPC-DS 정답 세트는 TPC EULA 자산이라 사용 불가)이나 성능은 증명하지 않습니다.

Last measured result / 최근 측정 결과

Engine / 엔진 Schema / 스키마 Load / 적재 Queries / 쿼리
PostgreSQL 16 ✅ 25 tables ✅ 24/24 103/103
ClickHouse 26.7 ✅ 24 tables ✅ 24/24 102/103 (+1 known) — see below / 아래 참고
StarRocks 3.x ✅ 24 tables ✅ 24/24 103/103
Oracle ⬜ not run
Vertica ⬜ not run

Oracle and Vertica are not covered because neither has an anonymously pullable container image: Oracle needs container-registry.oracle.com with a licence acceptance, and no public Vertica CE image exists since the OpenText acquisition. Both can be verified by hand — see their pages in docs/engines/.

Oracle 과 Vertica 는 익명으로 받을 수 있는 컨테이너 이미지가 없어 제외됩니다. Oracle 은 라이선스 동의와 함께 container-registry.oracle.com 이 필요하고, OpenText 인수 이후 공개된 Vertica CE 이미지가 없습니다. 둘 다 수동으로 검증할 수 있습니다. docs/engines/ 참고.

The three ClickHouse failures, none of which is a defect in this repository:

ClickHouse 의 세 건 실패이며, 어느 것도 이 저장소의 결함이 아닙니다.

Query Cause / 원인
q61 Divides by a count(*) that the small verification fixture leaves at 0. A fixture-size artifact, not a query or engine defect — the query is correct and runs on a real dataset. Listed in expected_failures() in tools/verify.sh, so a run with only this failure still passes. / 검증 픽스처가 작아 0 이 되는 count(*) 로 나눕니다. 쿼리·엔진 결함이 아니라 픽스처 크기에서 오는 현상입니다. tools/verify.shexpected_failures() 에 등록되어 이 실패만 있으면 통과로 처리됩니다.
q30, q81 Fixed upstream. These failed on ClickHouse 25.11, which could not resolve an outer CTE alias referenced inside a subquery over a second instance of the same CTE (ctr1.ctr_state). They pass on 26.7. Found by CI pulling a newer image than the local run had. / 상류에서 수정됨. ClickHouse 25.11 에서는 같은 CTE 의 두 번째 인스턴스에 대한 서브쿼리 안의 외부 CTE 별칭을 해석하지 못해 실패했지만 26.7 에서는 통과합니다. CI 가 로컬보다 새 이미지를 받아 발견했습니다.

What verification found / 검증으로 발견한 것

Building the harness surfaced seven real bugs that reading the code had not. They are fixed; this is what a "does it actually run" check is for.

이 하네스를 만드는 과정에서 코드 검토로는 드러나지 않은 실제 버그 7건을 발견했습니다. 모두 수정되었으며, "실제로 실행되는가" 검사의 목적이 바로 이것입니다.

Bug / 버그 Impact / 영향
store_*.dat glob also matched store_sales.dat; customer_* matched customer_address.dat Loaders concatenated other tables' data into the wrong table. Now matched strictly as _<digits>_<digits>. / 로더가 다른 테이블 데이터를 잘못된 테이블에 이어붙였습니다.
StarRocks reorders columns in all 6 fact tables A positional load wrote ss_ticket_number into ss_item_sk. Now sends an explicit columns: header. / 위치 기반 적재가 값을 잘못된 컬럼에 기록했습니다.
StarRocks Stream Load used POST The FE answered {"status":"FAILED","msg":"Not implemented"}. Needs PUT. / FE 가 "Not implemented" 로 응답했습니다.
StarRocks loader never stripped dsdgen's trailing | Every row rejected: "too many filtered rows". / 모든 행이 거부되었습니다.
Upstream StarRocks call_center partitions cc_rec_start_date over 2023-06-01..2023-07-01 No TPC-DS row (1998–2002) can land there, so the table could never load. Clause removed as a documented adaptation. / TPC-DS 행이 들어갈 수 없어 적재가 불가능했습니다.
StarRocks healthcheck only queried the FE Reported healthy before any BE registered, so CREATE TABLE failed with "Current alive backend is []". / BE 등록 전에 healthy 로 보고했습니다.
A ; inside this repo's own bilingual SQL header The mysql client split on it and sent a comment-only fragment StarRocks rejected. ddl.sh now strips comments. / mysql 클라이언트가 그 지점에서 분리해 StarRocks 가 거부하는 조각을 전송했습니다.

tools/compare-schemas.py reports where the five schemas disagree — currently the customer.c_last_review_date type, the store.s_tax_precentage spelling, and the 6 reordered StarRocks fact tables.

tools/compare-schemas.py 가 다섯 스키마의 불일치 지점을 보고합니다. 현재 customer.c_last_review_date 타입, store.s_tax_precentage 표기, StarRocks 팩트 테이블 6개의 컬럼 순서입니다.

Quick start / 빠른 시작

# 1. Start an engine / 엔진 기동 (PostgreSQL example)
docker compose -f docker/docker-compose.yml --profile postgres up -d

# 2. Connection settings / 접속 설정
cp config/postgres.env.example config/postgres.env

# 3. Get the TPC-DS toolkit and generate data / 툴킷 확보 및 데이터 생성
#    Prompts you to accept the TPC EULA. / TPC EULA 동의를 요구합니다.
datagen/fetch-toolkit.sh --community
datagen/generate.sh --sf 1 --out ~/tpcds/sf1

# 4. Schema and load / 스키마 생성 및 적재
bin/ddl.sh  --engine postgres
bin/load.sh --engine postgres --data-dir ~/tpcds/sf1

# 5. Run / 실행
bin/run.sh  --engine postgres --sf 1 --iterations 3

Results land in results/<timestamp>-<engine>-sf<n>.csv.

결과는 results/<timestamp>-<engine>-sf<n>.csv 에 저장됩니다.

Swap postgres for oracle, vertica, clickhouse or starrocks — the commands are identical. Per-engine setup notes are in docs/engines/.

postgresoracle, vertica, clickhouse, starrocks 로 바꾸면 되며 명령은 동일합니다. 엔진별 설정 안내는 docs/engines/ 에 있습니다.

Repository layout / 저장소 구조

tpcds-scripts/
├── bin/                        Common commands / 공통 명령
│   ├── ddl.sh                    create schema, optionally tuning / 스키마·튜닝 생성
│   ├── load.sh                   dispatch to the engine's bulk loader / 엔진 로더 위임
│   ├── run.sh                    execute queries, record timings / 쿼리 실행·시간 기록
│   └── lib/common.sh             engine dispatch, config, query selection
├── engines/
│   ├── oracle/                 Repo-native / 리포 고유 자산
│   │   ├── ddl/schema.sql        25 tables / 테이블
│   │   ├── load/ctl/*.ctl        24 SQL*Loader templates, named by table
│   │   ├── load/load.sh          renders @DATA_DIR@ / @LOG_DIR@, runs sqlldr
│   │   ├── queries/*.sql         103 queries, Oracle dialect
│   │   └── tuning/               indexes.sql, stats.sql
│   ├── postgres/  vertica/       derived from the standard query text
│   └── clickhouse/  starrocks/   imported verbatim from upstream (Apache-2.0)
├── datagen/
│   ├── fetch-toolkit.sh        obtain + build dsdgen (never vendored / 미포함)
│   └── generate.sh             produce .dat files at a scale factor
├── docker/docker-compose.yml   local engines, one profile each
├── config/*.env.example        connection settings templates
├── tools/
│   ├── sync-upstream.sh        re-import upstream at pinned commits
│   ├── derive-ddl.sh           generate Postgres/Vertica schemas
│   ├── verify.sh               start engine, load fixture, run all 103 / 검증
│   ├── verify-docs.sh          build docs, check in a real browser / 문서 브라우저 검사
│   ├── make-fixture.py         synthetic fixture data (no TPC EULA) / 합성 픽스처
│   └── compare-schemas.py      report cross-engine schema divergence / 스키마 불일치
├── docs/                       GitHub Pages site / GitHub Pages 사이트
├── results/                    run output (git-ignored / git 제외)
├── LICENSE                     Apache-2.0, for this repository's own code
└── NOTICE.md                   provenance and TPC licensing / 출처 및 TPC 라이선스

How the query sets were built / 쿼리 세트 구성 방법

Engine Source / 출처 Change / 변경
Oracle Repo-native, pre-existing Oracle dialect: rownum <= 100, to_date(...) + N
ClickHouse ClickHouse/ClickHouse tests/benchmarks/tpc-ds/ (Apache-2.0) Verbatim; q14/23/24/39 split into _1/_2
StarRocks StarRocks/starrocks .../sql/tpcds/ (Apache-2.0) Verbatim
PostgreSQL, Vertica Derived from the StarRocks copy of the standard query text date_add(d, n)(d ± n); ORDER BY alias expanded in q36/q70/q86

Re-run tools/sync-upstream.sh to reproduce all of it from the pinned commits. Full detail, including why some sources were rejected, is in NOTICE.md.

tools/sync-upstream.sh 를 다시 실행하면 핀 고정 커밋에서 전체를 재생성할 수 있습니다. 일부 소스를 배제한 이유를 포함한 상세 내용은 NOTICE.md 에 있습니다.

Licensing in one paragraph / 라이선스 요약

The scripts in this repository are Apache-2.0 (LICENSE). The TPC-DS schema and query text are derived from a TPC benchmark specification and remain subject to TPC's rights; the data generator is TPC EULA material and is not included here. Anything you measure is "TPC-DS derived" and must not be presented as a TPC-DS result. Read NOTICE.md before publishing numbers.

이 저장소의 스크립트는 Apache-2.0 (LICENSE) 입니다. TPC-DS 스키마와 쿼리 원문은 TPC 벤치마크 규격에서 파생된 것으로 TPC 의 권리가 유지됩니다. 데이터 생성기는 TPC EULA 자산이며 여기에 포함되지 않습니다. 측정한 값은 "TPC-DS 파생" 이며 TPC-DS 결과로 제시해서는 안 됩니다. 수치를 공개하기 전에 NOTICE.md 를 읽어보십시오.

Documentation / 문서

The full site is at https://litkhai.github.io/tpcds-scripts/; the sources live in docs/ and are built with Material for MkDocs.

전체 사이트는 https://litkhai.github.io/tpcds-scripts/ 이며, 소스는 docs/ 에 있고 Material for MkDocs 로 빌드됩니다.

Section / 섹션 Pages / 페이지
Getting started Quick start · Commands · Data generation
Engines Oracle · PostgreSQL · Vertica · ClickHouse · StarRocks
Verification How to verify · Schema divergence
Reference TPC-DS schema · Methodology & fair use · Licensing

Preview it locally / 로컬 미리보기:

pip install -r requirements-docs.txt
mkdocs serve            # http://127.0.0.1:8000

Contributing / 기여

Adding an engine, correcting a dialect adaptation, or reporting a query that fails on a real dataset are all welcome. See CONTRIBUTING.md — in particular, do not edit imported query files by hand; change tools/sync-upstream.sh so the adaptation stays reproducible and documented.

엔진 추가, 방언 변환 수정, 실제 데이터셋에서 실패하는 쿼리 제보 모두 환영합니다. CONTRIBUTING.md 를 참고하십시오. 특히 임포트된 쿼리 파일을 직접 수정하지 말고 tools/sync-upstream.sh 를 수정해 변환이 재현·문서화되도록 유지하십시오.

About

TPC-DS derived schemas, queries and runners for Oracle, PostgreSQL, Vertica, ClickHouse and StarRocks — 103 queries per engine, per-file provenance, and a verification harness you can run yourself

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages