TPC-H数据集使用说明

TPCH数据使用说明

表模式:

image-20241125204724234

TPCH官网链接:TPC-H Homepage

同学们可以自行下载TPCH-tools自行生成数据(10GB),下面主要是以mysql为例说明TPC-H的使用方法。

供同学自行参考:

windows :TPC-H测试的数据库模式生成及其数据导入MySQL的教程记录

postgresql使用(一):TPC-H tools生成数据集并导入至postgre的数据库_tpch-tools

生成好的10GB的TPC-H数据:https://www.alipan.com/s/Ttu3gGjrHDc

其实只要生成好数据文件,通过数据库自带的load或者copy命令导入就可以了;如果想手动导入可以首先通过dss.ddl 和 dss.ri里面的语句进行表的创建和约束的创建,然后使用load/copy导入数据即可

以下教程适用于Linux系统下MySQL数据库导入TPC-H数据。

如果是windows下的kingbase系统,请参考5.Kingbase导入TPC-H数据

1. 下载和修改

将下载得到的安装包上传到服务器上,重命名后解压:

unzip tpc-h.zip

后续大部分的 修改、编译、执行等操作都在tpc-h/dbgen 目录下完成

cd mysql-tpc-h/dbgen

1.1 修改makefile文件

该文件约束了 编译 后可执行文件的部分条件以及需要的依赖。

cp makefile.suite makefile
vim makefile


# 修改 103 109 110 111 这四行的内容 
CC = gcc 
# Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
#                                  SQLSERVER, SYBASE, ORACLE, VECTORWISE
# Current values for MACHINE are:  ATT, DOS, HP, IBM, ICL, MVS, 
#                                  SGI, SUN, U2200, VMS, LINUX, WIN32 
# Current values for WORKLOAD are:  TPCH
# 如果你是MySQL数据库
DATABASE= MYSQL
MACHINE = LINUX
WORKLOAD = TPCH

# 如果你是PG数据库
DATABASE= POSTGRESQL
MACHINE = LINUX
WORKLOAD = TPCH

后续都以mysql为例进行说明,如果你是postgres,可以参考postgresql使用(一):TPC-H tools生成数据集并导入至postgre的数据库_tpch-tools

或者其他数据库,可以自行寻找相关资料。

1.2 修改tpc-d.h文件

// MySQL
#ifdef MYSQL
#define GEN_QUERY_PLAN ""
#define START_TRAN "START TRANSACTION"
#define END_TRAN "COMMIT"
#define SET_OUTPUT ""
#define SET_ROWCOUNT "limit %d;\n"
#define SET_DBASE "use %s;\n"
#endif

// PG 
#ifdef POSTGRESQL
#define GEN_QUERY_PLAN "EXPLAIN"
#define START_TRAN "BEGIN TRANSACTION"
#define END_TRAN "COMMIT"
#define SET_OUTPUT ""
#define SET_ROWCOUNT "LIMIT %d\n"
#define SET_DBASE ""
#endif

1.3 编译

在dbgen目录下进行编译,可能需要安装gcc-c++

make
# 或者
make -f makefile.suite

2. TPC-H 数据的生成、导入及查询生成

2.1 生成 <table>.tbl 数据文件

可以使用 ./dbgen -h 命令查看,也可以查看 README 中对 dbgen 的相关介绍。

img

使用命令生成符合基准的8张表与相应的数据。由介绍可知, -s 后面是数据量的大小,若为 10 则生成 10GB 数据,若为100则生成100GB的数据。

-V :显示进度消息

-f :覆盖原始数据

-s : 生成数据的总体规模

# 生成数据
./dbgen -vf -s 10
# 查看生成的数据 应该是8张表的数据
ls *.tbl

2.2 导入构建脚本文件

编译之后有dss.ddldss.ri两个脚本,dss.ddl是建表脚本,dss.ri脚本是建立主键外键关联关系。

因为TPC-H benchmark本身不支持MySQL;并且由于MySQL的表名、库名等默认都是严格区分大小写的,而 dss.ddl(建表脚本)与 dss.ri(表约束脚本)中使用的都是大写的数据库名与表名,但是提供的 22 条查询语句又使用的小写的表名。所以需要先修改这两个脚本。

修改 dss.ddl

在文件开头添加以下语句:

DROP DATABASE IF EXISTS tpch;
CREATE DATABASE tpch;
USE tpch;
修改 dss.ri
-- Sccsid: @(#)dss.ri 2.1.8.1
-- tpch Benchmark Version 8.0

-- CONNECT TO tpch;
USE tpch;

-- ALTER TABLES TO DROP PRIMARY KEYS
-- ALTER TABLE tpch.REGION DROP PRIMARY KEY;
-- ALTER TABLE tpch.NATION DROP PRIMARY KEY;
-- ALTER TABLE tpch.PART DROP PRIMARY KEY;
-- ALTER TABLE tpch.SUPPLIER DROP PRIMARY KEY;
-- ALTER TABLE tpch.PARTSUPP DROP PRIMARY KEY;
-- ALTER TABLE tpch.ORDERS DROP PRIMARY KEY;
-- ALTER TABLE tpch.LINEITEM DROP PRIMARY KEY;
-- ALTER TABLE tpch.CUSTOMER DROP PRIMARY KEY;

-- For table REGION
ALTER TABLE tpch.REGION ADD PRIMARY KEY (R_REGIONKEY);

-- For table NATION
ALTER TABLE tpch.NATION ADD PRIMARY KEY (N_NATIONKEY);
ALTER TABLE tpch.NATION
    -- ADD FOREIGN KEY NATION_FK1 (N_REGIONKEY) references tpch.REGION;
    ADD FOREIGN KEY NATION_FK1 (N_REGIONKEY) REFERENCES tpch.REGION (R_REGIONKEY);
COMMIT WORK;

-- For table PART
ALTER TABLE tpch.PART ADD PRIMARY KEY (P_partKEY);
COMMIT WORK;

-- For table SUPPLIER
ALTER TABLE tpch.SUPPLIER ADD PRIMARY KEY (S_SUPPKEY);
ALTER TABLE tpch.SUPPLIER ADD FOREIGN KEY supplier_FK1 (S_NATIONKEY) REFERENCES tpch.NATION (N_NATIONKEY);
COMMIT WORK;

-- For table PARTSUPP
ALTER TABLE tpch.PARTSUPP ADD PRIMARY KEY (PS_partKEY, PS_SUPPKEY);
COMMIT WORK;

-- For table CUSTOMER
ALTER TABLE tpch.CUSTOMER ADD PRIMARY KEY (C_CUSTKEY);
ALTER TABLE tpch.CUSTOMER ADD FOREIGN KEY customer_FK1 (C_NATIONKEY) REFERENCES tpch.NATION (N_NATIONKEY);
COMMIT WORK;

-- For table LINEITEM
ALTER TABLE tpch.LINEITEM ADD PRIMARY KEY (L_ORDERKEY, L_LINENUMBER);
COMMIT WORK;

-- For table ORDERS
ALTER TABLE tpch.ORDERS ADD PRIMARY KEY (O_ORDERKEY);
COMMIT WORK;

-- For table PARTSUPP FOREIGN KEYS
ALTER TABLE tpch.PARTSUPP ADD FOREIGN KEY partSUPP_FK1 (PS_SUPPKEY) REFERENCES tpch.SUPPLIER (S_SUPPKEY);
COMMIT WORK;
ALTER TABLE tpch.PARTSUPP ADD FOREIGN KEY partSUPP_FK2 (PS_partKEY) REFERENCES tpch.PART (P_partKEY);
COMMIT WORK;

-- For table ORDERS FOREIGN KEYS
ALTER TABLE tpch.ORDERS ADD FOREIGN KEY orders_FK1 (O_CUSTKEY) REFERENCES tpch.CUSTOMER (C_CUSTKEY);
COMMIT WOR
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tototototorres

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值