Exemples de requêtes BigQuery sur des données de facturation exportées

Voici quelques exemples d'utilisation des requêtes BigQuery sur les données de facturation exportées.

Afficher les coûts totaux sur une facture

Les requêtes suivantes illustrent deux méthodes d'affichage des valeurs de coût et de crédit à l'aide de données de facturation exportées.

  • Le champ total additionne directement les valeurs de coût et de crédit à virgule flottante, ce qui peut entraîner des erreurs d'arrondi à virgule flottante.
  • Le champ total_exact convertit les coûts et les valeurs de crédit en micro-unités avant de les additionner, puis les reconvertit en dollars après la somme, évitant ainsi les erreurs d'arrondi à virgule flottante.

Exemple 1 : Somme de tous les coûts, par mois de facturation

Cette requête affiche le total de la facture pour chaque mois, sous forme de somme des coûts réguliers, des taxes, des ajustements et des erreurs d'arrondi.

SQL standard

SELECT
  invoice.month,
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
                  FROM UNNEST(credits) c), 0))
    AS total,
  (SUM(CAST(cost * 1000000 AS int64))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount * 1000000 as int64))
                  FROM UNNEST(credits) c), 0))) / 1000000
    AS total_exact
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
GROUP BY 1
ORDER BY 1 ASC
;

Par exemple, le résultat de la requête ci-dessus pourrait être :

Ligne mois total total_exact
1 201901 $1005.004832999999984 $1005.00
2 201902 $992.3101739999999717 $992.31
3 201903 $1220.761089999999642 $1220.76

Exemple 2 : Renvoyer des détails par type de coût, par mois de facturation

Cette requête affiche les totaux de chaque type de coût cost_type pour chaque mois. Les types de coûts comprennent les coûts réguliers, les taxes, les ajustements et les erreurs d'arrondi.

SQL standard

SELECT
  invoice.month,
  cost_type,
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
                  FROM   UNNEST(credits) c), 0))
    AS total,
  (SUM(CAST(cost * 1000000 AS int64))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount * 1000000 as int64))
                  FROM UNNEST(credits) c), 0))) / 1000000
    AS total_exact
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
GROUP BY 1, 2
ORDER BY 1 ASC, 2 ASC
;

Par exemple, le résultat de la requête ci-dessus pourrait être :

Ligne mois cost_type total total_exact
1 201901 regular $1000.501209987994782 $1000.50
2 201901 rounding_error –$0.500489920049387 –$0.50
3 201901 tax $10.000329958477891 $10.00
4 201901 adjustment –$5.002572999387045 –$5.00

Exemples de requête supplémentaires

Les exemples suivants illustrent d'autres façons d'exécuter des requêtes sur les données.

En ce qui concerne les exemples de cette section, nous supposons ce qui suit :

  • Vous possédez deux applications (presse-agrumes et pilon-à-chocolat).
  • Pour chaque application, vous avez deux environnements (développement et production).
  • L'environnement de développement dispose d'une petite instance par application.
  • L'environnement de production dispose d'une petite instance en Amérique et d'une petite instance en Asie.
  • Chaque instance présente un libellé indiquant l'application et l'environnement.
  • Vous possédez une instance sans libellé que vous utilisez pour les tests.

Votre facture totale s'élève à 24 $. Voici le détail :

Instance Libellés Coût total
Petite instance avec un processeur virtuel exécuté en Amérique Aucun 4 $
Petite instance avec un processeur virtuel exécuté en Amérique application : pilon-à-chocolat
environnement : développement
2 $
Petite instance avec un processeur virtuel exécuté en Amérique application : presse-agrumes
environnement : développement
3 $
Petite instance avec un processeur virtuel exécuté en Amérique application : pilon-à-chocolat
environnement : production
3,25 $
Petite instance avec un processeur virtuel exécuté en Asie application : pilon-à-chocolat
environnement : production
3,75 $
Petite instance avec un processeur virtuel exécuté en Amérique application : presse-agrumes
environnement : production
3,50 $
Petite instance avec un processeur virtuel exécuté en Asie application : presse-agrumes
environnement : production
4,50 $

Exécuter des requêtes sur chaque ligne sans les grouper

Pour obtenir le rapport le plus détaillé des coûts, vous devez exécuter des requêtes sur chaque ligne sans les grouper. Supposons que tous les champs, sauf les libellés et la description du SKU, sont identiques (projet, service, etc.).

SQL standard

SELECT
  sku.description,
  TO_JSON_STRING(labels) as labels,
 cost as cost
FROM `project.dataset.table`;

Ancien SQL

TO_JSON_STRING Not supported.
Ligne sku.description Libellés Coût
1 Petite instance avec un processeur virtuel exécuté en Amérique [] 4 $
2 Petite instance avec un processeur virtuel exécuté en Amérique [{"key":"application","value":"pilon-à-chocolat"},{"key":"environnement","value":"développement"}] 2 $
3 Petite instance avec un processeur virtuel exécuté en Amérique [{"key":"application","value":"presse-agrumes"},{"key":"environnement","value":"développement"}] 3 $
4 Petite instance avec un processeur virtuel exécuté en Amérique [{"key":"application","value":"pilon-à-chocolat"},{"key":"environnement","value":"production"}] 3,25 $
5 Petite instance avec un processeur virtuel exécuté en Asie [{"key":"application","value":"pilon-à-chocolat"},{"key":"environnement","value":"production"}] 3,75 $
6 Petite instance avec un processeur virtuel exécuté en Amérique [{"key":"application","value":"presse-agrumes"},{"key":"environnement","value":"production"}] 3,50 $
7 Petite instance avec un processeur virtuel exécuté en Asie [{"key":"application","value":"presse-agrumes"},{"key":"environnement","value":"production"}] 4,50 $
TOTAL 24 $

Grouper par correspondance de libellés en tant que chaîne JSON

Cette méthode vous permet de rapidement et facilement détailler les coûts pour chaque combinaison de libellés.

SQL standard

SELECT
  TO_JSON_STRING(labels) as labels,
  sum(cost) as cost
FROM `project.dataset.table`
GROUP BY labels;

Ancien SQL

TO_JSON_STRING Not supported.
Ligne Libellés Coût
1 [] 4 $
2 [{"key":"application","value":"pilon-à-chocolat"},{"key":"environnement","value":"développement"}] 2 $
3 [{"key":"application","value":"presse-agrumes"},{"key":"environnement","value":"développement"}] 3 $
4 [{"key":"application","value":"pilon-à-chocolat"},{"key":"environnement","value":"production"}] 7 $
5 [{"key":"application","value":"presse-agrumes"},{"key":"environnement","value":"production"}] 8 $
TOTAL 24 $

Grouper par valeur de libellés pour une clé spécifique

Il est fréquent de détailler les coûts pour les valeurs d'une clé de libellé spécifique. En utilisant la jointure LEFT JOIN et en plaçant le filtre de clé dans la condition JOIN (plutôt que WHERE), vous incluez les coûts qui ne contiennent pas cette clé. Vous obtenez ainsi une vue complète de vos coûts.

SQL standard

SELECT
  labels.value as environment,
  SUM(cost) as cost
FROM `project.dataset.table`
LEFT JOIN UNNEST(labels) as labels
  ON labels.key = "environment"
GROUP BY environment;

Ancien SQL

SELECT
  labels.value as environment,
  SUM(cost) as cost
FROM [project:dataset.table]
WHERE labels.key = "environment" OR labels.key IS NULL
GROUP BY environment;
Ligne Environnement Coût
1 production 15 $
2 développement 5 $
3 vide 4 $
TOTAL 24 $

Grouper par paires valeur/clé

Soyez prudent lorsque vous interprétez ou exportez ces résultats. Une ligne individuelle affiche ici une somme valide sans que l'utilisation soit comptabilisée deux fois. Toutefois, elle ne doit pas être combinée avec d'autres lignes (sauf si la clé est la même ou si vous êtes certain que les clés ne sont jamais définies sur la même ressource).

SQL standard

SELECT
  labels.key as key,
  labels.value as value,
  SUM(cost) as cost
FROM `project.dataset.table`
LEFT JOIN UNNEST(labels) as labels
GROUP BY key, value;

Ancien SQL

SELECT
  labels.key as key,
  labels.value as value,
  SUM(cost)
FROM [project:dataset.table]
GROUP BY key, value;
Ligne Clé Valeur Coût
1 vide vide 4 $
2 application pilon-à-chocolat 9 $
3 application presse-agrumes 11 $
4 environnement développement 5 $
5 environnement production 15 $
TOTAL 44 $

Notez que le coût total est supérieur au montant de votre facture.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Documentation sur la facturation Cloud
Besoin d'aide ? Consultez notre page d'assistance.