Поделиться через


Мониторинг затрат с помощью системных таблиц

В этой статье объясняется, как использовать таблицу system.billing.usage самостоятельно или объединить с другими системными таблицами, чтобы понять использование Azure Databricks для вашей учетной записи. Также доступны следующие статьи, связанные с функциями:

Как читать таблицу использования

Пользователи с разрешениями на доступ к данным системной таблицы могут просматривать и запрашивать журналы выставления счетов своей учетной записи, расположенные по адресу system.billing.usage. Каждая запись выставления счетов содержит столбцы, которые относят объем использования к определенным ресурсам, учетным записям и продуктам.

  • Столбец usage_metadata содержит структуру с информацией о ресурсах или объектах, участвующих в использовании.
  • Столбец identity_metadata содержит сведения о пользователе или учетной записи службы, ответственной за использование.
  • Столбец custom_tags содержит теги, примененные к вычислительному ресурсу, связанному с использованием. К ним также относятся теги, добавленные бессерверными политиками бюджета, чтобы можно было использовать бессерверные атрибуты.
  • Столбцы billing_origin_product и product_features предоставляют сведения о точном продукте и функциях, используемых.

Полный справочник по таблице использования см. в справочнике по системной таблице выставления счетов.

Операционализация данных выставления счетов

Databricks рекомендует использовать панели мониторинга ИИ/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

Какие задания потребляли больше всего 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 "2025-04-01" and "2025-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
     "2025-05-01" and "2025-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 > "2025-04-15"
GROUP BY
  sku_name, usage_date

Каково потребление DBU у материализованного представления или потоковой таблицы?

Чтобы получить использование DBU и номер SKU для определенного материализованного представления или потоковой таблицы, отправьте запрос в системную таблицу оплачиваемого использования (system.billing.usage). Введите метку времени в качестве параметра для запроса результатов после указанной даты.

Следующий запрос извлекает данные об использовании DBU для материализованного представления с полным именем <catalog>.<schema>.<table>: users.cost_tracking.mv1.

WITH pipeline_id (
  SELECT
    usage_metadata.dlt_pipeline_id as pipeline_id
  FROM
    system.billing.usage
  WHERE
    usage_metadata.uc_table_catalog = 'users'
    AND usage_metadata.uc_table_schema = 'cost_tracking'
    AND usage_metadata.uc_table_name = 'mv1'
  LIMIT 1
)
SELECT
  u.sku_name,
  u.usage_date,
  SUM(u.usage_quantity) AS `DBUs`
FROM
  system.billing.usage u JOIN pipeline_id p
WHERE
  u.usage_metadata.dlt_pipeline_id = p.pipeline_id
  AND u.usage_start_time > :usage_start_time
GROUP BY
  ALL

Каково потребление DBU в бессерверном конвейере?

Чтобы получить использование DBU и номер SKU для бессерверного конвейера, отправьте запрос в оплачиваемую системную таблицу использования для записей, в которых usage_metadata.dlt_pipeline_id задан идентификатор конвейера. Идентификатор конвейера можно найти на вкладке "Сведения о конвейере" при просмотре конвейера в пользовательском интерфейсе Декларативного конвейера Spark Lakeflow Spark. Чтобы ограничить потребление по дате, укажите дату начала, дату окончания или диапазон дат. Следующий запрос извлекает использование 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

Отнесите затраты на владельца вычислительного ресурса

Если вы хотите сократить затраты на вычисления, вы можете присоединить usage таблицу к compute.clusters таблице, чтобы узнать, какие владельцы вычислительных ресурсов в вашей учетной записи используют больше всего 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 >= '2025-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 "2025-05-01" AND "2025-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 "2025-02-01" AND "2025-02-29"