如果某个 query 确定不希望走并行执行框架,使用 NO_USE_PX 拉回数据并生成本地执行计划。
PARALLEL
指定并行执行的并行度。启用 3 个 worker 并行执行扫描,如下例所示:
ordered hint 指定并行查询计划中 join 的顺序,严格按照 from 中的顺序生成。如下例所示,强制要求 customer 为左表,orders 为右表,并且使用 nested loop join:
在手写 SQL 时,ordered 较为有用,用户知道 join 的最佳顺序时,可以将表按照顺序写在 from 的后面,然后加上 ordered hint。
LEADING
leading hint 指定并行查询计划中最先 join 哪些表, leading 中表从左到右的顺序,也是 join 的顺序。它比 ordered 有更大的灵活性。
PQ hint ( pq_distribute ) 指定并行查询计划中的数据分布方式。PQ hint 会改变分布式 join 时的数据分发方式。
PQ hint 的基本语法为:
其中:
- tablespec 指定关注的表,关注 join 的右表
- outer_distribution 指定左表的数据分发方式
两表的数据分发方式共有六种:
- Hash, Hash
- Broadcast, None
- None, Broadcast
- Partition, None
- None, None
其中,带分区的两种分发方式要求左表或右表有分区,而且分区键就是 join 的键。如果不满足要求的话,PQ hint 不会生效。
USE_NL
如下例所示,如果希望 join1 为 nested loop join,则 hint 写法为 leading(a, (b,c)) use_nl((b,c))
。和 ordered、leading hint 一起使用时,如果 use_nlj 中注明的表不是右表,则 use_nlj hint 被忽略。
use_hash hint 指定 join 使用 hash join。需要满足 use_hash 中指定的表是 join 的右表。
USE_MERGE
use_merge hint 指定 join 使用 merge join。需要满足 use_merge 中指定的表是 join 的右表。