我正在尝试使用 dbt_utils.date_spine 宏:
select
{{ dbt_utils.date_spine(datepart="day", start_date="cast('2019-01-01' as date)", end_date="cast('2020-01-01' as date)") }} as purchase_date
from table(generator(rowcount=>10))
Run Code Online (Sandbox Code Playgroud)
并得到以下错误:
Database Error in model purchase (models/data_generation/purchase.sql)
001003 (42000): SQL compilation error:
syntax error line 21 at position 0 unexpected 'with'.
syntax error line 29 at position 5 unexpected ','.
compiled SQL at target........purchase.sql
Run Code Online (Sandbox Code Playgroud)
有没有人见过这个?
恐怕这不是使用/调用该宏的正确方法。
最常见的选项之一是在某处具体化一个表,然后让其他模型引用该表。您可以将其视为 a ,Calendar Table或者如果您想进一步深入,您可以构建自己的Date Dimension。
例如,假设您有一个calendar_table模型定义为:
{{
config(
materialized = 'table',
)
}}
{{ dbt_utils.date_spine(
datepart="day",
start_date="to_date('01/01/2020', 'mm/dd/yyyy')",
end_date="to_date('01/01/2027', 'mm/dd/yyyy')"
)
}}
Run Code Online (Sandbox Code Playgroud)
在数据仓库中构建模型后,您可以在其他模型中引用它,例如:
-- another_model.sql
select * from {{ ref('calendar_table') }}
Run Code Online (Sandbox Code Playgroud)
您还可以具体化calendar_table模型,ephemeral以防您不想在 DW 中构建它。
但如果您不想为此使用单独的模型,则可以与 CTE 一起使用,例如:
with date_spine as (
{{- dbt_utils.date_spine(
datepart="day",
start_date="to_date('01/01/2020', 'mm/dd/yyyy')",
end_date="to_date('01/01/2027', 'mm/dd/yyyy')"
)
-}}
)
, other_cte as (
...
)
...
Run Code Online (Sandbox Code Playgroud)
请注意,从宏生成的代码不适合在具体化中使用
view。您可能更喜欢用于table此目的。
以下是 dbt discourse 的一些相关帖子:
https://discourse.getdbt.com/t/date-dimensions/735
https://discourse.getdbt.com/t/building-a-calendar-table-using-dbt/325
| 归档时间: |
|
| 查看次数: |
3407 次 |
| 最近记录: |