Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1083316
  • 博文数量: 106
  • 博客积分: 9093
  • 博客等级: 中将
  • 技术积分: 2770
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-01 17:22
文章分类

全部博文(106)

文章存档

2014年(1)

2012年(29)

2011年(32)

2010年(20)

2008年(24)

分类:

2008-04-16 11:53:12

目标:
  • 创建范围分区表
  • 分区的转入和转出
  • 分区表的管理
  • 索引管理和放置

创建分区表

这个实验将探讨创建分区表、将数据载入分区表以及使用 describe 命令来说明表范围的方法:

  1. 您将登录并为所有的练习设置基本环境。
  2. 您将创建不同格式的分区表并加载数据。
  3. 您将使用 DB2 命令和 SQL 查看结果。
  4. 将对 DB2 9 表范围分区进行概述。



命令窗口

  1. 登录到您的机器,如图 1 所示,使用 db2inst1。
  2. 打开终端窗口(Linux)或 DB2 命令窗口(windows)。
  3. 切换到 scripts 子目录。



                                
    cd /scripts or
    cd c:\scripts

  4. 使用 db2start 命令启动 DB2,并连接到 SAMPLE 数据库。



                                
    db2start

    db2 connect to SAMPLE

这一节将介绍分区表的基本创建和加载。您将创建不同格式的表、验证创建结果、加载数据并对表进行查询。

  1. 使用如下的数据定义语言(DDL)创建具有四个范围的 LINEITEM 表:



                                
    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 文件中,可使用如下命令运行该文件:



                                
    db2 –vtf EX1-6.sql

  2. 使用下面的命令说明为 LINEITEM 表创建的分区的范围:



                                
    db2 describe data partitions for table LINEITEM




    命令窗口


    注意:创建了四个数据分区。其中的范围包括边界值。

  3. 将数据导入到 LINEITEM 表。该操作的导入命令位于 EX1-8.sql 文件中,可使用如下命令运行:



                                
    db2 –vtf EX1-8.sql




    命令窗口


    注意:导入时拒绝了 729 行数据,这是因为它们不具有位于当前 LINEITEM 表的数据分区定义范围内的 l_shipdate。
  4. 标量函数可用于显示行所属的数据分区号(datapartitionnum)。执行以下示例 SQL 查看标量函数的输出:



                                
    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”




    命令窗口


    注意:标量函数(datapartitionnum)返回的值和 describe 命令返回的是同一个 PartitionId。该语句的子句间使用的谓词范围超出了 PartitionId 0 和 PartitionId 1 的边界

  1. 创建具有两个额外数据分区的新 LINEITEM 表,其中一个分区用来捕获低于当前范围的值,另一个分区用来捕获高于当前范围的值。首先使用下面的命令删除现有的 LINEITEM 分区表:



                                
    db2 drop TABLE LINEITEM

    然后使用如下 DDL 创建 LINEITEM 表的新版本:



                                
    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 文件中,可使用下列命令运行:



                                
    db2 –vtf EX1-10.sql

  2. 使用下面的命令说明为 LINEITEM 表创建的分区范围。



                                
    db2 describe data partitions for table LINEITEM




    命令窗口


    注意:新的 MINVALUE 范围具有一个最高值,该值和下一个数据分区开始部分的值相等,但它并不包含该值。MAXVALUE 范围具有一个最低值,该值和前一个范围结束部分的值相等,但它不包含该值。这将创建一个无间隙的连续范围。

  3. 将数据导入到 LINEITEM 表中。该操作的导入命令位于 EX1-8.sql 文件中,可使用下面的命令运行该文件:



                                
    db2 –vtf EX1-8.sql




    命令窗口


  1. 创 建一个新 LINEITEM 表,它具有从 1992 年 1 月 1 日到 1998 年 12 月 31 日按月划分的数据分区生成范围。同样,添加 minvalue 和 maxvalue 范围来存放具有超过此范围的 l_shipdate 的值的行。首先使用以下命令删除现有的 LINEITEM 分区表:



                                
    db2 drop TABLE LINEITEM

    然后使用如下 DDL 创建 LINEITEM 表的新版本:



                                
    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 文件中,可使用下面的命令运行该文件:



                                
    db2 –vtf EX1-13.sql

  2. 使用如下命令来说明为 LINEITEM 表创建的分区范围:



                                
    db2 describe data partitions for table LINEITEM




    命令窗口


    注意:创建了 86 个数据分区,但是没有包括这些范围的最高值,因为这些最高值将和之后的数据分区的最低值重叠。

  3. 将数据导入到 LINEITEM 表。此操作的导入命令位于 EX1-8.sql 文件中,可使用下面的命令运行该文件:



                                
    db2 –vtf EX1-8.sql




    命令窗口


  4. 使用下面的 SQL 来验证 LINEITEM 表每一个数据分区的行数:



                                
    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 表的每一个数据分区的行数:



                                
    db2 –vtf EX1-16.sql




    命令窗口


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


阅读(19586) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~