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


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

В этой статье объясняется, как использовать таблицу 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 "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"