从版本15开始,IQ开始支持分区。大家可能会问:如何查看一个表是否分区,使用的是什么分区,分区位于哪些dbspace上。本文将结合一些例子,说明这些问题的解决方法。
1. 创建示例表
create table table_1(id int , name char(8), date_sttc char(8),primary key(id)) ;
insert into table_1 values(1,'aaaaa','20140110'), (2,'bbbbb','20140111'),(3,'ccccc','20140112'), (4,'ddddd','20140411'),(5,'eeeee','20140414');
commit;
2. 把表改为使用范围分区
ALTER TABLE table_1
PARTITION BY RANGE(DATE_STTC) ( p1 VALUES (MAX) IN iq_main2);
3. 查看表分区类型
IQ 16支持的分区类型有"范围分区","哈希分区"、"哈希-范围分区"
执行下面的sql脚本(get_partition_type.sql),可以获得指定表的分区类型:
--get_partition_type.sql
PARAMETERS table_name ;
select s.table_name,
case
when ps.partition_method = 1 then 'range partition'
when ps.partition_method = 3 and ifnull(ps.subpartition_method,0,ps.subpartition_method) = 0 then 'hash partition'
when ps.partition_method = 3 and ifnull(ps.subpartition_method,0,ps.subpartition_method) = 1 then 'hash-range partition'
else 'unknow partition'
end as partition_type
from systab s , syspartitionscheme ps
where s.table_name = '{table_name}'
and s.object_id = ps.partitioned_object_id;
使用dbisql执行上面的sql脚本,并传递表明参数:
dbisql -c "uid=DBA;pwd=sql" -onerror exit -nogui READ get_par_info.sql ['table_1']
4. 查看表分区所分布的dbspace信息
执行如下语句:
select dbspace_name from sp_iqdbspaceinfo() where object_name = 'table_1'
输出为 iq_main
大家可能会问,在上面的ALTER TABLE语句中指定了p2分区位于iq_main2 dbspace,为什么显示的只有iq_main ?
这是因为定义的p2分区中还没有数据,所以使用这个存储过程看不到。如果想看到表所有分区各自所在的dbspace的信息,使用存储过程 sp_iqdbspaceobjectinfo(),它的用法与sp_iqdbspaceinfo基本相同。
例如:
select dbspace_name, partitions from sp_iqdbspaceobjectinfo() where object_name = 'table_1'
输出为:
dbspace_name partitions
------------------ -----------
iq_main 1/2
iq_main2 1/2
partions字段的含义是有2个分区,在iq_main dbspace上有一个分区,在iq_main2上有1个分区