Мониторинг затрат с помощью системных таблиц
В этой статье объясняется, как использовать таблицу system.billing.usage
самостоятельно или объединить с другими системными таблицами, чтобы получить представление об использовании вашей учетной записи в Azure Databricks. Также доступны следующие статьи, связанные с функциями:
- Мониторинг затрат на бессерверные вычислительные ресурсы
- Мониторинг затрат и производительности заданий
- Мониторинг затрат на обслуживание модели
Как читать таблицу использования
Пользователи с разрешениями на доступ к данным системной таблицы могут просматривать и запрашивать журналы выставления счетов своей учетной записи, расположенные в system.billing.usage
. Каждая запись выставления счетов содержит столбцы, которые относят объем использования к определенным ресурсам, учетным записям и продуктам.
- Столбец
usage_metadata
содержит структуру с информацией о ресурсах или объектах, участвующих в использовании. - Столбец
identity_metadata
содержит сведения о пользователе или учетной записи службы, ответственной за использование. - Столбец
custom_tags
содержит теги, примененные к вычислительному ресурсу, связанному с использованием. Это также включает теги, добавленные политиками бюджетирования, чтобы можно было атрибутировать использование бессерверных технологий. - Столбцы
billing_origin_product
иproduct_features
предоставляют сведения о точном продукте и функциях, используемых.
Полный справочник по таблице использования см. в справочнике по системной таблице выставления счетов.
Операционализация данных выставления счетов
Databricks рекомендует использовать панели мониторинга ИИ/BI для создания панелей мониторинга затрат, используя данные о выставлении счетов из системных таблиц. Администраторы учетных записей могут импортировать готовую настраиваемую панель мониторинга затрат или вы можете создать новую панель мониторинга. См. панели мониторинга использования.
Вы также можете добавить оповещения в запросы, чтобы помочь вам оставаться в курсе данных об использовании. См. Создание оповещения.
Примеры запросов
В следующих запросах приведены примеры использования данных таблицы system.billing.usage
для получения аналитических сведений об использовании учетной записи.
- Сколько учетных единиц (DBUs) каждого продукта использовано в течение этого месяца?
- Какие задания потребляли больше всего DBU?
- Какое количество использования можно отнести к ресурсам с определенным тегом?
- Показать мне продукты, где растет использование
- Каков тренд использования All Purpose Compute (Photon)?
- Каков расход ресурсов DBU для материализованного представления или потоковой таблицы?
- Что такое потребление DBU бессерверного конвейера DLT?
- Какова ежедневная динамика потребления 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
Какие задания потребляли больше всего DBUs?
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
установлен как идентификатор конвейера, связанного с материализованным представлением или потоковой таблицей. Идентификатор конвейера можно найти на вкладке "Сведения" в обозревателе каталогов при просмотре материализованного представления или потоковой таблицы. Чтобы ограничить потребление по дате, укажите дату начала, дату окончания или диапазон дат. Следующий запрос извлекает использование DBU для конвейера с идентификатором 00732f83-cd59-4c76-ac0d-57958532ab5b
и датой начала использования 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
Что такое потребление DBU бессерверного конвейера DLT?
Для получения использования DBU и SKU для бессерверного конвейера DLT отправьте запрос в таблицу системы учета подлежащего оплате использования для записей, где usage_metadata.dlt_pipeline_id
установлен как идентификатор конвейера. Идентификатор конвейера можно найти на вкладке сведений о конвейере при просмотре конвейера в пользовательском интерфейсе DLT. Чтобы ограничить потребление по дате, укажите дату начала, дату окончания или диапазон дат. Следующий запрос извлекает использование DBU с декабря 2024 г. для конвейера с идентификатором 00732f83-cd59-4c76-ac0d-57958532ab5b
.
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
Примеры использования объединений таблиц
В следующих примерах показано, как объединить таблицу использования с другими системными таблицами для получения дополнительных аналитических сведений.
- Распределение затрат на владельца вычислительных ресурсов
- Обогатите использование с именем задания
- Объедините цены с таблицами использования
- Оценить дополнительные затраты за использование в предыдущем календарном месяце
Отнести затраты на владельца вычислительных ресурсов
Если вы хотите сократить затраты на вычисления, вы можете использовать этот запрос, чтобы узнать, какие владельцы кластеров в вашей учетной записи используют наибольшее количество DBUs.
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"