dbt两个参数引用

问题描述

如何使用view1指代从view2ref('package_name','model_name')的相对路径?

/root_folder
   / project1
     /models
       view1.sql
     dbt_project.yml

   / project2
     /models
       view2.sql
     dbt_project.yml

the documentation中没有代码示例。

谢谢。

解决方法

project2了解project1中的模型的唯一方法是,project2是否在其project1文件中包含packages.yml作为包。然后您可以在view1中将ref('project1','view1')称为project2

您必须在此处检查语法,但是您可以像这样:在project1的{​​{1}}中包含project2

packages.yml中:

project2\packages.yml

不用说,您只需不拆分项目就可以避免很多麻烦。在大多数情况下,您不需要这样做,简单的文件夹化即可完成您可能需要的大部分工作。

,

尝试通过更多关注您的评论来回答问题:

对于 bigquery 上的每个数据集,我都有一个文件夹。我可以在一个文件夹中为多个数据集编写模型吗?

是的,你可以!

如果您不使用 bigquery,请快速记下 dbt 文档 "BigQuery configurations" 中的术语。

  • 架构可与 BigQuery 概念数据集互换
  • 数据库可与项目的 BigQuery 概念互换

这对我来说是这样的:

project-dir
     | analysis
     | data
     | macros
     | models
         |> sources
              - dataset1.yml
              - dataset2.yml
     | seed
     | dbt_project.yml
     | packages.yml

dataset.yml 的内容在哪里:

version: 2

sources:
  - name: fivetran_log
    database: my-bigquery-project-id
    loader: fivetran
    
    tables:
      - name: account
      - name: log
      - name: user

在 dbt_project.yml 中不需要引用来立即使用这些源。相反,您可以直接从以下模型中引用它:

select * 
from {{ source('fivetran_log','user') }}

这应该允许您拥有多个数据集源,但所有视图只有一个 dbt 项目目录。

但是,如果您引用的数据集位于不同的 bigquery 区域或不同的计费项目中,我相信您会遇到一些错误。


dbt-verse 中相关问题/资源的附录: