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

Databricks DAB SQL项目Jinja宏未渲染,无法按路径自动生成Schema

问题:Databricks DAB SQL项目中Jinja宏未渲染导致语法错误

需求

基于Databricks默认SQL项目模板创建DAB SQL项目,需按文件路径自动为表/视图指定Schema规则:

  • 01_port目录下的所有表使用port作为Schema名
  • 02_terminal目录下的使用terminal
  • 03_dock目录下的使用dock
  • 若存在子文件夹(如commercial),Schema名采用dock_commercial这类格式

尝试的操作

  1. 编写Jinja宏,意图在创建或替换表/视图时调用宏生成标识符,示例SQL代码:
CREATE OR REPLACE TABLE {{ source_identifier() }} AS 
SELECT
    *
FROM IDENTIFIER(CONCAT({{catalog}}, '.', 'gold', '.', 'vessel'))
  1. 在databricks.yml中添加宏文件路径作为资源:
bundle:
  name: dna-port-dbx

include:  
  - resources/*.yml
  - src/macro/*.sql

报错信息

执行databricks bundle deploy后,Jinja宏未被渲染,直接执行原始SQL引发语法错误:

[PARSE_SYNTAX_ERROR] Syntax error at or near '{'. SQLSTATE: 42601 (line 2, pos 24)

== SQL ==
-- This query is used to create the vessel table of the port database
CREATE OR REPLACE TABLE {{ source_identifier() }} AS
------------------------^^^

宏代码内容

{% macro create_or_replace_table() %}
  {% set file_name = this.name.split('.')[0] %}
  {% set path_parts = this.path.split('/') %}
  {% set schema_name = 
    path_parts | length > 2 
    ? (
      '01_port' in path_parts[0] 
      ? 'port_' ~ path_parts[1]
      : '02_terminal' in path_parts[0]
      ? 'terminal_' ~ path_parts[1]
      : '03_dock' in path_parts[0]
      ? 'dock_' ~ path_parts[1]
      : 'default_schema'
    )
    : (
      '01_port' in path_parts[0]
      ? 'port'
      : '02_terminal' in path_parts[0]
      ? 'terminal'
      : '03_dock' in path_parts[0]
      ? 'dock'
      : 'default_schema'
    )
  %}

  IDENTIFIER(CONCAT(${variables.catalog}, '.', {{ schema_name }}.{{ file_name }}))


{% endmacro %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:48:12