在 Snowflake 上监控 dbt 项目

本主题说明如何使用 Snowflake 上 dbt Projects on Snowflake 的监控功能来检查 dbt 项目执行情况(无论是手动执行还是任务调度执行),以及如何查看日志和工件。

部分

描述

为 dbt 项目启用监控功能

获取 dbt 项目对象以及运行该对象的任何计划任务的日志记录和跟踪事件。要启用此功能,您必须在部署 dbt 项目对象和任务的架构上设置日志记录、跟踪和指标。

监控 dbt 项目对象的按计划执行情况

In Snowsight, in the navigation menu, select Transformation » dbt Projects to view run history, task graphs, and query details for dbt project objects. When a workspace is connected to a dbt project object that runs according to a task schedule, you can open task-run history and task graphs from within the workspace.

以编程方式访问 dbt 工件和日志

使用 DBT_PROJECT_EXECUTION_HISTORY 表函数和 dbt 系统函数,以编程方式访问 dbt 工件和日志。

为 dbt 项目启用监控功能

要针对您的 dbt 项目对象启用监控功能,请在创建 dbt 项目对象的数据库和架构上设置 LOG_LEVEL、TRACE_LEVEL 和 METRIC_LEVEL,如以下 SQL 示例所示:

ALTER SCHEMA my_db.my_dbt_project_schema SET LOG_LEVEL = 'INFO';
ALTER SCHEMA my_db.my_dbt_project_schema SET TRACE_LEVEL = 'ALWAYS';
ALTER SCHEMA my_db.my_dbt_project_schema SET METRIC_LEVEL = 'ALL';
Copy

监控 dbt 项目对象的按计划执行情况

当您使用任务按计划运行 dbt 项目并将工作区连接到 dbt 项目对象时,可以使用 dbt Projects on Snowflake 的工作区快速访问任务运行历史记录和任务图(如果适用)的监控信息。

备注

此功能仅适用于连接到 dbt 项目对象的工作区。

从工作区监控 dbt 项目对象的按计划执行情况:

  1. 从工作区编辑器右上角的 dbt 项目菜单中,找到 Scheduled runs,然后选择 View schedules

  2. 从列表中,选择要检查的计划(任务),然后选择 View details

    任务的信息窗格将会打开,您可以在其中查看 Task details、任务 Graph`(如果适用)和该任务的 :ui:`Run history。有关更多信息,请参阅 查看 Snowsight 中的任务和任务图

  3. 从列表中任何按计划 dbt 项目运行的 Run history 中,选择最右侧的“Open query history”按钮以查看查询详细信息、查询配置文件和运行的查询遥测。有关更多信息,请参阅 查看特定查询的详细信息和配置文件

在 Snowsight 中监控 dbt 项目

您可以在 Snowsight 中使用 Monitoring 来查看有关 dbt 项目执行(运行)的详细监控信息。您必须具有查看 dbt 项目对象的监控信息的权限。

  1. In the navigation menu, select Transformation » dbt Projects. A histogram shows the frequency of dbt project runs and a list of projects that have run.

    dbt 项目列表包括包含以下信息的列。您可以按日期范围、命令和运行状态筛选列表。

    • PROJECT – dbt 项目对象的名称和所选时间段内的执行(运行)次数。

    • LAST COMMAND – 在上次运行期间执行的 dbt 命令。

    • LAST RUN STATUS – 运行的结果:SucceededExecutingFailed

    • LAST RUN – 自上次运行以来经过的时间。要反转排序顺序,请选择列标题。默认情况下,最先显示最近的运行。

    • PREVIOUS RUNS – 按状态排列所选时间段内的运行次数。

    • DATABASESCHEMA – 用于保存 dbt 项目对象的数据库和架构。

    • LAST RUN PARAMETERS - The dbt command-line arguments (ARGS) specified in the EXECUTE DBT PROJECT command for the last dbt project run.

  2. 要检查单个项目运行,请从列表中选择 dbt 项目对象。

    数据库对象资源管理器中会打开该 dbt 项目对象的 dbt 项目详细信息页面。

    默认情况下,Run history 选项卡处于选中状态,其中包含在所选时间段内每个作业运行的以下信息:

    • COMMAND – 在上次运行期间执行的 dbt 命令。

    • STATUS – 运行的结果:SucceededExecutingFailed

    • RUN TIME – 自上次运行以来经过的时间。要反转排序顺序,请选择列标题。默认情况下,最先显示最近的运行。

    • PARAMETERS The dbt command-line arguments (ARGS) specified in the EXECUTE DBT PROJECT command for the last dbt project run.

  3. 要查看某次运行的作业详细信息,请从列表中选择该作业。

    dbt 运行详细信息窗格将会打开,其中包括以下选项卡:

    • Job details 选项卡默认处于选中状态,并显示以下信息:

      • Status – 运行的结果:SucceededExecutingFailed

      • Start timeEnd timeDuration – 运行开始的时间、结束的时间以及运行时长。

      • Warehouse size – 用于执行运行的仓库的大小。

      • Query ID – 执行 dbt 项目命令的查询的唯一标识符。要查看查询历史记录中的查询详细信息,请选择查询 ID。

      • SQL text – 执行的 EXECUTE DBT PROJECT 命令。

      • dbt <command> – 对于运行的 dbt 命令(例如 runbuild),显示 dbt model、要执行的运行的 time taken 以及该模型运行的 status

    • Output 选项卡显示 dbt 项目在运行期间生成的标准输出。

    • Trace 选项卡显示 dbt 项目在运行期间生成的跟踪信息。有关跟踪的更多信息,请参阅 查看跟踪数据

  4. 要查看更详细的查询信息,请从 Job details 选项卡中选择 Query ID

    作业运行查询的查询历史记录页面将会打开,其中包含的选项卡可供查看所选 dbt 运行的 Query DetailsQuery ProfileQuery Telemetry

    有关更多信息,请参阅 查看特定查询的详细信息和配置文件

以编程方式访问 dbt 工件和日志

使用 DBT_PROJECT_EXECUTION_HISTORY 表函数和以下系统函数,以编程方式访问 dbt 工件和日志。

函数

返回的内容

典型用途

备注

SYSTEM$GET_DBT_LOG

文本日志输出(运行的日志尾部)

在 SQL 中进行快速调试。例如,在不下载文件的情况下查看错误和警告。

返回日志内容;不会创建或移动任何内容。

SYSTEM$LOCATE_DBT_ARTIFACTS

文件夹路径(例如, snow://…/results/query_id_…/),包含工件文件,例如 manifest.json、已编译 SQL、日志。

通过 LIST、 GET或 COPY FILES 浏览或复制特定文件。

仅提供定位功能 (URL);您仍需执行 GET/COPYFILES 来提取。

SYSTEM$LOCATE_DBT_ARCHIVE

单个 ZIP 文件 URL (例如, …/dbt_artifacts.zip)。

当您想下载一个文件时(例如,使用 GET)非常方便。

使用 GET '<url>' file:///local/dir 进行下载。

获取日志并下载最新 dbt 项目查询的 ZIP 文件

以下示例查询 Snowflake 的 dbt 执行历史记录,以显示 dbt 项目的最新查询 ID。它会提取该执行的日志输出,并返回该执行的压缩 dbt 工件的位置。

The Snowflake CLI 示例使用 GET 请求将工件 ZIP 件或特定文件(如 manifest.json)下载到本地文件夹。

要从 Snowsight 下载 ZIP 文件,导航到 Monitoring » Query History.选择查询,导航到 Query Details,然后选择 dbt Output 下的 Download Build Artifacts

您必须使用对 dbt 项目具有 OWNERSHIP、 USAGE 或 MONITOR 权限的角色。

--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);
Copy
============================== 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

要查看 Snowflake 存储 dbt 项目运行工件的暂存区路径(即该执行的结果文件夹),请使用 SYSTEM$LOCATE_DBT_ARTIFACTS 函数。然后,您可以在 Snowflake CLI 中使用该路径配合 GETCOPY FILES,下载诸如 manifest.json、已编译的 SQL 或日志等内容。

--Get the location of the dbt Project archive ZIP file (see all files)
SELECT SYSTEM$LOCATE_DBT_ARTIFACTS($latest_query_id);
Copy
+-------------------------------------------------------------------------------------------------+
| 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 a dbt run
ls 'snow://dbt/TESTDBT.PUBLIC.MY_DBT_PROJECT/results/query_id_01bf3f5a-010b-4d87-0000-53493abb7cce/';
Copy

您还可以创建一个新的内部暂存区,找到指定 dbt 项目运行工件的 Snowflake 管理路径,并将这些工件复制到暂存区中进行检索,如以下示例所示:

CREATE OR REPLACE STAGE my_dbt_stage ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');

SELECT SYSTEM$LOCATE_DBT_ARTIFACTS($latest_query_id);
Copy
snow://dbt/TESTDBT.PUBLIC.MY_DBT_PROJECT/results/query_id_01bf51c1-010b-5676-0000-53493ae6db02/
COPY FILES INTO @my_dbt_stage/results/ FROM 'snow://dbt/TESTDBT.PUBLIC.MY_DBT_PROJECT/results/query_id_01bf51c1-010b-5676-0000-53493ae6db02/';
Copy
results/dbt_artifacts.zip
results/logs/dbt.log
results/target/manifest.json
results/target/semantic_manifest.json
语言: 中文