设置 dbt 日期变量

2024-02-11

我试图将 dbt 模型中的日期变量设置为 7 天前的日期。该模型将针对 Redshift 数据库运行。我已执行以下操作来设置变量,但是收到错误 DATE_ADD 未定义:

{%- set start_date = TRUNC(DATE_ADD(day, -7, CURRENT_DATE)) -%}

设置变量的正确方法是什么。


jinja 是一种模板语言。当您运行 dbt 时,它首先执行 jinja 来“编译”您的模型,然后then它针对您的数据库执行您编译的代码。

jinja 没有调用的函数trunc or date_add or current_date,因为这些是 SQL 函数。

你有两个选择:

  1. 将变量设置为等于string并包括那个string在您的模型代码中,以便数据库计算该日期。看起来像这样(注意额外的引号):

    {%- set start_date = "TRUNC(DATE_ADD(day, -7, CURRENT_DATE))" -%}
    select {{ start_date }}
    

    如果你编译它并检查你的代码中生成的代码target目录,你会看到它变成了这样的 SQL:

    select TRUNC(DATE_ADD(day, -7, CURRENT_DATE))
    
  2. 使用 jinja 的上下文来计算日期并将日期文字包含在 SQL 中。 dbt 的 jinja 上下文包含一个特殊变量,称为run_started_at https://docs.getdbt.com/reference/dbt-jinja-functions/run_started_at,还有 Python 的datetime module https://docs.getdbt.com/reference/dbt-jinja-functions/modules。将它们放在一起看起来像这样:

    {%- set start_datetime = run_started_at - modules.datetime.timedelta(days=7) -%}
    {%- set start_date = start_datetime.strftime("%Y-%m-%d") -%}
    select '{{ start_date }}'
    

    这将编译为:

    select '2023-01-12'
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设置 dbt 日期变量 的相关文章

随机推荐

  • WinForm应用程序数据持久化(C#)

    我相信 ASP NET 应用程序中 可变短期 持久性的最佳方法是 会话变量 会话范围 应用变量 应用范围 页面视图 页面范围 应用设置 应用范围 Windows 窗体应用程序中 可变短期 持久性的最佳方法是什么 表格范围 用户会话范围 应用
  • 如何将数据转换为非等列?

    我有一个事件数据集 按以下分组let像这样 set seed 3 events lt data frame let rep LETTERS 1 2 each 3 age c 0 sample 1 20 size 2 0 sample 1 2
  • 使用 boost 的 async_write 的异步 tcp 服务器会导致错误的文件描述符

    首先 我不是以英语为母语的人 所以我可能会犯一些语法错误 对此感到抱歉 我正在尝试使用 C 和 Boost 创建一个异步 TCP 服务器 我已经成功接受客户并收到他们的消息 但我无法回复他们的消息 我想要实现的是在 TCPServer 类上
  • 从 Xamarin / C# 中的 URL 加载 UIImage

    已经过去4年了这个问题 https stackoverflow com questions 2095635 load an image from a url已得到答复这篇博文 http escoz com blog displaying w
  • 使用 PHP 从 Microsoft Teams 自定义机器人验证 HMAC

    我正在尝试使用 PHP 验证 Microsoft Teams 自定义机器人 遵循 Microsoft指示 https learn microsoft com en us microsoftteams platform concepts cu
  • CUDA 确定每个块的线程、每个网格的块

    我是 CUDA 范式的新手 我的问题是确定每个块的线程数和每个网格的块数 这是否需要一些艺术和尝试 我发现许多例子似乎为这些事情选择了任意的数字 我正在考虑一个问题 我可以将任意大小的矩阵传递给乘法方法 这样 C 的每个元素 如 C A B
  • Java 8 中流的笛卡尔积作为流(仅使用流)

    我想创建一种方法 该方法创建一个元素流 这些元素是多个给定流的笛卡尔积 最后由二元运算符聚合为相同类型 请注意 参数和结果都是流 not收藏 例如 对于两个流 A B and X Y 我希望它产生价值流 AX AY BX BY 简单的串联用
  • Docx4j 字符串中的换行符

    我有这个字符串 Prueba Lista li1 li2 li3 li4 Tabulado Tabulado Tabulado Tabulado Tabulado Tabulado Tabulado Tabulado Tabulado Ta
  • dplyr 中的 substr %>% mutate

    pcd lt data frame tripNo c 618 618 610 610 610 619 procDate as Date c 2016 03 02 2016 03 03 2016 03 02 2016 03 03 2016 0
  • 手动调用按钮上的 click() ,我可以传递任何参数吗?

    我在 jquery javascript 代码中手动调用页面上的按钮上的 click 我需要传递一个参数来单击 然后我可以在响应单击事件的函数上读取该参数 这可能吗 你需要调用 trigger 您可以在那里传递任意数量的参数 element
  • 将尾部输出通过管道传输到另一个脚本中

    我正在尝试将 tail 命令的输出通过管道传输到另一个 bash 脚本中进行处理 tail n 1 f your log file myscript sh 但是 当我运行它时 永远不会到达 1 参数 在 myscript sh 内 我缺少什
  • ORA-38104: ON 子句中引用的列无法更新

    我有一个带有删除标志的简单表 记录应在此列中更新而不是删除 create table PSEUDODELETETABLE ID NUMBER 8 not null PKEY NAME VARCHAR2 50 not null ISDELET
  • 为订阅优惠生成签名 - Xcode - Swift

    我想问是否有人已经实现了 inapp 订阅 自动续订 的新优惠 如果可能的话 在服务器端创建系统以使用 p8 密钥和 php 创建此签名的难度 我在苹果文档中找到了这个 我不确定是否理解它 https developer apple com
  • Jquery 无法检测 IE 11

    刚刚偶然发现一个问题 当尝试使用 Jquery 检测 IE 11 当前正在播出的测试版 时 结果是 firefox 相同的代码检测 IE 10 我需要知道用户正在使用什么浏览器才能显示不同的指令 我正在 Oracle VirtualBox
  • Spark DataFrame 架构可为空字段

    我在 Scala 和 Python 中编写了以下代码 但是返回的 DataFrame 似乎没有应用我正在应用的架构中的非空字段 italianVotes csv是一个 csv 文件 以 作为分隔符和四个字段 我正在使用火花2 1 0 意大利
  • 在多索引数据框中选择行

    我想单独提取 S 的 bin 其中每列 X Y gt 0 5 或多个 bin gt 0 5 行数 在示例中 对于 AR1 应仅选择 bin 4 因为 X 和 Y gt 0 5 蓝色指示 对于 PO1 应选择 bin 1 2 3 和 4 因为
  • 如何在 win7 x64 上使用带有 php (xampp) 的 oracle 客户端 11.2

    我刚刚在我的 win7 x64 PC 上安装了一个实际的 XAMPP 来编写一些 PHP 脚本来连接到 Oracle DB 我还安装了正常的oracle 11 2 0客户端 PATH和ORACLE HOME设置正确 该客户端用于我的所有其他
  • android 如何将对象保存到文件?

    有人知道如何在 android 上将对象保存和恢复到文件吗 使用 openFileOutput 打开文件 http developer android com guide topics data data storage html file
  • 页面重新加载后,Meteor.user() 返回未定义

    问题是我想检查用户是否通过我的路线中的 onBeforeAction 内的 Meteor user 登录 问题是 页面重新加载后 Meteor user 在加载之前的一瞬间返回未定义 这是我的路线配置 Router map function
  • 设置 dbt 日期变量

    我试图将 dbt 模型中的日期变量设置为 7 天前的日期 该模型将针对 Redshift 数据库运行 我已执行以下操作来设置变量 但是收到错误 DATE ADD 未定义 set start date TRUNC DATE ADD day 7