有一种方法,但是它并不是特别“容易”。
您可以做的是利用dbt 生成的工件。
manifest.json
: 由compile
, run
, test
, docs generate
,制作ls
run_results.json
: 由run
, test
, seed
, snapshot
,制作docs generate
catalog.json
: 由。。。生产docs generate
可以在run_results
和中找到实现更改的信息manifest
。但是,在您向 CI 添加检查以便提前失败的上下文中,您希望在收到来自dbt run
. 所以你实际上可以生成manifest.json
with dbt compile
。
在nodes
清单的键中,每个节点都会有一个config.materialized
您可以查看的键。您可以使用命令行或 python 对其进行解析,并将结果存储到一个 JSON 文件中,该文件包含每个模型的具体化信息。例如,该文件可以签入到您的代码中。
cat target/manifest.json | jq '.nodes | to_entries | map({node: .key, materialized: .value.config.materialized})' > old_state.json
然后在您对 dbt 代码进行更改后,您需要运行
dbt compile # generates new manifest.json
cat target/manifest.json | jq '.nodes | to_entries | map({node: .key, materialized: .value.config.materialized})' > new_state.json
然后,您可以diff
在命令行中使用 eg 比较两种状态。我将在这里放置一个示例输出:
$ diff old_state.json new_state.json
12c12
< "materialized": "table"
---
> "materialized": "view"
正如我所说,这并不“容易”,但我希望我的回答能给你一些关于如何继续得到你想要的东西的想法。如果您对更多细节感兴趣,可以查看我关于该主题的博客文章。