DB2分区表中,分区键列中NULL值的处理

问题:


 DB2 分区表中,如果某条记录中,分区键所在的列的值为空,那么DB2会把它存放在哪个分区中?


答案:


 

  • CREATE TABLE 语句的 NULLS FIRST 和 NULLS LAST 子句指定考虑数据分区布置时将空值安排在高位置还是低位置。缺省情况下,将空值安排在高位置。在此情况下,将把表分区键列中的空值视为正无穷并放到以 MAXVALUE 结尾的范围中。如果未定义这样的数据分区,就会将空值视为超出范围的值。如果要排除表分区键列中的空值,请使用 NOT NULL 约束。LAST 指定让空值在排序的值列表中最后出现。FIRST 指定让空值在排序的值列表中最先出现。


测试:


 创建两个表,一个parition key column是nulls first,另一个是nulls last,发现前者的空值被放在MINVALUE所在的分区了,后者的空值被放在MAXVALUE所在的分区了


db2 "create tablespace tbsp1 managed by automatic storage"
db2 "create tablespace tbsp2 managed by automatic storage"
db2 "create tablespace tbsp3 managed by automatic storage"


db2 "create table table1(name char(20), value date) partition by range(value NULLS FIRST) (starting (MINVALUE) ending '2014-04-30' in tbsp1, starting '2014-05-01' ending '2014-08-31' in tbsp2, starting '2014-09-01' ending (MAXVALUE) in tbsp3)"
db2 "create table table2(name char(20), value date) partition by range(value NULLS LAST) (starting (MINVALUE) ending '2014-04-30' in tbsp1, starting '2014-05-01' ending '2014-08-31' in tbsp2, starting '2014-09-01' ending (MAXVALUE) in tbsp3)"


db2 "insert into table1 values('AugFirst', '2014-08-01')"
db2 "insert into table1 values('FebThird', '2014-02-02')"
db2 "insert into table1 values('nullvalue1', NULL)"
db2 "insert into table2 select * from table1"


db2 "select substr(datapartitionname, 1, 30) as datapartitionname,substr( LOWVALUE, 1, 30) as  LOWVALUE, substr(HIGHVALUE, 1, 30) as HIGHVALUE from syscat.datapartitions where tabname='TABLE1'"  
DATAPARTITIONNAME              LOWVALUE                       HIGHVALUE                     
------------------------------ ------------------------------ ------------------------------
PART0                          MINVALUE                       '2014-04-30'                  
PART1                          '2014-05-01'                   '2014-08-31'                  
PART2                          '2014-09-01'                   MAXVALUE                      


  3 record(s) selected.


db2 "alter table table1 DETACH PARTITION PART0 into temp1"
db2 "alter table table2 DETACH PARTITION PART2 into temp2"    


$ db2 "select * from temp1"


NAME                 VALUE     
-------------------- ----------
FebThird             02/02/2014
nullvalue1           -         


  2 record(s) selected.
  
$ db2 "select * from temp2"


NAME                 VALUE     
-------------------- ----------
nullvalue1           -         


  1 record(s) selected.
  
  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值