加入提示 - AWS Clean Rooms

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

加入提示

联接提示建议查询执行的联接策略。语法、参数和一些示例来自《Apache Spark SQL 参考》以获取更多信息

广播

建议 AWS Clean Rooms 使用广播加入。无论 autoBroadcastJoin阈值如何,带有提示的加入方都会被广播。如果联接的两边都有广播提示,则将广播大小较小的那个(基于统计数据)。

别名:广播加入、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;

SHUFF_HASH

建议 AWS Clean Rooms 使用 shuffle 哈希联接。如果双方都有 shuffle 哈希提示,则查询优化器会选择较小的一方(基于统计数据)作为构建方。

参数:表标识符(可选)

示例:

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

SHUFFLE_REPLICATE_NL

建议 AWS Clean Rooms 使用 shuffle-and-replicate嵌套循环联接。

参数:表标识符(可选)

示例:

-- 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;