我有一个DAB SQL项目,我基于默认SQL Project的数据键模板创建了一个DAB SQL项目。 我希望能够根据文件位置自动创建表和视图:

问题描述 投票:0回答:0

因此,我希望01_PORT下的所有表都具有模式名称端口,而02_Terminal为终端,而03_dock为dock。然后,我希望像商业这样的子文件夹成为dock_commercial等。

我试图创建一个可以做到这一点的宏,以便每当我想创建或替换表或视图时,我都必须调用此标识符宏:

CREATE OR REPLACE TABLE {{ source_identifier() }} AS SELECT * FROM IDENTIFIER(CONCAT({{catalog}}, '.', 'gold', '.', 'vessel'))

但是,当我运行数据串件束部署时,它根本不知道如何读取宏。看来它正在运行我的SQL而不先渲染Jinja。 enter image description herei试图将其包含在databrick.yml

文件中作为资源:

bundle: name: dna-port-dbx include: - resources/*.yml - src/macro/*.sql

它仍然不包括它,我在运行工作时会出现错误:

[parse_syntax_error]'{''的语法错误。 SQLSTATE:42601(第2行,POS 24)

== sql ==
 - 此查询用于创建端口数据库的容器表
创建或替换表{{source_identifier()}}作为
------------------------------ ^^^

我似乎找不到有关如何确保这将起作用的任何文件。

{% 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 %}

try通过:参数而不是{{}},so:
CREATE OR REPLACE TABLE IDENTIFIER(:source_identifier) AS SELECT * FROM IDENTIFIER(CONCAT(:catalog, '.', 'gold', '.', 'vessel'))

穿越参数还取决于您在笔记本上工作的.ipynb文件或.sql文件。 我知道它是否有帮助,我可以在上面详细介绍更多,因为SQL需要定义其他SQL仓库,但是Notebook All_purpose群集也可以使用hack运行SQL。

sql jinja2 databricks databricks-sql
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.