技术开发 频道

数据库技巧:MonetDB上运行TPC-H(下)

  【IT168 技术】接上篇:数据库技巧:MonetDB上运行TPC-H(下)

  6. 运行MonetDB安装目录下的merovingian,该程序为管理数据库的程序,参考如下:

  MonetDB用于执行管理数据库系统的多个操作,它可以检查数据库服务器的稳定性,也能够临时对外关闭数据库作维护,允许作检查点等。MonetDB创建数据库命令如下:

  shell> monetdb create test
  successfully created database
'test'

  检查数据库状态:

     shell> monetdb status
           name       state     uptime       health       last crash
     test            locked

  这说明数据库存在但是还没有运行,可以用"start"命令选项开启数据库。注意,此时数据库仍然处理维护状态(lock)。

     shell> monetdb start test
     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.

  shell> mclient -l sql -d test –umonetdb –Pmonetdb
  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数据库,使用客户端进入

  shell> mclient -l sql -d test –utpc
  sql
>

  8. 创建TPC-H所需的数据库表,在DBgen程序所在目录下,有一个dss.dll文件,该文件是TPC-H的建表文件,使用如下命令,将dss.ddl导入monedDB执行该文件里的SQL语句:

  Sql> \< /yourdicrector/dss.ddl

  建好后,使用

  Sql> \d

  查看当前已有的数据表信息。

  sql>\d
  
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 命令:

  执行如下:

  sql>COPY 5 records INTO region FROM '/home/zjx/Download/tpc_h/region.tbl' using DELIMITERS '|';
  
5 affected rows
  Sql
>

  注意上边的‘|’是字段之间的分隔符。

  采用同样的方法,将其余的7个表格数据导入。

  COPY INTO region FROM '/home/zjx/Download/tpc_h/region.tbl' DELIMITERS '|' ;
  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. 为各个表添加主键。

  -- For table REGION
  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 NATION ADD FOREIGN KEY (N_REGIONKEY) references REGION(R_REGIONKEY);
  
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 1 > default_1.sql
  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语句即可。

  sql>\< /yourdirectory/default_1.sql

  (结束省略掉)

  4 tuples
  Timer
1321.077 msec 4 rows
  sql
>
0
相关文章