一、安装pg数据库

Linux环境PostgreSQL源码编译安装
在Linux上安装pg数据库可以参考这篇博客
在Windows上安装pg数据库在官网上有简易的安装包

二、下载TPCH数据

可以从官网中下载,但是要填写一大堆资料,还可能半天通不过。
可以直接从下方的百度网盘链接中下载:

链接:https://pan.baidu.com/s/1rJvSA5tjER9oe55EBAR_9A?pwd=szn2
提取码:szn2

三、生成数据

1、若在Windows中生成

首先解压下载的压缩包

用visual studio打开解压的包中的dbgen文件夹。(本人用的visual studio community 2021版)
在解决方案资源管理器中点击dbgen,右键选择生成

此时,在dbgen文件夹下,出现了debug文件夹。在Debug文件夹中,找到dbgen.exe的文件。copy到上一层目录,也就是dbgen文件夹中。


在dbgen文件夹下,打开dos界面。(在文件地址栏输入cmd)。输入命令dbgen -h

然后输入dbgen -vf -s 1就可以生成你想要的数据了。这里1的单位是GB,要生成多少GB就写多少。

生成结束后,就能在dbgen文件夹下面看到生成的数据集(8个.tbl)了

表格
customer.tbl
lineitem.tbl
nation.tbl
order.tbl
part.tbl
region.tbl
supplier.tbl

2、若在Linux中生成

首先解压

unzip tpc-h-tool-3.0.0.zip

进入解压后的文件夹中的dbgen文件

cd TPC-H_Tools_v3.0.0/dbgen

将 makefile.suite 的复制到 makefile

cp makefile.suite makefile

修改makefile文件

vim makefile

填写其中的四个值

CC=gcc
DATABASE=POSTGRESQL
MACHINE=LINUX
WORKLOAD=TPCH

修改dbgen目录下的tpcd.h文件

vim tpcd.h

在其中添加如下内容

#ifdef POSTGRESQL
#define GEN_QUERY_PLAN  "EXPLAIN"
#define START_TRAN      "BEGIN TRANSACTION"
#define END_TRAN        "COMMIT;"
#define SET_OUTPUT      ""
#define SET_ROWCOUNT    "LIMIT %d\n"
#define SET_DBASE       ""
#endif

编译(在dbgen目录下执行)

make

产生数据
-s 1 表示产生1GB的数据
-f 表示复制原来的数据
比如 ./dbgen -s 100生成100G的数据

./dbgen -s 1 -f

四、处理数据

由于直接生成的数据若直接导入数据库会报错,需要把 .tbl文件中每一行后面的 | 这个竖线符号去掉,所以要对数据进行处理。

在Linux上修改的方法

[root@localhost dbgen]# for i in `ls *.tbl`; do sed 's/|$//' $i > ${i/tbl/csv}; echo $i; done;
customer.tbl
lineitem.tbl
nation.tbl
orders.tbl
partsupp.tbl
part.tbl
region.tbl
supplier.tbl

使用python修改的方法

可以使用我写的程序,将数据集放在tbl文档中

from os import removeif __name__ == '__main__':tbl = ["customer", "lineitem","nation", "orders", "part","partsupp", "region", "supplier"]for table in tbl:readfile = open("tbl/" + table + ".tbl", 'r')writefile = open("tbl/" + table + "1.tbl", 'w')writefile.flush()for line in readfile.readlines():line = line.replace("|\n", "\n")writefile.write(line)readfile.close()writefile.close()readfile = open("tbl/" + table + "1.tbl", 'r')writefile = open("tbl/" + table + ".tbl", 'w')writefile.flush()txt = readfile.read()writefile.write(txt)readfile.close()writefile.close()remove("tbl/" + table + "1.tbl")

五、在数据库中建表


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);

六、往数据库中导入数据

把数据集导到一个目录(比如在linux中我是导到/opt/module/tpchdata)中,然后在数据库中执行下列语句导入数据

copy region from '/opt/module/tpchdata/region.tbl' with delimiter as '|' NULL '';
copy nation from '/opt/module/tpchdata/nation.tbl' with delimiter as '|' NULL '';
copy partsupp from '/opt/module/tpchdata/partsupp.tbl' with delimiter as '|' NULL '';
copy customer from '/opt/module/tpchdata/customer.tbl' with delimiter as '|' NULL '';
copy lineitem from '/opt/module/tpchdata/lineitem.tbl' with delimiter as '|' NULL '';
copy orders from '/opt/module/tpchdata/orders.tbl' with delimiter as '|' NULL '';
copy part from '/opt/module/tpchdata/part.tbl' with delimiter as '|' NULL '';
copy supplier from '/opt/module/tpchdata/supplier.tbl' with delimiter as '|' NULL '';

如果pg数据库是装在Windows中,目录就应该是Windows上的数据集存放的位置。

七、添加约束

-- For table REGION
ALTER TABLE REGION
ADD PRIMARY KEY (R_REGIONKEY);-- For table NATION
ALTER TABLE NATION
ADD PRIMARY KEY (N_NATIONKEY);ALTER TABLE NATION
ADD FOREIGN KEY (N_REGIONKEY) references REGION;COMMIT WORK;-- For table PART
ALTER TABLE PART
ADD PRIMARY KEY (P_PARTKEY);COMMIT WORK;-- For table SUPPLIER
ALTER TABLE SUPPLIER
ADD PRIMARY KEY (S_SUPPKEY);ALTER TABLE SUPPLIER
ADD FOREIGN KEY (S_NATIONKEY) references NATION;COMMIT WORK;-- For table PARTSUPP
ALTER TABLE PARTSUPP
ADD PRIMARY KEY (PS_PARTKEY,PS_SUPPKEY);COMMIT WORK;-- For table CUSTOMER
ALTER TABLE CUSTOMER
ADD PRIMARY KEY (C_CUSTKEY);ALTER TABLE CUSTOMER
ADD FOREIGN KEY (C_NATIONKEY) references NATION;COMMIT WORK;-- For table LINEITEM
ALTER TABLE LINEITEM
ADD PRIMARY KEY (L_ORDERKEY,L_LINENUMBER);COMMIT WORK;-- For table ORDERS
ALTER TABLE ORDERS
ADD PRIMARY KEY (O_ORDERKEY);COMMIT WORK;-- For table PARTSUPP
ALTER TABLE PARTSUPP
ADD FOREIGN KEY (PS_SUPPKEY) references SUPPLIER;COMMIT WORK;ALTER TABLE PARTSUPP
ADD FOREIGN KEY (PS_PARTKEY) references PART;COMMIT WORK;-- For table ORDERS
ALTER TABLE ORDERS
ADD FOREIGN KEY (O_CUSTKEY) references CUSTOMER;COMMIT WORK;-- For table LINEITEM
ALTER TABLE LINEITEM
ADD FOREIGN KEY (L_ORDERKEY)  references ORDERS;COMMIT WORK;ALTER TABLE LINEITEM
ADD FOREIGN KEY (L_PARTKEY,L_SUPPKEY) references PARTSUPP;COMMIT WORK;

八、生成查询脚本

[root@tpch dbgen]# vim gen_query_sql.sh
#!/bin/sh
# generate queries from query templates with qgen
DIR=.
mkdir $DIR/finals
cp $DIR/queries/*.sql $DIR
for FILE in $(find $DIR -maxdepth 1 -name "[0-9]*.sql")
doDIGIT=$(echo $FILE | tr -cd '[[:digit:]]')./qgen $DIGIT > $DIR/finals/$DIGIT.sql
done
rm *.sql
[root@tpch dbgen]# chmod +x gen_query_sql.sh
[root@tpch dbgen]# ./gen_query_sql.sh
[root@tpch dbgen]# ls finals/
10.sql  12.sql  14.sql  16.sql  18.sql  1.sql   21.sql  2.sql  4.sql  6.sql  8.sql
11.sql  13.sql  15.sql  17.sql  19.sql  20.sql  22.sql  3.sql  5.sql  7.sql  9.sql

九、查询的22条语句

存放在dgen\queries下

pg数据库导入TPCH数据相关推荐

  1. #数据库--第1章 Windows 下的数据库导入 TPCH 数据(以 SQL Server 作为示例,MySQL同样适用)

    #数据库--第1章 Windows 下的数据库导入 TPCH 数据(以 SQL Server 作为示例,MySQL同样适用 一.TPCH 简介 二.TPCH 文件 三.生成 TPCH 数据 四.导入 ...

  2. PostgreSQL数据库导入EXCEL数据表

    气象监测数据下载(可下载最新及每日气象数据) NOAA气象日监测数据均值计算python代码整理 PostgreSQL数据库导入EXCEL数据表 PG数据库版本为10.14.1. 首先,需要在PG数据 ...

  3. 2023-02-10 clickhouse导入tpch数据-记录

    摘要: clickhouse导入tpch数据-记录 生成TPCH数据: 2022-07-06 使用tpch大数据量压测mysql_大数据怎么压测_帝尊悟世的博客-CSDN博客 clickhouse导入 ...

  4. 记一次SQL Server2005导入Oracle10G的折腾过程【供多种数据库导入导出数据的C#程序源码参考】...

    曾经很早的时候用 SQL Server2000 时就见过我们老大,用 SQL Server2000 的导入导出功能,把数据都导入到了 Oracle9 里去,所以我也对导入导出数据有充分的信心,绝对能做 ...

  5. mysql 导入unl文件_Informix和Oracel数据库导入UNL数据

    Oracle导入UNL数据 $1/$2@$3  用户名密码数据库名 1.loadunl.sh文件 ##模板表部分数据(tap_gen_template) sqlldr userid=$1/$2@$3c ...

  6. SQL Server数据库导入导出数据方式比较

    在我们建立一个数据库时,并且想将分散在各处的不同类型的数据库分类汇总在这个新建的数据库中时,尤其是在进行数据检验.净化和转换时,将会面临很大的挑战.幸好SQL Server为我们提供了强大.丰富的数据 ...

  7. Mysql数据库导入导出数据,将文件内容按格式导入数据库

    实验环境:Linux 安装软件: Mysql 1.导入数据库 1)准备一个权限为mysql的目录 mkdir /myload chonw mysql:mysql /myload 2)修改配置文件 vi ...

  8. mysql数据库导入外部数据乱码么_解决MySQL数据库导入导出数据乱码的问题

    最近在linux上面用mysqldump导出数据,放在windows系统中导入就会出现中文乱码,然后就会导致出现: Unknown MySQL server host和Can't connect to ...

  9. mysql数据库导入外部数据乱码么_mysql数据库导入数据时出现乱码的解决办法

    MYSQL存储数据乱码 mysql的字符集设置有多个层级,在mysql中存储中文,如果不能正确设置字符集,很容易出现数据乱码.今天就有一个用户反馈他数据库中的数据下午1点多开始出现了乱码.在这里,我分 ...

最新文章

  1. 直播报名 | 零基础 零代码 AI智能营销应用现场教学
  2. java实现人脸识别(使用百度云V3版本)
  3. core identity mysql_Microsoft.AspNetCore.Identity 使用 mysql 报错处理
  4. SQL server挂了之后
  5. 鸿蒙公测报名表填写,鸿蒙2.0公测报名审核要多久_鸿蒙2.0公测报名审核时间
  6. Go语言教程,电子书,PDF格式
  7. 云从科技宣布B+轮融资,多家国有基金入股,累计获资35亿元
  8. Java中间MD5加密算法完整版
  9. Windows10 的简单脚本 杀死所有表格程序
  10. Oracle Instant Client安装与配置
  11. 探针台常见问题—如何减少LHe制冷剂消耗
  12. UG软件制图的几个重要技巧,你知道吗?
  13. 以WBS模板和PBS自动生成WBS计划任务
  14. 函数信号发生器的功能介绍
  15. EasyClick 易点云测自动化测试入门到精通
  16. 关于计算机的网络小说,“80后”从维熙:熟练电脑写作 关注网络文学
  17. laravel中提供DB facade(原始查找)、查询构造器、Eloquent ORM三种操作数据库方式
  18. 某海外电商平台参数分析 ECDSA签名(js逆向)
  19. 强化学习——day31 多臂老虎机MAB的代码实现(Python)
  20. opencv 视频中画矩形

热门文章

  1. Arduino项目实战——基于Arduino【智能垃圾桶】设计
  2. 【Scala】MurmurHash3的使用
  3. 【时间序列分析】04.Hilbert空间
  4. 安卓动态修改html代码,android WebView-动态修改网页内容
  5. 数据结构 02 - 单链表的使用 环形链表的实现与应用
  6. 运动耳机入耳好还是不入耳的好?不入耳的骨传导耳机最好
  7. 计算机主机怎么装系统,计算机系统安装 如何一键安装系统
  8. 深圳、香港、新加坡 我的程序轨迹
  9. 轻量型注意力模块:ULSAM
  10. c语言小题,求1的阶乘+2的阶乘+3的阶乘+…+20的阶乘的值。