觉得有用请留下赞和评价,谢谢~
1. 下载并且生产创建数据库所需文件
- 下载postgreSQL的dbgen(官网tpc.org或者Github(tpch-dbgen))
- 配置dbgen环境,我选择使用visual studio,参考这篇博客,需要配置(.net和C++桌面开发)
- 打开后生成项目,在生产的Debug文件下我dbgen.exe用shell执行 .\dbgeb.exe -s 0.001 生成1MB数据
参数 -s scale表示规模,可以生产相应大小的数据,默认1GB,所以不要直接执行
会出现缺少dist.dss错误,在根目录下复制到debug下即可
- 生成数据就在该文件夹下*.tbl
2. 创建数据表、导入数据以及建立约束
必须要先导入数据再创建约束,否则某些数据的外键不存在,出错
2.1 创建数据表
表定义语言在dss.ddl中,直接赋值到Query Editor即可
2.2 导入数据
使用命令行:
H:\postgreSQL\bin>.\psql.exe -h 127.0.0.1 -p 5432 -d TCPH -U postgres
用户 postgres 的口令:
psql (10.14)
输入 "help" 来获取帮助信息.
TCPH=# copy nation from 'G:\SQL\tbl\nation.tbl' WITH DELIMITER AS '|';
错误: 最后期望字段后有额外数据
ERROR:最后期望的数据有额外输入
原因:postgreSQl不允许最后有竖线,需要用脚本去掉,下面是去掉数据中最后竖线的python脚本,将.tbl表格放在同目录下即可
import os
files=os.listdir("./")
for file_name in files:
if file_name.endswith(".tbl"):
with open(file_name) as f:
text = f.read()
text=text.replace("|\n","\n")
# text=text[:-1]
os.remove(file_name)
with open(file_name,"w") as f:
f.write(text)
导入数据代码脚本:
copy lineitem from 'G:\SQL\tbl\lineitem.tbl' WITH DELIMITER AS '|';
copy nation from 'G:\SQL\tbl\nation.tbl' WITH DELIMITER AS '|';
copy orders from 'G:\SQL\tbl\orders.tbl' WITH DELIMITER AS '|';
copy part from 'G:\SQL\tbl\part.tbl' WITH DELIMITER AS '|';
copy partsupp from 'G:\SQL\tbl\partsupp.tbl' WITH DELIMITER AS '|';
copy region from 'G:\SQL\tbl\region.tbl' WITH DELIMITER AS '|';
copy supplier from 'G:\SQL\tbl\supplier.tbl' WITH DELIMITER AS '|';
由以下python脚本自动生成:
import os
files = os.listdir("./")
copy_scripts = []
for file in files:
if file.endswith(".tbl"):
table_name = file[:-4]
fm = r"copy {} from 'G:\SQL\tbl\{}.tbl' WITH DELIMITER AS '|';".format(table_name, table_name)
print(fm)
导入成功截图:会出现COPY+数字
2.2 建立约束
修改scheme的名字public为TPCD,
表约束语言在dss.ri中,写入Query Editor
TPCH scheme
参考
[TPCH 22条SQL语句分析](https://www.cnblogs.com/xibuhaohao/p/11413669.html)