在 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';
监控 dbt 项目对象的按计划执行情况¶
当您使用任务按计划运行 dbt 项目并将工作区连接到 dbt 项目对象时,可以使用 dbt Projects on Snowflake 的工作区快速访问任务运行历史记录和任务图(如果适用)的监控信息。
备注
此功能仅适用于连接到 dbt 项目对象的工作区。
从工作区监控 dbt 项目对象的按计划执行情况:
从工作区编辑器右上角的 dbt 项目菜单中,找到 Scheduled runs,然后选择 View schedules。
从列表中,选择要检查的计划(任务),然后选择 View details。
任务的信息窗格将会打开,您可以在其中查看 Task details、任务 Graph`(如果适用)和该任务的 :ui:`Run history。有关更多信息,请参阅 查看 Snowsight 中的任务和任务图。
从列表中任何按计划 dbt 项目运行的 Run history 中,选择最右侧的“Open query history”按钮以查看查询详细信息、查询配置文件和运行的查询遥测。有关更多信息,请参阅 查看特定查询的详细信息和配置文件。
在 Snowsight 中监控 dbt 项目¶
您可以在 Snowsight 中使用 Monitoring 来查看有关 dbt 项目执行(运行)的详细监控信息。您必须具有查看 dbt 项目对象的监控信息的权限。
从导航窗格中,选择 Monitoring » dbt projects。直方图显示 dbt 项目的运行频率和已运行的项目列表。
dbt 项目列表包括包含以下信息的列。您可以按日期范围、命令和运行状态筛选列表。
PROJECT – dbt 项目对象的名称和所选时间段内的执行(运行)次数。
LAST COMMAND – 在上次运行期间执行的 dbt 命令。
LAST RUN STATUS – 运行的结果:Succeeded、Executing 或 Failed。
LAST RUN – 自上次运行以来经过的时间。要反转排序顺序,请选择列标题。默认情况下,最先显示最近的运行。
PREVIOUS RUNS – 按状态排列所选时间段内的运行次数。
DATABASE 和 SCHEMA – 用于保存 dbt 项目对象的数据库和架构。
LAST RUN PARAMETERS – 在上次 dbt 项目运行的 EXECUTE DBT PROJECT 命令中指定的 dbt 命令行实参 (ARGS)。
要检查单个项目运行,请从列表中选择 dbt 项目对象。
数据库对象资源管理器中会打开该 dbt 项目对象的 dbt 项目详细信息页面。
默认情况下,Run history 选项卡处于选中状态,其中包含在所选时间段内每个作业运行的以下信息:
COMMAND – 在上次运行期间执行的 dbt 命令。
STATUS – 运行的结果:Succeeded、Executing 或 Failed。
RUN TIME – 自上次运行以来经过的时间。要反转排序顺序,请选择列标题。默认情况下,最先显示最近的运行。
PARAMETERS – 在上次 dbt 项目运行的 EXECUTE DBT PROJECT 命令中指定的 dbt 命令行实参 (ARGS)。
要查看某次运行的作业详细信息,请从列表中选择该作业。
dbt 运行详细信息窗格将会打开,其中包括以下选项卡:
Job details 选项卡默认处于选中状态,并显示以下信息:
Status – 运行的结果:Succeeded、Executing 或 Failed。
Start time、End time 和 Duration – 运行开始的时间、结束的时间以及运行时长。
Warehouse size – 用于执行运行的仓库的大小。
Query ID – 执行 dbt 项目命令的查询的唯一标识符。要查看查询历史记录中的查询详细信息,请选择查询 ID。
SQL text – 执行的 EXECUTE DBT PROJECT 命令。
dbt <command> – 对于运行的 dbt 命令(例如
run
或build
),显示 dbt model、要执行的运行的 time taken 以及该模型运行的 status。
Output 选项卡显示 dbt 项目在运行期间生成的标准输出。
Trace 选项卡显示 dbt 项目在运行期间生成的跟踪信息。有关跟踪的更多信息,请参阅 查看跟踪数据。
要查看更详细的查询信息,请从 Job details 选项卡中选择 Query ID。
作业运行查询的查询历史记录页面将会打开,其中包含的选项卡可供查看所选 dbt 运行的 Query Details、Query Profile 和 Query 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');
前面的示例不适用于从任务运行的 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;
以下示例会创建一个名为 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();