首页 > 解决方案 > 在 DBT 中更新表

问题描述

我有两个 SQL 脚本,正在尝试将它们转换为 DBT。

问题陈述如下:-

在此处输入图像描述

当前解决方案

1 号 SQL 脚本创建表,2 号 SQL 脚本使用以下查询更新表

UPDATE T1 
SET C4 = 3.3 WHERE C1 = 'US'

现在,我想将这些创建和更新作业(脚本 1 和脚本 2)移至 DBT。

DBT解决方案

我在 DBT 中创建了一个名为 T1.sql 的模型,它在数据库中创建表 T1,其内容如下:-

SELECT * FROM member;

现在为了根据上述条件更新表,我将 SELECT 语句编写为

Select c1,c2,c3,
case when c1 = ‘US’ then 3.3 else c4 end as c4
from t1

现在的问题是我在哪里把它放在 SELECT 语句之上。我不能放入文件T1.sql因为每个 DBT 模型文件应该只有一个 SELECT 语句。如果是新文件,那么文件名应该是什么。我不能有多个名为“T1.sql”的文件。

有什么方法可以将这两个操作都包含在 T1.sql 文件中,这样我们就不需要创建任何其他新表来实现这一点?

标签: sqlamazon-redshiftdbt

解决方案


这是你的T1.sql文件:

SELECT * FROM member

此查询返回T1您提到的表。

现在您可以在 dbt 中创建一个新的 sql 文件,例如T2.sql,这T2.sql将具有以下代码:

select 
t1.*,
case when t1.c1 = ‘US’ then 3.3 else c4 end as c4
from {{ref('T1')}} as t1

这里 T2.sql 文件是基本上是你的文件referencing的模型。T1T1.sql

带有 CTE 的代码 2这将是您的整个 t1.sql 文件:根据提供的案例语句更新您的 c4 值

With initial_data as (
select * from member
)
select 
initital_data.*,
case when initital_data.c1 = ‘US’ then 3.3 else c4 end as c4
from initial_data as t1

推荐阅读