

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 分区提示
<a name="partitioning-hints"></a>

分区提示控制执行器节点之间的数据分发。当指定了多个分区提示时，会将多个节点插入到逻辑计划中，但最左边的提示由优化器选择。

### COALESCE
<a name="coalesce-hint"></a>

将分区数减少到指定的分区数。

*参数：*数值（必填）-必须是介于 1 和 2147483647 之间的正整数

*示例：*

```
-- Reduce to 5 partitions
SELECT /*+ COALESCE(5) */ employee_id, salary
FROM employees;
```

### 区分
<a name="repartition-hint"></a>

使用指定的分区表达式将数据重新分区到指定数量的分区。使用循环分发。

*参数：*
+ 数值（可选）-分区数；必须是介于 1 和 2147483647 之间的正整数
+ 列标识符（可选）-要分区的列；这些列必须存在于输入架构中。
+ 如果两者都指定，则必须先指定数值

*示例：*

```
-- Repartition to 10 partitions
SELECT /*+ REPARTITION(10) */ *
FROM employees;

-- Repartition by column
SELECT /*+ REPARTITION(department) */ *
FROM employees;

-- Repartition to 8 partitions by department
SELECT /*+ REPARTITION(8, department) */ *
FROM employees;

-- Repartition by multiple columns
SELECT /*+ REPARTITION(8, department, location) */ *
FROM employees;
```

### 按范围重新分区
<a name="repartition-by-range-hint"></a>

在指定列上使用范围分区将数据重新分区到指定数量的分区。

*参数：*
+ 数值（可选）-分区数；必须是介于 1 和 2147483647 之间的正整数
+ 列标识符（可选）-要分区的列；这些列必须存在于输入架构中。
+ 如果两者都指定，则必须先指定数值

*示例：*

```
SELECT /*+ REPARTITION_BY_RANGE(10) */ *
FROM employees;

-- Repartition by range on age column
SELECT /*+ REPARTITION_BY_RANGE(age) */ *
FROM employees;

-- Repartition to 5 partitions by range on age
SELECT /*+ REPARTITION_BY_RANGE(5, age) */ *
FROM employees;

-- Repartition by range on multiple columns
SELECT /*+ REPARTITION_BY_RANGE(5, age, salary) */ *
FROM employees;
```

### 再平衡
<a name="rebalance-hint"></a>

重新平衡查询结果输出分区，使每个分区的大小合理（不要太小也不要太大）。这是尽力而为的操作：如果存在偏差， AWS Clean Rooms 将拆分偏斜的分区以使其不会太大。当您需要将查询结果写入表中以避免文件太小或太大时，此提示很有用。

*参数：*
+ 数值（可选）-分区数；必须是介于 1 和 2147483647 之间的正整数
+ 列标识符（可选）-列必须出现在 SELECT 输出列表中
+ 如果两者都指定，则必须先指定数值

*示例：*

```
-- Rebalance to 10 partitions
SELECT /*+ REBALANCE(10) */ employee_id, name
FROM employees;

-- Rebalance by specific columns in output
SELECT /*+ REBALANCE(employee_id, name) */ employee_id, name
FROM employees;

-- Rebalance to 8 partitions by specific columns
SELECT /*+ REBALANCE(8, employee_id, name) */ employee_id, name, department
FROM employees;
```