1–33)로 구성됩니다. 같은 패밀리 내의 쿼리(a, b, c, …)는 동일한 조인 그래프를 공유하지만 선택 프레디케이트는 서로 다릅니다.
참고
- How Good Are Query Optimizers, Really? (Leis et al., VLDB 2015)
- Join Order Benchmark 리포지토리
테이블 생성
init_cloud.sql에서 확인할 수 있습니다.
각 테이블은 프라이머리 키 컬럼 id를 기준으로 정렬된 MergeTree 엔진을 사용하며, 이는 모든 테이블이 id integer NOT NULL PRIMARY KEY를 선언하는 원본 PostgreSQL 스키마를 반영한 것입니다. 널 허용 PostgreSQL 컬럼은 Nullable(...) 타입에 매핑됩니다.
테이블을 생성하세요:
데이터 로드
aka_name.csv, title.csv, …)로 배포됩니다.
이 CSV들은 ESCAPE '\'를 사용하는 PostgreSQL COPY 의미 체계를 따릅니다. 즉, 백슬래시는 따옴표로 묶인 field 안에서만 따옴표 문자를 이스케이프하고, 따옴표 밖에서는 문자 그대로 취급됩니다.
ClickHouse는 RFC 4180 CSV(따옴표 이중화, 백슬래시 이스케이프 없음)를 기대하므로, 먼저 파일을 다시 인코딩해야 합니다.
convert_csv.py는 이 재인코딩을 수행합니다.
이 스크립트는 원본 CSV를 stdin에서 읽고 표준 CSV를 stdout에 기록하며, 내부 따옴표는 이중화하고 따옴표로 묶이지 않은 빈 field는 그대로 유지합니다(ClickHouse는 이를 Nullable 컬럼의 NULL로 매핑합니다).
원본 CSV로 테이블을 빌드하려면:
- 테이블을 생성하십시오(위 참고).
- Join Order Benchmark 리포지토리의 지침에 따라 IMDb 데이터 집합을
imdb.tgzfile로 다운로드하십시오. - 데이터를 변환하고 가져오십시오:
clickhouse client --database job --query "SELECT * FROM title ORDER BY id FORMAT Parquet" > title.parquet.
상세 테이블 크기:
| Table | 크기(행 수) | 크기(ClickHouse에서 압축됨) |
|---|---|---|
| aka_name | 901,343 | 31.86 MiB |
| aka_title | 361,472 | 14.32 MiB |
| cast_info | 36,244,344 | 296.25 MiB |
| char_name | 3,140,339 | 107.95 MiB |
| comp_cast_type | 4 | 132.00 B |
| company_name | 234,997 | 8.38 MiB |
| company_type | 4 | 162.00 B |
| complete_cast | 135,086 | 748.80 KiB |
| info_type | 113 | 1.25 KiB |
| keyword | 134,170 | 1.88 MiB |
| kind_type | 7 | 177.00 B |
| link_type | 18 | 284.00 B |
| movie_companies | 2,609,129 | 21.20 MiB |
| movie_info | 14,835,720 | 300.46 MiB |
| movie_info_idx | 1,380,035 | 8.01 MiB |
| movie_keyword | 4,523,930 | 21.06 MiB |
| movie_link | 29,997 | 178.21 KiB |
| name | 4,167,491 | 131.16 MiB |
| person_info | 2,963,664 | 154.12 MiB |
| role_type | 12 | 246.00 B |
| title | 2,528,312 | 78.04 MiB |
| 합계 | 74,190,187 | 1.15 GiB |
system.tables.total_bytes에서 가져온 값이며, 위 테이블 정의를 기준으로 합니다.)
쿼리
settings.json에 있습니다.
알려진 문제와 특정 쿼리에 관한 참고 사항은 README를 참조하십시오.
쿼리는 테이블 이름을 직접 참조하므로 job 데이터베이스에서 실행하십시오(예: clickhouse client --database job).
예시 쿼리(1a):