计算系统表参考

本文提供了计算系统表的参考指南。 可以使用这些表监视帐户中经典通用计算、作业计算和 Lakeflow Spark 声明性管道计算的活动和指标。 这些经典计算表包括:

  • clusters:记录您帐户中的计算配置。
  • node_types:包括每个当前可用节点类型的单个记录,包括硬件信息。
  • node_timeline:包括计算利用率指标的逐分钟记录。
  • instance_events:捕获经典计算实例的状态转换。
  • instance_pools:记录帐户中的实例池配置。

群集表架构

群集表是一个变化缓慢的维度表,其中包含各种用途计算、作业计算、Lakeflow Spark 声明性管道计算和管道维护计算的计算配置的完整历史记录。

表路径:此系统表位于 system.compute.clusters

列名称 数据类型 Description 示例
account_id 字符串 创建此群集的帐户的 ID。 23e22ba4-87b9-
4cc2-9770-d10b894b7118
workspace_id 字符串 创建此群集的工作区的 ID。 1234567890123456
cluster_id 字符串 与此记录关联的群集的 ID。 0000-123456-crmpt124
cluster_name 字符串 群集的用户定义名称。 My cluster
owned_by 字符串 群集所有者的用户名。 默认为群集创建者,但可以通过群集 API 进行更改。 sample_user@email.com
create_time 时间戳 此计算定义的更改的时间戳。 2023-01-09 11:00:00.000
delete_time 时间戳 删除群集时的时间戳。 如果群集未删除,则该值为 null 2023-01-09 11:00:00.000
driver_node_type 字符串 驱动程序节点类型名称。 这与云提供商中的实例类型名称匹配。 Standard_D16s_v3
worker_node_type 字符串 工作器节点类型名称。 这与云提供商中的实例类型名称匹配。 Standard_D16s_v3
worker_count bigint 工人数。 仅适用于固定大小的集群。 4
min_autoscale_workers bigint 设置的最小工人数。 此字段仅对自动缩放群集有效。 1
max_autoscale_workers bigint 设置的最大工作器数。 此字段仅对自动缩放群集有效。 1
auto_termination_minutes bigint 配置的自动终止持续时间。 120
enable_elastic_disk boolean 自动缩放功能磁盘启用状态。 true
tags 映射 群集的用户定义标记(不包括默认标记)。 {"ResourceClass":"SingleNode"}
cluster_source 字符串 群集的来源 UIAPI值仅适用于全用途计算。 所有工作计算都记录为 JOB。 管道为 PIPELINEPIPELINE_MAINTENANCE UI
init_scripts 数组 初始化脚本的路径集合。 "/Users/example@email.com
/files/scripts/install-python-pacakges.sh"
aws_attributes 结构 特定于 AWS 的设置。 null
azure_attributes 结构 Azure特定设置。 {
"first_on_demand": "0",
"availability": "ON_DEMAND_AZURE",
}
gcp_attributes 结构 特定于 GCP 的设置。 此字段将为空。 null
driver_instance_pool_id 字符串 如果在实例池上配置了驱动程序,则为实例池 ID。 1107-555555-crhod16-pool-DIdnjazB
worker_instance_pool_id 字符串 如果在实例池上配置了工作器,则为实例池 ID。 1107-555555-crhod16-pool-DIdnjazB
dbr_version 字符串 群集的 Databricks Runtime。 14.x-snapshot-scala2.12
change_time 时间戳 计算定义的更改的时间戳。 2023-01-09 11:00:00.000
change_date date 更改日期。 用于保留。 2023-01-09
data_security_mode 字符串 计算资源的访问模式。 请参阅 访问模式参考 USER_ISOLATION
policy_id 字符串 群集计算策略的 ID(如果适用)。 1234F35636110A5B

访问模式参考

下表翻译了 data_security_mode 列中可能的值。 该列也可以 null 用于某些管道和系统创建的群集。

价值 访问模式
USER_ISOLATION 标准
SINGLE_USER 专属

旧访问模式使用以下值进行记录:

价值 访问模式
LEGACY_PASSTHROUGH 凭证传递(共享)
LEGACY_SINGLE_USER 凭证传递(单用户)
LEGACY_TABLE_ACL 自定义
NONE 无隔离共享

节点类型表架构

节点类型表通过基本硬件信息捕获当前可用的节点类型。

表路径:此系统表位于 system.compute.node_types.

列名称 数据类型 Description 示例
account_id 字符串 创建此群集的帐户的 ID。 23e22ba4-87b9-4cc2-9770-d10b894b7118
node_type 字符串 节点类型的唯一标识符。 Standard_D16s_v3
core_count 翻倍 实例的 vCPU 数。 48.0
memory_mb long 实例的总内存。 393216
gpu_count long 实例的 GPU 数。 0

节点时间线表架构

节点时间线表以分钟粒度捕获节点级资源利用率数据。 每个记录包含每个实例在给定分钟内的数据。 此表记录您帐户中通用计算、作业计算、Lakeflow Spark 声明性管道计算和管道维护计算资源的节点时间线。

表路径:此系统表位于 system.compute.node_timeline.

列名称 数据类型 Description 示例
account_id 字符串 运行此计算资源的帐户的 ID。 23e22ba4-87b9-4cc2-9770-d10b894b7118
workspace_id 字符串 运行此计算资源的工作区的 ID。 1234567890123456
cluster_id 字符串 计算资源的 ID。 0000-123456-crmpt124
instance_id 字符串 特定实例的 ID。 i-1234a6c12a2681234
start_time 时间戳 记录的开始时间 (UTC)。 2024-07-16T12:00:00Z
end_time 时间戳 记录的结束时间 (UTC)。 2024-07-16T13:00:00Z
driver boolean 实例是驱动程序还是工作器节点。 true
cpu_user_percent 翻倍 用户空间中 CPU 花费的时间百分比。 34.76163817234407
cpu_system_percent 翻倍 内核中 CPU 花费的时间百分比。 1.0895310279488264
cpu_wait_percent 翻倍 CPU 等待 I/O 所花费的时间百分比。 0.03445157400629276
mem_used_percent 翻倍 时间段内使用的计算内存百分比(包括计算上运行的后台进程使用的内存)。 45.34858216779041
mem_swap_percent 翻倍 归因于内存交换的内存使用量百分比。 0.014648443087939
network_sent_bytes bigint 在网络流量中发送的字节数。 517376
network_received_bytes bigint 来自网络流量的接收字节数。 179234
disk_free_bytes_per_mount_point 映射 按装入点分组的磁盘利用率。 仅当计算正在运行时,才会预配此临时存储。 {"/var/lib/lxc":123455551234,"/":
123456789123,"/local_disk0":123412341234}
node_type 字符串 节点类型的名称。 这将与云提供商中的实例类型名称匹配。 Standard_D16s_v3
private_ip 字符串 分配给节点的专用 IP 地址。 10.0.0.42

实例事件表架构

Important

此系统表为公共预览版

实例事件表捕获经典计算实例的状态转换。 每一行表示单个实例的状态更改。 此表包括用于全用途计算、作业计算和 Lakeflow Spark 声明性管道计算的记录,这些管道来自在同一云区域中部署的帐户中的所有工作区。

表路径:此系统表位于 system.compute.instance_events.

列名称 数据类型 Description 示例
account_id 字符串 启动此实例的帐户的 ID。 23e22ba4-87b9-
4cc2-9770-d10b894b7118
workspace_id 字符串 启动此实例的工作区的 ID。 1234567890123456
instance_id 字符串 实例的 ID。 i-0a1b2c3d4e5f67890
event_time 时间戳 事件时间戳。 2024-01-15 10:30:00.000
event_type 字符串 事件类型。 可能的值为 INSTANCE_LAUNCHINGSTATE_TRANSITION STATE_TRANSITION
instance_pool_id 字符串 实例池 ID(如果实例属于池)。 1107-555555-pool-abcd1234
cluster_id 字符串 此实例放置在群集的 ID。 仅当 stateINSTANCE_PLACED 时才会填充。 请参阅 cluster_id详细信息 0000-123456-xxxxxxxx
node_type 字符串 节点类型的名称。 这与云提供商中的实例类型名称匹配。 Standard_D16s_v3
state 字符串 实例状态。 请参阅 实例状态 INSTANCE_PLACED
availability_type 字符串 实例的可用性类型。 可能的值为 ON_DEMANDSPOT (AWS, Azure) 或 ON_DEMANDPREEMPTIBLE (GCP)。 ON_DEMAND

实例状态

  • INSTANCE_LAUNCHING:正在初始化实例。
  • INSTANCE_READY:实例已完全初始化并可供使用,但当前未使用。
  • INSTANCE_PLACED:实例当前正在使用(已加入群集)。
  • INSTANCE_TERMINATED:实例已终止。

何时填充cluster_id?

cluster_id仅当实例处于INSTANCE_PLACED状态时,才会填充该字段。 对于所有其他州(INSTANCE_LAUNCHING,,INSTANCE_READYINSTANCE_TERMINATED),cluster_idnull。 此行为对于共用实例和非共用实例都是一致的。

instance_events 表仅包括用于全用途的放置事件、作业和 Lakeflow Spark 声明性管道计算。 此表中不包括其他工作负荷(如 SQL 仓库)的放置事件。

实例池表架构

Important

此系统表为公共预览版

实例池表是一个变化缓慢的维度表,其中包含一段时间内实例池配置的完整历史记录。 配置发生更改时,会发出新行,以逻辑方式替换上一行。

表路径:此系统表位于 system.compute.instance_pools.

列名称 数据类型 Description 示例
account_id 字符串 创建此实例池的帐户的 ID。 23e22ba4-87b9-
4cc2-9770-d10b894b7118
workspace_id 字符串 创建此实例池的工作区的 ID。 1234567890123456
instance_pool_id 字符串 实例池的 ID。 1107-555555-pool-abcd1234
change_time 时间戳 实例池配置的更改时间戳。 2024-01-15 10:30:00.000
create_time 时间戳 实例池创建时间戳。 2024-01-10 08:00:00.000
delete_time 时间戳 实例池删除的时间戳。 该值为 null 未删除实例池。 null
instance_pool_name 字符串 实例池的用户定义的名称。 My instance pool
tags 映射 实例池的用户定义标记(不包括默认标记)。 {"team":"data-engineering"}
node_type 字符串 用于池中实例的节点类型。 这与云提供商中的实例类型名称匹配。 Standard_D16s_v3
idle_instance_autotermination_minutes bigint 池缓存中空闲实例在处于非活动状态后自动终止的分钟数。 120
min_idle_instances bigint 实例池中最低保留的空闲实例数。 2
max_capacity bigint 池中要保留的未完成实例的最大数量,包括群集使用的实例和空闲实例。 10
enable_elastic_disk boolean 自动缩放本地存储:启用后,当 Spark 辅助角色在磁盘空间不足时,此池中的实例会动态获取额外的磁盘空间。 true
disk_spec 结构 附加到所有 Spark 容器的磁盘的规范。 {
"disk_type": "PREMIUM_LRS",
"disk_count": 2,
"disk_size": 100
}
preloaded_docker_images 数组 在池中预加载的自定义 Docker 映像。 []
preloaded_spark_version 字符串 如果已定义,则为池预加载的 Spark 映像版本。 14.3.x-scala2.12
aws_attributes 结构 与 AWS 上运行的实例池相关的属性。 null
azure_attributes 结构 与Azure上运行的实例池相关的属性。 {
"availability": "ON_DEMAND_AZURE",
}

已知的限制

  • 在 2023 年 10 月 23 日之前标记为已删除的计算资源不会显示在群集表中。 这可能会导致 system.billing.usage 表中的联接与群集表中的记录不匹配。 所有活动的计算资源都已回填。
  • 这些表仅包含通用和作业计算的记录。 它们不包含无服务器计算或 SQL 仓库的记录。
  • 运行不到 10 分钟的节点可能不会显示在 node_timeline 表中。

示例查询

可以使用以下示例查询来回答常见问题:

注释

这些示例中的一些将群集表与 system.billing.usage 表联接在一起。 由于计费记录是跨区域的,而群集记录是特定于区域的,所以计费记录仅匹配你在查询的区域的群集记录。 要查看来自其他区域的记录,请在该区域中执行查询。

将群集记录与最新的计费记录联接

此查询可帮助你了解一段时间内的支出。 将 usage_start_time 更新到最新的计费周期后,它会获取对计费记录的最新更新,以加入群集数据。

在特定的运行期间,每个记录都与群集所有者相关联。 因此,如果群集所有者发生更改,成本将根据群集的使用时间准确归属于正确的所有者。

SELECT
  u.record_id,
  c.cluster_id,
  c.owned_by,
  c.change_time,
  u.usage_start_time,
  u.usage_quantity
FROM
  system.billing.usage u
  JOIN system.compute.clusters c
  JOIN (SELECT u.record_id, c.cluster_id, max(c.change_time) change_time
    FROM system.billing.usage u
    JOIN system.compute.clusters c
    WHERE
      u.usage_metadata.cluster_id is not null
      and u.usage_start_time >= '2023-01-01'
      and u.usage_metadata.cluster_id = c.cluster_id
      and date_trunc('HOUR', c.change_time) <= date_trunc('HOUR', u.usage_start_time)
    GROUP BY all) config
WHERE
  u.usage_metadata.cluster_id is not null
  and u.usage_start_time >= '2023-01-01'
  and u.usage_metadata.cluster_id = c.cluster_id
  and u.record_id = config.record_id
  and c.cluster_id = config.cluster_id
  and c.change_time = config.change_time
ORDER BY cluster_id, usage_start_time desc;

确定平均利用率和峰值利用率最高的计算资源

确定具有最高的平均 CPU 利用率和最高的峰值 CPU 利用率的通用和作业计算。

SELECT
        distinct cluster_id,
driver,
avg(cpu_user_percent + cpu_system_percent) as `Avg CPU Utilization`,
max(cpu_user_percent + cpu_system_percent) as `Peak CPU Utilization`,
        avg(cpu_wait_percent) as `Avg CPU Wait`,
        max(cpu_wait_percent) as `Max CPU Wait`,
        avg(mem_used_percent) as `Avg Memory Utilization`,
        max(mem_used_percent) as `Max Memory Utilization`,
avg(network_received_bytes)/(1024^2) as `Avg Network MB Received per Minute`,
avg(network_sent_bytes)/(1024^2) as `Avg Network MB Sent per Minute`
FROM
        node_timeline
WHERE
        start_time >= date_add(now(), -1)
GROUP BY
        cluster_id,
        driver
ORDER BY
        3 desc;

获取每个实例池的最新版本

instance_pools 是 SCD2 类型,每次进行更改时都会创建新记录,而不是更新现有记录。 若要获取最新版本,请获取具有最大 change_time版本的条目。

SELECT *
FROM system.compute.instance_pools
QUALIFY row_number() OVER (
  PARTITION BY workspace_id, instance_pool_id
  ORDER BY change_time DESC
) = 1;

计算实例空闲和活动时间

此查询使用表的状态转换 instance_events 计算每个实例的总空闲时间和活动时间。

WITH instance_states AS (
  SELECT
    *,
    event_time AS start_time,
    lead(event_time) OVER (
      PARTITION BY workspace_id, instance_id
      ORDER BY event_time
    ) AS end_time
  FROM system.compute.instance_events
  WHERE event_type IN ('INSTANCE_LAUNCHING', 'STATE_TRANSITION')
)
SELECT
  workspace_id,
  instance_id,
  instance_pool_id,
  sum(if(state = 'INSTANCE_READY',
    TIMESTAMPDIFF(SECOND, start_time, end_time), 0)) / 60 AS idle_minutes,
  sum(if(state = 'INSTANCE_PLACED',
    TIMESTAMPDIFF(SECOND, start_time, end_time), 0)) / 60 AS active_minutes
FROM instance_states
GROUP BY workspace_id, instance_id, instance_pool_id;