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数据库模式及其数据导入就大功告成了~
如有错误,请不吝赐教!
相关文章推荐
- Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)
- TPC-H数据导入MySQL教程
- mysql在linux和windows下导入和导出数据库、数据表总结
- TPC-H数据导入MySQL教程
- SQLServer2005数据导入Mysql到详细教程(测试)
- 随笔记录 MYSQL 数据库操作数据表崩溃
- MySQL数据的导出和导入工具:mysqldump(备份数据库的命令) (转)
- MySQL数据的导出和导入工具:mysqldump(备份数据库的命令)
- 【转载】如何把Mysql5.5数据库的数据导入到MSSql 数据库中【mysql-connector-odbc-3.51.28-win32】
- MySQL和MSSQl使用While 语句循环生成测试数据
- 如何将txt的数据导入到mysql下的某一数据库的某一表中
- mysql 动态生成测试数据
- MySQL数据的导出和导入工具:mysqldump(备份数据库的命令)
- MySQL语句删除数据库重复记录数据行
- PowerDesigner逆向导入数据库,生成数据字典
- mysql 动态生成测试数据
- ORACLE 数据库的统计数据及其生成方式
- 数据库测试数据自动生成工具
- TPC-W自动生成数据库数据
- 使用PowerDesigner生成数据库测试数据