使用系统表监视成本

本文介绍如何自行使用 system.billing.usage 表或与其他系统表联接,以获取帐户的 Azure Databricks 使用情况的图片。 还提供了以下功能特定的文章:

如何读取使用情况表

有权访问系统表数据的用户可以查看和查询其帐户的计费日志,该日志位于 system.billing.usage。 每个计费记录都包含将使用量归因于相关的特定资源、标识和产品的列。

  • usage_metadata 列包含一个结构,其中包含有关使用情况中涉及的资源或对象的信息。
  • identity_metadata 列包含有关产生使用情况的用户或服务主体的信息。
  • custom_tags 列包括应用于与使用情况关联的计算资源的标记。 这还包括由预算策略添加的标记,以便你可以对无服务器使用情况进行归因。
  • billing_origin_productproduct_features 列提供有关所使用的确切产品和功能的信息。

如需完整的使用情况表参考,请参阅 计费使用情况系统表参考

使计费数据可操作

Databricks 建议使用 AI/BI 仪表板来使用系统表计费数据创建成本监视仪表板。 可以创建新的仪表板,或者帐户管理员可以导入预构建的可自定义成本监视仪表板。 请参阅 使用情况仪表板

还可以向查询添加警报,以帮助你随时了解使用情况数据。 请参阅创建警报

示例查询

以下查询提供了如何使用 system.billing.usage 表数据来深入了解帐户使用情况的示例。

在本月,每个产品使用了多少个 DBU?

SELECT
    billing_origin_product,
    usage_date,
    sum(usage_quantity) as usage_quantity
FROM system.billing.usage
WHERE
    month(usage_date) = month(NOW())
    AND year(usage_date) = year(NOW())
GROUP BY billing_origin_product, usage_date

哪些作业消耗了最多的 DBU?

SELECT
  usage_metadata.job_id as `Job ID`, sum(usage_quantity) as `Usage`
FROM
  system.billing.usage
WHERE
  usage_metadata.job_id IS NOT NULL
GROUP BY
  `Job ID`
ORDER BY
  `Usage` DESC

可以将多少使用情况归因于具有特定标签的资源?

可以通过各种方式分解成本。 此示例演示如何按自定义标记细分成本。 请务必替换查询中的自定义标记的键和值。

SELECT
  sku_name, usage_unit, SUM(usage_quantity) as `Usage`
FROM
  system.billing.usage
WHERE
  custom_tags [:key] = :value
GROUP BY 1, 2

向我展示使用量增长的产品

SELECT
  after.billing_origin_product, before_dbus, after_dbus, ((after_dbus - before_dbus)/before_dbus * 100) AS growth_rate
FROM
  (SELECT
     billing_origin_product, sum(usage_quantity) as before_dbus
   FROM
     system.billing.usage
   WHERE
     usage_date BETWEEN "2024-04-01" and "2024-04-30"
   GROUP BY
     billing_origin_product
  ) as before
JOIN
  (SELECT
     billing_origin_product, sum(usage_quantity) as after_dbus
   FROM
     system.billing.usage
   WHERE
     usage_date
   BETWEEN
     "2024-05-01" and "2024-05-30"
   GROUP BY
     billing_origin_product
  ) as after
WHERE
  before.billing_origin_product = after.billing_origin_product
SORT BY
  growth_rate DESC

“所有用途计算”(Photon)的使用趋势是什么?

SELECT
  sku_name,
  usage_date,
  sum(usage_quantity) as `DBUs consumed`
FROM
  system.billing.usage
WHERE
  year(usage_date) = year(CURRENT_DATE)
AND
  sku_name = "ENTERPRISE_ALL_PURPOSE_COMPUTE_(PHOTON)"
AND
  usage_date > "2024-04-15"
GROUP BY
  sku_name, usage_date

具体化视图或流式处理表的 DBU 使用量是多少?

若要获取特定具体化视图或流式处理表的 DBU 使用情况和 SKU,请将查询提交到可计费使用情况系统表,其中 usage_metadata.dlt_pipeline_id 设置为与具体化视图或流式处理表关联的管道的 ID。 查看具体化视图或流式处理表时,可以在目录资源管理器的“详细信息”选项卡中找到管道 ID。 若要按日期限制消耗量,请指定开始日期、结束日期或日期范围。 以下查询检索 ID 为 00732f83-cd59-4c76-ac0d-57958532ab5b 的管道的 DBU 使用情况,并且使用开始日期为 2024-05-30

SELECT
  sku_name,
  usage_date,
  SUM(usage_quantity) AS `DBUs`
FROM
  system.billing.usage
WHERE
  usage_metadata.dlt_pipeline_id = :dlt_pipeline_id
  AND usage_start_time > :usage_start_time
GROUP BY
  ALL

无服务器 DLT 管道的 DBU 消耗量是多少?

若要获取无服务器 DLT 管道的 DBU 使用情况及 SKU,请对计费使用状况系统表提交查询,以获取 usage_metadata.dlt_pipeline_id 设置为管道 ID 的记录。 在 Delta Live Tables 用户界面中查看管道时,可以在“管道详细信息” 选项卡上找到管道 ID。 若要按日期限制消耗量,请指定开始日期、结束日期或日期范围。 以下查询检索 ID 为 00732f83-cd59-4c76-ac0d-57958532ab5b 的管道自 2024 年 12 月以来的 DBU 使用情况。

SELECT
  sku_name,
  usage_date,
  SUM(usage_quantity) AS `DBUs`
FROM
  system.billing.usage
WHERE
  usage_metadata.dlt_pipeline_id = :dlt_pipeline_id
  AND usage_start_time >= :usage_start_time
  AND usage_end_time < :usage_end_time
GROUP BY
  ALL

DBU 消耗量的日常趋势是什么?

SELECT
  usage_date as `Date`, sum(usage_quantity) as `DBUs Consumed`
FROM
  system.billing.usage
WHERE
  sku_name = "STANDARD_ALL_PURPOSE_COMPUTE"
GROUP BY
  usage_date
ORDER BY
  usage_date ASC

使用情况表联接示例

以下示例演示如何将使用情况表与其他系统表联接,以获取其他见解。

将成本归因于计算所有者

如果想要降低计算成本,可以使用此查询来找出帐户中的哪些群集所有者使用最多的 DBU。

SELECT
  u.record_id record_id,
  c.cluster_id cluster_id,
  max_by(c.owned_by, c.change_time) owned_by,
  max(c.change_time) change_time,
  any_value(u.usage_start_time) usage_start_time,
  any_value(u.usage_quantity) usage_quantity
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 c.change_time <= u.usage_start_time
GROUP BY 1, 2
ORDER BY cluster_id, usage_start_time desc;

通过包括作业名称来扩充使用情况

with jobs as (
  SELECT
    *,
    ROW_NUMBER() OVER (PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
  FROM system.lakeflow.jobs QUALIFY rn=1
)
SELECT
  usage.*,
  coalesce(usage_metadata.job_name, jobs.name) as job_name
FROM system.billing.usage
  LEFT JOIN jobs ON usage.workspace_id=jobs.workspace_id AND usage.usage_metadata.job_id=jobs.job_id
WHERE
  billing_origin_product="JOBS"

将定价与使用情况表联接

list_prices 表包括每个可用 SKU 在不同时期的标价。 你可以联接 usage 表来查看特定使用情况的费用清单。

例如,以下查询返回一个月内特定标记的总成本:

SELECT
 SUM(usage.usage_quantity * list_prices.pricing.effective_list.default)
 as `Total Dollar Cost`
FROM system.billing.usage
JOIN system.billing.list_prices ON list_prices.sku_name = usage.sku_name
WHERE usage.custom_tags [:key] = :value
AND usage.usage_end_time >= list_prices.price_start_time
AND (list_prices.price_end_time IS NULL OR usage.usage_end_time < list_prices.price_end_time)
AND usage.usage_date BETWEEN "2024-05-01" AND "2024-05-31"

估算上一个日历月使用情况的附加成本

此查询将简单百分比应用于时间段内的所有使用情况。 请注意,这可能与实际货币化略有不同,因为某些加载项的权限管理方式不同。 将附加费率替换为帐户的费率。

SELECT SUM(usage.usage_quantity * list_prices.pricing.effective_list.default) * :add_on_rate as `Total Add-On Dollar Cost`
FROM system.billing.usage
JOIN system.billing.list_prices ON list_prices.sku_name = usage.sku_name
  WHERE usage.usage_end_time >= list_prices.price_start_time
  AND (list_prices.price_end_time IS NULL OR usage.usage_end_time < list_prices.price_end_time)
  AND usage.usage_date BETWEEN "2024-02-01" AND "2024-02-29"