如何用dbt单模型更新其他Schema中的表?求计数递增实现示例
实现dbt模型完成后自动累加处理计数
1. 先创建计数表
首先需要在数据库中创建一张仅存一行数据的计数表,你可以通过dbt模型或者直接在数据库中执行以下SQL完成:
CREATE TABLE IF NOT EXISTS model_process_counter ( process_count INT DEFAULT 0 ); -- 仅需执行一次,初始化表中数据 INSERT INTO model_process_counter (process_count) SELECT 0 WHERE NOT EXISTS (SELECT 1 FROM model_process_counter);
2. 通过post_hook实现计数累加
你可以选择全局配置(所有模型生效)或者单个模型配置(指定模型生效):
全局配置(所有模型运行后触发)
在项目根目录的dbt_project.yml中添加以下配置,替换your_project_name为你的实际项目名称:
models: your_project_name: +post-hook: | UPDATE model_process_counter SET process_count = process_count + 1;
单个模型配置(仅特定模型触发)
如果只需要部分模型完成后累加计数,直接在对应模型的SQL文件头部添加config配置:
{{ config( post_hook=""" UPDATE model_process_counter SET process_count = process_count + 1; """ ) }} -- 此处编写你的模型核心SQL逻辑 SELECT ...
3. 验证效果
运行dbt模型后,执行以下SQL查询计数表即可看到结果:
SELECT process_count FROM model_process_counter;
每成功运行一个配置了hook的模型,process_count数值就会自动加1。
注意事项
- 确保dbt所使用的数据库账号拥有
UPDATE该计数表的权限 - 只有模型成功运行完成后,post_hook才会执行;如果模型运行失败,计数不会被累加
- 若使用增量模型,每次增量同步完成后同样会触发计数,若不需要此行为,可以针对增量模型单独调整hook逻辑
内容的提问来源于stack exchange,提问作者Jerry
相关产品推荐
相关产品推荐

