【IT168 技术】接上篇:数据库技巧:MonetDB上运行TPC-H(下)
6. 运行MonetDB安装目录下的merovingian,该程序为管理数据库的程序,参考如下:
MonetDB用于执行管理数据库系统的多个操作,它可以检查数据库服务器的稳定性,也能够临时对外关闭数据库作维护,允许作检查点等。MonetDB创建数据库命令如下:
successfully created database 'test'
检查数据库状态:
name state uptime health last crash
test locked
这说明数据库存在但是还没有运行,可以用"start"命令选项开启数据库。注意,此时数据库仍然处理维护状态(lock)。
starting database 'test'... done
shell> monetdb status test
name state uptime health last crash
test locked 5s 100%, 0s -
由于数据库仍然处于维护状态,只有数据管理员才能够连接数据库,对于其它用户,数据库必须用命令release开 For example, the statements below illustrate a short session of the creation of a new user. The session is closed using the mclient console command \q.
sql>CREATE USER "tpc" WITH PASSWORD 'tpc' NAME 'TPC Explorer' SCHEMA "sys";
sql>CREATE SCHEMA "tpc" AUTHORIZATION "tpc";
sql>ALTER USER "tpc" SET SCHEMA "tpc";
sql>\q
7. 然后启动test数据库,使用客户端进入
sql>
8. 创建TPC-H所需的数据库表,在DBgen程序所在目录下,有一个dss.dll文件,该文件是TPC-H的建表文件,使用如下命令,将dss.ddl导入monedDB执行该文件里的SQL语句:
建好后,使用
查看当前已有的数据表信息。
TABLE tpc.customer
TABLE tpc.lineitem
TABLE tpc.nation
TABLE tpc.orders
TABLE tpc.part
TABLE tpc.partsupp
TABLE tpc.region
TABLE tpc.supplier
9. 导入数据到MonetDB中,使用MonetDB提供的copy into table 命令:
执行如下:
5 affected rows
Sql>
注意上边的‘|’是字段之间的分隔符。
采用同样的方法,将其余的7个表格数据导入。
COPY INTO nation FROM '/home/zjx/Download/tpc_h/nation.tbl' DELIMITERS '|' ;
COPY INTO part FROM '/home/zjx/Download/tpc_h/part.tbl' DELIMITERS '|' ;
COPY INTO supplier FROM '/home/zjx/Download/tpc_h/supplier.tbl' DELIMITERS '|' ;
COPY INTO customer FROM '/home/zjx/Download/tpc_h/customer.tbl' DELIMITERS '|' ;
COPY INTO partsupp FROM '/home/zjx/Download/tpc_h/partsupp.tbl' DELIMITERS '|' ;
COPY INTO orders FROM '/home/zjx/Download/tpc_h/orders.tbl' DELIMITERS '|' ;
COPY INTO lineitem FROM '/home/zjx/Download/tpc_h/lineitem.tbl' DELIMITERS '|' ;
10. 为各个表添加主键。
ALTER TABLE REGION ADD PRIMARY KEY (R_REGIONKEY);
-- For table NATION
ALTER TABLE NATION ADD PRIMARY KEY (N_NATIONKEY);
-- For table PART
ALTER TABLE PART ADD PRIMARY KEY (P_PARTKEY);
-- For table SUPPLIER
ALTER TABLE SUPPLIER ADD PRIMARY KEY (S_SUPPKEY);
-- For table PARTSUPP
ALTER TABLE PARTSUPP ADD PRIMARY KEY (PS_PARTKEY,PS_SUPPKEY);
-- For table CUSTOMER
ALTER TABLE CUSTOMER ADD PRIMARY KEY (C_CUSTKEY);
-- For table LINEITEM
ALTER TABLE LINEITEM ADD PRIMARY KEY (L_ORDERKEY,L_LINENUMBER);
-- For table ORDERS
ALTER TABLE ORDERS ADD PRIMARY KEY (O_ORDERKEY);
11. 为各个表添加外键。
ALTER TABLE SUPPLIER ADD FOREIGN KEY (S_NATIONKEY) references NATION(N_NATIONKEY);
ALTER TABLE CUSTOMER ADD FOREIGN KEY (C_NATIONKEY) references NATION(N_NATIONKEY);
-- For table PARTSUPP
ALTER TABLE PARTSUPP ADD FOREIGN KEY (PS_SUPPKEY) references SUPPLIER(S_SUPPKEY);
ALTER TABLE PARTSUPP ADD FOREIGN KEY (PS_PARTKEY) references PART(P_PARTKEY);
-- For table ORDERS
ALTER TABLE ORDERS ADD FOREIGN KEY (O_CUSTKEY) references CUSTOMER(C_CUSTKEY);
-- For table LINEITEM
ALTER TABLE LINEITEM ADD FOREIGN KEY (L_ORDERKEY) references ORDERS(O_ORDERKEY);
ALTER TABLE LINEITEM ADD FOREIGN KEY (L_PARTKEY,L_SUPPKEY) references PARTSUPP(PS_PARTKEY, PS_SUPPKEY);
12. 生成默认的查询语句,验证查询结果,看看是否与tpc-h手册中提供的结果一致。
qgen -d 2 > default_2.sql
qgen -d 3 > default_3.sql
qgen -d 4 > default_4.sql
qgen -d 5 > default_5.sql
qgen -d 6 > default_6.sql
qgen -d 7 > default_7.sql
qgen -d 8 > default_8.sql
qgen -d 9 > default_9.sql
qgen -d 10 > default_10.sql
qgen -d 11 > default_11.sql
qgen -d 12 > default_12.sql
qgen -d 13 > default_13.sql
qgen -d 14 > default_14.sql
qgen -d 15 > default_15.sql
qgen -d 16 > default_16.sql
qgen -d 17 > default_17.sql
qgen -d 18 > default_18.sql
qgen -d 19 > default_19.sql
qgen -d 20 > default_20.sql
qgen -d 21 > default_21.sql
qgen -d 22 > default_22.sql
13. 在客户端执行生成的SQL语句即可。
(结束省略掉)
Timer 1321.077 msec 4 rows
sql>