├── .gitignore ├── .gitmodules ├── .travis.yml ├── Makefile ├── create_db.sh ├── LICENSE ├── README.md └── sqlite-ddl.sql /.gitignore: -------------------------------------------------------------------------------- 1 | TPC-H.db 2 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "tpch-dbgen"] 2 | path = tpch-dbgen 3 | url = https://github.com/lovasoa/tpch-dbgen.git 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: c 2 | compiler: 3 | - clang 4 | - gcc 5 | script: make 6 | os: 7 | - linux 8 | - osx 9 | addons: 10 | apt: 11 | packages: 12 | - sqlite3 13 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | SCALE_FACTOR?=1 2 | TABLES = customer lineitem nation orders partsupp part region supplier 3 | TABLE_FILES = $(foreach table, $(TABLES), tpch-dbgen/$(table).tbl) 4 | 5 | TPC-H.db: $(TABLE_FILES) 6 | ./create_db.sh $(TABLES) 7 | 8 | $(TABLE_FILES): tpch-dbgen/dbgen 9 | cd tpch-dbgen && ./dbgen -v -f -s $(SCALE_FACTOR) 10 | chmod +r $(TABLE_FILES) 11 | 12 | tpch-dbgen/dbgen: tpch-dbgen/makefile 13 | cd tpch-dbgen && $(MAKE) 14 | 15 | clean: 16 | rm -rf TPC-H.db $(TABLE_FILES) tpch-dbgen/dbgen 17 | 18 | all: TPC-H.db 19 | -------------------------------------------------------------------------------- /create_db.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | TABLES=$@ 4 | db="TPC-H.db" 5 | 6 | if [ -z "$TABLES" ]; then 7 | echo "Error! No table specified." >&2 8 | echo "Usage: $0 [TABLE_NAME] [TABLE_NAME]..." >&2 9 | exit 1 10 | fi 11 | 12 | rm -f "$db" 13 | 14 | echo "Creating the database structure..." >&2 15 | sqlite3 "$db" < sqlite-ddl.sql 16 | 17 | RET_CODE=0 18 | for table in $TABLES; do 19 | echo "Importing table '$table'..." >&2 20 | data_file="tpch-dbgen/$table.tbl" 21 | if [ ! -e "$data_file" ]; then 22 | echo "'$data_file' does’nt exist. Skipping..." >&2 23 | RET_CODE=1 24 | continue 25 | fi 26 | 27 | fifo=$(mktemp -u) 28 | mkfifo $fifo 29 | sed -e 's/|$//' < "$data_file" > "$fifo" & 30 | ( 31 | echo ".mode csv"; 32 | echo ".separator |"; 33 | echo -n ".import $fifo "; 34 | echo $table | tr a-z A-Z; 35 | ) | sqlite3 "$db" 36 | rm $fifo 37 | 38 | if [ $? != 0 ]; then 39 | echo "Import failed." >&2 40 | RET_CODE=1 41 | fi 42 | done 43 | 44 | exit $RET_CODE 45 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Ophir LOJKINE 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TPCH-sqlite [![Build Status](https://travis-ci.org/lovasoa/TPCH-sqlite.svg?branch=master)](https://travis-ci.org/lovasoa/TPCH-sqlite) 2 | 3 | This is a small shell script that generates an SQLite3 database following the [TPC-H standard](http://www.tpc.org/tpch/). 4 | It uses the official [tpch-dbgen](https://github.com/electrum/tpch-dbgen) tool to generate the data, and then imports it into an sqlite database. 5 | 6 | ## Download the database 7 | 8 | If you don’t want to generate the database yourself, you can download it from the **realeases** section of this github repo. 9 | 10 | * [TPC-H.db](https://github.com/lovasoa/TPCH-sqlite/releases/download/v1.0/TPC-H.db). This is a conforming TPC-H database with a scale factor of 1. The database file size is **1.17 GB**. 11 | * [TPC-H-small.db](https://github.com/lovasoa/TPCH-sqlite/releases/download/v1.0/TPC-H-small.db). This database does not conform to the standard, as it has a scale factor of 0.01, but it is much smaller: **11.6 MB**. 12 | 13 | 14 | ## How to use 15 | 16 | Clone this repository and its submodule. Then just run `make` from the root directory of this repo. Be sure to have `sqlite3` and a C compiler installed. 17 | 18 | ``` 19 | git clone --recursive git@github.com:lovasoa/TPCH-sqlite.git 20 | cd TPCH-sqlite 21 | make 22 | ``` 23 | 24 | This generates an SQLite3 database under the name `TPC-H.db`. 25 | 26 | ### How to set a custom scale factor 27 | 28 | By default, the database is generated with a scale factor of 1. You can set a different *scale factor* (**SF**) with 29 | 30 | ``` 31 | SCALE_FACTOR=10 make 32 | ``` 33 | -------------------------------------------------------------------------------- /sqlite-ddl.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE NATION ( 2 | N_NATIONKEY INTEGER PRIMARY KEY NOT NULL, 3 | N_NAME TEXT NOT NULL, 4 | N_REGIONKEY INTEGER NOT NULL, 5 | N_COMMENT TEXT, 6 | FOREIGN KEY (N_REGIONKEY) REFERENCES REGION(R_REGIONKEY) 7 | ); 8 | 9 | CREATE TABLE REGION ( 10 | R_REGIONKEY INTEGER PRIMARY KEY NOT NULL, 11 | R_NAME TEXT NOT NULL, 12 | R_COMMENT TEXT 13 | ); 14 | 15 | CREATE TABLE PART ( 16 | P_PARTKEY INTEGER PRIMARY KEY NOT NULL, 17 | P_NAME TEXT NOT NULL, 18 | P_MFGR TEXT NOT NULL, 19 | P_BRAND TEXT NOT NULL, 20 | P_TYPE TEXT NOT NULL, 21 | P_SIZE INTEGER NOT NULL, 22 | P_CONTAINER TEXT NOT NULL, 23 | P_RETAILPRICE INTEGER NOT NULL, 24 | P_COMMENT TEXT NOT NULL 25 | ); 26 | 27 | CREATE TABLE SUPPLIER ( 28 | S_SUPPKEY INTEGER PRIMARY KEY NOT NULL, 29 | S_NAME TEXT NOT NULL, 30 | S_ADDRESS TEXT NOT NULL, 31 | S_NATIONKEY INTEGER NOT NULL, 32 | S_PHONE TEXT NOT NULL, 33 | S_ACCTBAL INTEGER NOT NULL, 34 | S_COMMENT TEXT NOT NULL, 35 | FOREIGN KEY (S_NATIONKEY) REFERENCES NATION(N_NATIONKEY) 36 | ); 37 | 38 | CREATE TABLE PARTSUPP ( 39 | PS_PARTKEY INTEGER NOT NULL, 40 | PS_SUPPKEY INTEGER NOT NULL, 41 | PS_AVAILQTY INTEGER NOT NULL, 42 | PS_SUPPLYCOST INTEGER NOT NULL, 43 | PS_COMMENT TEXT NOT NULL, 44 | PRIMARY KEY (PS_PARTKEY, PS_SUPPKEY), 45 | FOREIGN KEY (PS_SUPPKEY) REFERENCES SUPPLIER(S_SUPPKEY), 46 | FOREIGN KEY (PS_PARTKEY) REFERENCES PART(P_PARTKEY) 47 | ); 48 | 49 | CREATE TABLE CUSTOMER ( 50 | C_CUSTKEY INTEGER PRIMARY KEY NOT NULL, 51 | C_NAME TEXT NOT NULL, 52 | C_ADDRESS TEXT NOT NULL, 53 | C_NATIONKEY INTEGER NOT NULL, 54 | C_PHONE TEXT NOT NULL, 55 | C_ACCTBAL INTEGER NOT NULL, 56 | C_MKTSEGMENT TEXT NOT NULL, 57 | C_COMMENT TEXT NOT NULL, 58 | FOREIGN KEY (C_NATIONKEY) REFERENCES NATION(N_NATIONKEY) 59 | ); 60 | 61 | CREATE TABLE ORDERS ( 62 | O_ORDERKEY INTEGER PRIMARY KEY NOT NULL, 63 | O_CUSTKEY INTEGER NOT NULL, 64 | O_ORDERSTATUS TEXT NOT NULL, 65 | O_TOTALPRICE INTEGER NOT NULL, 66 | O_ORDERDATE DATE NOT NULL, 67 | O_ORDERPRIORITY TEXT NOT NULL, 68 | O_CLERK TEXT NOT NULL, 69 | O_SHIPPRIORITY INTEGER NOT NULL, 70 | O_COMMENT TEXT NOT NULL, 71 | FOREIGN KEY (O_CUSTKEY) REFERENCES CUSTOMER(C_CUSTKEY) 72 | ); 73 | 74 | CREATE TABLE LINEITEM ( 75 | L_ORDERKEY INTEGER NOT NULL, 76 | L_PARTKEY INTEGER NOT NULL, 77 | L_SUPPKEY INTEGER NOT NULL, 78 | L_LINENUMBER INTEGER NOT NULL, 79 | L_QUANTITY INTEGER NOT NULL, 80 | L_EXTENDEDPRICE INTEGER NOT NULL, 81 | L_DISCOUNT INTEGER NOT NULL, 82 | L_TAX INTEGER NOT NULL, 83 | L_RETURNFLAG TEXT NOT NULL, 84 | L_LINESTATUS TEXT NOT NULL, 85 | L_SHIPDATE DATE NOT NULL, 86 | L_COMMITDATE DATE NOT NULL, 87 | L_RECEIPTDATE DATE NOT NULL, 88 | L_SHIPINSTRUCT TEXT NOT NULL, 89 | L_SHIPMODE TEXT NOT NULL, 90 | L_COMMENT TEXT NOT NULL, 91 | PRIMARY KEY (L_ORDERKEY, L_LINENUMBER), 92 | FOREIGN KEY (L_ORDERKEY) REFERENCES ORDERS(O_ORDERKEY), 93 | FOREIGN KEY (L_PARTKEY, L_SUPPKEY) REFERENCES PARTSUPP(PS_PARTKEY, PS_SUPPKEY) 94 | ); 95 | --------------------------------------------------------------------------------