Databricks中嵌套CTE的SQL查询逻辑解析请求
嵌套CTE查询执行逻辑拆解
先把你的查询代码贴出来,方便对应讲解:
WITH lax_bos AS ( WITH origin_destination (origin_airport, destination_airport) AS ( SELECT origin, destination FROM external_table ) SELECT * FROM origin_destination WHERE origin_airport = 'LAX' AND destination_airport = 'BOS' ) SELECT count(origin_airport) AS `Total Flights from LAX to BOS` FROM lax_bos;
咱们从内到外一步步拆解执行过程:
最内层CTE:origin_destination
这一步从external_table里取出origin(出发机场)和destination(到达机场)两个字段,同时给它们起别名origin_airport和destination_airport,生成一个临时数据集,里面存着所有航班的出发、到达机场信息。中层CTE:lax_bos
这个CTE基于上面的origin_destination临时数据集,添加过滤条件:只保留origin_airport为LAX(洛杉矶机场)且destination_airport为BOS(波士顿机场)的记录,相当于从所有航班里筛选出「洛杉矶飞波士顿」的航班,生成一个仅包含这类航班的临时数据集。主查询:统计航班总数
最后一步统计lax_bos数据集中origin_airport的数量,因为每条记录对应一个航班,所以统计结果就是LAX到BOS的总航班数,也就是你看到的684。
其实这个嵌套写法有点冗余,完全可以合并成单个CTE,效果完全一致:
WITH lax_bos AS ( SELECT origin AS origin_airport, destination AS destination_airport FROM external_table WHERE origin = 'LAX' AND destination = 'BOS' ) SELECT count(origin_airport) AS `Total Flights from LAX to BOS` FROM lax_bos;
内容的提问来源于stack exchange,提问作者Jessica Calkins
相关产品推荐
相关产品推荐

