翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
パーティション分割のヒント
パーティショニングヒントは、エグゼキュターノード間のデータ分散を制御します。複数のパーティショニングヒントを指定すると、複数のノードが論理プランに挿入されますが、左端のヒントはオプティマイザによって選択されます。
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;