在 Snowflake 上监控 dbt 项目

无论您是手动执行 dbt 项目对象,还是使用任务按计划执行 dbt 项目对象,都可以使用 dbt Projects on Snowflake 的监控功能来检查 dbt 项目的执行情况。

在 Snowsight 左侧导航菜单中,选择 Monitoring » dbt projects 以查看 dbt 项目对象的运行历史记录、任务图和查询详细信息。当工作区连接到根据任务计划运行的 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. 从导航窗格中,选择 Monitoring » dbt projects。直方图显示 dbt 项目的运行频率和已运行的项目列表。

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

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

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

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

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

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

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

    • LAST RUN PARAMETERS – 在上次 dbt 项目运行的 EXECUTE DBT PROJECT 命令中指定的 dbt 命令行实参 (ARGS)。

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

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

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

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

    • STATUS – 运行的结果:SucceededExecutingFailed

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

    • PARAMETERS – 在上次 dbt 项目运行的 EXECUTE DBT PROJECT 命令中指定的 dbt 命令行实参 (ARGS)。

  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 项目对象执行时,dbt 写入到 /target 目录中的日志文件和工件将保存在 dbt_results.zip 文件中。EXECUTE DBT PROJECT 输出和查询历史记录的 Query details 选项卡中包含的 OUTPUT_ARCHIVE_URL 值提供了对该文件的引用。不能直接使用此 OUTPUT_ARCHIVE_URL。取而代之,必须使用 URL 将该文件复制到指定的内部暂存区。然后,您可以从指定的暂存区访问该文件。

以下示例显示的 SQL 命令会使用名称 my_dbt_stage 创建指定的内部暂存区,将可用的 dbt_results.zip 文件复制到该指定的暂存区,然后输出预签名的 URL 来访问该文件。用 EXECUTE DBT PROJECT 返回的实际值替换 output_archive_url

-- Create a named internal stage using encryption

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

-- Copy the dbt results zip file into the named stage

COPY FILES INTO @my_dbt_stage/results/
  FROM (
     SELECT '{output_archive_url}', 'dbt_results.zip');

-- Get a presigned URL from which to access the file directly

SELECT get_presigned_url(@my_dbt_stage, 'results/dbt_results.zip');
Copy

前面的示例不适用于从任务运行的 EXECUTE DBT PROJECT 命令。由于任务以系统用户身份运行,因此访问结果需要系统用户身份。

要在使用任务时访问结果,您可以创建一个存储过程,可以从任务中调用该存储过程来执行 dbt 项目并复制结果。

以下示例会创建一个名为 run_dbt_and_copy_results_file 的存储过程,该存储过程会执行名为 my_dbt_project 的 dbt 项目,并将结果复制到已存在的名为 my_dbt_stage 的内部暂存区。该存储过程使用时间戳来命名其复制到指定暂存区的每个结果文件。

CREATE OR REPLACE PROCEDURE my_db.public.run_dbt_and_copy_results_file()
RETURNS varchar
LANGUAGE SQL
COMMENT = 'Execute dbt and copy the files in the same sproc call.'
EXECUTE AS CALLER
AS
DECLARE
    output_archive_url varchar;
BEGIN
    EXECUTE DBT PROJECT my_db.my_schema.my_dbt_project args='run';
    output_archive_url := (SELECT output_archive_url FROM TABLE(RESULT_SCAN(last_query_id())));
    COPY FILES INTO @my_dbt_stage/results/ FROM (SELECT :output_archive_url, (to_char(current_timestamp(), 'YYYYMMDD_HH24_MI') || '.zip'));
END;
Copy

以下示例会创建一个名为 run_my_dbt_project 的任务,该任务每六小时使用执行和复制命令运行一次该存储过程:

CREATE OR REPLACE TASK my_db.my_schema.run_my_dbt_project
  WAREHOUSE = my_dbt_warehouse
  SCHEDULE = '6 hours'
AS
  CALL my_db.public.run_dbt_and_copy_results_file();
Copy
语言: 中文