db2分区表创建实战个案分享

1、db2分区表概 述:

DB2是一种关系型数据库管理系统,支持分区表的创建。分区表是将大型表分成多个小表的一种方式,以提高查询和维护的效率。在创建分区表时,需要指定分区键和分区数,分区键是用于将数据分配到不同分区的列,分区数是指分区的数量。分区表的创建可以通过命令行或者图形化界面完成,具体步骤包括创建表空间、定义分区键、创建分区表等。分区表的使用可以提高数据库的性能和可伸缩性,使得大型数据集的查询和维护变得更加高效。

2、常规的分区表定义格式


db2 "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 '2018-01-01' ENDING '2018-06-30',
  STARTING '2018-07-01' ENDING '2018-12-31',
  STARTING '2019-01-01' ENDING '2019-06-30',
  STARTING '2019-07-01' ENDING '2019-12-31',
  ENDING MAXVALUE)"

3、创建实际测试分区表

db2 "CREATE TABLE  pptab (
IDNUM VARCHAR(18) , 
USERID VARCHAR(40) , 
BUSINESSCODE VARCHAR(10) , 
SENDTIME VARCHAR(20) ,     
ORGID VARCHAR(12) , 
INTERCODE VARCHAR(15) , 
ISSUEOFFICE VARCHAR(90) , 
IDNAME VARCHAR(60) , 
RECVTIME VARCHAR(25) , 
CHECKRES VARCHAR(5) , 
IDNUMMD5 VARCHAR(50) , 
MDLNUM VARCHAR(30) , 
TIMEDIFFERENCE VARCHAR(3) , 
ISUP VARCHAR(1) , 
CHECKFROM VARCHAR(1) , 
RECORDID BIGINT NOT NULL , 
REQUESTTYPE VARCHAR(1) , 
CHECKSIGN VARCHAR(100) , 
TRANSACNUM VARCHAR(5) , 
SESSIONID VARCHAR(100) , 
TRANSFAILFLAG VARCHAR(2) WITH DEFAULT '0' , 
CRTKIND VARCHAR(2) , 
LASTDATE VARCHAR(20) , 
BANKCODE VARCHAR(12) )   

PARTITION BY RANGE(SENDTIME ) 
(
PARTITION PART01 STARTING '1000-01-01 00:00:00' INCLUSIVE  ENDING '2018-08-31 59:59:59' INCLUSIVE,
PARTITION PART02 STARTING '2018-09-01 00:00:00' INCLUSIVE  ENDING '2018-09-30 59:59:59' INCLUSIVE,
PARTITION PART03 STARTING '2018-10-01 00:00:00' INCLUSIVE  ENDING '2018-10-31 59:59:59' INCLUSIVE,
PARTITION PART04 STARTING '2018-11-01 00:00:00' INCLUSIVE  ENDING '2018-11-30 59:59:59' INCLUSIVE, 
PARTITION PART05 STARTING '2018-12-01 00:00:00' INCLUSIVE  ENDING '2018-12-31 59:59:59' INCLUSIVE,
PARTITION PART06 STARTING '2019-01-01 00:00:00' INCLUSIVE  ENDING '9999-12-31 59:59:59' INCLUSIVE
)
DISTRIBUTE BY HASH (SENDTIME)"       


4、查看分布信息并建立索引

db2 describe data partitions for table pptab  show detail

--检查分区表数据在各分区的分布情况
$ db2 "SELECT DATAPARTITIONNUM(SENDTIME) Partition, COUNT(*) Total_Rows FROM pptab group by DATAPARTITIONNUM(SENDTIME) order by DATAPARTITIONNUM(SENDTIME)"

--建立索引

db2 "create index I_SENDTIME on pptab(SENDTIME) in Index_dms"  


5、load数据导入数据 

db2 "load from T_SINGLECHECK_HISTORY.del of del    insert into  pptab"

--要避免在平面文件中创建第三份数据副本,请发出 LOAD 命令以将数据从 SQL 查询直接放入新分区表。
   SELECT * FROM t1;
   DECLARE c1 CURSOR FOR SELECT * FROM t1; 
   LOAD FROM c1 of CURSOR INSERT INTO sales_dp;SELECT * FROM sales_dp;

6、插入一条不在范围内的 测试数据

db2 "insert into  pptab values ('370823194501081524','908040400002','01','liumingji','241000007','001008004007','此项暂不返回核查结果','孔凡荣','2018-09-17 09:30:00','00','3708231945010815247573245b46615b356c2a3326bc7a3682','0','01','0','0',80917093000547,'1',null,null,null,'0','2',null,'402461900070')"

报错 DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL0327N  The row cannot be inserted into table "DB2INST1.PPTAB" because it is 
outside the bounds of the defined data partition ranges.  SQLSTATE=22525

7、分离一个分区

db2 "ALTER TABLE pptab DETACH PARTITION PART06 INTO  pp_part06"
db2 "select * from pp_part06"

8.将分离出来分区添加回去

db2 "ALTER TABLE pptab ATTACH PARTITION part06 
STARTING '2019-01-01 00:00:00' INCLUSIVE  ENDING '9999-12-31 59:59:59' INCLUSIVE
FROM pp_part06"

如果pp_part06不存在,要先创建一个表结构同分区表的pp_part06的普通表

SQL3601W  The statement caused one or more tables to automatically be placed 
in the Set Integrity Pending state.  SQLSTATE=01586

db2 describe data partitions for table pptab show detail

PartitionId Inclusive (y/n)                   Inclusive (y/n)
              Low Value                         High Value
----------- - ------------------------------- - -------------------------------
          0 Y '1000-01-01 00:00:00'           Y '2018-08-31 59:59:59'          
          1 Y '2018-09-01 00:00:00'           Y '2018-09-30 59:59:59'          
          2 Y '2018-10-01 00:00:00'           Y '2018-10-31 59:59:59'          
          3 Y '2018-11-01 00:00:00'           Y '2018-11-30 59:59:59'          
          4 Y '2018-12-01 00:00:00'           Y '2018-12-31 59:59:59'          
          5 Y '2019-01-01 00:00:00'           Y '9999-12-31 59:59:59'          

  6 record(s) selected.


PartitionId PartitionName                   TableSpId   PartObjId   IndexTblSpId LongTblSpId AccessMode
                                                                                               Status
----------- ------------------------------- ----------- ----------- ------------ ----------- - ------
          0 PART01                                    3          92            3           3 F                                 
          1 PART02                                    3          93            3           3 F                                 
          2 PART03                                    3          94            3           3 F                                 
          3 PART04                                    3          95            3           3 F                                 
          4 PART05                                    3          96            3           3 F                                 
          5 PART06                                    3          97            3           3 N A  

9、设置新分区完整性
 

db2 "set integrity for pptab allow write access immediate checked incremental"
db2 "SELECT DATAPARTITIONNUM(SENDTIME) Partition, COUNT(*) Total_Rows FROM sfhc.T_SINGLECHECK_HISTORY group by DATAPARTITIONNUM(SENDTIME) order by DATAPARTITIONNUM(SENDTIME)"
db2 describe data partitions for table sfhc.T_SINGLECHECK_HISTORY
db2 "ALTER TABLE sfhc.T_SINGLECHECK_HISTORY ADD PARTITION  par84 starting '2021-01-01 00:00:00' ending '2021-01-31 59:59:59'"
db2 "ALTER TABLE sfhc.T_SINGLECHECK_HISTORY ADD PARTITION  85 starting '2021-02-01 00:00:00' ending '2021-02-31 59:59:59'"

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

力哥讲技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值