您的位置:首页 > 数据库 > SQL

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

2017-04-02 18:18 796 查看

说在前面

事务处理性能委员会( 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文件是后续步骤完成后才有的。



接下来做什么呢?

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



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



VS提示OK!



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



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



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



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



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



等几分钟咯~~~



OK!

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

建立TPC-H数据库模式

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



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



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下在MySQL建立TCP-H数据库模式及其数据导入就大功告成了~

如有错误,请不吝赐教!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: