pg数据库导入TPCH数据

一、安装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下
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/61460.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能python:Python访问Gauss数据库实现高效数据管理

Python访问Gauss数据库实现高效数据管理 介绍 在数据管理和分析的大数据背景下,Gauss数据库作为开源数据库管理系统具有广泛的应用。而作为强大的程序语言,Python也成为数据科学家和工程师的首选工具之一。本文将介绍Python如何访问Gauss数据库&#x…

“GPT-4时代来临:为何这一代AI模型让GPT-3.5相形见绌?“

这个东西太强大了,GPT-4不同于ChatGPT先前的模型GPT-3.5,它不仅可以接收文字,同时还可以接受图片,但是图片还未开放给大众,从OpenAI的官方视频可以看到一段非常厉害的片段。 这个人用笔在本子上随便画了个自己网站的草…

微信聊天记录数据分析

目录 一、项目背景 二、数据准备 三、数据预处理及描述性统计 四、数据分析 1.聊天小时、日、月分别汇总分布图 2.聊天时间序列分布图 3.高频词汇统计 4.词云图展示 五、其它探索性分析 一、项目背景 2021年2月20日我和我女朋友第一次见面,之后开启了我们两个人的故…

个人电子邮箱注册申请哪个更好用?

在邮箱刚刚兴起的时候,我注册了个人邮箱,平常会保存一些家庭照片以及重要的工作邮件,最近在清理电脑时不小心清理了重要的邮件。于是我在百度上搜索了一些怎么可以恢复邮件的攻略,网友回复说升级TOM个人邮箱会员有误删恢复的功能。…

数据科学家赚多少?数据全分析与可视化 ⛵

💡 作者:韩信子ShowMeAI 📘 数据分析实战系列:https://www.showmeai.tech/tutorials/40 📘 AI 岗位&攻略系列:https://www.showmeai.tech/tutorials/47 📘 本文地址:https://www…

人美声甜GPT,数学题哪里不会讲哪里

衡宇 发自 凹非寺量子位 | 公众号 QbitAI 大模型的颠覆和变革,还只是开始。 ChatGPT一炮而红,重塑搜索、办公协同等多个场景和行业后,在线教育,被视为最重要的垂直场景——毕竟大语言模型展示出的能力,正是之前在线教育…

除了方文山,用TA你也能帮周杰伦写歌词了

周杰伦几乎陪伴了每个90后的青春,那如果AI写杰伦风格的歌词会写成怎样呢? 首先当然我们需要准备杰伦的歌词,这里一共收录了他的十几张专辑,近5000多行歌词。 原文档格式: 第一步数据预处理 def preprocess(data):&qu…

Selenium+Request+Beautifulsoup(周杰伦,林俊杰歌词爬取)

爬去JZ的歌词是为了做一个NlLP的任务,这里是在python上使用SelenuimRequestsBeautifulSoup实现的。使用selenuim是因为会涉及到动态网页抓取,又使用Request的原因是selenium对网页抓取时是要先进行加载的因此很耗时间,而Request不需要网页加载…

爬取QQ音乐(周杰伦)

首先呢,我们打开QQ音乐搜索周杰伦 https://y.qq.com/portal/search.html#page1&searchid1&remoteplacetxt.yqq.top&tsong&w周杰伦 一切做好准备后呢,我们需要找到歌曲清单,找到client_search(客户端搜索&#xf…

【方向盘】轰动从未停止,感动从未消失。他,是周杰伦

不仅20年,不仅是青春。 本文已被https://yourbatman.cn收录;女娲Knife-Initializr工程可公开访问啦;程序员专用网盘https://wangpan.yourbatman.cn;公号后台回复“专栏列表”获取全部小而美的原创技术专栏 你好,我是方…

用Python分析周杰伦歌曲并进行数据可视化

大家好,今天我们用python分析下周杰伦歌曲。为了尽量完整地呈现从原始数据到可视化的过程,接下来我们会先简单讲解数据的预处理过程,即如何将 JSON 数据转化为Excel 格式,以及如何对周杰伦的歌曲进行分词。 本案例中的歌词数据来…

哪里可以免费听到周杰伦的歌曲?请看这里,教你免费听歌

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 小伙伴说想听周杰伦的音乐,有什么网站是可以免费听的,然后他发现咪咕音乐可以免费听周杰伦的歌曲,既然可以免费听,那…

计算机音乐谱大全告白气球,周杰伦《告白气球》钢琴曲谱

《告白气球》是由方文山作词,周杰伦作曲并演唱的歌曲,收录于周杰伦2016年6月24日发行的专辑《周杰伦的床边故事》中。2017年1月,这首歌曲获得Billboard Radio China 2016年度十大金曲奖。 创作背景 词作者方文山为周杰伦创作了《印地安老斑鸠…

周杰伦的歌里都有些啥?

周董的夕阳红粉丝团“被迫营业”,把蔡徐坤拉下了盘踞许久的微博超话人气榜第一,还一举破了亿。 当然,等我知道的时候,都战局已定了……作为当年会唱前三张专辑里所有歌曲的老粉,不想就这么躺赢,我今天也来给…

Python+pyecharts研究周杰伦歌词中的 秘密

一个朋友很喜欢周杰伦。 所以,前两天我跟别人去KTV,就唱的是“七里香”。 唱着唱歌,突然就好奇了起来。周杰伦的歌里,是不是还有很多的麻雀 后来发现,270首歌,140786个字,千言万语&#xff0…

周杰伦入局元宇宙,带你搞懂元宇宙怎么玩

自古以来,每个新兴产业的崛起,最关键、最重要的元素一定是流量,这对于元宇宙来说亦是如此。如果Facebook的入局元宇宙行业吸引了第一波市场流量,那么NBA球星史蒂芬库里、歌手林俊杰、周杰伦等明星入局的影响力就为“元宇宙”吸引了…

HTML网页设计:周杰伦网站

Hello朋友们!我们又见面了!是不是又到了焦头烂额忙期末设计的作业的时候了,不要担心,我来了,经过不懈的努力写出了一个比较容易懂的网页,完全足够应付你亲爱的老师的网页设计大作业! 哦&#xf…

用matlab演奏周杰伦的《七里香》

问题描述 前几天在学习matlab的时候,发现了一篇用matlab演奏音乐的文章,不禁感叹matlab居然还能这么玩!于是我就学着用matlab演奏我最喜欢听的一首歌——周杰伦的《七里香》。最后成果我已经发到B站,链接为:用matlab演…

WPF 消息传递简明教程

WPF 消息传递简明教程 独立观察员 2023 年 4 月 24 日 0、说明 参考:https://www.cnblogs.com/cdaniu/p/16852620.html 使用包:CommunityToolkit.Mvvm(8.1.0) 1、订阅 让需要使用消息的 ViewModel 继承 ObservableRecipient&#…