Cette page explique comment gérer les modifications de schéma effectuées le 28 octobre 2020 sur les données Cloud Billing exportées vers les tables dans BigQuery.
Comprendre les modifications
Le schéma des tables pour les données de coût d'utilisation standard de Cloud Billing exportées vers BigQuery a été mis à jour afin de gagner en clarté grâce à des champs de données supplémentaires. Cette table est nommée gcp_billing_export_v1_<BILLING_ACCOUNT_ID>
dans l'ensemble de données BigQuery.
Les champs de données suivants ont été ajoutés au schéma d'exportation des données d'utilisation BigQuery de Cloud Billing :
project.number
adjustment_info
adjustment_info.id
adjustment_info.mode
adjustment_info.description
adjustment_info.type
Ces données sont nouvellement disponibles depuis le 29 octobre 2020 et ne sont pas disponibles pour l'utilisation des données enregistrée avant cette date. Veuillez mettre à jour vos intégrations ou automatisations basées sur le nouveau schéma en effectuant des migrations, si nécessaire. Pour en savoir plus sur les données fournies par ces nouveaux champs, consultez la page Comprendre les tables de données Cloud Billing dans BigQuery.
Impact sur les tables et les requêtes existantes
Comme la structure des tables pour l'exportation des données de coût d'utilisation standard a changé, toutes les requêtes qui référencent directement les tables exportées ne vous fournissent plus l'intégralité des données disponibles. Pour résoudre ce problème, nous vous recommandons de créer des vues BigQuery qui interrogent les tables exportées et présentent les informations dans la structure de votre choix. Vous pouvez ensuite ajuster les requêtes qui alimentent vos rapports et tableaux de bord afin d'extraire les données des vues, et non les tables exportées.
Les vues vous permettent de standardiser la structure des données utilisées dans vos requêtes et vos tableaux de bord.
Les vues que vous créez doivent normaliser les données de sorte que toutes les tables pertinentes présentent le même schéma à vos requêtes. Cela vous protège des modifications de schéma futures en vous permettant de modifier la requête sous-jacente à la vue en cas de modifications du schéma de données.
Créer des vues pour gérer les modifications de schéma
Si vous devez conserver des tables qui utilisent le schéma précédent, nous vous recommandons de créer des vues BigQuery pour ces tables afin de normaliser le schéma de données. Lorsque vous créez une vue pour migrer du schéma précédent vers le nouveau, vous pouvez utiliser une instruction UNION
afin de combiner des tables avec des schémas non concordants. La vue que vous créez dépend des champs de données que vous utilisez dans vos requêtes et tableaux de bord.
Un ou plusieurs des exemples suivants peuvent s'appliquer à votre situation, dans laquelle vos requêtes peuvent ou non utiliser les nouveaux champs project.number
et adjustment_info
.
- Vous utilisez des tables qui incluent des propriétés de schéma préexistantes et de nouvelles propriétés, telles que
credits.type
,credits.id
,credits.full
,project.number
etadjustment_info
. Pour obtenir un exemple de création de cette vue, consultez la section Créer une vue pour les tables avec tous les champs du schéma mis à jour. - Vous utilisez des tables qui n'incluent pas les propriétés de schéma préexistantes
credits.type
,credits.id
etcredits.full
. Pour obtenir un exemple de création de cette vue, consultez la section Créer une vue pour les tables sanscredits.type
,credits.id
etcredits.full
. - Vous utilisez des tables qui incluent les propriétés de schéma préexistantes
credits.type
,credits.id
etcredits.full
, mais qui n'incluent pas les nouvelles propriétés de schémaproject.number
etadjustment_info
. Pour obtenir un exemple de création de cette vue, consultez la section Créer une vue pour les tables sansproject.number
etadjustment_info
.
Vous pouvez créer une vue en saisissant une requête SQL utilisée pour définir les données accessibles à la vue. Pour en savoir plus, consultez la section Créer une vue.
Voici un résumé des étapes à suivre pour créer une vue BigQuery.
- Sélectionner la requête utilisée pour créer la vue
- Exécuter la requête et observer les résultats
- Enregistrer la vue
- Saisir le nom de la nouvelle vue
- Observer le schéma de la nouvelle vue
1. Créer une vue pour les tables avec tous les champs du schéma mis à jour
La requête suivante permet de créer une nouvelle vue utilisant à la fois le schéma préexistant et le schéma mis à jour. Ce type de vue limite votre exposition aux modifications futures du schéma.
En utilisant cette vue pour vos requêtes, elles auront toutes le même schéma et permettront aux instructions UNION
de fonctionner correctement. Cette requête conserve les champs et les valeurs credits.type
, credits.id
, credits.full
, project.number
et adjustment_info
des tables sous-jacentes.
SQL standard
SELECT billing_account_id, STRUCT(service.id as id, service.description as description) as service, STRUCT(sku.id as id, sku.description as description) as sku, usage_start_time, usage_end_time, STRUCT( project.id as id, project.name as name, project.number as number, ARRAY(SELECT AS STRUCT label.key as key, label.value as value, FROM UNNEST(project.labels) as label) as labels, project.ancestry_numbers as ancestry_numbers) as project, ARRAY(SELECT AS STRUCT label.key as key, label.value as value, FROM UNNEST(labels) as label) as labels, ARRAY(SELECT AS STRUCT system_label.key as key, system_label.value as value, FROM UNNEST(system_labels) as system_label) as system_labels, STRUCT( location.location as location, location.country as country, location.region as region, location.zone as zone) as location, export_time, cost, currency, currency_conversion_rate, STRUCT( usage.amount as amount, usage.unit as unit, usage.amount_in_pricing_units as amount_in_pricing_units, usage.pricing_unit as pricing_unit) as usage, ARRAY(SELECT AS STRUCT credit.name as name, credit.amount as amount, credit.type as type, credit.id as id, credit.full_name as full_name, FROM UNNEST(credits) as credit) as credits, STRUCT( invoice.month as month) as invoice, cost_type, STRUCT( adjustment_info.id as id, adjustment_info.description as description, adjustment_info.mode as mode, adjustment_info.type as type) as adjustment_info, FROM TABLE_WITH_CREDITINFO_PROJECT_NUMBER_AND_ADJUSTMENT_INFO
2. Créer une vue pour les tables sans credits.type
, credits.id
et credits.full
La requête suivante crée une vue à l'aide de tables qui n'incluent pas les propriétés de schéma préexistantes credits.type
, credits.id
et credits.full
.
SQL standard
SELECT billing_account_id, STRUCT(service.id as id, service.description as description) as service, STRUCT(sku.id as id, sku.description as description) as sku, usage_start_time, usage_end_time, STRUCT( project.id as id, project.name as name, CAST(NULL as string) as number, ARRAY(SELECT AS STRUCT label.key as key, label.value as value, FROM UNNEST(project.labels) as label) as labels, project.ancestry_numbers as ancestry_numbers) as project, ARRAY(SELECT AS STRUCT label.key as key, label.value as value, FROM UNNEST(labels) as label) as labels, ARRAY(SELECT AS STRUCT system_label.key as key, system_label.value as value, FROM UNNEST(system_labels) as system_label) as system_labels, STRUCT( location.location as location, location.country as country, location.region as region, location.zone as zone) as location, export_time, cost, currency, currency_conversion_rate, STRUCT( usage.amount as amount, usage.unit as unit, usage.amount_in_pricing_units as amount_in_pricing_units, usage.pricing_unit as pricing_unit) as usage, ARRAY(SELECT AS STRUCT credit.name as name, credit.amount as amount, CAST(NULL as STRING) as type, CAST(NULL as STRING) as id, CAST(NULL as STRING) as full_name, FROM UNNEST(credits) as credit) as credits, STRUCT( invoice.month as month) as invoice, cost_type, STRUCT( CAST(NULL as STRING) as id, CAST(NULL as STRING) as description, CAST(NULL as STRING) as mode, CAST(NULL as STRING) as type) as adjustment_info, FROM TABLE_WITHOUT_CREDIT_ID_TYPE_FULL_NAME
3. Créer une vue pour les tables sans project.number
et adjustment_info
Voici une requête qui crée une vue à l'aide de tables incluant les propriétés de schéma préexistantes credits.type
, credits.id
et credits.full
, mais qui n'incluent pas les nouvelles propriétés de schéma project.number
et adjustment_info
.
SQL standard
SELECT billing_account_id, STRUCT(service.id as id, service.description as description) as service, STRUCT(sku.id as id, sku.description as description) as sku, usage_start_time, usage_end_time, STRUCT( project.id as id, project.name as name, CAST(NULL as string) as number, ARRAY(SELECT AS STRUCT label.key as key, label.value as value, FROM UNNEST(project.labels) as label) as labels, project.ancestry_numbers as ancestry_numbers) as project, ARRAY(SELECT AS STRUCT label.key as key, label.value as value, FROM UNNEST(labels) as label) as labels, ARRAY(SELECT AS STRUCT system_label.key as key, system_label.value as value, FROM UNNEST(system_labels) as system_label) as system_labels, STRUCT( location.location as location, location.country as country, location.region as region, location.zone as zone) as location, export_time, cost, currency, currency_conversion_rate, STRUCT( usage.amount as amount, usage.unit as unit, usage.amount_in_pricing_units as amount_in_pricing_units, usage.pricing_unit as pricing_unit) as usage, ARRAY(SELECT AS STRUCT credit.name as name, credit.amount as amount, credit.type as type, credit.id as id, credit.full_name as full_name, FROM UNNEST(credits) as credit) as credits, STRUCT( invoice.month as month) as invoice, cost_type, STRUCT( CAST(NULL as STRING) as id, CAST(NULL as STRING) as description, CAST(NULL as STRING) as mode, CAST(NULL as STRING) as type) as adjustment_info, FROM TABLE_WITHOUT_PROJECTNUMBER_AND_ADJUSTMENT_INFO
4. Vérifier la cohérence des vues avec les tables d'origine
Les requêtes suivantes vous permettent de vérifier que les vues que vous avez créées fournissent des données cohérentes avec les tables d'origine que vous interrogiez.
Les requêtes utilisent la vue créée dans l'exemple sans credits.type
, credits.id
et credits.full
. Pour en savoir plus sur la création de cette vue, consultez la section Créer une vue pour les tables sans credits.type
, credits.id
et credits.full
.
Cette requête fournit une comparaison ligne par ligne du coût entre la table d'origine et la vue créée sans credits.type
, credits.id
et credits.full
.
SQL standard
-- ROW BY ROW COMPARISON OF COST BETWEEN ORIGINAL TABLE AND CONVERTED TABLE SELECT cost FROM TABLE_WITHOUT_CREDIT_ID_TYPE_FULL_NAME EXCEPT DISTINCT SELECT cost FROM TABLE_WITHOUT_CREDIT_ID_TYPE_FULL_NAME_VIEW
Cette requête fournit une comparaison ligne par ligne des crédits entre la table d'origine et la vue créée sans credits.type
, credits.id
et credits.full
.
SQL standard
-- ROW BY ROW COMPARISON OF CREDITS BETWEEN ORIGINAL TABLE AND CONVERTED TABLE WITH CONCAT_AMOUNTS AS (SELECT ARRAY_CONCAT_AGG(ARRAY(SELECT amount FROM UNNEST(credits) as cred)) as amounts FROM TABLE_WITHOUT_CREDIT_ID_TYPE_FULL_NAME), CONCAT_AMOUNTS_CONVERTED AS (SELECT ARRAY_CONCAT_AGG(ARRAY(SELECT amount FROM UNNEST(credits) as cred)) as amounts FROM TABLE_WITHOUT_CREDIT_ID_TYPE_FULL_NAME_VIEW) SELECT amounts FROM CONCAT_AMOUNTS, UNNEST(amounts) as amounts EXCEPT DISTINCT SELECT amounts FROM CONCAT_AMOUNTS_CONVERTED, UNNEST(amounts) as amounts
Articles associés
- Comprendre les tables de données Cloud Billing dans BigQuery
- Configurer l'exportation des données Cloud Billing vers BigQuery
- Exemples de requêtes associées à l'exportation de données Cloud Billing vers BigQuery
- Visualiser les dépenses au fil du temps avec Looker Studio