Aller au contenu principal

Surveiller les coûts à l'aide des tables système

Cet article explique comment vous pouvez utiliser la table system.billing.usage seule ou jointe à d'autres tables système pour obtenir une vue d'ensemble de l'utilisation de Databricks par votre compte. Les articles spécifiques aux fonctionnalités suivants sont également disponibles :

Comment lire la table d'utilisation

Les utilisateurs ayant les permissions d'accéder aux données des tables système peuvent consulter et query les logs de facturation de leur compte, situés à system.billing.usage. Chaque enregistrement de facturation comprend des colonnes qui attribuent le montant d'utilisation aux Ressources, identités et produits spécifiques impliqués.

  • La colonne usage_metadata inclut une structure avec des informations sur les ressources ou les objets impliqués dans l'utilisation.
  • La colonne identity_metadata inclut des informations sur l'utilisateur ou le service principal qui a entraîné l'utilisation.
  • La colonne custom_tags comprend des tags appliqués à la ressource de compute associée à l'utilisation. Cela inclut également les tags ajoutés par les politiques d'utilisation Serverless afin que vous puissiez attribuer l'utilisation Serverless.
  • Les colonnes billing_origin_product et product_features vous donnent des informations sur le produit exact et les fonctionnalités utilisées.

Pour une référence complète de la table d'utilisation, consultez la référence de la table système d'utilisation facturable.

Mettre en service les données de facturation

Databricks recommande d'utiliser les tableaux de bord AI/BI pour créer des tableaux de bord de monitoring des coûts à l'aide des données de facturation de la table système. Vous pouvez créer un nouveau tableau de bord, ou les administrateurs de compte peuvent importer un tableau de bord de monitoring des coûts prédéfini et personnalisable. Consultez les tableaux de bord d'utilisation.

Vous pouvez également ajouter des alertes à vos query pour vous aider à rester informé sur les données d'utilisation. Voir Créer une alerte.

Exemples de query

Les requêtes suivantes fournissent des exemples de la façon dont vous pouvez utiliser les données de la table system.billing.usage pour obtenir des informations sur l'utilisation de votre compte.

Combien de DBU de chaque produit ont été utilisées ce mois-ci ?

SQL
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

Quels Jobs ont consommé le plus de DBU ?

SQL
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

Quelle est la part d’utilisation attribuable aux ressources avec un tag spécifique ?

Vous pouvez décomposer les coûts de diverses manières. Cet exemple vous montre comment décomposer les coûts par un tag personnalisé. Remplacez la clé et la valeur du tag personnalisé dans la query.

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

Montrez-moi les produits dont l'utilisation est en croissance

SQL
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
ORDER BY
growth_rate DESC

Quelle est la tendance d'utilisation de All Purpose Compute (Photon) ?

SQL
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

Quelle est la consommation DBU d'une vue matérialisée ou d'une table de streaming ?

Pour obtenir l'utilisation de DBU et le SKU pour une vue matérialisée ou une table de streaming spécifique, soumettez une query à la table système d'utilisation facturable (system.billing.usage). Saisissez un Timestamp comme parameter pour query les résultats après une date spécifiée.

La requête suivante récupère l'utilisation de DBU pour la vue matérialisée avec le nom entièrement qualifié (<catalog>.<schema>.<table>) de users.cost_tracking.mv1:

SQL
WITH pipeline_id AS (
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

Quelle est la consommation de DBU d'un pipeline Serverless ?

Pour obtenir l'utilisation des DBU et le SKU d'un pipeline Serverless, soumettez une query à la table système d'utilisation facturable pour les enregistrements où usage_metadata.dlt_pipeline_id est défini sur l'ID du pipeline. Vous trouverez l'ID de pipeline dans l'onglet Détails du pipeline lorsque vous consultez un pipeline dans l'interface utilisateur Lakeflow Pipelines. Pour limiter la consommation par date, spécifiez une start date, une date de fin ou une plage de dates. La query suivante récupère l'utilisation de DBU à partir de décembre 2024 pour le pipeline avec l'ID 00732f83-cd59-4c76-ac0d-57958532ab5b.

SQL
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

Quelle est la tendance quotidienne de consommation des DBU ?

SQL
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

Attribuer les coûts au propriétaire des ressources de compute

Si vous cherchez à réduire les coûts de compute, vous pouvez joindre la table usage à la table compute.clusters pour savoir quels propriétaires de ressources de compute de votre compte utilisent le plus de DBU.

SQL
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;

Enrichir l'utilisation avec un nom de job

SQL
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"

Joindre les tarifs aux tables d'utilisation

Le tableau list_prices inclut les prix catalogue au fil du temps pour chaque SKU disponible. Vous pouvez joindre le tableau usage pour consulter le coût d'inscription de certaines utilisations.

Par exemple, la query suivante renvoie le coût total attribué à un tag particulier au cours d'un mois.

SQL
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"

Estimer les coûts additionnels pour l’utilisation du mois calendaire précédent.

Cette query applique un simple pourcentage à toute l'utilisation de la période. Notez que cela peut différer légèrement de la monétisation réelle en raison de la façon dont les droits pour certains modules complémentaires sont gérés. Remplacez le taux de module complémentaire par le taux de votre compte.

SQL
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"