如何在dbt宏日志中添加本地时间戳
解决dbt宏日志添加本地时间戳的问题
你的问题出在时间戳代码没有整合到log函数的消息中,而是被渲染到了SQL脚本里,所以日志不会显示时间戳。以下是修正后的实现:
方案1:使用UTC时间戳(dbt默认的run_started_at是UTC时区)
{% macro create_local_database(username, reset_environment = false) %} {% set setup_script1 %} {%- if reset_environment == false -%} CREATE DATABASE ANALYTICS_LOCAL_MART_{{username}} {% set timestamp = run_started_at.strftime("%d:%m:%Y %H:%M") %} {% do log('Operation Completed ' ~ timestamp, True) %} {%- endif -%} {% endset %} {% endmacro %}
方案2:转换为本地时区时间戳
如果需要显示系统本地时间,利用datetime.astimezone()将UTC时间转换为本地时区:
{% macro create_local_database(username, reset_environment = false) %} {% set setup_script1 %} {%- if reset_environment == false -%} CREATE DATABASE ANALYTICS_LOCAL_MART_{{username}} {% set local_timestamp = run_started_at.astimezone().strftime("%d:%m:%Y %H:%M") %} {% do log('Operation Completed ' ~ local_timestamp, True) %} {%- endif -%} {% endset %} {% endmacro %}
关键说明:
- 用
~符号拼接字符串,把时间戳和日志消息合并后传入log函数,确保时间戳包含在日志内容里。 strftime("%d:%m:%Y %H:%M")可以根据需求调整格式,比如改成"%Y-%m-%d %H:%M:%S"显示秒数。- 如果需要指定特定时区(如上海时区),可以先导入时区库,示例:
{% set shanghai_tz = modules.pytz.timezone('Asia/Shanghai') %} {% set local_timestamp = run_started_at.astimezone(shanghai_tz).strftime("%d:%m:%Y %H:%M") %}
内容的提问来源于stack exchange,提问作者etan
相关产品推荐
相关产品推荐

