ref
简介¶
dbt中最重要的函数是ref();没有它将不可能构建中等复杂的模型。ref()是在另一个模型中引用一个模型的方式。这是一种非常常见的方式,因为通常模型都是堆叠在一起的。以下是实践中的情况:
ref()实际上是在做两件重要的事情。首先,它将模式(schema)插入到模型文件中,以允许您通过配置更改部署模式。其次,它使用这些模型之间的引用来自动构建依赖关系图。这将使dbt在使用dbt-run时能够按正确的顺序部署模型。
0.9.0的新能力
`{{ ref }}`函数返回一个`Relation`对象,该对象在[{{ this }}](this)变量处具有相同的`表(table)`,`模式(schema)`和`名称(name)`属性.
ref的高级用法¶
双参数变量¶
ref函数还有一个双参数变量。使用此变量,可以将包名称和模型名称都传递给ref以避免歧义。典型的dbt使用通常不需要此功能。
注意: 包名称package_name应该只包含包的名称,而不包括维护者。比如,如果你使用包fivetran/stripe ,在参数中输入stripe,而不是fivetran/stripe.
强制依赖项¶
在正常使用中,dbt知道根据ref函数的使用来运行所有模型的正确顺序。不过,在某些情况下,dbt不知道什么时候应该运行模型。这方面的一个例子是当模型只引用宏时。在这种情况下,dbt认为模型可以首先运行,因为在编译时没有进行显式引用。为了解决这个问题,您可以使用SQL注释和ref函数,dbt将理解依赖关系,编译后的查询仍然有效:
dbt将看到ref,并在指定的引用之后构建此模型。