- 类别:
系统函数 (系统信息)
SYSTEM$LOCATE_DBT_ARTIFACTS¶
返回指定 dbt 项目运行中工件的位置(例如,manifest.json)。
将此函数与 DBT_PROJECT_EXECUTION_HISTORY 函数结合使用,以编程方式访问 dbt 工件和日志。
语法¶
SYSTEM$LOCATE_DBT_ARTIFACTS ( '<query_id>' )
实参¶
query_id要查找其文件的 dbt 项目运行的查询 ID。
返回¶
函数会返回运行后的 dbt 项目工件的文件路径(例如,snow://dbt/DBTEST.PUBLIC.MY_DBT_PROJECT/results/query_id_01bf3f5a-010b-4d87-0000-53493abb7cce/)。
有关详细信息和示例,请参阅 以编程方式访问 dbt 工件和日志。
访问控制要求¶
此函数仅包括来自您具有以下权限的工作区和 dbt 项目的运行:
工作区上的 OWNERSHIP 或 USAGE
dbt 项目上的 OWNERSHIP、USAGE 或 MONITOR
要对架构中的任何对象执行操作,需要对父数据库和架构的 USAGE 权限。请注意,如果某个角色获授某个架构的任意权限,该角色便能够解析该架构。例如,若某角色被授予 CREATE 权限,则可以在该架构上创建对象,而无需 同时 被授予该架构的 USAGE 权限。
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
有关对 安全对象 执行 SQL 操作的相应角色和权限授予的一般信息,请参阅 访问控制概述。
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
使用说明¶
此系统函数仅适用于 dbt 项目对象;它不适用于工作区。
此系统函数不支持根据 CREATE DBT PROJECT 或 ALTER DBT PROJECT ... ADD VERSION 生成的查询 IDs。
不支持直接查询文件内容(例如,查询示例)。
如果
query_id为 NULL,或者不是 dbt 执行,则会出现错误。dbt 项目结果最多可保留 14 天。
如果在上传之前运行超时、被取消或失败,文件可能不可用。在这种情况下,运行在 dbt 历史记录中显示为
UNHANDLED ERROR。您不能使用此函数获取正在进行的运行的日志,因为日志文件仅在运行完成后可用。
示例¶
要查看 Snowflake 存储 dbt 项目运行工件的暂存区路径(即该执行的结果文件夹),请使用 SYSTEM$LOCATE_DBT_ARTIFACTS 函数。如以下示例所示。然后,您可以使用该路径配合 GET、COPY FILES 或 Snowflake CLI 来下载 manifest.json、已编译的 SQL 或日志等内容。
--Look up the most recent dbt Project execution
SET latest_query_id = (SELECT query_id
FROM TABLE(INFORMATION_SCHEMA.DBT_PROJECT_EXECUTION_HISTORY())
WHERE OBJECT_NAME = 'MY_DBT_PROJECT'
ORDER BY query_end_time DESC LIMIT 1);
--Get the dbt run logs for the most recent dbt Project execution
SELECT SYSTEM$GET_DBT_LOG($latest_query_id);
============================== 15:14:53.100781 | 46d19186-61b8-4442-8339-53c771083f16 ==============================
[0m15:14:53.100781 [info ] [Dummy-1 ]: Running with dbt=1.9.4
...
[0m15:14:58.198545 [debug] [Dummy-1 ]: Command `cli run` succeeded at 15:14:58.198121 after 5.19 seconds
--Get the location of the dbt Project archive ZIP file (see all files)
SELECT SYSTEM$LOCATE_DBT_ARTIFACTS($latest_query_id);
+-------------------------------------------------------------------------------------------------+
| SYSTEM$LOCATE_DBT_ARTIFACTS($LATEST_QUERY_ID) |
+-------------------------------------------------------------------------------------------------+
| snow://dbt/TESTDBT.PUBLIC.MY_DBT_PROJECT/results/query_id_01c01096-010c-0ccb-0000-a99506bd199e/ |
+-------------------------------------------------------------------------------------------------+
--List all the files of the retrieved dbt run
ls 'snow://dbt/TESTDBT.PUBLIC.MY_DBT_PROJECT/results/query_id_01bf3f5a-010b-4d87-0000-53493abb7cce/';
您还可以创建一个新的内部暂存区,找到指定 dbt 项目运行工件的 Snowflake 管理路径,并将这些工件复制到暂存区中进行检索,如以下示例所示:
CREATE OR REPLACE STAGE my_dbt_stage ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');
有关更多信息,请参阅 以编程方式访问 dbt 工件和日志。