Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Umgang mit Schemaänderungen an BigQuery-Exportdatentabellen

Auf dieser Seite wird der Umgang mit den am 28. Oktober 2020 vorgenommenen Änderungen an den Cloud Billing-Daten erläutert, die in Tabellen in BigQuery exportiert werden.

Informationen zu den Änderungen

Das Tabellenschema für die täglichen Cloud Billing-Nutzungsdaten, die nach BigQuery exportiert wurden, wurde aktualisiert, um mehr Datenfelder zu verdeutlichen. Diese Tabelle heißt gcp_billing_export_v1_<BILLING_ACCOUNT_ID> im BigQuery-Dataset.

Die folgenden Datenfelder wurden dem BigQuery-Nutzungsexportschema für Cloud Billing hinzugefügt:

  • project.number
  • adjustment_info
  • adjustment_info.id
  • adjustment_info.mode
  • adjustment_info.description
  • adjustment_info.type

Diese Daten sind seit dem 29. Oktober 2020 neu und nicht für den Zeitraum davor verfügbar. Aktualisieren Sie Integrationen oder Automatisierungen basierend auf dem neuen Schema und führen Sie bei Bedarf Migrationen durch. Informationen zu den Daten, die in diesen neuen Feldern bereitgestellt werden, finden Sie unter Informationen zu Cloud Billing-Datentabellen in BigQuery.

Auswirkungen auf vorhandene Tabellen und Abfragen

Da sich die Tabellenstruktur für den Export der täglichen Kostendaten geändert hat, bieten Abfragen, die direkt auf die exportierten Tabellen verweisen, nicht mehr alle verfügbaren Daten an. Zum Beheben dieses Problems empfehlen wir die Erstellung von BigQuery-Ansichten, die die exportierten Tabellen abfragen und die Informationen in Ihrer bevorzugten Struktur bereitstellen. Sie können dann die Abfragen, die Ihre Berichte und Dashboards speisen, aus den Ansichten statt aus den exportierten Tabellen anpassen.

Mit Ansichten können Sie die Struktur der in Abfragen und Dashboards verwendeten Daten standardisieren.

In den von Ihnen erstellten Ansichten sollten die Daten normalisiert werden, sodass alle relevanten Tabellen in Ihren Abfragen das gleiche Schema enthalten. Somit sind Sie vor zukünftigen Schemaänderungen geschützt und können die zugrunde liegende Abfrage in diesen Instanzen ändern, wenn sich das Datenschema ändert.

Ansichten für den Umgang mit Schemaänderungen erstellen

Wenn Sie Tabellen aufbewahren müssen, die das vorherige Schema verwenden, empfehlen wir, BigQuery-Ansichten für diese Tabellen zu erstellen, um das Datenschema zu normalisieren. Wenn Sie eine Ansicht für die Migration vom vorherigen Schema zum neuen Schema erstellen, können Sie mit einer UNION-Anweisung Tabellen mit nicht übereinstimmenden Schemas kombinieren. Welche Ansicht Sie erstellen, hängt von den Datenfeldern ab, die Sie in Ihren Abfragen und Dashboards verwenden.

Mindestens eines der folgenden Beispiele kann auf Ihre Situation zutreffen, wobei Ihre Abfragen die neuen Felder project.number und adjustment_info möglicherweise nicht verwenden.

  1. Sie verwenden Tabellen mit bereits vorhandenen Schemaattributen und neuen Attributen wie credits.type, credits.id, credits.full, project.number und adjustment_info. Ein Beispiel für das Erstellen dieser Ansicht finden Sie unter Ansicht für Tabellen mit allen Feldern im aktualisierten Schema erstellen.
  2. Sie verwenden Tabellen, die nicht die vorhandenen Schemaattribute credits.type, credits.id und credits.full enthalten. Ein Beispiel für das Erstellen dieser Ansicht finden Sie unter Ansicht für Tabellen ohne credits.type, credits.id und credits.full erstellen.
  3. Sie verwenden Tabellen mit den vorhandenen Schemaattributen credits.type, credits.id und credits.full, aber nicht die neuen Schemaattribute project.number. und adjustment_info. Ein Beispiel für das Erstellen dieser Ansicht finden Sie unter Ansicht für Tabellen ohne project.number und adjustment_info erstellen.

Sie können eine Ansicht erstellen, indem Sie eine SQL-Abfrage verfassen, mit der die für die Ansicht zugänglichen Daten definiert werden. Weitere Informationen finden Sie unter Ansicht erstellen.

Im Folgenden finden Sie eine Zusammenfassung der Schritte zum Erstellen einer BigQuery-Ansicht.

  1. Abfrage zum Erstellen der Ansicht auswählen
  2. Abfrage ausführen und Ergebnisse beobachten
  3. Ansicht speichern
  4. Den Namen für die neue Datenansicht eingeben
  5. Das Schema der neuen Ansicht beobachten

Ansicht für Tabellen mit allen Feldern im aktualisierten Schema erstellen

Im Folgenden finden Sie eine Abfrage, die eine neue Ansicht mit den bereits vorhandenen und aktualisierten Schemas erstellt. Diese Art von Ansicht schränkt Ihre Präsenz für zukünftige Schemaänderungen ein.

Wenn Sie diese Ansicht für Ihre Abfragen verwenden, haben sie alle das gleiche Schema und ermöglichen die erfolgreiche Funktionsweise von UNION-Anweisungen. Diese Abfrage behält die Felder credits.type, credits.id, credits.full, project.number und adjustment_info in den zugrunde liegenden Tabellen bei.

Standard-SQL

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

Ansicht für Tabellen ohne credits.type, credits.id und credits.full erstellen

Die folgende Abfrage erstellt eine neue Ansicht mithilfe von Tabellen, die nicht die bereits vorhandenen Schemaattribute credits.type ,credits.id und credits.full enthalten.

Standard-SQL

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

Ansicht für Tabellen ohne project.number und adjustment_info erstellen

Die folgende Abfrage erstellt eine neue Ansicht mithilfe von Tabellen, die zwar die bereits vorhandenen Schemaattribute credits.type, credits.id und credits.full enthalten, jedoch nicht die neuen Schemaattribute project.number und adjustment_info.

Standard-SQL

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

Prüfen, ob die Ansichten mit den Originaltabellen übereinstimmen

Mit den folgenden Abfragen können Sie überprüfen, ob die von Ihnen erstellten Ansichten Daten zur Verfügung stellen, die mit den ursprünglichen Tabellen übereinstimmen. Die Abfragen verwenden die Ansicht, die im Beispiel ohne credits.type, credits.id und credits.full erstellt wurde. Weitere Informationen zum Erstellen dieser Ansicht finden Sie unter Ansicht für Tabellen ohne credits.type, credits.id und credits.full erstellen.

Diese Abfrage bietet einen Vergleich der Kosten zwischen der ursprünglichen Tabelle und der Ansicht, die ohne credits.type, credits.id und credits.full erstellt wurde. Dabei werden alle Zeilen einzeln verglichen.

Standard-SQL

-- 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

Diese Abfrage bietet einen Vergleich der Guthaben zwischen der ursprünglichen Tabelle und der Ansicht, die ohne credits.type, credits.id und credits.full erstellt wurde. Dabei werden alle Zeilen einzeln verglichen.

Standard-SQL

-- 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