在 Snowflake 上监控 dbt 项目¶
本主题说明如何使用 Snowflake 上 dbt Projects on Snowflake 的监控功能来检查 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_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';
监控 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 项目对象的监控信息的权限。
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 – 运行的结果:Succeeded、Executing 或 Failed。
LAST RUN – 自上次运行以来经过的时间。要反转排序顺序,请选择列标题。默认情况下,最先显示最近的运行。
PREVIOUS RUNS – 按状态排列所选时间段内的运行次数。
DATABASE 和 SCHEMA – 用于保存 dbt 项目对象的数据库和架构。
LAST RUN PARAMETERS - The dbt command-line arguments (ARGS) specified in the EXECUTE DBT PROJECT command for the last dbt project run.
要检查单个项目运行,请从列表中选择 dbt 项目对象。
数据库对象资源管理器中会打开该 dbt 项目对象的 dbt 项目详细信息页面。
默认情况下,Run history 选项卡处于选中状态,其中包含在所选时间段内每个作业运行的以下信息:
COMMAND – 在上次运行期间执行的 dbt 命令。
STATUS – 运行的结果:Succeeded、Executing 或 Failed。
RUN TIME – 自上次运行以来经过的时间。要反转排序顺序,请选择列标题。默认情况下,最先显示最近的运行。
PARAMETERS The dbt command-line arguments (ARGS) specified in the EXECUTE DBT PROJECT command for the last dbt project run.
要查看某次运行的作业详细信息,请从列表中选择该作业。
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_PROJECT_EXECUTION_HISTORY 表函数和以下系统函数,以编程方式访问 dbt 工件和日志。
函数 |
返回的内容 |
典型用途 |
备注 |
|---|---|---|---|
文本日志输出(运行的日志尾部) |
在 SQL 中进行快速调试。例如,在不下载文件的情况下查看错误和警告。 |
返回日志内容;不会创建或移动任何内容。 |
|
文件夹路径(例如, |
通过 LIST、 GET或 COPY FILES 浏览或复制特定文件。 |
仅提供定位功能 (URL);您仍需执行 GET/COPYFILES 来提取。 |
|
单个 ZIP 文件 URL (例如, |
当您想下载一个文件时(例如,使用 GET)非常方便。 |
使用 |
获取日志并下载最新 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);
============================== 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 中使用该路径配合 GET 或 COPY 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);
+-------------------------------------------------------------------------------------------------+
| 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/';
您还可以创建一个新的内部暂存区,找到指定 dbt 项目运行工件的 Snowflake 管理路径,并将这些工件复制到暂存区中进行检索,如以下示例所示:
CREATE OR REPLACE STAGE my_dbt_stage ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');
SELECT SYSTEM$LOCATE_DBT_ARTIFACTS($latest_query_id);
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/';
results/dbt_artifacts.zip
results/logs/dbt.log
results/target/manifest.json
results/target/semantic_manifest.json
snowsql -q "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;"
snowsql -q "SELECT SYSTEM\$GET_DBT_LOG('01bf3f89-0300-0001-0000-0000000c1229')"
| ============================== 11:17:39.152234 | 4df65841-7aa3-40e2-81cb-2007c09c2b81
| 11:17:39.152234 [info ] [Dummy-1 ]: Running with dbt=1.9.4
....
snowsql -q "SELECT SYSTEM\$LOCATE_DBT_ARCHIVE('01bf3f89-0300-0001-0000-0000000c1229')"
snow://dbt_project/TESTDBT.PUBLIC.MY_DBT_PROJECT/results/query_id_01bf3f89-0300-0001-0000-0000000c1229/dbt_artifacts.zip
snowsql -q "GET 'snow://dbt_project/TESTDBT.PUBLIC.MY_DBT_PROJECT/results/query_id_01bf3f89-0300-0001-0000-0000000c1229/dbt_artifacts.zip' file:///Users/user_name/Code/temp"
Type SQL statements or !help
+-----------------------------------------------------------------+--------+------------+-----
| file | size | status | ....
|-----------------------------------------------------------------+--------+------------+-----
| query_id_01bf3f89-0300-0001-0000-0000000c1229/dbt_artifacts.zip | 137351 | DOWNLOADED |...
+-----------------------------------------------------------------+--------+------------+-----