事务处理性能委员会( 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数据文件存在了。到这里数据生成就完成了。
在这里我要推荐一下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的数据库模式了。
一步到位!创立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数据库模式及其数据导入就大功告成了~