您可以通过创建混合分区(Hybrid Partition)的方式来访问存储在不同引擎中的数据。
混合分区原理如下图所示:

前提条件
- 集群版本需为PolarDB MySQL版8.0.2版本且Revision version为8.0.2.2.5及以上。您可以通过查询版本号确认集群版本。
- OSS上已存在需要创建的分区的数据文件,且数据文件名称需要符合以下命名规则:
- 扩展名和分区标记大写。
- 表名和分区名与数据库中的名称保持一致。
t1
的p1
分区为CSV引擎,则该分区的数据文件命名为:t1#P#p1.CSV
。
注意事项
- 创建的混合分区表至少需要包含一个在InnoDB引擎上创建的分区。
- 创建包含二级分区的混合分区表时,一级分区的引擎必须和表的引擎保持一致,且二级分区至少需要包含一个在InnoDB引擎上创建的分区。
- 混合分区表的分区表类型目前仅支持
RANGE
和LIST
类型。 - 暂不支持对混合分区表执行
ALTER TABLE
操作。 - 暂不支持对混合分区表中的OSS分区执行DML操作(包括
INSERT
、UPDATE
、DELETE
和LOAD
)。
参数说明
使用混合分区表时,您可以根据实际使用场景在PolarDB集群的参数配置中设置以下参数。
参数 | 说明 |
---|---|
hybrid_partition_query_mix_engine_enabled | 查询混合分区表时,是否查询非InnoDB引擎中的分区数据。 取值如下:
|
创建混合分区
您可以通过已有的OSS Server来创建混合分区,如果当前不存在OSS Server,您可以通过以下语法来创建OSS Server:参数说明如下表所示:
CREATE SERVER oss_server_name
FOREIGN DATA WRAPPER oss
OPTION(EXTRA_SERVER_INFO '{"oss_endpoint": "<my_oss_endpoint>",
"oss_bucket": "<my_oss_bucket>", "oss_access_key_id": "<my_oss_access_key_id>",
"oss_access_key_secret": "<my_oss_access_key_secret>", "oss_prefix":"<my_oss_prefix>", "oss_sts_token": "<my_oss_sts_token>"}');
说明 集群版本为PolarDB MySQL版8.0.2版本且Revision version为8.0.2.2.6及以上时,支持使用
my_oss_sts_token
参数。参数 | 类型 | 备注 |
---|---|---|
oss_server_name | 字符串 | OSS server名称。 说明 该参数为全局参数,且全局唯一。该参数不区分大小写,最大长度不超过64个字符,超过64个字符的名称会被自动截断。您可以将OSS server名称指定为带引号的字符串。 |
my_oss_endpoint | 字符串 | OSS对应区域的域名。 说明 如果是从阿里云的主机访问数据库,应该使用内网域名(即带有“internal”的域名),避免产生公网流量。 |
my_oss_bucket | 字符串 | 数据文件所在OSS的bucket,需要通过OSS预先创建。 |
my_oss_access_key_id | 字符串 | OSS账号ID。 |
my_oss_access_key_secret | 字符串 | OSS账号KEY。 |
my_oss_prefix | 字符串 | OSS路径前缀。 |
my_oss_sts_token | 字符串 | OSS临时访问凭证。获取OSS临时访问凭证详情请参见获取临时访问凭证。 说明 my_oss_sts_token 参数值有默认的过期时间。如果my_oss_sts_token 已过期,您需要通过以下命令重置EXTRA_SERVER_INFO 中的全部参数值。
|
创建混合分区表,示例如下:
CREATE TABLE t2(a1 INT, a2 VARCHAR(30), a3 VARCHAR(256))
CONNECTION = "oss_server_name"
PARTITION BY RANGE(a1)
(
PARTITION p1 values less than (1000) ENGINE = CSV,
PARTITION p2 values less than (2000) ENGINE = CSV,
PARTITION p3 values less than (3000) ENGINE = INNODB
);
查询混合分区
您可以通过以下两种方式来查询不同引擎的分区数据。
- 在控制台将
hybrid_partition_query_mix_engine_enabled
参数设置为ON,执行查询语句时,查询结果中就会包含非InnoDB分区的数据。示例如下:
其中,select * from t1;
t1
表示需要查询的混合分区表。 - 在控制台将
hybrid_partition_query_mix_engine_enabled
参数设置为OFF,查询指定分区中的数据。示例如下:
其中,select * from t1 partition (p1);
t1
表示需要查询的混合分区表,p1
表示需要查询的分区。