分区提示 - AWS Clean Rooms

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

分区提示

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

COALESCE

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

参数:数值(必填)-必须是介于 1 和 2147483647 之间的正整数

示例:

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

区分

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

参数:

  • 数值(可选)-分区数;必须是介于 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;

按范围重新分区

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

参数:

  • 数值(可选)-分区数;必须是介于 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;

再平衡

重新平衡查询结果输出分区,使每个分区的大小合理(不要太小也不要太大)。这是尽力而为的操作:如果存在偏差, 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;