TPCH生成数据导入Postgres数据库

目录

        • 1. 数据生成
          • 工具下载
          • 在degen目录下修改makefile
          • 在degen目录下修改tpcd.h
          • 在degen目录下执行命令生成dbgen和qgen文件
          • 在degen目录下生成.tlb数据
          • 查看生成的数据
        • 2. 数据导入到Postgres数据库中
          • 创建数据库
          • 建表
          • 查看创建的表
          • 表中导入数据
          • 查看数据导入
          • 给表加约束
        • 3. 生成查询语句
          • 生成查询语句
          • 查询模板说明
          • TPCH度量指标
        • 参考博客

1. 数据生成

工具下载
git clone git@github.com:electrum/tpch-dbgen.git
在degen目录下修改makefile
################
## CHANGE NAME OF ANSI COMPILER HERE
################
CC      = gcc 
# Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
#                                  SQLSERVER, SYBASE, ORACLE
# Current values for MACHINE are:  ATT, DOS, HP, IBM, ICL, MVS, 
#                                  SGI, SUN, U2200, VMS, LINUX, WIN32 
# Current values for WORKLOAD are:  TPCH
DATABASE= POSTGRESQL
MACHINE = LINUX
WORKLOAD = TPCH
在degen目录下修改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
在degen目录下执行命令生成dbgen和qgen文件
make -f makefile.suite
在degen目录下生成.tlb数据
 ./dbgen -s 1 -f

-s 1 表示生成1G数据
-f 覆盖之前产生的文件

查看生成的数据
ls | grep '.*.tbl'

2. 数据导入到Postgres数据库中

创建数据库
createdb -p 5432 -e -U postgres tpch

-p 表示连接端口 5432
-e 表示命令进行回显
-U 创建数据库的用户名 是postgres
tpch 数据库的名字

建表

表结构在degen目录下dss.ddl文件中

psql -d tpch < dss.ddl
查看创建的表
psql -d tpch -c '\dt+'
表中导入数据
for i in `ls *.tbl`; doecho $i;sed -i 's/|$//' *.tbl;name=`echo $i| cut -d'.' -f1`;psql -d tpch -c "COPY $name FROM '`pwd`/$i' DELIMITER '|' ENCODING 'LATIN1';";
done
查看数据导入
psql -d tpch -c '\dt+'

可以看到表中已经有了数据

# 查看表的行数
psql -d tpch  -c "select count(*) from lineitem";
给表加约束

约束在dss.ri 文件, 需要对文件中TPCD修改为你的数据库名字,也可以直接使用下面的在数据库中执行。

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

3. 生成查询语句

生成查询语句

复制qgen 和dists.dss 到queries ,cd到queries目录下执行

./qgen -d 1 > d1.sql

-d表示默认参数,1表示按照模板一生成sql语句,d1.sql为生成的sql文件名称
批量生成sql文件

for i  in {1..22}
do
name="d$i.sql"
echo $name
./qgen -d $i >$name
done

执行查询语句

psql -p 5432 -U postgres -d tpch -f ./d1.sql
查询模板说明

Q01 带有分组、排序、聚集操作并存的单表查询操作。这个查询会导致表上的数据有95%到97%行被读取到。

Q02 :带有排序、聚集操作、子查询并存的多表查询操作。查询语句没有从语法上限制返回多少条元组,但是TPC-H标准规定,查询结果只返回前100行(通常依赖于应用程序实现)。

Q03 带有分组、排序、聚集操作并存的三表查询操作。查询语句没有从语法上限制返回多少条元组,但是TPC-H标准规定,查询结果只返回前10行(通常依赖于应用程序实现)。

Q04 带有分组、排序、聚集操作、子查询并存的单表查询操作。子查询是相关子查询。

Q05 带有分组、排序、聚集操作、子查询并存的多表连接查询操作。

Q06 带有聚集操作的单表查询操作。查询语句使用了BETWEEN-AND操作符,有的数据库可以对BETWEEN-AND进行优化。

Q07 带有分组、排序、聚集、子查询操作并存的多表查询操作。子查询的父层查询不存在其他查询对象,是格式相对简单的子查询。

Q08 带有分组、排序、聚集、子查询操作并存的查询操作。子查询的父层查询不存在其他查询对象,是格式相对简单的子查询,但子查询自身是多表连接的查询。

Q09 带有分组、排序、聚集、子查询操作并存的查询操作。子查询的父层查询不存在其他查询对象,是格式相对简单的子查询,但子查询自身是多表连接的查询。子查询中使用了LIKE操作符,有的查询优化器不支持对LIKE操作符进行优化。

Q10 带有分组、排序、聚集操作并存的多表连接查询操作。查询语句没有从语法上限制返回多少条元组,但是TPC-H标准规定,查询结果只返回前10行(通常依赖于应用程序实现)。

Q11 带有分组、排序、聚集、子查询操作并存的多表连接查询操作。子查询位于分组操作的HAVING条件中。

Q12 带有分组、排序、聚集操作并存的两表连接查询操作。

Q13 带有分组、排序、聚集、子查询、左外连接操作并存的查询操作。

Q14 使用逻辑判断(WHEN ELSE)的查询

Q15 带有分排序、聚集、聚集子查询操作并存的普通表与视图的连接操作。

Q16 带有分组、排序、聚集、去重、NOT IN子查询操作并存的两表连接操作。

Q17 带有聚集、聚集子查询操作并存的两表连接操作。

Q18 带有分组、排序、聚集、IN子查询操作并存的三表连接操作。查询语句没有从语法上限制返回多少条元组,但是TPC-H标准规定,查询结果只返回前100行(通常依赖于应用程序实现)。

Q19 带有分组、排序、聚集、IN子查询操作并存的三表连接操作。

Q20带有排序、聚集、IN子查询、普通子查询操作并存的两表连接操作。

Q21 带有分组、排序、聚集、EXISTS子查询、NOT EXISTS子查询操作并存的四表连接操作。查询语句没有从语法上限制返回多少条元组,但是TPC-H标准规定,查询结果只返回前100行(通常依赖于应用程序实现)。

Q22 带有分组、排序、聚集、EXISTS子查询、NOT EXISTS子查询操作并存的四表连接操作。

TPCH度量指标

测试中测量的基础数据都与执行时间有关,这些时间又可分为:装载数据的每一步操作时间、每个查询执行时间和每个更新操作执行时间,由这些时间可计算出:数据装载时间、QphH@Size, Power@Size, and Throughput@Size.

  • 装载数据时间
    装载数据的全过程有记时操作和不记时操作之分,记时操作必须测量所用时间,并计入到数据装载时间中。一般情况下,需要记时的操作有建表、插入数据和建立索引。

  • 查询和更新时间
    在Power 测试和Throughput 测试中所有查询和更新流的时间必须被测量和记录,每个查询时间的计时是从被提交查询的第一个字符开始到获得查询结果最后一个字符的时间为止。更新时间要分别测量RF1 和RF2 的时间,是从提交操作开始到完成操作结束的时间。

  • Power@Size
    Power@Size 是Power 测试的结果,被定义为查询时间和更改时间的几何平均值的倒数,Power@Size计算DBMS计算单个查询到得出结果的速度,公式如下:
    在这里插入图片描述
    其中:Size 为数据规模;SF 为数据规模的比例因子;QI (i,0)为第 i个查询的时间,以秒为单位;RI(j , 0)为 RFj更新的时间,以秒为单位。

  • Throughput@Size
    Throughput@Size 是Throughput 测试的结果,被定义为所有查询执行时间平均值的倒数,公式如下:
    在这里插入图片描述
    其中,S是执行的查询流的数量,Ts是运行s流的吞吐量测试所需的总时间。

  • QphH@Size
    在这里插入图片描述

    每小时查询性能(QphH@Size)度量,它是从前两个指标的几何平均值中获得的,并反映了数据库处理查询的能力的多个方面。

参考博客

链接: https://www.cnblogs.com/joyeecheung/p/3599698.html
链接: https://blog.csdn.net/hehong_78/article/details/6091011
链接: https://blog.csdn.net/leixingbang1989/article/details/8766047
链接: https://blog.csdn.net/weixin_30329623/article/details/101092449
链接: https://blog.csdn.net/iteapoy/article/details/104214119

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

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

相关文章

pg数据库导入TPCH数据

一、安装pg数据库 Linux环境PostgreSQL源码编译安装 在Linux上安装pg数据库可以参考这篇博客 在Windows上安装pg数据库在官网上有简易的安装包 二、下载TPCH数据 可以从官网中下载&#xff0c;但是要填写一大堆资料&#xff0c;还可能半天通不过。 可以直接从下方的百度网盘…

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

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

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

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

微信聊天记录数据分析

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

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

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

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

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

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

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

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

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

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

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

爬取QQ音乐(周杰伦)

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

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

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

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

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

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

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

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

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

周杰伦的歌里都有些啥?

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

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

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

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

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

HTML网页设计:周杰伦网站

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

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

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