Exemples de requêtes associées à l'exportation de données Cloud Billing

Cette page fournit des exemples d'interrogation des données Cloud Billing exportées vers et stockées dans BigQuery.

Spécifier le nom de la table à utiliser dans vos requêtes

Dans ces exemples, pour interroger les données Cloud Billing dans BigQuery, vous devez spécifier le nom de la table dans la clause FROM. Le nom de la table est déterminé à l'aide de trois valeurs : project.dataset.BQ_table_name.

Exemples de requêtes par type de données Cloud Billing

Cette page fournit des exemples de requêtes pour vos données détaillées de coût quotidien et vos données de tarification.

Données détaillées dz coût quotidien Données de tarification
Exemples de requêtes pour les données détaillées de coût quotidien Exemples de requêtes pour les données de tarification

Exemples de requêtes pour les données détaillées de coût quotidien

Cette section fournit différents exemples expliquant comment interroger les données détaillées de coût quotidien Cloud Billing exportées vers BigQuery.

Valeurs courantes utilisées dans les exemples de requêtes de détail du coût

Les exemples de requête de cette section utilisent les valeurs suivantes :

  • Nom de la table : project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX

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 facture

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 précédente peut être celui-ci :

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 précédente peut être celui-ci :

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êtes avec des libellés

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

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 : dev
2 $
Petite instance avec un processeur virtuel exécuté en Amérique application : presse-agrumes
environnement : dev
3 $
Petite instance avec un processeur virtuel exécuté en Amérique application : pilon-à-chocolat
environnement : prod
3,25 $
Petite instance avec un processeur virtuel exécuté en Asie application : pilon-à-chocolat
environnement : prod
3,75 $
Petite instance avec un processeur virtuel exécuté en Amérique application : presse-agrumes
environnement : prod
3,50 $
Petite instance avec un processeur virtuel exécuté en Asie application : presse-agrumes
environnement : prod
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.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`;

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.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
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.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
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.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX]
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.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
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.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX]
GROUP BY key, value;
Ligne Clé Valeur Coût
1 null 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.

Requêtes pour la remise sur engagement d'utilisation

Les requêtes suivantes montrent comment afficher les frais et les crédits associés aux remises sur engagement d'utilisation dans les données de facturation exportées.

Afficher les frais d'engagement

Pour afficher les frais d'engagement pour vos remises sur engagement d'utilisation dans votre exportation de données de facturation, utilisez l'exemple de requête suivant.

SQL standard

SELECT
    invoice.month AS invoice_month,
    SUM(cost) as commitment_fees
FROM 'PROJECT.DATASET.TABLE'
WHERE LOWER(sku_description) LIKE "commitment%"
GROUP BY 1

Afficher les crédits d'engagement

Pour afficher vos crédits de remise sur engagement d'utilisation dans votre exportation de données de facturation, utilisez l'exemple de requête suivant.

SQL standard

SELECT
    invoice.month AS invoice_month,
    SUM(credits.amount) as CUD_credits
FROM 'PROJECT.DATASET.TABLE'
LEFT JOIN UNNEST(credits) AS credits
WHERE LOWER(credits.name) = "committed use discount%"
GROUP BY 1

Exemples de requête supplémentaires

Exécuter des requêtes sur les coûts et crédits par projet pour un mois de facturation spécifié

Lorsque vous lui fournissez un mois de facturation spécifique au format AAAAMM (dans l'exemple, le mois de juin 2020), cette requête renvoie les coûts et les crédits regroupés par projet, ainsi que les libellés de projet.

SQL standard

SELECT
  project.name,
  TO_JSON_STRING(project.labels) as project_labels,
  sum(cost) as total_cost,
  SUM(creds.amount) as total_credits
FROM `project:dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
  LEFT JOIN UNNEST(credits) as creds
WHERE invoice.month = "202006"
GROUP BY 1, 2
ORDER BY 1;

Ancien SQL

TO_JSON_STRING not supported.
Row nom project_labels total_cost total_credits
1 CTG - Dev [{"key":"ctg_p_env","value":"dev"}] 79.140979 -4.763796
2 CTG - Prod [{"key":"ctg_p_env","value":"prod"},{"key":"ctg_team","value":"eng"}] 32.466272 -3.073356
3 CTG - Sandbox [{"key":"ctg_p_env","value":"dev"}] 0 0
4 CTG - Stockage [{"key":"ctg_p_env","value":"prod"},{"key":"ctg_team","value":"data"}] 7.645793 -0.003761

Exemples de requêtes pour les données de tarification

Cette section fournit différents exemples expliquant comment interroger les données de tarification Cloud Billing exportées vers BigQuery.

Valeurs courantes utilisées dans les exemples de requêtes de tarification

Les exemples de requête de cette section utilisent les valeurs suivantes :

  • Nom de la table : project.dataset.cloud_pricing_export
  • ID du code SKU : 2DA5-55D3-E679 (Cloud Run – Requêtes)

Obtenir les prix catalogue pour un code SKU spécifique

Cet exemple présente une requête simple qui renvoie la valeur list_price pour chaque niveau de tarification d'un code SKU spécifié.

SQL standard

SELECT sku.id,  sku.description, list_price.*
FROM `project.dataset.cloud_pricing_export`
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

_PARTITIONTIME est un champ généré automatiquement par BigQuery qui représente la date à laquelle les données appartiennent. Au lieu de _PARTITIONTIME, vous pouvez utiliser un champ généré explicitement par l'exportation Cloud Billing, tel que pricing_as_of_time.

Voici la même requête configurée pour utiliser le champ pricing_as_of_time :

SELECT sku.id,  sku.description, list_price.*
FROM `project.dataset.cloud_pricing_export`
WHERE DATE(pricing_as_of_time) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

Résultats de la requête

Ligne id description pricing_unit aggregation_info.
aggregation_level
aggregation_info.
aggregation_interval
tiered_rates.
pricing_unit_quantity
tiered_rates.
start_usage_amount
tiered_rates.
usd_amount
tiered_rates.
account_currency_amount
1 2DA5-55D3-E679 Requêtes NB COMPTE MENSUEL 1000000 0 0 0
          1000000 2000000 0,4 0,4

Obtenir les prix catalogue pour un code SKU spécifique et ajouter une description du service

Les deux exemples de cette section illustrent les requêtes qui renvoient la valeur list_price pour chaque niveau de tarification pour un code SKU spécifié et incluent la description du code SKU et la description du service.

  • L'exemple 1 renvoie un code SKU par ligne, les niveaux de tarification étant affichés en tant que données imbriquées.
  • L'exemple 2 illustre la désimbrication des données pour renvoyer une ligne par code SKU par niveau de tarification.

Exemple 1 : Renvoyer des données imbriquées

Cet exemple interroge un seul code SKU pour renvoyer les données list_price. Ce code SKU possède plusieurs niveaux de tarification. Les valeurs du champ des prix catalogue s'affichent sur des lignes individuelles imbriquées sous la ligne d'ID de code SKU.

SQL standard

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       list_price.*
FROM my-billing-admin-project.my_billing_dataset.cloud_pricing_export
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

Résultats de la requête :

Ligne sku_id sku_description service_id service_description aggregation_info.
aggregation_level
aggregation_info.
aggregation_interval
tiered_rates.
pricing_unit_quantity
tiered_rates.
start_usage_amount
tiered_rates.
usd_amount
tiered_rates.
account_currency_amount
1 2DA5-55D3-E679 Requêtes 152E-C115-5142 Cloud Run COMPTE MENSUEL 1000000 0 0 0
            1000000 2000000 0,4 0,4

Exemple 2 : Renvoyer des données non imbriquées associées à la même table

Cet exemple interroge un seul code SKU pour renvoyer la valeur de list price. Ce code SKU possède plusieurs niveaux de tarification. La requête illustre l'utilisation de l'opérateur UNNEST afin d'aplatir le tableau tiered_rates et de joindre les champs avec la même table, pour obtenir une ligne par niveau de tarification.

SQL standard

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       tier.*
FROM `my-billing-admin-project.my_billing_dataset.cloud_pricing_export`, UNNEST (sku_pricing.list_price.tiered_rates) as tier
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

Résultats de la requête :

Ligne sku_id sku_description service_id service_description pricing_unit_quantity start_usage_amount usd_amount account_currency_amount
1 2DA5-55D3-E679 Requêtes 152E-C115-5142 Cloud Run 1000000,0 0,0 0,0 0,0
2 2DA5-55D3-E679 Requêtes 152E-C115-5142 Cloud Run 1000000,0 2000000,0 0,4 0,4

Utiliser la classification des produits et la classification géographique pour interroger les codes SKU

  • La classification des produits est une liste de catégories de produits qui s'appliquent aux codes SKU, telles que sans serveur, Cloud Run ou VM à la demande.
  • La classification géographique correspond aux métadonnées géographiques qui s'appliquent à un code SKU, constitué de valeurs de type et de région.

Obtenir la classification des produits d'un code SKU

Cet exemple présente une requête qui renvoie la liste product_taxonomy pour un code SKU spécifié, où l'ID du code SKU est égal à 2DA5-55D3-E679 (Cloud Run – Requêtes).

SQL standard

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       product_taxonomy
FROM `project.dataset.cloud_pricing_export`
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

Résultats de la requête :

Ligne sku_id sku_description service_id service_description product_taxonomy
1 2DA5-55D3-E679 Requêtes 152E-C115-5142 Cloud Run GCP
        Sans serveur
        Cloud Run
        Autre

Obtenir tous les codes SKU pour une classification de produits spécifique

Cet exemple illustre une requête qui renvoie tous les codes SKU correspondant à un product_taxonomy spécifié. Dans cette requête, la valeur de product taxonomy est sans serveur.

SQL standard

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       product_taxonomy
FROM `project.dataset.cloud_pricing_export`
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
     AND "Serverless" in UNNEST(product_taxonomy)
LIMIT 10
;

Résultats de la requête :

Ligne sku_id sku_description service_id service_description product_taxonomy
1 0160-BD7B-4C40 Sortie intra-régionale du réseau Cloud Tasks F3A6-D7B7-9BDA Cloud Tasks GCP
        Sans serveur
        Cloud Tasks
        Autre
2 FE08-0A74-7AFD Sortie GOOGLE-API Cloud Tasks F3A6-D7B7-9BDA Cloud Tasks GCP
        Sans serveur
        Cloud Tasks
        Autre
3 A81A-32A2-B46D Stockage des files d'attente de tâches Salt Lake City F17B-412E-CB64 App Engine GCP
        Sans serveur
        GAE
        Autre
        TaskQueue

Obtenir tous les codes SKU pour une classification géographique et une classification de produits spécifiques

Cet exemple montre une requête qui renvoie tous les codes SKU qui correspondent à une région geo_taxonomy et à un product_taxonomy spécifiés, où region = us-east4 et product_taxonomy = VM à la demande.

SQL standard

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       geo_taxonomy,
       product_taxonomy
FROM `project.dataset.cloud_pricing_export`
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND "VMs On Demand" in UNNEST(product_taxonomy)
      AND geo_taxonomy.type = "REGIONAL"
      AND "us-east4" in UNNEST (geo_taxonomy.regions)
;

Résultats de la requête :

Ligne sku_id sku_description service_id service_description geo_taxonomy.type geo_taxonomy.regions product_taxonomy
1 9174-81EE-425B Supplément de location unique pour RAM d'instance de location unique s'exécutant en Virginie 6F81-5844-456A Instance RÉGIONAL us-east4 GCP
            Calcul
            GCE
            VM à la demande
            Mémoire : par Go
2 C3B9-E891-85ED RAM d'instance de location unique s'exécutant en Virginie 6F81-5844-456A Instance RÉGIONAL us-east4 GCP
            Calcul
            GCE
            VM à la demande
            Mémoire : par Go
3 6E2A-DCD9-87ED RAM d'instance prédéfinie N1 s'exécutant en Virginie 6F81-5844-456A Instance RÉGIONAL us-east4 GCP
            Calcul
            GCE
            VM à la demande
            Mémoire : par Go

Rapports sur les coûts et les tarifs disponibles dans Google Cloud Console