使用系统表监视成本
本文介绍如何自行使用 system.billing.usage
表或与其他系统表联接,以获取帐户的 Azure Databricks 使用情况的图片。 还提供了以下功能特定的文章:
如何读取使用情况表
有权访问系统表数据的用户可以查看和查询其帐户的计费日志,该日志位于 system.billing.usage
。 每个计费记录都包含将使用量归因于相关的特定资源、标识和产品的列。
usage_metadata
列包含一个结构,其中包含有关使用情况中涉及的资源或对象的信息。identity_metadata
列包含有关产生使用情况的用户或服务主体的信息。custom_tags
列包括应用于与使用情况关联的计算资源的标记。 这还包括由预算策略添加的标记,以便你可以对无服务器使用情况进行归因。billing_origin_product
和product_features
列提供有关所使用的确切产品和功能的信息。
如需完整的使用情况表参考,请参阅 计费使用情况系统表参考。
使计费数据可操作
Databricks 建议使用 AI/BI 仪表板来使用系统表计费数据创建成本监视仪表板。 可以创建新的仪表板,或者帐户管理员可以导入预构建的可自定义成本监视仪表板。 请参阅 使用情况仪表板。
还可以向查询添加警报,以帮助你随时了解使用情况数据。 请参阅创建警报。
示例查询
以下查询提供了如何使用 system.billing.usage
表数据来深入了解帐户使用情况的示例。
- 在本月,每个产品使用了多少个 DBU?
- 哪些作业消耗了最多的 DBU?
- 可以使用特定标记将多少使用情况归咎于资源?
- 向我展示用量增长的产品
- “所有用途计算”(Photon)的使用趋势是什么?
- 物化视图或流式表的 DBU 消耗量是多少?
- 无服务器 DLT 管道的 DBU 消耗量是多少?
- DBU 消耗量的日常趋势是什么?
在本月,每个产品使用了多少个 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"