按分区访问数据
虚谷数据库针对分区表提供了按分区访问数据的功能,用户可以在查询语句中指定访问任意分区的数据。
语法格式
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| 北京| 西城区|
说明:
通过
PARTITION
和SUBPARTITION
关键字指定分区查找语法和PG指定表别名以及输出字段名语法冲突。设计上表现为不抛出语法错误。若要查询不同分区数据,应严格参照以上语法进行查询。