結合ヒント - AWS Clean Rooms

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

結合ヒント

結合ヒントは、クエリ実行の結合戦略を提案します。構文、引数、およびいくつかの例は、Apache Spark SQL リファレンスから入手できます。

ブロードキャスト

ブロードキャスト結合 AWS Clean Rooms を使用することをお勧めします。ヒントを含む結合側は、autoBroadcastJoinThreshold に関係なくブロードキャストされます。結合の両側にブロードキャストヒントがある場合、サイズが小さいもの (統計に基づく) がブロードキャストされます。

エイリアス: BROADCASTJOIN、MAPJOIN

パラメータ: テーブル識別子 (オプション)

例:

-- Broadcast a specific table SELECT /*+ BROADCAST(students) */ e.name, s.course FROM employees e JOIN students s ON e.id = s.id; -- Broadcast multiple tables SELECT /*+ BROADCASTJOIN(s, d) */ * FROM employees e JOIN students s ON e.id = s.id JOIN departments d ON e.dept_id = d.id;

MERGE

シャッフルソートマージ結合 AWS Clean Rooms を使用することをお勧めします。

エイリアス: SHUFFLE_MERGE、MERGEJOIN

パラメータ: テーブル識別子 (オプション)

例:

-- Use merge join for a specific table SELECT /*+ MERGE(employees) */ * FROM employees e JOIN students s ON e.id = s.id; -- Use merge join for multiple tables SELECT /*+ MERGEJOIN(e, s, d) */ * FROM employees e JOIN students s ON e.id = s.id JOIN departments d ON e.dept_id = d.id;

SHUFFLE_HASH

シャッフルハッシュ結合 AWS Clean Rooms の使用を提案します。両側にシャッフルハッシュヒントがある場合、クエリオプティマイザはビルド側として小さい側 (統計に基づく) を選択します。

パラメータ: テーブル識別子 (オプション)

例:

-- Use shuffle hash join SELECT /*+ SHUFFLE_HASH(students) */ * FROM employees e JOIN students s ON e.id = s.id;

SHUFFLE_REPLICATE_NL

ネストされたループ結合にshuffle-and-replicate AWS Clean Rooms を使用することをお勧めします。

パラメータ: テーブル識別子 (オプション)

例:

-- Use shuffle-replicate nested loop join SELECT /*+ SHUFFLE_REPLICATE_NL(students) */ * FROM employees e JOIN students s ON e.id = s.id;

Spark SQL のヒントのトラブルシューティング

次の表は、SparkSQL でヒントが適用されない一般的なシナリオを示しています。詳細については、「考慮事項と制限事項」を参照してください。

ユースケース クエリの例
テーブルリファレンスが見つかりません
SELECT /*+ BROADCAST(fake_table) */ * FROM employees e INNER JOIN students s ON e.eid = s.sid;
結合オペレーションに参加していないテーブル
SELECT /*+ BROADCAST(s) */ * FROM students s WHERE s.age > 25;
ネストされたサブクエリのテーブルリファレンス
SELECT /*+ BROADCAST(s) */ * FROM employees e INNER JOIN (SELECT * FROM students s WHERE s.age > 20) sub ON e.eid = sub.sid;
テーブル参照の代わりに列名
SELECT /*+ BROADCAST(e.eid) */ * FROM employees e INNER JOIN students s ON e.eid = s.sid;
必須パラメータのないヒント
SELECT /*+ BROADCAST */ * FROM employees e INNER JOIN students s ON e.eid = s.sid;
テーブルエイリアスではなくベーステーブル名
SELECT /*+ BROADCAST(employees) */ * FROM employees e INNER JOIN students s ON e.eid = s.sid;