这个实验将探讨创建分区表、将数据载入分区表以及使用 describe 命令来说明表范围的方法:
1.您将登录并为所有的练习设置基本环境。
2.您将创建不同格式的分区表并加载数据。
3.您将使用 DB2 命令和 SQL 查看结果。
4.将对 DB2 9 表范围分区进行概述。
登录和基本指令

图 1. 基本设置
登录到您的机器,如图 1 所示,使用 db2inst1。打开终端窗口(Linux)或 DB2 命令窗口(windows)。切换到 scripts 子目录。
清单 1. 切换目录
cd /scripts or
cd c:\scripts
使用 db2start 命令启动 DB2,并连接到 SAMPLE 数据库。
清单 2. StartDB2
db2start
db2 connect to SAMPLE
创建基本分区表
这一节将介绍分区表的基本创建和加载。您将创建不同格式的表、验证创建结果、加载数据并对表进行查询。
使用如下的数据定义语言(DDL)创建具有四个范围的 LINEITEM 表:
清单 3. 创建表
CREATE TABLE LINEITEM ( l_orderkey DECIMAL(10,0) NOT NULL, l_partkey INTEGER, l_suppkey INTEGER, l_linenumber INTEGER, l_quantity DECIMAL(12,2), l_extendedprice DECIMAL(12,2), l_discount DECIMAL(12,2), l_tax DECIMAL(12,2), l_returnflag CHAR(1), l_linestatus CHAR(1), l_shipdate DATE, l_commitdate DATE, l_receiptdate DATE, l_shipinstruct CHAR(25), l_shipmode CHAR(10), l_comment VARCHAR(44)) PARTITION BY RANGE(l_shipdate) ( STARTING '1/1/1992' ENDING '30/06/1992', STARTING '1/7/1992' ENDING '31/12/1992', STARTING '1/1/1993' ENDING '30/6/1993', STARTING '1/7/1993' ENDING '31/12/1993')
创建该表的 SQL 语句位于 EX1-6.sql 文件中,可使用如下命令运行该文件:
清单 4. 运行 EX1-6
db2 –vtf EX1-6.sql
使用下面的命令说明为 LINEITEM 表创建的分区的范围:
清单 5. 说明
db2 describe data partitions for table LINEITEM 
图 2. 说明为 LINEITEM 表创建的分区范围
注意:创建了四个数据分区。其中的范围包括边界值。
将数据导入到 LINEITEM 表。该操作的导入命令位于 EX1-8.sql 文件中,可使用如下命令运行:
清单 6. 带有拒绝的加载
db2 –vtf EX1-8.sql 
图 3. 将数据导入到 LINEITEM 表
注意:导入时拒绝了 729 行数据,这是因为它们不具有位于当前 LINEITEM 表的数据分区定义范围内的 l_shipdate。标量函数可用于显示行所属的数据分区号(datapartitionnum)。执行以下示例 SQL 查看标量函数的输出:
清单 7. 查询 - 匹配日期的分区
db2 “select datapartitionnum(l_shipdate) as PartitionId, l_shipdate from lineitem
where l_shipdate between ’01/06/1992’ and ‘31/07/1992’
order by l_shipdate” 
图 4. 标量函数的输出
注意:标量函数(datapartitionnum)返回的值和 describe 命令返回的是同一个 PartitionId。该语句的子句间使用的谓词范围超出了 PartitionId 0 和 PartitionId 1 的边界
具有全部范围的分区表
创建具有两个额外数据分区的新 LINEITEM 表,其中一个分区用来捕获低于当前范围的值,另一个分区用来捕获高于当前范围的值。首先使用下面的命令删除现有的 LINEITEM 分区表:
清单 8. 删除表
db2 drop TABLE LINEITEM
然后使用如下 DDL 创建 LINEITEM 表的新版本:
清单 9. 创建表
CREATE TABLE LINEITEM ( l_orderkey DECIMAL(10,0) NOT NULL, l_partkey INTEGER, l_suppkey INTEGER, l_linenumber INTEGER, l_quantity DECIMAL(12,2), l_extendedprice DECIMAL(12,2), l_discount DECIMAL(12,2), l_tax DECIMAL(12,2), l_returnflag CHAR(1), l_linestatus CHAR(1), l_shipdate DATE, l_commitdate DATE, l_receiptdate DATE, l_shipinstruct CHAR(25), l_shipmode CHAR(10), l_comment VARCHAR(44)) PARTITION BY RANGE(l_shipdate) ( STARTING MINVALUE, STARTING '1/1/1992' ENDING '30/06/1992', STARTING '1/7/1992' ENDING '31/12/1992', STARTING '1/1/1993' ENDING '30/6/1993', STARTING '1/7/1993' ENDING '31/12/1993', ENDING MAXVALUE)
创建该表的 SQL 位于 EX1-10.sql 文件中,可使用下列命令运行:
清单 10. 运行 EX1-10
db2 –vtf EX1-10.sql
使用下面的命令说明为 LINEITEM 表创建的分区范围。
清单 11. 说明
db2 describe data partitions for table LINEITEM 
图 5. 说明为 LINEITEM 表创建的分区范围
注意:新的 MINVALUE 范围具有一个最高值,该值和下一个数据分区开始部分的值相等,但它并不包含该值。MAXVALUE 范围具有一个最低值,该值和前一个范围结束部分的值相等,但它不包含该值。这将创建一个无间隙的连续范围。
将数据导入到 LINEITEM 表中。该操作的导入命令位于 EX1-8.sql 文件中,可使用下面的命令运行该文件:
清单 12. 全面加载
db2 –vtf EX1-8.sql 
图 6. 将数据导入到 LINEITEM 表中
具有生成范围的分区表
创建一个新 LINEITEM 表,它具有从 1992 年 1 月 1 日到 1998 年 12 月 31 日按月划分的数据分区生成范围。同样,添加 minvalue 和 maxvalue 范围来存放具有超过此范围的 l_shipdate 的值的行。首先使用以下命令删除现有的 LINEITEM 分区表:
清单 13. 删除表
db2 drop TABLE LINEITEM
然后使用如下 DDL 创建 LINEITEM 表的新版本:
清单 14. 创建表
CREATE TABLE lineitem (l_orderkey DECIMAL(10,0) NOT NULL, l_cpartkey INTEGER, l_suppkey INTEGER, l_linenumber INTEGER, l_quantity DECIMAL(12,2), l_extendedprice DECIMAL(12,2), l_discount DECIMAL(12,2), l_tax DECIMAL(12,2), l_returnflag CHAR(1), l_linestatus CHAR(1), l_shipdate DATE, l_commitdate DATE, l_receiptdate DATE, l_shipinstruct CHAR(25), l_shipmode CHAR(10), l_comment VARCHAR(44)) PARTITION BY RANGE(l_shipdate) (STARTING MINVALUE, STARTING '1/1/1992' ENDING '31/12/1998' EVERY 1 MONTH, ENDING MAXVALUE);
创建该表的 SQL 位于 EX1-13.sql 文件中,可使用下面的命令运行该文件:
清单 15. 运行 EX1-13
db2 –vtf EX1-13.sql
使用如下命令来说明为 LINEITEM 表创建的分区范围:
清单 16. 说明
db2 describe data partitions for table LINEITEM 
图 7. 说明为 LINEITEM 表创建的分区范围
注意:创建了 86 个数据分区,但是没有包括这些范围的最高值,因为这些最高值将和之后的数据分区的最低值重叠。将数据导入到 LINEITEM 表。此操作的导入命令位于 EX1-8.sql 文件中,可使用下面的命令运行该文件:
清单 17. 加载并生成
db2 –vtf EX1-8.sql 
图 8. 将数据导入到 LINEITEM 表
使用下面的 SQL 来验证 LINEITEM 表每一个数据分区的行数:
清单 18. 查询数据
db2 “select year(l_shipdate) as year, month(l_shipdate) as month,
count(*) as count from lineitem
group by year(l_shipdate), month(l_shipdate)
order by 1, 2”
使用以下的 SQL 语句验证 LINEITEM 表的每一个数据分区的行数:
清单 19. 查询数据脚本
db2 –vtf EX1-16.sql

图 9. 检验行数
注意:执行加载操作后,86 个范围中有 82 个范围包含一个或多个行。