Monitore os custos usando tabelas do sistema

Este artigo explica como o senhor pode usar a tabela system.billing.usage sozinha ou em conjunto com outras tabelas do sistema para obter uma imagem do uso do seu account Databricks . Os seguintes artigos específicos de recursos 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 view e consultar o faturamento do account logs, localizado em system.billing.usage. Cada registro de faturamento inclui colunas que atribuem o valor de uso ao recurso, às identidades e ao produto específicos envolvidos.

  • A coluna usage_metadata inclui uma estrutura com informações sobre o recurso 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 tags aplicadas ao recurso compute associado ao uso. Isso também inclui tags adicionadas por políticas de orçamento para que o senhor possa atribuir o uso do serverless.

  • As colunas billing_origin_product e product_features fornecem ao senhor informações sobre o produto exato e o recurso utilizado.

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

Operacionalize os dados de cobrança

Databricks recomenda o uso do siteAI/BI dashboards para criar dashboards de monitoramento de custos usando dados de faturamento da tabela do sistema. O senhor pode criar um novo painel ou os administradores do account podem importar um painel de monitoramento de custos pré-construído e personalizável. Consulte Painéis de uso.

O senhor também pode adicionar alerta às suas consultas para ajudá-lo a manter-se informado sobre os dados de uso. Consulte Criar um alerta.

Exemplos de consultas

As consultas a seguir fornecem exemplos de como o senhor pode usar os dados da tabela system.billing.usage para obter percepções sobre o uso do seu site account.

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

Qual trabalho consumiu 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 ao recurso com uma tag específica?

Você pode dividir os custos de várias maneiras. Este exemplo mostra como dividir os custos por uma tag personalizada. Certifique-se de substituir o key e o valor da tag personalizada 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 o produto em que o 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 "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

Qual é a tendência de uso do All Purpose Compute (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

Qual é o consumo DBU de uma tabela materializada view ou de transmissão?

Para obter o DBU usage e o SKU para uma tabela materializada específica view ou transmissão, envie uma consulta à tabela do sistema billable usage para registros em que usage_metadata.dlt_pipeline_id esteja definido como o ID do pipeline associado à tabela materializada view ou transmissão. O senhor pode encontrar o ID pipeline em Details tab no Catalog Explorer ao visualizar a tabela materializada view ou de transmissão. Para limitar o consumo por data, especifique uma data de início, uma data final ou um intervalo de datas. A consulta a seguir recupera o uso do DBU para o pipeline com ID 00732f83-cd59-4c76-ac0d-57958532ab5b e uma data de início de uso de 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

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

Para obter o uso de DBU e SKU para um serverless DLT pipeline, envie uma consulta à tabela do sistema de uso faturável para registros em que usage_metadata.dlt_pipeline_id é definido como o ID do pipeline. O senhor pode encontrar o ID do pipeline em Detalhes do pipeline tab ao visualizar um pipeline na interface do usuário Delta Live Tables. Para limitar o consumo por data, especifique uma data de início, uma data final 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 do 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

Exemplos de uso de união de tabelas

Os exemplos a seguir mostram como o senhor pode join a tabela de uso com outras tabelas do sistema para obter percepções adicionais.

Atribuir custos ao proprietário da computação

Se estiver procurando reduzir os custos do compute, o senhor pode usar essa consulta para descobrir quais proprietários de clustering no seu account 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 >= '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;

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 os preços com as tabelas de uso

A tabela list_prices inclui os preços de tabela ao longo do tempo para cada SKU disponível. O senhor pode join a tabela usage para view o custo de listagem de determinado uso.

Por exemplo, a consulta a seguir retorna o custo total atribuído a uma tag 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 "2024-05-01" AND "2024-05-31"

Estime os custos adicionais para uso no mês civil anterior

Essa consulta aplica uma porcentagem simples a todo o uso no período. Observe que isso pode diferir um pouco da monetização real devido à forma como os direitos de alguns add-ons são gerenciados. Substitua a tarifa adicional pela tarifa do site account.

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"