查询水平分区

查询分区可以根据一级子分区表名或二级子分区表名进行查询,也通过给定条件对分区表进行查询,如语法中的partition_key_value,subpartition_key_value。注意partition_key_value的个数必须等于一级子分区键个数,subpartition_key_value定义的value的个数,必须等于一级子分区键的个数与二级子分区键的个数总和。

查询分区表举例

示例1:查询一级分区表

--  清理环境
DROP TABLE tab;

-- 创建分区表
CREATE TABLE tab
( 
    id NUMERIC(6),
    time_id DATE,
    status VARCHAR(2)
)
PARTITION BY RANGE (time_id)
SUBPARTITION BY LIST (status)
(
    PARTITION p1 VALUES LESS THAN ('2006-APR-01')
    ( 
        SUBPARTITION p1_a VALUES ('A1', 'A2'),
        SUBPARTITION p1_b VALUES ('B1', 'B2', 'B3')
    ),
    PARTITION p2 VALUES LESS THAN ('2006-JUL-01')
    ( 
        SUBPARTITION p2_a VALUES ('A1', 'A2'),
        SUBPARTITION p2_b VALUES ('B1', 'B2', 'B3')
    )
);

--查询一级分区表
DROP TABLE tab;
CREATE TABLE tab
(
    c1 INT, 
    c2 INT
)
PARTITION BY HASH(c1)
(
    PARTITION p1,
    PARTITION p2
);


SELECT * FROM tab;
C1(int)      |C2(int)      |
总数目:0


SELECT * FROM tab PARTITION(p1);
C1(int)      |C2(int)      |
总数目:0


SELECT * FROM tab PARTITION FOR(5);
C1(int)      |C2(int)      |
总数目:0

示例2:查询二级分区表

--  清理环境
DROP TABLE tab;

-- 创建分区表
CREATE TABLE tab
( 
    id INT,
    status VARCHAR(2)
)
PARTITION BY RANGE (id)
SUBPARTITION BY LIST (status)
(
    PARTITION p1 VALUES LESS THAN (10)
    ( 
        SUBPARTITION p1_a VALUES ('A1', 'A2'),
        SUBPARTITION p1_b VALUES ('B1', 'B2', 'B3')
    ),
    PARTITION p2 VALUES LESS THAN (20)
    ( 
        SUBPARTITION p2_a VALUES ('A1', 'A2'),
        SUBPARTITION p2_b VALUES ('B1', 'B2', 'B3')
    )
);


--查询二级分区表
SELECT * FROM tab;
ID(int)      |STATUS(varchar)      |
总数目:0


SELECT * FROM tab PARTITION(p1);
ID(int)      |STATUS(varchar)      |
总数目:0


SELECT * FROM tab SUBPARTITION(p1_a);
ID(int)      |STATUS(varchar)      |
总数目:0


SELECT * FROM tab SUBPARTITION FOR(10,'A1');
ID(int)      |STATUS(varchar)      |
总数目:0