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
相关产品推荐
相关产品推荐

