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这类格式
尝试的操作
- 编写Jinja宏,意图在创建或替换表/视图时调用宏生成标识符,示例SQL代码:
CREATE OR REPLACE TABLE {{ source_identifier() }} AS SELECT * FROM IDENTIFIER(CONCAT({{catalog}}, '.', 'gold', '.', 'vessel'))
- 在
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
相关产品推荐
相关产品推荐

