暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

带你玩儿转TPC-H测试基准

DLab数据实验室 2021-09-10
1141

导读在做一些大数据相关的系统或引擎优化的时候,避免不了要对引擎进行测试。那么用什么样的数据、用哪些负载才能够使测试更具有权威性呢?TPC系列测试基准想必不用多介绍了,本文主要来分享一下如何快速入手tpch测试基准,亲测有用。

作者:小舰 中国人民大学计算机硕士
来源:DLab数据实验室(ID:rucdlab)




TPC测试标准分类联机在线事务处理系统(OLTP)测试标准:TPC-C、TPC-E(最新)

决策支持/大数据(DS)测试标准:TPC-H、TPC-DS(最新)

服务器虚拟化(VMS)测试标准:TPC-VMS


1.TPC-H下载

可以去官网下载 www.tpc.org/tpch/  TPCH_Tools.zip  后台回复tpch可以获取

2.使用
1.解压
# unzip TPCH_Tools.zip

2.配置
# cd tpch_2_17_0/dbgen/
# cp makefile.suite makefile
生成ORACLE数据库的脚本和数据
主要修改以下参数值
# vim makefile
-----
CC = gcc
DATABASE= ORACLE
MACHINE = LINUX
WORKLOAD = TPCH
-----

3. 生成执行命令,生成dbgen
# make --生成dbgen
# ./dbgen -s 1 --生成1GB数据
# ./dbgen -s 0.01 --生成10MB数据,可用于功能测试


3.查看结果
执行完生成数据命令后,可以在当前目录的
(1)queries目录中看到查询负载sql
(2)当前目录看到8个*.tbl文件,就是你生成好的数据文件
把他们拷贝到别的地方就行了


4.导入Hive
可以有不同的方法,下面以其中一个表【customer】为例介绍一种可行的方法:

mkdir customer
mv customer.tbl customer/

## 1.进入hive

hive


## 2.创建一个数据库

CREATE DATABASE tpch;


## 3.创建外表

Create external table customer (C_CUSTKEY INT , C_NAME STRING , C_ADDRESS STRING , C_NATIONKEY INT , C_PHONE STRING , C_ACCTBAL DOUBLE , C_MKTSEGMENT STRING , C_COMMENT STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS TEXTFILE LOCATION '/mnt/sdj1/tpch/g100/customer'; 

##此地址为hdfs地址


## 4.将数据导入hive

LOAD DATA LOCAL INPATH '/mnt/sdj1/tpch/g100/customer/customer.tbl' INTO TABLE customer; 

##此地址为你的数据文件真实本地地址


## 5.完毕,可以发现hdfs中的地址里面已经导入了数据文件,查询hive表也有了数据 


5.导入GaussDB
##我这里是导入GaussDB,其实跟导入mysql,postgresql一样,最重要的就是去掉每一行尾部的竖线分隔符

##1.去除分隔符
=====
[root@msap-01 customer]# head -3 customer.tbl
1|Customer#000000001|IVhzIApeRb ot,c,E|15|25-989-741-2988|711.56|BUILDING|to the even, regular platelets. regular, ironic epitaphs nag e|
2|Customer#000000002|XSTf4,NCwDVaWNe6tEgvwfmRchLXak|13|23-768-687-3665|121.65|AUTOMOBILE|l accounts. blithely ironic theodolites integrate boldly: caref|
3|Customer#000000003|MG9kdTD2WBHm|1|11-719-748-3364|7498.12|AUTOMOBILE| deposits eat slyly ironic, even instructions. express foxes detect slyly. blithely even accounts abov|

======


## 2.把所有的*.tbl文件放到同一个目录下,然后执行如下脚本进行分隔符去除,并另存为同名的csv文件中

# for i in `ls *.tbl`; do sed 's/|$//' $i > ${i/tbl/csv}; done


=====
1|Customer#000000001|IVhzIApeRb ot,c,E|15|25-989-741-2988|711.56|BUILDING|to the even, regular platelets. regular, ironic epitaphs nag e
2|Customer#000000002|XSTf4,NCwDVaWNe6tEgvwfmRchLXak|13|23-768-687-3665|121.65|AUTOMOBILE|l accounts. blithely ironic theodolites integrate boldly: caref
3|Customer#000000003|MG9kdTD2WBHm|1|11-719-748-3364|7498.12|AUTOMOBILE| deposits eat slyly ironic, even instructions. express foxes detect slyly. blithely even accounts abov
=====
看,已经没有了最后的下划线

##3.建表
我们同样用一个表来进行演示
CREATE TABLE NATION ( N_NATIONKEY INTEGER NOT NULL,
                          N_NAME       CHAR(25) NOT NULL,
                          N_REGIONKEY INTEGER NOT NULL,
                          N_COMMENT   VARCHAR(152));

## 4.将数据导入表中                

Copy nation FROM 'your/adress/nation.tbl' WITH DELIMITER AS '|'; 

#不同的数据库导入语句可能不一样,mysql应该是load命令


## 5.创建主、外键
ALTER TABLE NATION ADD PRIMARY KEY (N_NATIONKEY);
ALTER TABLE NATION ADD FOREIGN KEY (N_REGIONKEY) references REGION;
其他表类似

## 6.高斯数据库也可以通过挂外表的方式进行导数
(1)创建外表
DROP FOREIGN TABLE IF EXISTS ext_orders_10g;
CREATE FOREIGN TABLE ext_orders_10g
(
  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          
)
SERVER gsmpp_server
OPTIONS(
LOCATION 'gsfs://IP:port/orders_10g/orders.csv',
FORMAT 'CSV' ,
DELIMITER '|',
ENCODING 'utf8',
HEADER 'false',
FILL_MISSING_FIELDS 'true',
IGNORE_EXTRA_DATA 'true'
)
READ ONLY
LOG INTO product_info_err
PER NODE REJECT LIMIT 'unlimited';

(2)插入内表

insert into orders_10g select * from ext_orders_10g ;

(3)完毕,查询已经有了数据
select count(*) from orders_10g;


以上提供了两种类型的数据管理系统的基准使用案例(思路),仅供参考交流。



Presto引擎如何适配不同的Hive表存储格式


SQL引擎如何把语句转换为一个抽象语法树

文章转载自DLab数据实验室,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论