

# 了解 Babelfish 中的分区
<a name="babelfish-partition"></a>

从版本 4.3.0 开始，Babelfish 引入了表和索引分区，但支持受限。以下各节提供了有关在 Babelfish 中创建分区函数、定义分区方案以及实现分区表和索引的详细信息。

**Topics**
+ [Babelfish 中的分区简介](#babelfish-partition-function-views)
+ [限制和解决方法](#babelfish-partition-limitations)

## Babelfish 中的分区简介
<a name="babelfish-partition-function-views"></a>
+ **分区函数：**
  + `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`

## 限制和解决方法
<a name="babelfish-partition-limitations"></a>

Babelfish 尚不支持以下 SQL Server 分区功能：
+ `ALTER PARTITION FUNCTION` 和 `ALTER PARTITION SCHEME`
**注意**  
Babelfish 不支持拆分和合并操作。创建时在分区函数中定义所有分区，因为您以后无法添加或移除分区。
+ 计算列作为分区列。
+ 分区表的 `INSERT BULK` 和 `BCP` 实用程序。
+ 分区函数的 `LEFT` 边界选项。
+ 分区函数的 `SQL_VARIANT` 数据类型。
+ `TRUNCATE TABLE ... WITH PARTITION`.
+ `ALTER TABLE ... SWITCH PARTITION`.
+ 未对齐的分区索引，例如与分区表不同的分区方案和分区列。
+ 只有分区表上的完全加载任务才支持从 Babelfish 源迁移 DMS。
+ 在分区函数中使用排序规则。
+ 使用具有默认数据库排序规则以外的排序规则的分区列。
+ Babelfish 不支持这些语法选项，但提供了解决方法：
  + 在 CREATE TABLE 语句中使用带有约束或索引的分区方案。
  + ALTER TABLE ... ADD CONSTRAINT ... ON partition\$1scheme\$1name (partition\$1column\$1name)。
**注意**  
可以将 `babelfishpg_tsql.escape_hatch_storage_on_partition` 转义孵化设置为忽略。这将支持解析器忽略与约束或索引一起使用的分区方案选项，并且后端将为每个分区创建单独的约束或索引。