因此,我希望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。
i试图将其包含在
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。