从版本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个分区 

10-17 23:56