在 DBT 中更新 Table
Updating Table in DBT
我有两个 SQL 脚本,正在尝试将它们翻译成 DBT。
问题陈述如下:-
当前解
SQL 脚本 1 创建 table 和 SQL 脚本 2 使用以下查询更新 table
UPDATE T1
SET C4 = 3.3 WHERE C1 = 'US'
现在,我想将这些创建和更新作业(Script1 和 Script 2)移动到 DBT。
DBT 解决方案
我在DBT中创建了一个名为T1.sql的模型,它在数据库中创建了Table T1,其内容如下:-
SELECT * FROM member;
现在为了根据上述标准更新 table,我将 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 文件中,这样我们就不需要创建任何其他新的 table 来实现这个目标?
这是您的 T1.sql
文件:
SELECT * FROM member
此查询 returns table 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
模型 T1
基本上就是你的 T1.sql
文件。
代码 2 与 CTE
这将是您的整个 t1.sql 文件:根据提供的 case 语句更新您的 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
如果我对你的问题的理解正确,你需要运行根据外部状态进行不同的查询。
您可以添加一个标志作为 DBT 变量1 并使用不同的查询以防您希望再次更新或创建它。
假设您将变量称为“更新”并且值为布尔值,您可以:
{% if update %}
Select c1,c2,c3,
case when c1 = ‘US’ then 3.3 else c4 end as c4
from t1
{% else %}
SELECT * FROM member;
{% endif %}
您还可以使用以下方法在 sql 文件的开头设置变量:
{% set update = True %}
我有两个 SQL 脚本,正在尝试将它们翻译成 DBT。
问题陈述如下:-
当前解
SQL 脚本 1 创建 table 和 SQL 脚本 2 使用以下查询更新 table
UPDATE T1
SET C4 = 3.3 WHERE C1 = 'US'
现在,我想将这些创建和更新作业(Script1 和 Script 2)移动到 DBT。
DBT 解决方案
我在DBT中创建了一个名为T1.sql的模型,它在数据库中创建了Table T1,其内容如下:-
SELECT * FROM member;
现在为了根据上述标准更新 table,我将 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 文件中,这样我们就不需要创建任何其他新的 table 来实现这个目标?
这是您的 T1.sql
文件:
SELECT * FROM member
此查询 returns table 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
模型 T1
基本上就是你的 T1.sql
文件。
代码 2 与 CTE 这将是您的整个 t1.sql 文件:根据提供的 case 语句更新您的 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
如果我对你的问题的理解正确,你需要运行根据外部状态进行不同的查询。
您可以添加一个标志作为 DBT 变量1 并使用不同的查询以防您希望再次更新或创建它。
假设您将变量称为“更新”并且值为布尔值,您可以:
{% if update %}
Select c1,c2,c3,
case when c1 = ‘US’ then 3.3 else c4 end as c4
from t1
{% else %}
SELECT * FROM member;
{% endif %}
您还可以使用以下方法在 sql 文件的开头设置变量:
{% set update = True %}