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

说在前面

事务处理性能委员会( Transaction Processing Performance Council )。TPC-H是什么,请自行了解,官网链接:http://www.tpc.org/

点击这里直达:

因为课内数据库实验需要用到TPC-H的数据库模式,所以抽时间学习了一下,但是网上很多教程如出一辙,且基本是linux系统下TPC-H与MySQL的数据库建立,不然就是windows下SQL server 与 TPC-H的说法,反正没找到 windows下 TPC-H与MySQL的数据生成与导入MySQL数据库的教程,因此自行探索了一番之后,集百家之长写下这篇粗糙的笔记,希望对后来者学习TPC-H和MySQL有一定的帮助。

直达主题

1. 先到官网下载,或者直接到网盘拿取

点击这里直达咯

或者这里的链接:http://pan.baidu.com/s/1qXSqRZA 密码:hb4o

我用的版本是这个,链接:http://pan.baidu.com/s/1c1Xzc7Q 密码:r7f8

下载压缩包后解压到自己指定的路径,建议在非系统盘,如我是在D盘下新建文件夹tcph(在D盘根目录下比较方便),文件夹内容应该是这样的。

注意:这里的Debug文件是后续步骤完成后才有的。

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

接下来做什么呢?

在dbgen目录下找到这个tpch.sln文件,用Microsoft Visual Studio打开,用VS打开的好处是一旦打开就会自动完成“文件转换”。

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

打开之后,在VS上这样操作。

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

VS提示OK!

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

好了,现在回到刚才的dbgen目录就会看到Debug文件夹了。

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

打开命令行,win-键 +X (最好是管理员模式)

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

到这里发现,进入Debug目录执行dbgen.exe出错了(可能是程序的定位出错了,我也还没搞懂了,这就仰仗前辈经验了),将dbgen.exe往上一级目录复制。

这里写图片描述

执行 dbgen.exe -h 查看命令格式。

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

根据自己的需要下载相关表格,这里选择全部。

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

等几分钟咯~~~

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

OK!

到这里就可以去dbgen目录下看看是否有8个table数据文件存在了。到这里数据生成就完成了。

建立TPC-H数据库模式

在这里我要推荐一下workbench,来作为mysql数据库的管理工具,因为数据太庞大,cmd窗口查询会跑虚脱的。至于什么的workbench及其下载安装和使用,则不关我的事儿了~

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

到dbgen目录下查看这两个文件。

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

dss.ddl是数据库teble的创建文件,dss.ri是table外键约束生成文件。

dss.ddl的内容。这个在mysql可以直接使用,创建数据库TCPD之后就可以执行脚本.ddl,如果.ddl不被支持,可以转换成.sql脚本文件。(建议用sublimeTxtd打开文件)

-- Sccsid:     @(#)dss.ddl  2.1.8.1
CREATE TABLE NATION  ( N_NATIONKEY  INTEGER NOT NULL,
                            N_NAME       CHAR(25) NOT NULL,
                            N_REGIONKEY  INTEGER NOT NULL,
                            N_COMMENT    VARCHAR(152));

CREATE TABLE REGION  ( R_REGIONKEY  INTEGER NOT NULL,
                            R_NAME       CHAR(25) NOT NULL,
                            R_COMMENT    VARCHAR(152));

CREATE TABLE PART  ( P_PARTKEY     INTEGER NOT NULL,
                          P_NAME        VARCHAR(55) NOT NULL,
                          P_MFGR        CHAR(25) NOT NULL,
                          P_BRAND       CHAR(10) NOT NULL,
                          P_TYPE        VARCHAR(25) NOT NULL,
                          P_SIZE        INTEGER NOT NULL,
                          P_CONTAINER   CHAR(10) NOT NULL,
                          P_RETAILPRICE DECIMAL(15,2) NOT NULL,
                          P_COMMENT     VARCHAR(23) NOT NULL );

CREATE TABLE SUPPLIER ( S_SUPPKEY     INTEGER NOT NULL,
                             S_NAME        CHAR(25) NOT NULL,
                             S_ADDRESS     VARCHAR(40) NOT NULL,
                             S_NATIONKEY   INTEGER NOT NULL,
                             S_PHONE       CHAR(15) NOT NULL,
                             S_ACCTBAL     DECIMAL(15,2) NOT NULL,
                             S_COMMENT     VARCHAR(101) NOT NULL);

CREATE TABLE PARTSUPP ( PS_PARTKEY     INTEGER NOT NULL,
                             PS_SUPPKEY     INTEGER NOT NULL,
                             PS_AVAILQTY    INTEGER NOT NULL,
                             PS_SUPPLYCOST  DECIMAL(15,2)  NOT NULL,
                             PS_COMMENT     VARCHAR(199) NOT NULL );

CREATE TABLE CUSTOMER ( C_CUSTKEY     INTEGER NOT NULL,
                             C_NAME        VARCHAR(25) NOT NULL,
                             C_ADDRESS     VARCHAR(40) NOT NULL,
                             C_NATIONKEY   INTEGER NOT NULL,
                             C_PHONE       CHAR(15) NOT NULL,
                             C_ACCTBAL     DECIMAL(15,2)   NOT NULL,
                             C_MKTSEGMENT  CHAR(10) NOT NULL,
                             C_COMMENT     VARCHAR(117) NOT NULL);

CREATE TABLE ORDERS  ( O_ORDERKEY       INTEGER NOT NULL,
                           O_CUSTKEY        INTEGER NOT NULL,
                           O_ORDERSTATUS    CHAR(1) NOT NULL,
                           O_TOTALPRICE     DECIMAL(15,2) NOT NULL,
                           O_ORDERDATE      DATE NOT NULL,
                           O_ORDERPRIORITY  CHAR(15) NOT NULL,  
                           O_CLERK          CHAR(15) NOT NULL, 
                           O_SHIPPRIORITY   INTEGER NOT NULL,
                           O_COMMENT        VARCHAR(79) NOT NULL);

CREATE TABLE LINEITEM ( L_ORDERKEY    INTEGER NOT NULL,
                             L_PARTKEY     INTEGER NOT NULL,
                             L_SUPPKEY     INTEGER NOT NULL,
                             L_LINENUMBER  INTEGER NOT NULL,
                             L_QUANTITY    DECIMAL(15,2) NOT NULL,
                             L_EXTENDEDPRICE  DECIMAL(15,2) NOT NULL,
                             L_DISCOUNT    DECIMAL(15,2) NOT NULL,
                             L_TAX         DECIMAL(15,2) NOT NULL,
                             L_RETURNFLAG  CHAR(1) NOT NULL,
                             L_LINESTATUS  CHAR(1) NOT NULL,
                             L_SHIPDATE    DATE NOT NULL,
                             L_COMMITDATE  DATE NOT NULL,
                             L_RECEIPTDATE DATE NOT NULL,
                             L_SHIPINSTRUCT CHAR(25) NOT NULL,
                             L_SHIPMODE     CHAR(10) NOT NULL,
                             L_COMMENT      VARCHAR(44) NOT NULL);

下面我们需要修改dss.ri文件,因为其中的外键约束及部分语法不符合mysql的要求。
修改完之后的内容是这样的,请自己校对。

-- Sccsid:     @(#)dss.ri   2.1.8.1
-- TPCD Benchmark Version 8.0

use TPCD;

-- ALTER TABLE TPCD.REGION DROP PRIMARY KEY;
-- ALTER TABLE TPCD.NATION DROP PRIMARY KEY;
-- ALTER TABLE TPCD.PART DROP PRIMARY KEY;
-- ALTER TABLE TPCD.SUPPLIER DROP PRIMARY KEY;
-- ALTER TABLE TPCD.PARTSUPP DROP PRIMARY KEY;
-- ALTER TABLE TPCD.ORDERS DROP PRIMARY KEY;
-- ALTER TABLE TPCD.LINEITEM DROP PRIMARY KEY;
-- ALTER TABLE TPCD.CUSTOMER DROP PRIMARY KEY;


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

-- For table NATION
ALTER TABLE TPCD.NATION
ADD PRIMARY KEY (N_NATIONKEY);

ALTER TABLE TPCD.NATION
ADD FOREIGN KEY NATION_FK1 (N_REGIONKEY) references TPCD.REGION;

COMMIT WORK;

-- For table PART
ALTER TABLE TPCD.PART
ADD PRIMARY KEY (P_PARTKEY);

COMMIT WORK;

-- For table SUPPLIER
ALTER TABLE TPCD.SUPPLIER
ADD PRIMARY KEY (S_SUPPKEY);

ALTER TABLE TPCD.SUPPLIER
ADD FOREIGN KEY SUPPLIER_FK1 (S_NATIONKEY) references TPCD.NATION;

COMMIT WORK;

-- For table PARTSUPP
ALTER TABLE TPCD.PARTSUPP
ADD PRIMARY KEY (PS_PARTKEY,PS_SUPPKEY);

COMMIT WORK;

-- For table CUSTOMER
ALTER TABLE TPCD.CUSTOMER
ADD PRIMARY KEY (C_CUSTKEY);

ALTER TABLE TPCD.CUSTOMER
ADD FOREIGN KEY CUSTOMER_FK1 (C_NATIONKEY) references TPCD.NATION;

COMMIT WORK;

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

COMMIT WORK;

-- For table ORDERS
ALTER TABLE TPCD.ORDERS
ADD PRIMARY KEY (O_ORDERKEY);

COMMIT WORK;

-- For table PARTSUPP
ALTER TABLE TPCD.PARTSUPP
ADD FOREIGN KEY PARTSUPP_FK1 (PS_SUPPKEY) references TPCD.SUPPLIER;

COMMIT WORK;

ALTER TABLE TPCD.PARTSUPP
ADD FOREIGN KEY PARTSUPP_FK2 (PS_PARTKEY) references TPCD.PART;

COMMIT WORK;

-- For table ORDERS
ALTER TABLE TPCD.ORDERS
ADD FOREIGN KEY ORDERS_FK1 (O_CUSTKEY) references TPCD.CUSTOMER;

COMMIT WORK;

-- For table LINEITEM
ALTER TABLE TPCD.LINEITEM
ADD FOREIGN KEY LINEITEM_FK1 (L_ORDERKEY)  references TPCD.ORDERS;

COMMIT WORK;

ALTER TABLE TPCD.LINEITEM
ADD FOREIGN KEY LINEITEM_FK2 (L_PARTKEY,L_SUPPKEY) references 
        TPCD.PARTSUPP;

COMMIT WORK;

注意: ” – “* 后面是有空格的!*

两个脚本先后执行,就可以建立其TCP-H的数据库模式了。

数据导入MySQL

一步到位!创立loaddata.sql脚本文件,进入数据库下执行即可!
脚本如下:

LOAD DATA LOCAL INFILE 'D:/tcph/tpch_2_14_3/dbgen/customer.tbl' INTO TABLE CUSTOMER FIELDS TERMINATED BY '|'  LINES TERMINATED BY '\r\n';
LOAD DATA LOCAL INFILE 'D:/tcph/tpch_2_14_3/dbgen/orders.tbl'   INTO TABLE ORDERS   FIELDS TERMINATED BY '|'  LINES TERMINATED BY '\r\n';
LOAD DATA LOCAL INFILE 'D:/tcph/tpch_2_14_3/dbgen/lineitem.tbl' INTO TABLE LINEITEM FIELDS TERMINATED BY '|'  LINES TERMINATED BY '\r\n';
LOAD DATA LOCAL INFILE 'D:/tcph/tpch_2_14_3/dbgen/nation.tbl'   INTO TABLE NATION   FIELDS TERMINATED BY '|'  LINES TERMINATED BY '\r\n';
LOAD DATA LOCAL INFILE 'D:/tcph/tpch_2_14_3/dbgen/partsupp.tbl' INTO TABLE PARTSUPP FIELDS TERMINATED BY '|'  LINES TERMINATED BY '\r\n';
LOAD DATA LOCAL NFILE 'D:/tcph/tpch_2_14_3/dbgen/part.tbl'     INTO TABLE PART     FIELDS TERMINATED BY '|'   LINES TERMINATED BY '\r\n';
LOAD DATA LOCAL INFILE 'D:/tcph/tpch_2_14_3/dbgen/region.tbl'   INTO TABLE REGION   FIELDS TERMINATED BY '|'  LINES TERMINATED BY '\r\n';
LOAD DATA LOCAL INFILE 'D:/tcph/tpch_2_14_3/dbgen/supplier.tbl' INTO TABLE SUPPLIER FIELDS TERMINATED BY '|'  LINES TERMINATED BY '\r\n';

‘D:/tcph/tpch_2_14_3/dbgen/region.tbl’是我的table的路径,根据自己的路径修改咯~

中间会有几分钟,甚至几十分钟的间隔!看个人电脑,反正我是20几分钟了。
只有打开workbench就可以看到了~如果你想在cmd看的话,最好在SELECT语句中限制记录的数目,不然准得跑得虚脱!

SELECT * FROM CUSTOMER LIMITS 200 //限为前200条

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

至此,windows下在MySQL建立TCP-H数据库模式及其数据导入就大功告成了~

如有错误,请不吝赐教!

你可能感兴趣的:(MySQL)