Skip to content

按分区访问数据

虚谷数据库针对分区表提供了按分区访问数据的功能,用户可以在查询语句中指定访问任意分区的数据。

语法格式

sql
parti_query::=
    SELECT column_list FROM table_name opt_parti_clip_clause;

opt_parti_clip_clause::=
    /*EMPTY*/
|   PARTITION ( part_name_list )
|   SUBPARTITION ( subpart_name_list )

参数说明

  • column_list:访问目标列。
  • table_name:访问目标表。
  • opt_parti_clip_clause:指定访问目标分区。
  • part_name_list:一级分区的分区名列表,多个分区以逗号分隔。
  • subpart_name_list:二级分区的分区名列表,多个分区以逗号分隔。

示例

  • 示例1
    分别指定查询分区的数据。

    sql
    -- 创建表test_query1,并创建一级分区
    CREATE TABLE test_query1(id INT,name VARCHAR,city VARCHAR)
    PARTITION BY LIST(city) PARTITIONS(
    part1 VALUES('成都'),
    part2 VALUES('重庆'),
    part3 VALUES('北京'),
    part4 VALUES(OTHERVALUES));
      
    -- 插入数据
    INSERT INTO test_query1 VALUES(1,'路人1','成都'); 
    INSERT INTO test_query1 VALUES(2,'路人2','重庆');
    INSERT INTO test_query1 VALUES(3,'路人3','重庆');
    INSERT INTO test_query1 VALUES(4,'路人4','成都');
    INSERT INTO test_query1 VALUES(5,'路人5','成都');
    INSERT INTO test_query1 VALUES(6,'路人6','北京');
      
    -- 查询part1的数据并按id进行排列
    SELECT id,name,city FROM test_query1 PARTITION(part1) ORDER BY id;
    
    ID | NAME | CITY | 
    ------------------------------------------------------------------------------
    1 | 路人1| 成都|
    4 | 路人4| 成都|
    5 | 路人5| 成都|
    
    -- 查询part1和part3的数据并按id进行排列
    SELECT id,name,city FROM test_query1 PARTITION(part1,part3) ORDER BY id;
    
    ID | NAME | CITY | 
    ------------------------------------------------------------------------------
    1 | 路人1| 成都|
    4 | 路人4| 成都|
    5 | 路人5| 成都|
    6 | 路人6| 北京|
  • 示例2
    分别指定查询二级分区的数据。

    sql
    -- 创建表test_query2,并创建一级分区和二级分区
    CREATE TABLE test_query2(id INT,name VARCHAR,city VARCHAR,addr VARCHAR)
    PARTITION BY LIST(city) PARTITIONS(
    part1 VALUES('成都'),
    part2 VALUES('北京'),
    part3 VALUES(OTHERVALUES))
    SUBPARTITION BY LIST(addr) SUBPARTITIONS(
    subpart1 VALUES ('高新区'),
    subpart2 VALUES ('锦江区'),
    subpart3 VALUES ('西城区'),
    subpart4 VALUES ('东城区'));
    
    -- 插入数据
    INSERT INTO test_query2 VALUES(1,'路人1','成都','高新区');
    INSERT INTO test_query2 VALUES(2,'路人2','成都','锦江区');
    INSERT INTO test_query2 VALUES(3,'路人3','成都','锦江区');
    INSERT INTO test_query2 VALUES(4,'路人4','北京','西城区');
    INSERT INTO test_query2 VALUES(5,'路人5','北京','西城区');
    INSERT INTO test_query2 VALUES(6,'路人6','北京','东城区');
    
    -- 查询subpart2的数据并按id进行排列
    SELECT id,name,city,addr FROM test_query2 SUBPARTITION(subpart2) ORDER BY id;
    
    ID | NAME | CITY | ADDR | 
    ------------------------------------------------------------------------------
    2 | 路人2| 成都| 锦江区|
    3 | 路人3| 成都| 锦江区|
    
    -- 查询subpart2和subpart3的数据并按id进行排列
    SELECT id,name,city,addr FROM test_query2 SUBPARTITION(subpart2,subpart3) ORDER BY id;
    
    ID | NAME | CITY | ADDR | 
    ------------------------------------------------------------------------------
    2 | 路人2| 成都| 锦江区|
    3 | 路人3| 成都| 锦江区|
    4 | 路人4| 北京| 西城区|
    5 | 路人5| 北京| 西城区|

说明:

通过PARTITIONSUBPARTITION关键字指定分区查找语法和PG指定表别名以及输出字段名语法冲突。设计上表现为不抛出语法错误。若要查询不同分区数据,应严格参照以上语法进行查询。