Compartilhar via


Monitorar os custos usando tabelas do sistema

Este artigo explica como você pode usar a system.billing.usage tabela por conta própria ou unida a outras tabelas do sistema para obter uma imagem do uso do Azure Databricks de sua conta. Os seguintes artigos específicos do recurso também estão disponíveis:

Como ler a tabela de uso

Os usuários com permissões para acessar os dados da tabela do sistema podem exibir e consultar os logs de cobrança de sua conta, localizados em system.billing.usage. Cada registro de cobrança inclui colunas que atribuem o valor de uso aos recursos, identidades e produtos específicos envolvidos.

  • A coluna usage_metadata inclui um struct com informações sobre os recursos ou objetos envolvidos no uso.
  • A coluna identity_metadata inclui informações sobre o usuário ou a entidade de serviço que incorreu no uso.
  • A coluna custom_tags inclui etiquetas aplicadas ao recurso de computação associado ao uso. Isso também inclui marcas adicionadas por políticas de orçamento sem servidor para que você possa atribuir o uso sem servidor.
  • As colunas billing_origin_product e product_features fornecem informações sobre o produto e os recursos exatos usados.

Para uma referência completa da tabela de uso, veja Referência da tabela do sistema de uso faturável.

Operacionalizar dados de cobrança

A Databricks recomenda o uso de painéis de IA/BI para criar painéis de monitoramento de custos usando dados de faturamento da tabela do sistema. Você pode criar um novo painel ou os administradores de conta podem importar um painel de monitoramento de custos pré-criado e personalizável. Veja Painéis de uso.

Você também pode adicionar alertas às suas consultas para ajudá-lo a se manter informado sobre os dados de uso. Veja Criar um alerta.

Consultas de exemplo

As consultas a seguir fornecem exemplos de como você pode usar os dados da system.billing.usage tabela para obter insights sobre o uso da sua conta.

Quantas DBUs de cada produto foram usadas ao longo deste mês?

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

Quais trabalhos consumiram mais 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

Quanto uso pode ser atribuído aos recursos com uma marca específica?

Você pode dividir os custos de várias maneiras. Esse exemplo mostra como dividir custos por uma marca personalizada. Substitua a chave e o valor do tag personalizado na consulta.

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

Mostre-me os produtos cujo uso está crescendo

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

Qual é a tendência de uso da Computação de Uso Geral (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

Qual é o consumo de DBU de uma visualização materializada ou tabela de streaming?

Para obter o uso de DBU e a SKU para uma exibição materializada específica ou uma tabela de streaming, envie uma consulta para a tabela do sistema de uso faturável (system.billing.usage). Insira um timestamp como um parâmetro para obter resultados posteriores a uma data especificada.

A consulta a seguir recupera o uso de DBU para a exibição materializada com o nome totalmente qualificado (<catalog>.<schema>.<table>) de 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

Qual é o consumo de DBU de um pipeline sem servidor?

Para obter o uso de DBU e a SKU de um pipeline sem servidor, envie uma consulta para a tabela do sistema de uso faturável para registros em que usage_metadata.dlt_pipeline_id está definido como a ID do pipeline. Você pode encontrar a ID do pipeline na guia Detalhes do Pipeline ao exibir um pipeline na interface do usuário do Lakeflow Spark Declarative Pipelines. Para limitar o consumo por data, especifique uma data de início, uma data de término ou um intervalo de datas. A consulta a seguir recupera o uso de DBU de dezembro de 2024 para o pipeline com ID 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

Qual é a tendência diária no consumo de 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

Atribuir custos ao proprietário do recurso de computação

Se você estiver procurando reduzir os custos de computação, poderá juntar a tabela usage com a tabela compute.clusters para descobrir quais são os proprietários de recursos de computação na sua conta que estão usando mais 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;

Enriquecer o uso com um nome de trabalho

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"

Unir as informações de preços às tabelas de uso

A tabela list_prices inclui lista de preços ao longo do tempo para cada SKU disponível. Você pode juntar-se à tabela usage para visualizar o custo de listagem de determinado uso.

Por exemplo, a consulta a seguir retorna o custo total atribuído a uma marca específica durante um mês.

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"

Estimar os custos adicionais para uso no mês do calendário anterior

Essa consulta aplica uma porcentagem simples a todo o uso no período. Observe que isso pode ser ligeiramente diferente da monetização real devido à forma como os direitos para alguns complementos são gerenciados. Substitua a taxa de complemento pela taxa da sua conta.

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"