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 :
- Surveiller les coûts de compute serverless
- Surveiller les coûts et les performances des jobs
- Surveiller les coûts de mise à disposition de modèles
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_metadatainclut une structure avec des informations sur les ressources ou les objets impliqués dans l'utilisation. - La colonne
identity_metadatainclut des informations sur l'utilisateur ou le service principal qui a entraîné l'utilisation. - La colonne
custom_tagscomprend 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_productetproduct_featuresvous 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 ?
- Quels Jobs ont consommé le plus de DBU ?
- Quelle quantité d'utilisation peut être attribuée aux ressources avec un tag spécifique ?
- Montrez-moi les produits dont l'utilisation est en croissance
- Quelle est la tendance d'utilisation de All Purpose Compute (Photon) ?
- Quelle est la consommation de DBU d’une vue matérialisée ou d’une table de streaming ?
- Quelle est la consommation de DBU d'un pipeline Serverless ?
- Quelle est la tendance quotidienne de la consommation de DBU ?
- Attribuer les coûts au propriétaire des ressources de compute
- Enrichir l'utilisation avec un nom de job
- Joignez les tarifs aux tables d'utilisation
- Estimez les coûts supplémentaires pour l'utilisation du mois civil précédent.
Combien de DBU de chaque produit ont été utilisées ce mois-ci ?
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 ?
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.
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
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) ?
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:
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.
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 ?
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.
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
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.
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.
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"