选择 SQL 结构,先看 问题.
连接用于关联实体,子查询和 CTE 用于组织逻辑,分析运算符用于计算上下文相关的值,物化视图则可避免重复计算。
合并、判断或排除匹配的实体。
为中间逻辑命名,组织复杂查询。
计算排名、累计值和同序值相关的结果。
通过透明改写复用已存储的结果。
连接用于关联实体,子查询和 CTE 用于组织逻辑,分析运算符用于计算上下文相关的值,物化视图则可避免重复计算。
合并、判断或排除匹配的实体。
为中间逻辑命名,组织复杂查询。
计算排名、累计值和同序值相关的结果。
通过透明改写复用已存储的结果。
内连接、外连接、半连接、反连接和交叉连接即使用相同的关联键,回答的问题也不同。
只保留满足连接条件的行对。
还会保留一侧或两侧未匹配的行。
只要存在至少一个匹配项,就返回指定一侧的行。
仅当不存在匹配项时,才返回指定一侧的行。
生成两侧输入的笛卡尔积。
使用范围或不等式条件进行连接,通常通过嵌套循环实现。
Broadcast、Shuffle、Bucket Shuffle 和 Colocate 策略对数据分布位置的要求依次提高,相应的灵活性也逐渐降低。
子查询将一个关系查询嵌入另一个查询;CTE 为中间结果集命名,也可用于表达递归层级。
将值、集合或关系嵌入另一个表达式。
在主语句之前为一个查询阶段命名。
GROUPING SETS 指定确切的分组组合,ROLLUP 增加层级汇总,CUBE 生成所有分组组合。
只计算明确指定的分组组合。
沿有序的维度层级添加小计。
计算各维度的所有分组组合。
窗口函数在保留各行明细的同时,添加排名、偏移值、累计聚合值和同序值相关的计算结果。
别名函数简化迁移,Java 和 Python UDF 增加自定义计算能力,复杂类型则让嵌套值保持可查询。
映射兼容的名称或可复用的表达式。
实现标量、聚合、窗口或表函数逻辑。
当 Python 生态带来的价值足以抵消额外开销时,使用 Python 逻辑。
无需先展开数据,即可查询数组、映射、结构体和 JSON。
同步物化视图为单表查询提供强一致性的加速;异步物化视图通过受控刷新支持复杂的多表结果。
随基表数据一起维护,用于加速单表查询。
按刷新策略更新的灵活存储结果。