了解 Babelfish 中的分区
从版本 4.3.0 开始,Babelfish 引入了表和索引分区,但支持受限。以下各节提供了有关在 Babelfish 中创建分区函数、定义分区方案以及实现分区表和索引的详细信息。
Babelfish 中的分区简介
-
分区函数:
-
CREATE PARTITION FUNCTION:
通过指定分区列类型和每个分区的值范围,定义如何对表或索引进行分区。 -
DROP PARTITION FUNCTION:
移除现有的分区函数。
-
-
分区方案:
-
CREATE PARTITION SCHEME:
定义分区和文件组之间的映射。注意
在 Babelfish 中,文件组被视为虚拟对象,并不表示物理存储位置。
-
DROP PARTITION SCHEME:
移除现有的分区方案。
-
-
系统函数:
-
$PARTITION:
此系统函数返回指定分区表的某个分区列中的指定值所属的分区编号。
-
-
分区表和索引:
-
CREATE TABLE ... ON partition_scheme_name (partition_column_name):
根据指定的分区方案和分区列创建分区表。 -
CREATE INDEX ... ON partition_scheme_name (partition_column_name):
根据指定的分区方案和分区列创建分区索引。
-
-
用于对元数据进行分区的系统视图:
添加了以下系统视图来提供与分区相关的元数据:
-
sys.destination_data_spaces
-
sys.partitions
-
sys.partition_functions
-
sys.partition_parameters
-
sys.partition_range_values
-
sys.partition_schemes
-
限制和解决方法
以下限制适用于 Babelfish 中的分区。
-
尚不支持
ALTER PARTITION FUNCTION
和ALTER PARTITION SCHEME
。注意
由于 Babelfish 尚不支持拆分或合并操作,因此,必须事先在分区函数中预定义所有分区,因为无法添加或移除分区。
-
尚不支持将计算列作为分区列。
-
分区表尚不支持
INSERT BULK
和BCP
实用程序。 -
尚不支持分区函数的
LEFT
边界选项。 -
分区函数尚不支持
SQL_VARIANT
数据类型。 -
尚不支持
TRUNCATE TABLE ... WITH PARTITION
。 -
尚不支持
ALTER TABLE ... SWITCH PARTITION
。 -
不支持未对齐的分区索引,例如与分区表不同的分区方案和分区列。
-
只有分区表上的完全加载任务才支持从 Babelfish 源迁移 DMS。
-
尚不支持以下语法,但有解决方法:
在 CREATE TABLE 语句中使用带有约束或索引的分区方案。
ALTER TABLE ... ADD CONSTRAINT ... ON partition_scheme_name (partition_column_name)。
注意
可以将
babelfishpg_tsql.escape_hatch_storage_on_partition
转义孵化设置为忽略。这将支持解析器忽略与约束或索引一起使用的分区方案选项,并且后端将为每个分区创建单独的约束或索引。