You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL FROM子句调用DBT宏获取Delta表最新分区未返回结果排查

问题:DBT宏未返回分区值导致Delta表路径未追加分区

在SQL FROM子句中调用DBT宏获取Delta表最新分区,日志显示宏已执行且打印出分区值为1,但分区值未追加到表路径末尾。排查后确认是宏未返回计算结果导致。

代码示例

SQL模型

select distinct
  col1,
  col2
from
{% if env_var('environment') == 'dev' %}
    delta.`{{ env_var('table1') }}`
{% else %}
    delta.`{{ env_var('table1') }}`{{ get_partitions() }}
{% endif %}

宏代码

{% macro get_partitions() %}

    {% set latest_partitions_query %}
        select "1"
    {% endset %}

    {% if execute %}
    {% set latest_partitions_query_results = run_query(latest_partitions_query) %}

    {% if latest_partitions_query_results|length > 0 %}
        {{ log("Latest partitions: " ~ latest_partitions_query_results[0][0], True) }}
        {% set results = latest_partitions_query_results[0][0] %}
    {% else %}
        {{ log("No partitions returned by query.", True) }}
        {% set results = "" %}
    {% endif %}

    {% endif %}
{% endmacro %}

解决方法

在宏的{% if execute %}代码块末尾添加{{ return(results) }}语句,让宏返回计算得到的分区值。修改后的宏代码如下:

{% macro get_partitions() %}

    {% set latest_partitions_query %}
        select "1"
    {% endset %}

    {% if execute %}
    {% set latest_partitions_query_results = run_query(latest_partitions_query) %}

    {% if latest_partitions_query_results|length > 0 %}
        {{ log("Latest partitions: " ~ latest_partitions_query_results[0][0], True) }}
        {% set results = latest_partitions_query_results[0][0] %}
    {% else %}
        {{ log("No partitions returned by query.", True) }}
        {% set results = "" %}
    {% endif %}
    {{ return(results) }}
    {% endif %}
{% endmacro %}

添加返回语句后,宏会将计算出的分区值输出,成功追加到Delta表路径末尾。

内容的提问来源于stack exchange,提问作者Shankar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:50:30