优化 SQL 查询流程

问题描述 投票:0回答:1

我想看看在雪花中编写 SQL 的最有效方法是什么。以下是问题陈述。

  1. 包含事件数据的表 A,其中有 1 列 X。表将具有重复的 X 值。
  2. 带有映射数据的表 B,有 2 列 X1、T
  3. 自定义函数“function1”,它进行API调用并生成T列值。

理想情况下,如果映射表 B 中所有映射值都可用,则只需在表 A 和表 B 之间进行左连接就足够了,如下所示

with cte1 as ( Select X, T from TABLE A 
LEFT JOIN TABLE B on A.X = B.X1);

但在某些情况下,映射表 B 还没有新的 X 列映射,因此我需要对表 A 的不同列 X 应用 API 调用,该列 X 在映射表 B 中没有映射值,因此可以进行最少的 API 调用.

missing_values_table as (Select function1(distinct X) from cte1 where T is NULL);

在上述步骤之后,将结果与 MAPPING TABLE B 合并以使用新记录进行更新,最后再次在 TABLE A 和 Table B 之间进行 LEFT JOIN 以获取输出表。

表A

X 列
ab
zx
ab
cb
抄送
抄送

表B

X1 列 T 栏
ab 汤姆
zx 银行

输出表:

X 列 T 栏
ab 汤姆
zx 银行
ab 汤姆
CB
抄送 黄金
抄送 黄金

表B

X1 列 T 栏
ab 汤姆
zx 银行
cb
抄送 黄金

我尝试了上述方法,不确定这是否有效。请告诉我是否有更好的方法,以便我可以避免两个 LEFT JOINS,似乎重复

sql optimization snowflake-cloud-data-platform query-optimization common-table-expression
1个回答
0
投票

为什么不使用 SQL Set Difference 操作来获取

Table A.x
Table B.x1

之间的差异

在MySQL中查询:

select distinct A.x from A
where A.x NOT IN (Select distinct B.x1 from B)

结果:db<>小提琴

© www.soinside.com 2019 - 2024. All rights reserved.