DBT 中有没有一种方法可以通过查看文件夹结构以派生方式为模型创建自定义架构?
\n例如,假设这是我的结构:
\nmodels\n\xe2\x94\x94-- product1\n \xe2\x94\x94-- team1\n | \xe2\x94\x94-- model1.sql\n \xe2\x94\x94-- team2\n \xe2\x94\x94-- model2.sql\nRun Code Online (Sandbox Code Playgroud)\n在这种情况下, model1.sql 将在 schema 中创建product1_team1,而 model2.sql 将在 schema 中创建product1_team2。我想我可以在文件中“手动”指定这些内容dbt_project.yml,但我想知道是否有一种方法可以自动执行此操作 - 以便每个新模型或文件夹都会在正确的模式中自动创建。
我正在查看自定义模式宏(https://docs.getdbt.com/docs/building-a-dbt-project/building-models/using-custom-schemas),但它似乎是简单的 jinja 或简单的 Python 内置 -插入。不确定我如何能够访问这些宏中的文件夹路径。
\n另外,有没有办法用Python编写宏?因为知道文件路径和操作系统模块可能相对简单。
\n我的目标是能够根据我正在进行的 DBT 运行类型获得“动态”源。更准确地说,我正在尝试找到一种解决方案来对我们的 DBT 模型进行端到端的业务测试。我指的不是模式或简单的数据测试,而是业务逻辑测试。比如,我有一些带有测试数据的输入表,我运行 DBT 模型,然后断言最终表包含所需的结果。我可以使用不同的“测试”配置文件在单独的模式中创建所有目标表,但我仍然需要能够从一组不同的源中进行选择,这将是我使用测试数据创建的测试表。
我想我可以在源文件中结合使用 jinja 和一些变量来实现这一点,但我想知道是否有更好的方法可以在不更改源文件的情况下做到这一点。就像,开发人员不必担心编写也适用于测试的代码。为此,我想知道我们是否可以覆盖源宏,或者按照这些思路做一些事情,以合并此行为 - 类似于我们覆盖宏时generate_schema_name。类似的东西(在 python 伪代码中):
def source(schema_name, table_name):
if env('is_test') == true:
return schema_name + table_name + '_test'
else:
return schema_name + table_name
Run Code Online (Sandbox Code Playgroud)
我想这里的复杂性还在于源宏的作用远不止于此,例如为文档的谱系设置一些信息,我绝对想保留这些信息。
在此方法之外的任何建议都非常受欢迎!
我正在 SQL Server 2017 中工作,我有一个以下形式的表:
表当前
COL1 COL2
-----------
A 1
B 3
C 56
Run Code Online (Sandbox Code Playgroud)
我想定期将其插入表中tbl_release。
该表将有一个额外的 ID 列,我希望随着每次“批量插入”自动递增。tbl_current例如,假设我执行into的摄取tbl_release,它看起来像这样:
tbl_release
ID COL1 COL2
----------------
1 A 1
1 B 3
1 C 56
Run Code Online (Sandbox Code Playgroud)
现在,假设我使用相同的数据执行另一次摄取,它看起来像:
tbl_release
ID COL1 COL2
----------------
1 A 1
1 B 3
1 C 56
2 A 1
2 B 3
2 C 56
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最佳方法是什么?是否有一些 SQL Server 功能可以实现此目的,或者我是否需要运行一些子查询?