Surveiller les coûts à l’aide des tables système
Cet article explique comment utiliser la table system.billing.usage
propre ou jointe à d’autres tables système pour obtenir une image de l’utilisation d’Azure Databricks de votre compte. Les articles spécifiques aux fonctionnalités suivants sont également disponibles :
- Surveiller les coûts de calcul serverless
- Surveiller les coûts des travaux et la performance
- Surveiller les coûts de service du modèle
Guide pratique pour lire la table d’utilisation
Les utilisateurs disposant des autorisations d’accès aux données de table système peuvent afficher et interroger les journaux de facturation de leur compte, situés à system.billing.usage
. Chaque enregistrement de facturation inclut des colonnes qui attribuent la quantité d’utilisation aux ressources, identités et produits spécifiques impliqués.
- La colonne
usage_metadata
inclut un struct contenant 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 principal de service qui a engagé l’utilisation. - La colonne
custom_tags
inclut des balises appliquées à la ressource de calcul associée à l’utilisation. Cela inclut également des balises ajoutées par des stratégies de budget pour vous permettre d’attribuer une utilisation sans serveur. - Les colonnes
billing_origin_product
etproduct_features
vous donnent des informations sur le produit et les fonctionnalités exacts utilisés.
Pour obtenir une référence complète du tableau d'usage facturable, consultez la référence du tableau du système d'utilisation.
Opérationnaliser les données de facturation
Databricks recommande d'utiliser les tableaux de bord IA/BI pour créer des tableaux de bord de supervision des coûts à l'aide des données de facturation provenant des tables système. Vous pouvez créer un tableau de bord ou les administrateurs de compte peuvent importer un tableau de bord de surveillance des coûts prédéfini et personnalisable. Consultez les tableaux de bord d'utilisation .
Vous pouvez également ajouter des alertes à vos requêtes pour vous aider à rester informé des données d’utilisation. Consultez Créer une alerte.
Exemples de requêtes
Les requêtes suivantes fournissent des exemples de la façon dont vous pouvez utiliser les données de table system.billing.usage
pour obtenir des insights sur l’utilisation de votre compte.
- Combien de DBUs de chaque produit ont été utilisés ce mois-ci ?
- Quels travaux ont consommé les plus d’unités de base de données ?
- Combien d’utilisation peut être attribuée aux ressources avec une balise spécifique ?
- Me montrer les produits où l’utilisation augmente
- Quelle est la tendance d'utilisation du Calcul à usage général (Photon) ?
- Quelle est la consommation DBU d’une vue matérialisée ou d’une table de diffusion en continu ?
- Quelle est la consommation DBU d’un pipeline DLT serverless ?
- Quelle est la tendance quotidienne de la consommation DBU ?
Combien de DBUs 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 travaux ont consommé les plus d’unités de base de données ?
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
Combien d’utilisation peut être attribuée aux ressources avec une balise spécifique ?
Vous pouvez décomposer les coûts de différentes façons. Cet exemple montre comment décomposer les coûts par une balise personnalisée. Veillez à remplacer la clé et la valeur de la balise personnalisée dans la requête.
SELECT
sku_name, usage_unit, SUM(usage_quantity) as `Usage`
FROM
system.billing.usage
WHERE
custom_tags [:key] = :value
GROUP BY 1, 2
Me montrer les produits où l’utilisation augmente
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
Quelle est la tendance d'utilisation du calcul polyvalent (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
Quelle est la consommation DBU d’une vue matérialisée ou d’une table de diffusion en continu ?
Pour obtenir l’utilisation de DBU et la référence SKU pour une vue matérialisée ou une table de diffusion en continu spécifique, soumettez une requête à la table système d’utilisation facturable pour les enregistrements où usage_metadata.dlt_pipeline_id
est défini sur l’ID du pipeline associé à la vue matérialisée ou à la table de diffusion en continu. Vous pouvez trouver l'ID du pipeline dans l'onglet Détails de l'Explorateur de catalogues lorsque vous visualisez la vue matérialisée ou la table de streaming. Pour limiter la consommation par date, spécifiez une date de début, une date de fin ou une plage de dates. La requête suivante récupère l’utilisation de DBU pour le pipeline avec l’ID 00732f83-cd59-4c76-ac0d-57958532ab5b
et une date de début d’utilisation 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
Quelle est la consommation DBU d’un pipeline DLT serverless ?
Pour obtenir l'utilisation des unités de base de données (DBU) et le SKU pour un pipeline de traitement de données (DLT) serverless, soumettez une requête à la table système d'utilisation facturable pour les enregistrements où usage_metadata.dlt_pipeline_id
est associé à l'ID du pipeline. Vous trouverez l’ID de pipeline sous l’onglet Détails du pipeline lors de l’affichage d’un pipeline dans l’interface utilisateur Delta Live Tables. Pour limiter la consommation par date, spécifiez une date de début, une date de fin ou une plage de dates. La requête suivante récupère l’utilisation de DBU 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 la consommation 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
Exemples de jointures de tables d'usage
Les exemples suivants vous montrent comment joindre la table d’utilisation à d’autres tables système pour obtenir des insights supplémentaires.
- Imputer les coûts au responsable du calcul
- Enrichir l’utilisation avec un nom de travail
- Associer les prix avec les tableaux d'utilisation
- Estimer les coûts du module complémentaire pour l’utilisation dans le mois calendrier précédent
Attribuer les coûts au propriétaire des ressources de calcul
Si vous voulez réduire les coûts de calcul, vous pouvez utiliser cette requête pour déterminer les propriétaires de cluster dans votre compte qui utilisent les 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 >= '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;
Enrichir l’utilisation avec un nom de travail
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"
Associer la tarification aux tableaux d'utilisation
Le tableau list_prices
inclut les prix de liste au fil du temps pour chaque référence SKU disponible. Vous pouvez joindre la table usage
pour afficher le coût d'inscription de certaines utilisations spécifiques.
Par exemple, la requête suivante retourne le coût total attribué à une balise particulière 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 "2024-05-01" AND "2024-05-31"
Estimer les coûts du module complémentaire pour l’utilisation au cours du mois calendrier précédent
Cette requête applique un pourcentage simple à toutes les utilisations 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 d’extension 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 "2024-02-01" AND "2024-02-29"