在 Databricks SQL 中监视具体化视图

本文介绍如何在 Databricks SQL 中监视和查询有关具体化视图的刷新数据。

查看单个具体化视图的详细信息

可以使用目录资源管理器查看单个具体化视图的详细信息,或通过编程方式利用 DESCRIBE EXTENDED 操作查看。 您还可以查询事件日志以获取具体化视图刷新历史的详细信息。

在目录资源管理器中查看详细信息

可以通过在目录资源管理器中查看具体化视图来访问具体化视图的信息。 在目录资源管理器中,可以看到在 SQL 中创建的最后一次刷新状态和任何刷新计划。 有关在 SQL 中创建的计划的详细信息,请参阅 CREATE MATERIALIZED VIEW

目录资源管理器在右侧面板中显示每个具体化视图的详细信息,包括:

  1. 当前刷新状态 和上次运行时。 若要查看有关更新的更多详细信息,包括运行持续时间、任何详细错误以及 刷新类型 (包括具体化视图是完全刷新还是增量刷新以及原因),请单击“ 查看刷新详细信息”。
  2. 刷新计划。 如果具体化视图通过 SQL 设置了计划,则会显示该计划。 若要更新计划,请使用 ALTER MATERIALIZED VIEW
  3. 标记。 若要添加自定义 标记,请单击“ 添加标记”。 标签不会自动用于归属成本,但您可以手动创建查询,将自定义标签与您的成本连接起来。 有关详细信息,请参阅 使用自定义标记的 SQL 仓库的属性成本

某些具体化视图的属性在 Catalog Explorer 中不可用。 对于这些属性,或者要以编程方式获取信息,可以使用命令 DESCRIBE EXTENDED

查看详细信息,使用 DESCRIBE EXTENDED

可以通过使用 DESCRIBE EXTENDED 命令以编程方式查看物化视图的详细信息。 这包括超出从Catalog Explorer获取的详细信息。 它们包括:

  • 最近已完成刷新的状态。

  • 刷新计划。

  • 具体化视图的列。

  • 具体化视图的刷新类型(在目录资源管理器中不可用)。

  • 具体化视图的数据大小,以总字节数表示(不会在目录资源管理器中显示)。

  • 具体化视图的存储位置(不会在目录资源管理器中显示)。

  • 某些信息仅在启用时包含在结果中:

    • 聚类列(如果启用)。
    • 是否启用删除向量(仅在true时显示)。
    • 是否启用行跟踪(仅在 true 时显示)。
-- As table:
DESCRIBE TABLE EXTENDED sales;

-- As a single JSON object:
DESCRIBE TABLE EXTENDED sales AS JSON;

以编程方式查询事件日志

若要获取物化视图的刷新历史记录的详细信息,或正在刷新时的详细信息,可以以编程方式查询事件日志。

作为管道所有者,可以创建 视图 以允许其他人查询管道的事件日志。 以下查询创建其他人可用于查询事件日志的视图。 此查询使用 TABLE 值函数查询正确的事件日志表。

CREATE VIEW my_event_log_view AS
  SELECT *
  FROM event_log(TABLE(<catalog_name>.<schema_name>.<mv_name>));

若要查询事件日志视图,请使用如下所示的查询。

SELECT *
  FROM my_event_log_view
  WHERE event_type = "update_progress"
  ORDER BY timestamp desc;

若要直接以管道所有者身份查询事件日志,无需创建视图。 可以使用 TABLE 值函数并直接查询数据,例如以下示例查询。

SELECT *
  FROM event_log(TABLE(<catalog_name>.<schema_name>.<mv_name>))
  WHERE event_type = "update_progress"
  ORDER BY timestamp desc;

有关使用事件日志的示例查询的完整列表,请参阅 基本查询示例

监视物化视图的运行

可以使用“作业和管道”页、“查询历史记录”页,或通过查询事件日志,以编程方式监视工作区里的管道作业。

在 UI 中查看所有物化视图运行情况

如果使用“作业和管道”页来监控工作区中各个编排作业的状态,还可以跟踪所有在此创建的具体化视图和流表。 在 Databricks SQL 中创建的每个具体化视图都有一个支持它的管道。 若要查看你有权访问的所有物化视图和流表,

  1. 单击“工作流”图标。工作区左侧的“作业和管道”按钮。
  2. 单击 “管道” 开关,将视图过滤为仅显示管道。
  3. 单击 “管道类型 ”按钮并选择 MV/ST 以仅筛选 Databricks SQL 创建的管道。
  4. 单击“ 我可访问 ”筛选器,显示你有权访问的所有管道。

你将能够看到您所在组织中创建的所有物化视图和流式表,包括最近运行情况的摘要视图。 单击管道的名称将打开管道监视详细信息页以获取详细信息。 若要了解有关管道监视详细信息页的详细信息,请参阅 “排查刷新失败问题”。

使用查询历史记录查看运行

如果您更熟悉“查询历史记录”选项卡,还可以使用它来查看您至少具备CAN VIEW访问权限的 SQL 仓库中所有查询的所有先前运行记录。 可以使用查询历史记录页访问查询详情和查询概况,这些查询概况有助于识别用于运行流式处理表更新的 Lakeflow 声明式管道中性能欠佳的查询和瓶颈。 有关可用于查询历史记录和查询配置文件的信息类型的概述,请参阅 查询历史记录查询配置文件

重要

此功能目前以公共预览版提供。 工作区管理员可以从 预览 页控制对此功能的访问。 请参阅 管理 Azure Databricks 预览版

与具体化视图相关的所有语句都显示在查询历史记录中。 可以使用“语句”下拉列表筛选器来选择任何命令并检查相关查询。 所有 CREATE 语句后都跟随一个在管道上异步执行的 REFRESH 语句。 这些 REFRESH 语句通常包括详细的查询计划,用于提供优化性能的见解。

若要访问 REFRESH 查询历史记录 UI 中的语句,请使用以下步骤:

  1. 单击“历史记录”图标。左侧栏中的查询历史记录
  2. 从“语句”下拉列表筛选器中选择 REFRESH 复选框。
  3. 单击查询语句的名称可查看摘要详细信息,例如查询持续时间和聚合指标。
  4. 单击“ 查看查询配置文件 ”打开查询配置文件。 有关如何浏览查询概要文件的详细信息,请参阅 查询概要文件
  5. (可选)使用“查询源”部分中的链接打开相关的查询或管道。

请参阅 CREATE MATERIALIZED VIEW

排查刷新失败的问题

可以通过查看 作业和管道 列表来查找物化视图(或流表)的失败更新。 若要排查更新失败的问题,请使用管道监视详细信息页或事件日志。

当你认为刷新应该是增量刷新,但执行的却是完整刷新时,若要排查原因,请首先检查是否已为所有源 Delta 表启用了行跟踪。 有关增量刷新的其他详细信息,请参阅 支持具体化视图增量刷新

可以从管道监视页获取其他详细信息,也可以通过编程方式查询事件日志。

使用管道监控页面

若要获取有关已失败的物化视图(或流式处理表)的更多详细信息,可以使用管道监视页面来调试问题。 每个具体化视图都有一个支持它的管道。 管道监视页包含如下信息:

  • 上次运行的状态和运行历史记录。
  • 上次运行持续时间。
  • 具体化视图是完全刷新还是增量刷新。 有关使具体化视图以增量方式刷新的更多详细信息,请参阅 支持具体化视图增量刷新
  • 事件日志,用于更详细的调试。 如果具体化视图无法更新或遇到其他问题,请单击 问题面板 以更详细地查看日志。

若要对具体化视图进行故障排除,

  1. 在工作区中,单击“工作流”图标。左侧导航栏上的“作业和管道”按钮。
  2. 单击列表中的管道名称。
  3. 如果更新无法运行,UI 会在底部面板中显示错误(或错误列表)。
  4. 单击“ 查看日志 ”按钮,或单击 问题面板 以更详细地查看错误。
  5. 这会打开事件日志 UI。 每个错误都有一条高级消息和摘要,以及一个包含更多详细信息的 JSON 选项卡。 若要修复 Databricks 助手的问题,请单击“ 诊断错误”。

有关管道监视页的更多详细信息,请参阅 此处

查询具体化视图的刷新历史记录

事件日志可用于设置仪表板以监视整个工作区的更新状态或持续时间,或者如果你更喜欢编程式监视而不是使用 UI。 使用 Databricks SQL 创建的具体化视图不支持将事件日志保存到元存储,因此只有具体化视图的所有者可以直接查询事件日志。

要查看具体化视图上 REFRESH 操作的状态(包括当前和过去的刷新),请查询 Lakeflow 声明性管道事件日志:

SELECT *
FROM event_log(TABLE(<fully-qualified-table-name>))
WHERE event_type = "update_progress"
ORDER BY timestamp desc;

<fully-qualified-table-name> 替换为具体化视图的完全限定名称,包括目录和架构。 如果你不是管道所有者,则可能需要先创建一个视图来查询事件日志。 请参阅 以编程方式查询事件日志

查询物化视图发生的刷新类型

某些查询可以增量刷新。 如果无法执行增量刷新,则会改为执行完全刷新。

若要查看具体化视图的刷新类型,请查询事件日志:

SELECT timestamp, message
FROM event_log(TABLE(my_catalog.my_schema.sales))
WHERE event_type = 'planning_information'
ORDER BY timestamp desc;

此命令的示例输出:

    • 时间戳
    • 消息
    • 2025-03-21T22:23:16.497+00:00
    • Flow 'sales' has been planned in :re[LDP] to be executed as ROW_BASED.

使用自定义标记将成本归因于 SQL 仓库

标记不会自动追加到计费记录中,但你可以在查询中手动将它们加入计费信息。

使用目录资源管理器将标记添加到每个具体化视图(或流式处理表)后,可以通过联接 table_tagsbilling 系统表来监视具体化视图的成本。 这是一个示例查询,用于检索使用 Databricks SQL 创建的所有具体化视图和流式处理表的计费记录,并追加表级标记:

SELECT
  u.*,
  tag_info.tags
FROM
  system.billing.usage u
LEFT JOIN (
  SELECT
    t.catalog_name,
    t.schema_name,
    t.table_name,
    collect_list(named_struct('tag_name', t.tag_name, 'tag_value', t.tag_value)) AS tags
  FROM
    main.information_schema.table_tags t
  GROUP BY
    t.catalog_name,
    t.schema_name,
    t.table_name
) tag_info
  ON tag_info.catalog_name = u.usage_metadata.uc_table_catalog
  AND tag_info.schema_name = u.usage_metadata.uc_table_schema
  AND tag_info.table_name = u.usage_metadata.uc_table_name
  WHERE usage_metadata.uc_table_name is not null;

可以改用同一想法来联接表中的 column_tags 列标记。