当前位置:   article > 正文

TPCH工具下载及用法_tpch下载

tpch下载

简介

    TPC-H 是一个决策支持基准测试 (Decision Support Benchmark),用于模拟复杂的决策支持系统环境。主要测试数据库的查询和报表性能,通常用于评估数据库在处理大规模数据时的性能表现。

    TPC-H 基准测试由一组预定义的 SQL 查询组成,这些查询涉及大数据集上的多表连接、聚合等复杂操作。通过执行这些查询并测量其性能,可以评估数据库系统处理复杂决策支持工作负载的能力。

        

文章目录如下

1. 下载TPCH基准工具

2. 编译TPCH基准工具

2.1. 修改头文件

2.2. 修改编译文件

2.3. 执行编译

3. 基本用法

3.1. 创建表语句

3.2. 生成表数据

3.3. 生成测试语句


        

1. 下载TPCH基准工具

TPC官网

http://www.tpc.org/

GitHub 仓库(V 2.17.3)

https://github.com/gregrahn/tpch-kit

        

2. 编译TPCH基准工具

(这里以 GitHub 仓库下载的 2.17.3 版本为例)

2.1. 修改头文件

编辑项目定义的头文件 tpch-kit-master/dbgen/tpcd.h,不同的数据库使用不用的定义。文件中内置了一些数据库,比如 Oracle:

  1. #ifdef ORACLE
  2. ......

根据自己需要使用的数据库配置,如果文件中已经包含了,那么不需要配置。如果没有可以参考下方,增加到文件中即可。

【Oracle定义】

  1. #ifdef ORACLE
  2. #define GEN_QUERY_PLAN ""
  3. #define START_TRAN ""
  4. #define END_TRAN ""
  5. #define SET_OUTPUT ""
  6. #define SET_ROWCOUNT "where rownum <= %d;\n"
  7. #define SET_DBASE ""
  8. #endif

【SQLServer定义】

  1. #ifdef SQLSERVER
  2. #define GEN_QUERY_PLAN "set showplan on\nset noexec on\ngo\n"
  3. #define START_TRAN "begin transaction\ngo\n"
  4. #define END_TRAN "commit transaction\ngo\n"
  5. #define SET_OUTPUT ""
  6. #define SET_ROWCOUNT "set rowcount %d\ngo\n\n"
  7. #define SET_DBASE "use %s\ngo\n"
  8. #endif

【PostgreSQL定义】

  1. #ifdef POSTGRESQL
  2. #define GEN_QUERY_PLAN "explain"
  3. #define START_TRAN "start transaction"
  4. #define END_TRAN "commit;"
  5. #define SET_OUTPUT ""
  6. #define SET_ROWCOUNT "limit %d;\n"
  7. #define SET_DBASE ""
  8. #endif

【MySQL定义】

  1. #ifdef MYSQL
  2. #define GEN_QUERY_PLAN ""
  3. #define START_TRAN "start transaction"
  4. #define END_TRAN "commit"
  5. #define SET_OUTPUT ""
  6. #define SET_ROWCOUNT "limit %d;\n"
  7. #define SET_DBASE "use %s;\n"
  8. #endif

        

2.2. 修改编译文件

编辑编译文件 tpch-kit-master/dbgen/Makefile,找到如下内容按情况修改

  1. ################
  2. ## CHANGE NAME OF ANSI COMPILER HERE
  3. ################
  4. CC = gcc
  5. # Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
  6. # SQLSERVER, SYBASE, ORACLE, VECTORWISE, POSTGRESQL
  7. # Current values for MACHINE are: ATT, DOS, HP, IBM, ICL, MVS, MACOS
  8. # SGI, SUN, U2200, VMS, LINUX, WIN32
  9. # Current values for WORKLOAD are: TPCH
  10. DATABASE = MYSQL
  11. MACHINE = LINUX
  12. WORKLOAD = TPCH
  • DATABASE 指定需要编译的数据库

        

2.3. 执行编译

上述2个文件配置完成后,cd tpch-kit-master/dbgen/ 执行 make 命令

        

编译完成后会自动生成2个执行文件

  • dbgen:生成表数据(csv文件)
  • qgen:生成复杂查询SQL

需要注意:直接执行 qgen 会出现找不到的错误

设置环境变量

export DSS_QUERY=./queries

再次执行qgen(成功),生成22条复杂查询SQL

        

3. 基本用法

tpch-kit-master 工具并不具备直接测试的能力,主要作用是根据TPC-H标准生成对应的测试数据,包括:测试表、索引、csv测试数据和22条复杂查询语句。下面介绍它的基本用法:

3.1. 创建表语句

将安装包解压后会会存在如下2个文件:

  • tpch-kit-master/dbgen/dss.ddl:创建表语句
  • tpch-kit-master/dbgen/dss.ri:创建主键、外键索引语句

创建表语句如下:

  1. -- 记录各个国家的信息
  2. CREATE TABLE nation(
  3. n_nationkey INTEGER NOT NULL, -- 国家键
  4. n_name CHAR(25) NOT NULL, -- 国家名称
  5. n_regionkey INTEGER NOT NULL, -- 所属地区键
  6. n_comment VARCHAR(152) -- 注释
  7. );
  8. -- 记录各个地区的信息
  9. CREATE TABLE region(
  10. r_regionkey INTEGER NOT NULL, -- 地区键
  11. r_name CHAR(25) NOT NULL, -- 地区名称
  12. r_comment VARCHAR(152) -- 注释
  13. );
  14. -- 记录零件的信息
  15. CREATE TABLE part(
  16. p_partkey INTEGER NOT NULL, -- 零件键
  17. p_name VARCHAR(55) NOT NULL, -- 零件名称
  18. p_mfgr CHAR(25) NOT NULL, -- 制造商
  19. p_brand CHAR(10) NOT NULL, -- 品牌
  20. p_type VARCHAR(25) NOT NULL, -- 类型
  21. p_size INTEGER NOT NULL, -- 尺寸
  22. p_container CHAR(10) NOT NULL, -- 容器
  23. p_retailprice DECIMAL(15,2) NOT NULL, -- 零售价格
  24. p_comment VARCHAR(23) NOT NULL -- 注释
  25. );
  26. -- 记录供应商的信息
  27. CREATE TABLE supplier(
  28. s_suppkey INTEGER NOT NULL, -- 供应商键
  29. s_name CHAR(25) NOT NULL, -- 供应商名称
  30. s_address VARCHAR(40) NOT NULL, -- 地址
  31. s_nationkey INTEGER NOT NULL, -- 所属国家键
  32. s_phone CHAR(15) NOT NULL, -- 电话
  33. s_acctbal DECIMAL(15,2) NOT NULL, -- 账户余额
  34. s_comment VARCHAR(101) NOT NULL -- 注释
  35. );
  36. -- 记录零件和供应商之间的关系,包括供应商为特定零件提供的信息,如价格、供应量等
  37. CREATE TABLE partsupp(
  38. ps_partkey INTEGER NOT NULL, -- 零件键
  39. ps_suppkey INTEGER NOT NULL, -- 供应商键
  40. ps_availqty INTEGER NOT NULL, -- 可用数量
  41. ps_supplycost DECIMAL(15,2) NOT NULL, -- 供应成本
  42. ps_comment VARCHAR(199) NOT NULL -- 注释
  43. );
  44. -- 记录顾客的信息
  45. CREATE TABLE customer(
  46. c_custkey INTEGER NOT NULL, -- 客户键
  47. c_name VARCHAR(25) NOT NULL, -- 客户名称
  48. c_address VARCHAR(40) NOT NULL, -- 地址
  49. c_nationkey INTEGER NOT NULL, -- 所属国家键
  50. c_phone CHAR(15) NOT NULL, -- 电话
  51. c_acctbal DECIMAL(15,2) NOT NULL, -- 账户余额
  52. c_mktsegment CHAR(10) NOT NULL, -- 市场细分
  53. c_comment VARCHAR(117) NOT NULL -- 注释
  54. );
  55. -- 记录订单的信息
  56. CREATE TABLE orders(
  57. o_orderkey INTEGER NOT NULL, -- 订单键
  58. o_custkey INTEGER NOT NULL, -- 客户键
  59. o_orderstatus CHAR(1) NOT NULL, -- 订单状态
  60. o_totalprice DECIMAL(15,2) NOT NULL, -- 总价
  61. o_orderDATE DATE NOT NULL, -- 订单日期
  62. o_orderpriority CHAR(15) NOT NULL, -- 订单优先级
  63. o_clerk CHAR(15) NOT NULL, -- 业务员
  64. o_shippriority INTEGER NOT NULL, -- 发货优先级
  65. o_comment VARCHAR(79) NOT NULL -- 注释
  66. );
  67. -- 记录订单中每个零件的明细信息
  68. CREATE TABLE lineitem(
  69. l_orderkey INTEGER NOT NULL, -- 订单键
  70. l_partkey INTEGER NOT NULL, -- 零件键
  71. l_suppkey INTEGER NOT NULL, -- 供应商键
  72. l_linenumber INTEGER NOT NULL, -- 行号
  73. l_quantity DECIMAL(15,2) NOT NULL, -- 数量
  74. l_extendedprice DECIMAL(15,2) NOT NULL, -- 扩展价格
  75. l_discount DECIMAL(15,2) NOT NULL, -- 折扣
  76. l_tax DECIMAL(15,2) NOT NULL, -- 税
  77. l_returnflag CHAR(1) NOT NULL, -- 退货标志
  78. l_linestatus CHAR(1) NOT NULL, -- 行状态
  79. l_shipDATE DATE NOT NULL, -- 发货日期
  80. l_commitDATE DATE NOT NULL, -- 提交日期
  81. l_receiptDATE DATE NOT NULL, -- 接收日期
  82. l_shipinstruct CHAR(25) NOT NULL, -- 发货指令
  83. l_shipmode CHAR(10) NOT NULL, -- 发货模式
  84. l_comment VARCHAR(44) NOT NULL -- 注释
  85. );

        

创建主键、外键索引

  1. -- 清理8张表主键
  2. ALTER TABLE region DROP CONSTRAINT region_pkey;
  3. ALTER TABLE nation DROP CONSTRAINT nation_pkey;
  4. ALTER TABLE part DROP CONSTRAINT part_pkey;
  5. ALTER TABLE supplier DROP CONSTRAINT supplier_pkey;
  6. ALTER TABLE partsupp DROP CONSTRAINT partsupp_pkey;
  7. ALTER TABLE orders DROP CONSTRAINT orders_pkey;
  8. ALTER TABLE lineitem DROP CONSTRAINT lineitem_pkey;
  9. ALTER TABLE customer DROP CONSTRAINT customer_pkey;
  10. -- 创建主键
  11. ALTER TABLE region ADD PRIMARY KEY (r_regionkey);
  12. ALTER TABLE nation ADD PRIMARY KEY (n_nationkey);
  13. ALTER TABLE part ADD PRIMARY KEY (p_partkey);
  14. ALTER TABLE supplier ADD PRIMARY KEY (s_suppkey);
  15. ALTER TABLE partsupp ADD PRIMARY KEY (ps_partkey,ps_suppkey);
  16. ALTER TABLE customer ADD PRIMARY KEY (c_custkey);
  17. ALTER TABLE lineitem ADD PRIMARY KEY (l_orderkey,l_linenumber);
  18. ALTER TABLE orders ADD PRIMARY KEY (o_orderkey);
  19. -- 创建外键
  20. ALTER TABLE nation ADD CONSTRAINT nation_fk1 FOREIGN KEY (n_regionkey) REFERENCES region;
  21. ALTER TABLE supplier ADD CONSTRAINT supplier_fk1 FOREIGN KEY (s_nationkey) REFERENCES nation;
  22. ALTER TABLE customer ADD CONSTRAINT customer_fk1 FOREIGN KEY(c_nationkey) REFERENCES nation;
  23. ALTER TABLE partsupp ADD CONSTRAINT partsupp_fk1 FOREIGN KEY (ps_suppkey) REFERENCES supplier;
  24. ALTER TABLE partsupp ADD CONSTRAINT partsupp_fk2 FOREIGN KEY (ps_partkey) REFERENCES part;
  25. ALTER TABLE orders ADD CONSTRAINT orders_fk1 FOREIGN KEY (o_custkey) REFERENCES customer;
  26. ALTER TABLE lineitem ADD CONSTRAINT lineitem_fk1 FOREIGN KEY (l_orderkey) REFERENCES orders;
  27. ALTER TABLE lineitem ADD CONSTRAINT lineitem_fk2 FOREIGN KEY (l_partkey,l_suppkey) REFERENCES partsupp;

        

3.2. 生成表数据

  • tpch-kit-master 工具并不是直接向数据库插入数据,而是根据测试大小生成csv文件,需要人工将csv数据导入表中。

使用二进制工具 tpch-kit-master/dbgen/dbgen 来生成csv文件,基本参数如下:

  1. -h # 帮助
  2. -q # 启用静默模式
  3. -v # 启用详细模式
  4. -f # 覆盖现有文件
  5. -s <n> # 比例因子,数据规模以GB为单位(默认: 1G)
  6. -U <n> # 生成 <n> 更新设置
  7. -T # 指定生成某张表的数据
  8. -T c # 只生成cutomers表数据
  9. -T l # 只生成nation/region表数据
  10. -T L # 只生成lineitem表数据
  11. -T n # 只生成nation表数据
  12. -T o # 只生成orders/lineitem表数据
  13. -T O # 只生成orders表数据
  14. -T p # 只生成parts/partsupp表数据
  15. -T P # 只生成parts表数据
  16. -T r # 只生成region表数据
  17. -T s # 只生成suppliers表数据
  18. -T S # 只生成partsupp表数据

通过 dbgen [参数] 来生成数据,执行完成后会自动将数据保存到 tpch-kit-master/dbgen/*.tbl

【案例一】生成1GB数据

./dbgen
  • 直接执行 dbgen 默认生成1GB数据,这些数据由8张表组成,所以生成8个文件 

        

【案例二】生成2GB数据,覆盖原有文件,并输出详细信息

./dbgen -vfs 2
  • -v:输出详细信息
  • -f:覆盖原有数据
  • -s:比例因子(单位:GB) 

        

【案例三】指定生成customer和nation表数据

  1. ./dbgen -T c
  2. ./dbgen -T n

        

3.3. 生成测试语句

使用二进制工具 tpch-kit-master/dbgen/qgen 来生成22条复杂的查询语句,基本参数如下:

  1. -h # 帮助
  2. -c # 保留模板中的注释
  3. -d <n> # 指定输出单条SQL(1~22)

【案例一】生成全部SQL(22条)

./qgen
  • 直接执行就行

        

【案例二】指定生成第3条SQL

./qgen -d 3

        

【案例三】保留注释

./qgen -c -d 3

        

22条语句的作用如下:

  • Q01: TPC-H/TPC-R价格汇总报表查询
  • Q02: TPC-H/TPC-R最小成本供应商查询
  • Q03: TPC-H/TPC-R发货优先级查询
  • Q04: TPC-H/TPC-R订单优先级查询
  • Q05: TPC-H/TPC-R本地供应商数量查询
  • Q06: TPC-H/TPC-R收入变化预测查询
  • Q07: TPC-H/TPC-R批量出货查询
  • Q08: TPC-H/TPC-R全国市场占有率查询
  • Q09: TPC-H/TPC-R产品类型利润指标查询
  • Q10: TPC-H/TPC-R退货项报表查询
  • Q11: TPC-H/TPC-R重要库存鉴定查询
  • Q12: TPC-H/TPC-R发货方式及订单优先级查询
  • Q13: TPC-H/TPC-R客户分布查询
  • Q14: TPC-H/TPC-R提升效果查询
  • Q15: TPC-H/TPC-R顶级供应商查询
  • Q16: TPC-H/TPC-R零件/供应商关系查询
  • Q17: TPC-H/TPC-R小批量订单收入查询
  • Q18: TPC-H/TPC-R大批量客户查询
  • Q19: TPC-H/TPC-R折现收入查询
  • Q20: TPC-H/TPC-R潜在部件提升查询
  • Q21: TPC-H/TPC-R保持订单等待的供应商查询
  • Q22: TPC-H/TPC-R全球销售机会查询

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/935517
推荐阅读
相关标签
  

闽ICP备14008679号