用 TPCH 练习性能优化

一、 数据准备

利用TPCH官方工具生成文本文件形式的原始数据,共8个表,数据量总规模100G,各文件大小见后表。

然后根据这些文本文件生成SPL的二进制文件,每个表对应一个二进制文件。

组表有一些索引信息,总会有一个最低的空间占用,不适合存储小数据表。因此这里小数据表采用行式的集文件,以减少存储量,计算时全部读入。大数据表使用列式的组表,并以主键作为维,在转存时要用sortx()排序。

1.1 region/nation

生成集成文件,以region表为例:


A

1

=file("region.tbl").import(; , "|").new(_1:R_REGIONKEY, _2:R_NAME, _3:R_COMMENT).sort(R_REGIONKEY)

2

=file("region.btx").export@b(A1)

集文件不需要显式创建数据结构,直接写出数据即可。

1.2 customer/supplier/part/orders

生成组表,以customer表为例:


A

1

=file("customer.tbl").cursor(; , "|").new(_1:C_CUSTKEY, _2:C_NAME, _3:C_ADDRESS, _4:C_NATIONKEY, _5:C_PHONE, _6:C_ACCTBAL, _7:C_MKTSEGMENT, _8:C_COMMENT).sortx(C_CUSTKEY;15000000)

2

=file("customer.ctx").create(#C_CUSTKEY, C_NAME, C_ADDRESS, C_NATIONKEY, C_PHONE, C_ACCTBAL, C_MKTSEGMENT, C_COMMENT)

3

>A2.append(A1)

组表创建时要列出数据结构并指明主键字段(前面加#),数据要按主键排序。sortx的第二个参数可根据内存大小来确定,省略不写也能工作。

1.3 partsupp/lineitem

partsupplineitem分别是partorders的子表。要保证子表和主表同步分段,创建组表时要用@p选项,以lineitem表为例:


A

1

=file("lineitem.tbl").cursor(; , "|").new(_1:L_ORDERKEY, _4:L_LINENUMBER, _2:L_PARTKEY, _3:L_SUPPKEY, _5:L_QUANTITY, _6:L_EXTENDEDPRICE,_7:L_DISCOUNT, _8:L_TAX, _9:L_RETURNFLAG, _10:L_LINESTATUS,_11:L_SHIPDATE, _12:L_COMMITDATE, _13:L_RECEIPTDATE,_14:L_SHIPINSTRUCT, _15:L_SHIPMODE, _16:L_COMMENT).sortx(L_ORDERKEY,L_LINENUMBER;4000000)

2

=file("lineitem.ctx").create@p(#L_ORDERKEY,#L_LINENUMBER,L_PARTKEY, L_SUPPKEY, L_QUANTITY, L_EXTENDEDPRICE,L_DISCOUNT, L_TAX, L_RETURNFLAG, L_LINESTATUS, L_SHIPDATE, L_COMMITDATE, L_RECEIPTDATE,L_SHIPINSTRUCT, L_SHIPMODE, L_COMMENT)

3

>A2.append(A1)

A2中使用了@p,会确保在数据分段时不会把L_ORDERKEY相同的记录分到两段,以获得正确的并行计算结果。

二、 数据文件大小

原始文件大小、SPL文件大小见下表。

数据表名

数据行数

tbl大小

ctx/btx大小

region

5

1K

8K

nation

25

2K

10K

customer

1500

2.4G

1.3G

part

2000

2.4G

1.0G

supplier

100

140M

0.1G

partsupp

8000

12.2G

4.9G

orders

1.5亿

17.8G

7.2G

lineitem

6亿

79.5G

29.4G

三、 TPCH练习详细解析

TPCH练习性能优化Q1

TPCH练习性能优化Q2

TPCH练习性能优化Q3

TPCH练习性能优化Q4

TPCH练习性能优化Q5

TPCH练习性能优化Q6

用TPCH练习性能优化Q7

TPCH练习性能优化Q8

TPCH练习性能优化Q9

TPCH练习性能优化Q10

TPCH练习性能优化Q11

TPCH练习性能优化Q12

TPCH练习性能优化Q13

TPCH练习性能优化Q14

TPCH练习性能优化Q15

TPCH练习性能优化Q16

TPCH练习性能优化Q17

TPCH练习性能优化Q18

TPCH练习性能优化Q19

TPCH练习性能优化Q20

TPCH练习性能优化Q21

TPCH练习性能优化Q22



附:早期版本 从 TPCH 测试学习性能优化技巧