Condividi tramite


Monitorare i costi usando le tabelle di sistema

Questo articolo spiega come utilizzare la tabella system.billing.usage autonomamente o in combinazione con altre tabelle del sistema per ottenere un quadro dell'utilizzo di Azure Databricks dell'account. Sono disponibili anche gli articoli specifici delle funzionalità seguenti:

Come leggere la tabella di utilizzo

Gli utenti con autorizzazioni per accedere ai dati della tabella di sistema possono visualizzare ed eseguire query sui log di fatturazione dell'account, che si trovano in system.billing.usage. Ogni record di fatturazione include colonne che assegnano la quantità di utilizzo alle risorse, alle identità e ai prodotti specifici coinvolti.

  • La colonna usage_metadata include uno struct con informazioni sulle risorse o sugli oggetti coinvolti nell'utilizzo.
  • La colonna identity_metadata include informazioni sull'utente o sull'entità servizio che hanno incorreto nell'utilizzo.
  • La colonna custom_tags include tag applicati alla risorsa di calcolo associata all'utilizzo. Sono inclusi anche i tag aggiunti dai criteri di budget, in modo da consentire l'attribuzione dell'utilizzo serverless.
  • Le colonne billing_origin_product e product_features forniscono informazioni sull'esatto prodotto e sulle funzionalità usate.

Per un riferimento completo alla tabella di utilizzo, vedere il riferimento alla tabella del sistema di utilizzo fatturabile.

Rendere operativi i dati di fatturazione

Databricks consiglia di usare dashboard di intelligenza artificiale/BI per creare dashboard di monitoraggio dei costi usando i dati di fatturazione della tabella di sistema. È possibile creare un nuovo dashboard o gli amministratori di account possono importare dashboard di monitoraggio dei costi predefiniti e personalizzabili. Visualizzare le dashboard di utilizzo .

È anche possibile aggiungere avvisi alle query per rimanere informati sui dati di utilizzo. Consultare Creare un avviso.

Query di esempio

Le query seguenti forniscono esempi di come usare i dati della tabella system.billing.usage per ottenere informazioni dettagliate sull'utilizzo dell'account.

Quanti DPU di ogni prodotto sono stati utilizzati durante questo mese?

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

Quali processi hanno utilizzato la maggior parte dei 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

Quale utilizzo può essere attribuito alle risorse con un tag specifico?

È possibile suddividere i costi in vari modi. In questo esempio viene illustrato come suddividere i costi in base a un tag personalizzato. Assicurarsi di sostituire la chiave e il valore del tag personalizzato nella query.

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

Mostra i prodotti in cui l'utilizzo è in crescita

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 è la tendenza di utilizzo di 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 è il consumo DBU di una vista materializzata o di una tabella di streaming?

Per ottenere l'utilizzo e lo SKU DBU per una vista materializzata o una tabella di streaming specifica, inviare una query alla tabella del sistema di utilizzo fatturabile per i record in cui usage_metadata.dlt_pipeline_id è impostato sull'ID della pipeline associata alla vista materializzata o alla tabella di streaming. È possibile trovare l'ID della pipeline nella scheda Dettagli in Esplora Cataloghi quando si visualizza la vista materializzata o la tabella di streaming. Per limitare l'utilizzo per data, specificare una data di inizio, una data di fine o un intervallo di date. La query seguente recupera l'utilizzo DBU per la pipeline con ID 00732f83-cd59-4c76-ac0d-57958532ab5b e una data di inizio utilizzo di 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 è il consumo di DBU di una pipeline DLT serverless?

Per ottenere l'utilizzo DBU e lo SKU per la pipeline DLT serverless, inviare una query alla tabella del sistema di utilizzo fatturabile per i record in cui usage_metadata.dlt_pipeline_id è impostato sull'ID della pipeline. È possibile trovare l'ID della pipeline nella scheda Dettagli pipeline quando si visualizza una pipeline nell'interfaccia utente di Delta Live Tables. Per limitare l'utilizzo per data, specificare una data di inizio, una data di fine o un intervallo di date. La query seguente recupera l'utilizzo DBU da dicembre 2024 per la pipeline con 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 è la tendenza giornaliera del consumo 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

Esempi di utilizzo degli join di tabelle

Negli esempi seguenti vengono illustrati i modi in cui è possibile unire la tabella di utilizzo con altre tabelle di sistema per ottenere informazioni dettagliate aggiuntive.

Attribuire i costi al proprietario del calcolo

Se desideri ridurre i costi di calcolo, puoi utilizzare questa query per scoprire quali proprietari di cluster nel tuo account stanno utilizzando il maggior numero di 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;

Ottimizzare l'utilizzo con un nome del lavoro

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"

Unire le tabelle dei prezzi con quelle di utilizzo

La tabella list_prices include i prezzi di listino nel tempo per ogni SKU disponibile. È possibile collegare la tabella usage per visualizzare il costo associato a determinati utilizzi.

Ad esempio, la query seguente restituisce il costo totale attribuito a un tag specifico durante un mese:

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"

Stimare i costi del componente aggiuntivo per l'utilizzo nel mese di calendario precedente

Questa query applica una percentuale semplice a tutti gli utilizzi effettuati durante il periodo considerato. Si noti che questo potrebbe differire leggermente dalla monetizzazione effettiva a causa del modo in cui vengono gestiti i diritti per alcuni componenti aggiuntivi. Si prega di sostituire la tariffa del componente aggiuntivo con quella dell'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"