博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Linux下将TPC-H数据导入到MySQL
阅读量:5161 次
发布时间:2019-06-13

本文共 9736 字,大约阅读时间需要 32 分钟。

一、下载TPC-H

下载地址: 。从这个页面中找到tpc-h,我下载的版本是v2.17.3。下载后会得到一个名为*-tpc-h-tool.zip的压缩包,使用unzip命令将压缩包解压并将解压后的文件夹重命名为tpch_2_17_3, 文件夹tpch_2_7_13结构如下图所示:

操作主要在文件夹dbgen下进行。

二、修改makefile.suite

执行以下命令(注意当前的工作目录):

hadoop@sench-PC:~/Downloads/tpch_2_17_3/dbgen$ cp makefile.suite makefilehadoop@sench-PC:~/Downloads/tpch_2_17_3/dbgen$ vi makefile

将makefile的第100行到第111行修改为如下代码:

################## CHANGE NAME OF ANSI COMPILER HERE################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:  TPCHDATABASE= MYSQLMACHINE = LINUXWORKLOAD = TPCH

修改的地方为:将编译器设置为gcc,将WORKLOAD设为TPCH,以及给DATABASE、MACHINE、WORKLOAD赋值。

三、修改文件tpcd.h

在文件tpcd.h开头添加以下代码:

#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

四、生成dbgen

执行以下命令:

hadoop@sench-PC:~/Downloads/tpch_2_17_3/dbgen$ make

执行完成后会在dbgen目录下发现一个可执行文件dbgen

五、生成.tbl数据文件

这一步要使用上一步生成的dbgen来生成数据,这些数据存储在8个表中(.tbl),执行以下命令:

hadoop@sench-PC:~/Downloads/tpch_2_17_3/dbgen$ ./dbgen -s 1

 -s -1表示生成1G的数据 (如果你之前曾经尝试过生成数据,最好先make clean,再重新make,接着到这步加上-f覆盖掉)。完成后我们使用 ls *.tbl 可以看到产生了8个tbl文件:

hadoop@sench-PC:~/Downloads/tpch_2_17_3/dbgen$ ls *.tblcustomer.tbl  nation.tbl  partsupp.tbl  region.tbllineitem.tbl  orders.tbl  part.tbl      supplier.tbl

查看.tbl文件可以看到文件中的数据以‘|’隔开(类似于csv)。

六、修改初始化脚本

tpch提供了两个脚本dss.ddl (DSS库初始化DDL脚本)和dss.ri (DSS数据表创建索引、外键脚本),这两个脚本不适用于MySQL,需要进行修改。

1、修改dss.ddl

在dss.ddl开头加上以下代码:

drop database tpch;create database tpch;use tpch;

修改后的dss.ddl如下:

1 -- Sccsid:     @(#)dss.ddl    2.1.8.1 2 drop database tpch; 3 create database tpch; 4 use tpch; 5  6 CREATE TABLE NATION  ( N_NATIONKEY  INTEGER NOT NULL, 7                             N_NAME       CHAR(25) NOT NULL, 8                             N_REGIONKEY  INTEGER NOT NULL, 9                             N_COMMENT    VARCHAR(152));10 11 CREATE TABLE REGION  ( R_REGIONKEY  INTEGER NOT NULL,12                             R_NAME       CHAR(25) NOT NULL,13                             R_COMMENT    VARCHAR(152));14 15 CREATE TABLE PART  ( P_PARTKEY     INTEGER NOT NULL,16                           P_NAME        VARCHAR(55) NOT NULL,17                           P_MFGR        CHAR(25) NOT NULL,18                           P_BRAND       CHAR(10) NOT NULL,19                           P_TYPE        VARCHAR(25) NOT NULL,20                           P_SIZE        INTEGER NOT NULL,21                           P_CONTAINER   CHAR(10) NOT NULL,22                           P_RETAILPRICE DECIMAL(15,2) NOT NULL,23                           P_COMMENT     VARCHAR(23) NOT NULL );24 25 CREATE TABLE SUPPLIER ( S_SUPPKEY     INTEGER NOT NULL,26                              S_NAME        CHAR(25) NOT NULL,27                              S_ADDRESS     VARCHAR(40) NOT NULL,28                              S_NATIONKEY   INTEGER NOT NULL,29                              S_PHONE       CHAR(15) NOT NULL,30                              S_ACCTBAL     DECIMAL(15,2) NOT NULL,31                              S_COMMENT     VARCHAR(101) NOT NULL);32 33 CREATE TABLE PARTSUPP ( PS_PARTKEY     INTEGER NOT NULL,34                              PS_SUPPKEY     INTEGER NOT NULL,35                              PS_AVAILQTY    INTEGER NOT NULL,36                              PS_SUPPLYCOST  DECIMAL(15,2)  NOT NULL,37                              PS_COMMENT     VARCHAR(199) NOT NULL );38 39 CREATE TABLE CUSTOMER ( C_CUSTKEY     INTEGER NOT NULL,40                              C_NAME        VARCHAR(25) NOT NULL,41                              C_ADDRESS     VARCHAR(40) NOT NULL,42                              C_NATIONKEY   INTEGER NOT NULL,43                              C_PHONE       CHAR(15) NOT NULL,44                              C_ACCTBAL     DECIMAL(15,2)   NOT NULL,45                              C_MKTSEGMENT  CHAR(10) NOT NULL,46                              C_COMMENT     VARCHAR(117) NOT NULL);47 48 CREATE TABLE ORDERS  ( O_ORDERKEY       INTEGER NOT NULL,49                            O_CUSTKEY        INTEGER NOT NULL,50                            O_ORDERSTATUS    CHAR(1) NOT NULL,51                            O_TOTALPRICE     DECIMAL(15,2) NOT NULL,52                            O_ORDERDATE      DATE NOT NULL,53                            O_ORDERPRIORITY  CHAR(15) NOT NULL,  54                            O_CLERK          CHAR(15) NOT NULL, 55                            O_SHIPPRIORITY   INTEGER NOT NULL,56                            O_COMMENT        VARCHAR(79) NOT NULL);57 58 CREATE TABLE LINEITEM ( L_ORDERKEY    INTEGER NOT NULL,59                              L_PARTKEY     INTEGER NOT NULL,60                              L_SUPPKEY     INTEGER NOT NULL,61                              L_LINENUMBER  INTEGER NOT NULL,62                              L_QUANTITY    DECIMAL(15,2) NOT NULL,63                              L_EXTENDEDPRICE  DECIMAL(15,2) NOT NULL,64                              L_DISCOUNT    DECIMAL(15,2) NOT NULL,65                              L_TAX         DECIMAL(15,2) NOT NULL,66                              L_RETURNFLAG  CHAR(1) NOT NULL,67                              L_LINESTATUS  CHAR(1) NOT NULL,68                              L_SHIPDATE    DATE NOT NULL,69                              L_COMMITDATE  DATE NOT NULL,70                              L_RECEIPTDATE DATE NOT NULL,71                              L_SHIPINSTRUCT CHAR(25) NOT NULL,72                              L_SHIPMODE     CHAR(10) NOT NULL,73                              L_COMMENT      VARCHAR(44) NOT NULL);
View Code

2、修改dss.ri

dss.ri修改的地方比较多,修改后的dss.ri如下:

1 -- Sccsid:     @(#)dss.ri    2.1.8.1  2 -- tpch Benchmark Version 8.0  3   4 use tpch;  5   6 -- ALTER TABLE tpch.REGION DROP PRIMARY KEY;  7 -- ALTER TABLE tpch.NATION DROP PRIMARY KEY;  8 -- ALTER TABLE tpch.PART DROP PRIMARY KEY;  9 -- ALTER TABLE tpch.SUPPLIER DROP PRIMARY KEY; 10 -- ALTER TABLE tpch.PARTSUPP DROP PRIMARY KEY; 11 -- ALTER TABLE tpch.ORDERS DROP PRIMARY KEY; 12 -- ALTER TABLE tpch.LINEITEM DROP PRIMARY KEY; 13 -- ALTER TABLE tpch.CUSTOMER DROP PRIMARY KEY; 14  15  16 -- For table REGION 17 ALTER TABLE tpch.REGION 18 ADD PRIMARY KEY (R_REGIONKEY); 19  20 -- For table NATION 21 ALTER TABLE tpch.NATION 22 ADD PRIMARY KEY (N_NATIONKEY); 23  24 ALTER TABLE tpch.NATION 25 ADD FOREIGN KEY NATION_FK1 (N_REGIONKEY) references tpch.REGION(R_REGIONKEY); 26  27 COMMIT WORK; 28  29 -- For table PART 30 ALTER TABLE tpch.PART 31 ADD PRIMARY KEY (P_PARTKEY); 32  33 COMMIT WORK; 34  35 -- For table SUPPLIER 36 ALTER TABLE tpch.SUPPLIER 37 ADD PRIMARY KEY (S_SUPPKEY); 38  39 ALTER TABLE tpch.SUPPLIER 40 ADD FOREIGN KEY SUPPLIER_FK1 (S_NATIONKEY) references tpch.NATION(N_NATIONKEY); 41  42 COMMIT WORK; 43  44 -- For table PARTSUPP 45 ALTER TABLE tpch.PARTSUPP 46 ADD PRIMARY KEY (PS_PARTKEY,PS_SUPPKEY); 47  48 COMMIT WORK; 49  50 -- For table CUSTOMER 51 ALTER TABLE tpch.CUSTOMER 52 ADD PRIMARY KEY (C_CUSTKEY); 53  54 ALTER TABLE tpch.CUSTOMER 55 ADD FOREIGN KEY CUSTOMER_FK1 (C_NATIONKEY) references tpch.NATION(N_NATIONKEY); 56  57 COMMIT WORK; 58  59 -- For table LINEITEM 60 ALTER TABLE tpch.LINEITEM 61 ADD PRIMARY KEY (L_ORDERKEY,L_LINENUMBER); 62  63 COMMIT WORK; 64  65 -- For table ORDERS 66 ALTER TABLE tpch.ORDERS 67 ADD PRIMARY KEY (O_ORDERKEY); 68  69 COMMIT WORK; 70  71 -- For table PARTSUPP 72 ALTER TABLE tpch.PARTSUPP 73 ADD FOREIGN KEY PARTSUPP_FK1 (PS_SUPPKEY) references tpch.SUPPLIER(S_SUPPKEY); 74  75 COMMIT WORK; 76  77 ALTER TABLE tpch.PARTSUPP 78 ADD FOREIGN KEY PARTSUPP_FK2 (PS_PARTKEY) references tpch.PART(P_PARTKEY); 79  80 COMMIT WORK; 81  82 -- For table ORDERS 83 ALTER TABLE tpch.ORDERS 84 ADD FOREIGN KEY ORDERS_FK1 (O_CUSTKEY) references tpch.CUSTOMER(C_CUSTKEY); 85  86 COMMIT WORK; 87  88 -- For table LINEITEM 89 ALTER TABLE tpch.LINEITEM 90 ADD FOREIGN KEY LINEITEM_FK1 (L_ORDERKEY)  references tpch.ORDERS(O_ORDERKEY); 91  92 COMMIT WORK; 93  94 ALTER TABLE tpch.LINEITEM 95 ADD FOREIGN KEY LINEITEM_FK2 (L_PARTKEY,L_SUPPKEY) references  96         tpch.PARTSUPP(PS_PARTKEY,PS_SUPPKEY); 97  98 COMMIT WORK; 99 100 use tpch;101 102 alter table CUSTOMER    rename to customer ;103 alter table LINEITEM    rename to lineitem ;104 alter table NATION    rename to nation   ;105 alter table ORDERS    rename to orders   ;106 alter table PART    rename to part     ;107 alter table PARTSUPP    rename to partsupp ;108 alter table REGION    rename to region   ;109 alter table SUPPLIER    rename to supplier ;
View Code

修改的地方有第4行、第6~13行(--后添加空格)、第25、40、55、73、78、84 、90、96行(添加外码),第100~109行(将大写表名改为小写),还要注意我们建立的数据库名称为tpch,所有引用表都要使用tpch.表名的形式,比如tpch.REGION

七、在MySQL中建表

打开MySQL执行以下语句:

mysql> \. /home/hadoop/Downloads/tpch_2_17_3/dbgen/dss.ddl

这个命令就是\. 加上空格加上dss.ddl的位置。

然后使用 show databases; 语句可以看到已经建立了一个名为tpch的数据库:

接着执行:

mysql> use tpch;mysql> show tables;

可以看到数据库tpch中有8个表:

然后执行:

mysql> \. /home/hadoop/Downloads/tpch_2_17_3/dbgen/dss.ri

这句指令给表与表之间添加了主码及外码约束,并且将大写表名改为小写。

再 show tables; 可以看到表名已经改为了小写:

我们再使用 show create table 表名; 语句来检查主码与外码约束是否添加。这里对表customer测试结果如下:

可以看到主码与外码添加成功。

七、导入tbl文件到表中

上一步只是建立了表,表中没有数据,使用以下命令导入数据:

mysql> load data local infile '/home/hadoop/Downloads/tpch_2_17_3/dbgen/part.tbl' into table part fields terminated by '|' lines terminated by '|\n';

这句命令将/home/hadoop/Downloads/tpch_2_17_3/dbgen/part.tbl文件里的数据导入到表part中,可以使用语句select * from part limit 5; 来查看是否导入成功:

结果不为空则导入成功。

这样只是导入了一个表,还要使用相同结构的语句将剩余的7个tbl文件导入到相应的表中。由于外码约束,所以要注意导入文件的先后顺序。

 八、参考

1、

2、

转载于:https://www.cnblogs.com/sench/p/8033400.html

你可能感兴趣的文章
虚拟机vmware下安装Ghost XP——正确的解决方案
查看>>
eclipse下:selenium+python自动化之Chrome driver
查看>>
洛谷P3006 [USACO11JAN]瓶颈Bottleneck(堆模拟)
查看>>
mysql 创建存储过程报错
查看>>
C++笔记
查看>>
移动端
查看>>
stat~~~访问文件状态的利器
查看>>
SORT--不要仅限于题目中
查看>>
面试题46:求1+2+...+n
查看>>
Cscope 安装和使用
查看>>
Rails常用插件
查看>>
基于Dockerfile 构建redis5.0.0(包括持久化)及RedisDestopManager 监控
查看>>
Git 一些常用命令
查看>>
巧用linux服务器的/dev/shm/
查看>>
CSS 选择器大全
查看>>
FJOI省队集训 florida
查看>>
只是一个没有人知道的蒟蒻
查看>>
bk-02 C++ vector用法 博客园
查看>>
Flex 4.6 手机项目第一次开发小记
查看>>
What F
查看>>