sql - 在 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 文件中,这样我们就不需要创建任何其他新表来实现这一点?
解决方案
这是你的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
的模型。T1
T1.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
推荐阅读
- chart.js - 我的 Doughnut.js 上的 setInterval
- html - 无法将正确的网站数据导入 Excel
- spring-boot - Spring Boot 未检测到控制器不存在
- firebase - Firebase - Firebase 存储文件如何从浏览器控制台变得“不可下载”?
- python-2.7 - 为什么 PIL 中的“ValueError:图像是只读的”
- r - R在具有动物园滞后功能的ddply循环中第一次而不是第二次找到我的对象-无法弄清楚如何修改代码
- javascript - 使用带有箭头函数参数的 filter() 方法
- android - SchedPolicy:set_timerslack_ns 写入失败:不允许操作
- active-directory - 方式(ldapsearch,getenv passwd,java API)无法搜索 uidNumber,但已在 Microsoft AD 中设置
- regex - 如何仅提取包含子域的 URL