只是想知道,jinja 不会对 dbt sql/model 表中的每一行应用函数吗?
With my_cte AS (
Select
t.id as id,
{{my_func('id')}} as amount
From table t
)
它为 CTE 中每一行的“金额”列返回相同的值。它似乎计算第一行的值并将其用于每一行。这是正常的吗?我假设它会返回与 sql 应用函数相同的结果,每行具有不同的值。
谢谢。
这是正常的
dbt 的工作方式分为两个步骤。
将模型编译成普通的SQL语句。编译后的sql位于
target/compiled
文件夹中。我们可以复制编译好的sql直接在数据仓库环境中运行。这对于调试目的非常有用。
将编译后的sql发送到
profiles.yml
文件中提供的数据仓库目标。
在sql编译时,它是固定的。而固定部分可以是sql函数。然后,数据仓库将逐行评估该 sql 函数。 sql 函数可以是数据仓库的内置函数,也可以是自定义函数,通常通过运行
CREATE FUNCTION
。这是 postgres 的示例。
CREATE FUNCTION add_numbers(a integer, b integer)
RETURNS integer AS $$
BEGIN
RETURN a + b;
END; $$
LANGUAGE plpgsql;