使用系统表监视帐户活动

本文介绍 Azure Databricks 中系统表的概念,并重点介绍可用于充分利用系统表数据的资源。

什么是系统表?

系统表是 system 目录中帐户操作数据的 Azure Databricks 托管的分析存储。 系统表可用于跨帐户观测历史记录。

注意

有关 system.information_schema 的文档,请参阅信息架构

要求

  • 要访问系统表,必须为 Unity Catalog 启用你的工作区。 有关详细信息,请参阅启用系统表架构

  • 以下区域不提供系统表:

    • Azure 中国区域
    • Azure 政府区域
    • 印度西部
    • 瑞士西部

可以使用哪些系统表?

目前,Azure Databricks 托管以下系统表:

说明 位置 支持流式处理 免费保留期 包括全局或区域数据
审核日志(公共预览版) 在区域中包括来自工作区的所有审核事件的记录。 有关可用审核事件的列表,请参阅诊断日志参考 system.access.audit 365 天 区域用于工作区级事件。 全局用于帐户级事件。
表世系(公共预览版) 包括 Unity Catalog 表或路径上每个读取或写入事件的记录。 system.access.table_lineage 365 天 区域
列世系(公共预览版) 包括 Unity Catalog 列上每个读取或写入事件的记录(但不包括没有源的事件)。 system.access.column_lineage 365 天 区域
可计费使用情况 包括帐户中所有可计费使用情况的记录。 每个使用情况记录都是某个资源的可计费使用情况的每小时聚合。 system.billing.usage 365 天 全局
定价 SKU 定价的历史日志。 每次更改 SKU 价格时,都会增加一条记录。 system.billing.list_prices 无限制 全局
群集(公共预览版) 一个缓慢变化的维度表,其中包含任何群集随时间变化的计算配置的完整历史记录。 system.compute.clusters 空值 区域
事件时间线(公共预览版) 捕获通用和作业计算资源的利用率指标。 system.compute.node_timeline 30 天 区域
节点类型(公共预览版) 通过基本硬件信息捕获当前可用的节点类型。 system.compute.node_types 空值 区域
SQL 仓库 (公共预览版) 包含任何 SQL 仓库随时间推移的配置的完整历史记录。 system.compute.warehouses 365 天 区域
SQL 仓库事件(公共预览版) 捕获与 SQL 仓库相关的事件。 例如,启动、停止、运行、纵向扩展和缩减。 system.compute.warehouse_events 365 天 区域
作业(公共预览版) 跟踪在帐户中创建的所有作业。 system.lakeflow.jobs 365 天 区域
作业任务(公共预览版) 跟踪帐户中运行的所有作业任务。 system.lakeflow.job_tasks 365 天 区域
作业运行时间线(公共预览版) 跟踪作业运行的开始和结束时间。 system.lakeflow.

job_run_timeline
365 天 区域
作业任务时间线(公共预览版) 跟踪作业任务运行的开始和结束时间,及其使用的计算资源。 system.lakeflow.

job_task_run_timeline
365 天 区域
市场漏斗事件(公共预览版) 包括列表的使用者印象和漏斗数据。 system.marketplace.listing_

funnel_events
365 天 区域
市场列表访问(公共预览版) 包含对你的商品列表已完成的请求数据获取数据事件的消费者信息。 system.marketplace.listing_

access_events
365 天 区域
预测优化(公共预览版) 跟踪预测优化功能的操作历史记录。 system.storage.predictive_

optimization_operations_history
180 天 区域
Databricks 助手事件(公共预览版) 跟踪发送到 Databricks 助手的用户消息。 system.access.assistant_events 365 天 区域
查询历史记录(公共预览版) 捕获 SQL 仓库上运行的所有查询的记录。 system.query.history 90 天 区域
洁净室事件(公共预览版) 捕获与数据清洁房间相关的事件。 system.access.clean_room_events 365 天 区域
模型服务端点使用情况(公共预览版) 捕获对模型服务端点及其响应的每个请求的令牌计数。 若要捕获此表中的终结点使用情况,必须在 服务终结点上启用使用情况跟踪。 system.serving.endpoint_usage 90 天 区域
模型服务端点数据(公共预览版) 缓慢变化的维度表,用于将每个服务的外部模型的元数据存储在模型服务端点中。 system.serving.served_entities 365 天 区域

计费使用情况和定价表可免费使用。 处于公共预览状态的表在预览期间也可以免费使用,但将来可能会收费。

注意

除了上面列出的系统表之外,你可能会在帐户中看到其他系统表。 这些表目前处于个人预览状态,并且默认情况下为空。 如果有兴趣使用这些表中的任何一个,请联系 Databricks 帐户团队。

启用系统表架构

由于系统表由 Unity Catalog 管理,因此帐户中至少需要启用一个 Unity Catalog 工作区才能启用和访问系统表。 系统表包含帐户中所有工作区的数据,但只能从启用了 Unity Catalog 的工作区访问这些数据。

系统表在架构级别启用。 如果启用了一个系统架构,则启用了该架构中的所有表。 发布新架构时,帐户管理员需要手动启用该架构。

必须由帐户管理员启用系统表。可以使用 SystemSchemas API 启用系统表。

注意

billing 架构默认启用。 其他架构必须手动启用。

列出可用系统架构

使用以下 curl 命令列出可用的系统架构:

curl -v -X GET -H "Authorization: Bearer <PAT Token>" "https://adb-<xxx>.azuredatabricks.net/api/2.0/unity-catalog/metastores/<metastore-id>/systemschemas"

以下是 GET 命令的一个示例输出:

{"schemas":[{"schema":"access","state":"<AVAILABLE OR EnableCompleted>"},{"schema":"billing","state":"<AVAILABLE OR EnableCompleted>"},{"schema":"information_schema","state":"<AVAILABLE OR EnableCompleted>"}]}

state: AVAILABLE:系统架构可用,但尚未启用。

state: EnableCompleted:已启用系统架构,它在目录资源管理器中可见。

启用系统架构

使用以下 curl 命令启用系统架构:

curl -v -X PUT -H "Authorization: Bearer <PAT Token>" "https://adb-<xxx>.azuredatabricks.net/api/2.0/unity-catalog/metastores/<metastore-id>/systemschemas/<SCHEMA_NAME>"

如果成功启用系统架构,则返回结果代码 200

如果尝试重新启用系统架构,则返回以下内容:"error_code":"SCHEMA_ALREADY_EXISTS","message":"Schema <schema-name> already exists"

禁用系统架构

使用以下 curl 命令禁用系统架构:

curl -v -X DELETE -H "Authorization: Bearer <PAT Token>" "https://adb-<xxx>.azuredatabricks.net/api/2.0/unity-catalog/metastores/<metastore-id>/systemschemas/<SCHEMA_NAME>"

授予对系统表的访问权限

对系统表的访问受 Unity Catalog 管理。 默认情况下,没有用户可以访问这些系统架构。 若要授予访问权限,同时作为元存储管理员和帐户管理员的用户必须授予对系统架构的 USESELECT 权限。 请参阅在 Unity Catalog 中管理权限

系统表为只读,因此不能修改。

注意

如果你的帐户是在 2023 年 11 月 9 日之后创建的,则默认情况下你可能没有元存储管理员。 有关详细信息,请参阅设置和管理 Unity Catalog

系统表是否包含帐户中所有工作区的数据?

系统表包含在同一云区域中部署的帐户中所有工作区的操作数据。 计费系统表包含帐户范围的数据。

即使只能通过 Unity Catalog 工作区访问系统表,这些表也包含帐户中非 Unity Catalog 工作区的操作数据。

系统表数据存储在哪里?

帐户的系统表数据存储在与元存储位于同一区域的 Azure Databricks 托管的存储帐户中。 该数据会通过增量共享与你安全地共享。

每个表都有一个免费的数据保持期。 有关延长保持期的信息,请联系 Azure Databricks 帐户团队。

系统表位于目录资源管理器中的什么位置?

帐户中的系统表位于名为 system 的目录中,该目录包含在每个 Unity Catalog 元存储中。 在 system 目录中,你将看到包含系统表的架构,例如 accessbilling

流式处理系统表的注意事项

Azure Databricks 使用 Delta Sharing 与客户共享系统表数据。 使用 Delta Sharing 进行流式处理时,请留意以下注意事项:

  • 如果你要对系统表使用流式处理,请将 skipChangeCommits 选项设置为 true。 这可确保流式处理作业不会因系统表中的删除操作而中断。 请参阅忽略更新和删除
  • Delta Sharing 流式处理不支持 Trigger.AvailableNow。 它将转换为 Trigger.Once

如果在流式处理作业中使用触发器并发现作业没有跟上最新的系统表版本,Databricks 建议增加作业的计划频率。

从流式处理系统表读取增量更改

spark.readStream.option("skipChangeCommits", "true").table("system.billing.usage")

已知问题

  • 目前不支持实时监视。 数据全天更新。 如果看不到最近事件的日志,请稍后查看。

  • 若要启用系统表,可能需要授予对系统表 Blob 存储终结点的网络访问权限。 若要查看每个区域的系统表存储终结点的列表,请参阅存储终结点 IP 地址

  • 系统架构 system.operational_datasystem.lineage 已弃用,并且将包含空表。

  • __internal_logging 系统表架构用于支持使用推理表完成有效负载日志记录。 此架构对帐户管理员可见,但不能启用,也不应用于客户工作流。