パーティション分割のヒント - AWS Clean Rooms

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

パーティション分割のヒント

パーティショニングヒントは、エグゼキュターノード間のデータ分散を制御します。複数のパーティショニングヒントを指定すると、複数のノードが論理プランに挿入されますが、左端のヒントはオプティマイザによって選択されます。

COALESCE

パーティションの数を指定されたパーティションの数に減らします。

パラメータ: 数値 (必須) - 1~2147483647 の正の整数である必要があります

例:

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

REPARTITION

指定されたパーティショニング式を使用して、指定された数のパーティションにデータを再パーティション化します。ラウンドロビン分散を使用します。

パラメータ :

  • 数値 (オプション) - パーティションの数。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;

REPARTITION_BY_RANGE

指定された列で範囲パーティショニングを使用して、指定された数のパーティションにデータを再パーティション化します。

パラメータ :

  • 数値 (オプション) - パーティションの数。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;