Beispielabfragen für Cloud Billing-Datenexporte

In diesem Dokument finden Sie einige Beispiele zum Abfragen der Cloud Billing-Daten, die nach BigQuery exportiert und dort gespeichert wurden.

Weitere Informationen zum Exportieren Ihrer Abrechnungsdaten in BigQuery finden Sie unter Übersicht und Einschränkungen.

SQL-Abfrage aus einem Abrechnungsbericht generieren

Wenn Sie schnell eine SQL-Abfrage schreiben möchten, die die entsprechenden Ergebnisse in BigQuery als Ergebnisse in einem Abrechnungsbericht zurückgibt, können Sie das Feature Abfrage generieren unter Abrechnungsberichte verwenden, das in der Google Cloud Console verfügbar ist.

Tabellennamen angeben, der in Abfragen verwendet werden soll

Zum Abfragen der exportierten Cloud Billing-Daten in BigQuery müssen Sie in diesen Beispielen den vollständigen Pfad zum Tabellennamen in der Klausel FROM angeben. Der Tabellenname wird anhand von drei durch Punkte getrennten Werten ermittelt:

project-ID.dataset_name.BQ_table_name

Angenommen, Sie haben ein Cloud-Rechnungskonto, das für den Export detaillierter Nutzungskostendaten konfiguriert ist, und die Komponenten der Abrechnungsexportkonfiguration sind folgende:

  • project-ID: my-billing-project
  • dataset_name: my_billing_dataset
  • BQ_table_name: gcp_billing_export_resource_v1_<BILLING-ACCOUNT-ID>
  • BILLING-ACCOUNT-ID: 010101-F0FFF0-10X10X – die ID des Cloud-Rechnungskonto, das die zu exportierenden Abrechnungsdaten enthält. Informationen zum Ermitteln der Rechnungskonto-ID

Anhand der Beispielwerte würde die FROM-Klausel so geschrieben:

my-billing-project.my_billing_dataset.gcp_billing_export_resource_v1_010101-F0FFF0-10X10X

Beispielabfragen nach Cloud Billing-Datentyp

In diesem Abschnitt finden Sie Beispielabfragen für standardmäßige Nutzungskosten, detaillierte Nutzungskosten und Preisdaten.

Wenn Sie sich für den Export detaillierter Nutzungskostendaten entschieden haben, können Sie zusätzlich zu den Beispielen für detaillierte Nutzungskostenabfragen auch die Beispiele für Standard-Nutzungskostenabfragen verwenden.

Standardmäßige Nutzungskosten Detaillierte Nutzungskosten Preise
Abfragebeispiele für Standardnutzungskosten Abfragebeispiele für detaillierte Nutzungskosten Beispiele für Preisdatenabfragen

Abfragebeispiele für Standardnutzungskosten

In diesem Abschnitt wird anhand von Beispielen gezeigt, wie Sie die in BigQuery exportierten Cloud Billing-Standardnutzungskosten abfragen.

Diese Abfragebeispiele funktionieren auch mit detaillierten Nutzungskosten, die nach BigQuery exportiert werden, allerdings sind sie nicht zum Abrufen der Informationen auf Ressourcenebene geschrieben, die mit der Exportoption zu detaillierten Nutzungskosten bereitgestellt wird.

Häufige Werte, die in den Abfragebeispiele für Standardkosten verwendet werden

In den Abfragebeispielen in diesem Abschnitt wird als Tabellenname der folgende Wert verwendet: project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX

Gesamtkosten einer Rechnung zurückgeben

Die folgenden Abfragen zeigen zwei Möglichkeiten, wie Sie sich Kosten und Guthaben anhand von exportierten Abrechnungsdaten anzeigen lassen können.

  • Im Feld total werden die Gleitkommawerte für Kosten und Gutschriften direkt summiert. Dadurch kann es zu Rundungsfehlern kommen.
  • Das Feld total_exact wandelt die Kosten- und Gutschriftswerte vor dem Summieren in "Micros" um. Nach dem Summieren werden diese wieder in Dollar umgewandelt und so Rundungsfehler mit Gleitkommazahlen vermieden.

Beispiel 1: Summe aller Kosten pro Rechnung

Diese Abfrage zeigt die Rechnungssumme für jeden Monat als Summe der regelmäßigen Kosten, Steuern, Korrekturen und Rundungsfehler.

Standard-SQL

SELECT
  invoice.month,
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
                  FROM UNNEST(credits) c), 0))
    AS total,
  (SUM(CAST(cost AS NUMERIC))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC))
                  FROM UNNEST(credits) AS c), 0)))
    AS total_exact
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
GROUP BY 1
ORDER BY 1 ASC
;

Das Ergebnis der vorherigen Abfrage kann beispielsweise so aussehen:

Zeile Monat Gesamt Summe (genau)
1 201901 1005,004832999999984 $ 1005,00 $
2 201902 992,3101739999999717 $ 992,31 $
3 201903 1220,761089999999642 $ 1220,76 $

Beispiel 2: Details zu den zurückgegebenen Daten nach Kostenart pro Rechnungsmonat

Diese Abfrage ergibt die Gesamtsummen für jeden cost_type pro Monat. Kostenarten umfassen regelmäßige Kosten, Steuern, Korrekturen und Rundungsfehler.

Standard-SQL

SELECT
  invoice.month,
  cost_type,
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
                  FROM   UNNEST(credits) c), 0))
    AS total,
  (SUM(CAST(cost AS NUMERIC))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC))
                  FROM UNNEST(credits) AS c), 0)))
    AS total_exact
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
GROUP BY 1, 2
ORDER BY 1 ASC, 2 ASC
;

Das Ergebnis der vorherigen Abfrage kann beispielsweise so aussehen:

Zeile Monat Kostenart Gesamt Summe (genau)
1 201901 regulär 1000,501209987994782 $ 1000,50 $
2 201901 Rundungsfehler -0,500489920049387 $ -0,50 $
3 201901 Steuer 10,000329958477891 $ 10,00 $
4 201901 Korrektur -5,002572999387045 $ -5,00 $

Abfragebeispiele mit Labels

Die folgenden Beispiele zeigen andere Möglichkeiten zum Abfragen von Daten mit Labels.

Bei den Beispielen in diesem Abschnitt wird Folgendes angenommen:

  • Sie haben zwei Apps („grapefruit-squeezer“ und „chocolate-masher“).
  • Für jede Anwendung haben Sie zwei Umgebungen: „dev“ (Entwicklung) und „prod“ (Produktion).
  • In der Entwicklungsumgebung ist eine kleine Instanz pro Anwendung vorhanden.
  • In der Produktionsumgebung ist eine kleine Instanz in Amerika und eine kleine Instanz in Asien vorhanden.
  • Jede Instanz trägt den Namen der Anwendung und der Umgebung.
  • Sie haben eine Instanz ohne Label, die Sie zum Experimentieren verwenden.

Ihre Rechnung beträgt insgesamt 24 $und setzt sich so zusammen:

Instanz Labels Gesamtkosten
Kleine Instanz mit einer VCPU in Amerika Keine 4 $
Kleine Instanz mit einer VCPU in Amerika app: chocolate-masher
environment: dev
2 $
Kleine Instanz mit einer VCPU in Amerika app: grapefruit-squeezer
environment: dev
3 $
Kleine Instanz mit einer VCPU in Amerika app: chocolate-masher
environment: prod
3,25 $
Kleine Instanz mit einer VCPU in Asien app: chocolate-masher
environment: prod
3,75 $
Kleine Instanz mit einer VCPU in Amerika app: grapefruit-squeezer
environment: prod
3,50 $
Kleine Instanz mit einer VCPU in Asien app: grapefruit-squeezer
environment: prod
4,50 $

Jede Zeile einzeln abfragen

Die detaillierteste Kostenansicht erhalten Sie, indem Sie jede Zeile einzeln abfragen, ohne Gruppierungen vorzunehmen. Gehen wir davon aus, dass mit Ausnahme von Labels und der SKU-Beschreibung alle Felder wie Projekt, Produkt usw. identisch sind.

Standard-SQL

SELECT
  sku.description,
  TO_JSON_STRING(labels) as labels,
 cost as cost
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`;

Legacy-SQL

TO_JSON_STRING not supported.
Zeile sku.description Labels Kosten
1 Kleine Instanz mit einer VCPU in Amerika [] 4 $
2 Kleine Instanz mit einer VCPU in Amerika [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"dev"}] 2 $
3 Kleine Instanz mit einer VCPU in Amerika [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"dev"}] 3 $
4 Kleine Instanz mit einer VCPU in Amerika [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] 3,25 $
5 Kleine Instanz mit einer VCPU in Asien [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] 3,75 $
6 Kleine Instanz mit einer VCPU in Amerika [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}] 3,50 $
7 Kleine Instanz mit einer VCPU in Asien [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}] 4,50 $
GESAMT 24 $

Nach Labelzuordnung als JSON-String gruppieren

Mit dieser Methode können Sie die Kosten nach jeder Labelkombination aufschlüsseln.

Standard-SQL

SELECT
  TO_JSON_STRING(labels) as labels,
  sum(cost) as cost
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
GROUP BY labels;

Legacy-SQL

TO_JSON_STRING not supported.
Zeile Labels Kosten
1 [] 4 $
2 [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"dev"}] 2 $
3 [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"dev"}] 3 $
4 [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}] 7 $
5 [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}] 8 $
GESAMT 24 $

Nach Labelwert für einen bestimmten Schlüssel gruppieren

Häufig werden die Kosten nach den Werten eines bestimmten Labelschlüssels aufgeschlüsselt. Kosten ohne diesen Schlüssel können Sie durch LEFT JOIN und Eingabe des Schlüsselfilters als JOIN-Bedingung (anstelle von WHERE) einbeziehen. Sie erhalten auf diese Weise eine vollständige Übersicht Ihrer Kosten.

Standard-SQL

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

Legacy-SQL

SELECT
  labels.value as environment,
  SUM(cost) as cost
FROM [project-ID:dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX]
WHERE labels.key = "environment" OR labels.key IS NULL
GROUP BY environment;
Zeile Umgebung Kosten
1 prod 15 $
2 dev 5 $
3 null 4 $
GESAMT 24 $

Nach Schlüssel/Wert-Paar gruppieren

Behalten Sie dies beim Interpretieren oder Exportieren der Ergebnisse im Hinterkopf. Eine einzelne Zeile zeigt hier eine gültige Summe ohne doppelte Zählung. Sie sollte jedoch nicht mit anderen Zeilen kombiniert werden, es sei denn, beide haben denselben Schlüssel oder die Schlüssel werden definitiv nicht in derselben Ressource verwendet.

Standard-SQL

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

Legacy-SQL

SELECT
  labels.key as key,
  labels.value as value,
  SUM(cost)
FROM [project-ID:dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX]
GROUP BY key, value;
Zeile Schlüssel Wert Kosten
1 null null 4 $
2 App chocolate-masher 9 $
3 App grapefruit-squeezer 11 $
4 Umgebung dev 5 $
5 Umgebung prod 15 $
GESAMT 44 $

Beachten Sie, dass die Gesamtsumme größer als auf der Rechnung ist.

Abfragen mit Rabatten für zugesicherte Nutzung

Die folgenden Abfragen zeigen, wie die Gebühren und Gutschriften aufgerufen werden können, die mit Rabatten für zugesicherte Nutzung in exportierten Abrechnungsdaten verknüpft sind. Um zu verstehen, wie Ihre Zusicherungsgebühren und -Gutschriften Ihrem Cloud-Rechnungskonto und Ihren Projekten zugeordnet werden, siehe Zuweisung von Rabatten für zugesicherte Nutzung.

Zusicherungsgebühren ansehen

Verwenden Sie die folgende Beispielabfrage, um die Zusicherungsgebühren für Ihre Rabatte für zugesicherte Nutzung in Ihrem Abrechnungsdatenexport aufzurufen.

Standard-SQL

SELECT
    invoice.month AS invoice_month,
    SUM(cost) as commitment_fees
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
WHERE LOWER(sku.description) LIKE "commitment%"
GROUP BY 1

Gutschriften für Zusicherungen ansehen

Mit der folgenden Beispielabfrage können Sie das Guthaben für Rabatte für zugesicherte Nutzung im Abrechnungsdatenexport ansehen.

Standard-SQL

SELECT
    invoice.month AS invoice_month,
    SUM(credits.amount) as CUD_credits
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
LEFT JOIN UNNEST(credits) AS credits
WHERE credits.type = "COMMITTED_USAGE_DISCOUNT"
GROUP BY 1

Filter für die Ressourcenhierarchie zur Überprüfung der Herkunft verwenden

Sie können Ressourcenhierarchiefilter verwenden, um Kosten nach Hierarchieelementen wie Projekten, Ordnern und Organisationen zusammenzufassen. Diese Abfragebeispiele zeigen Methoden für die Summierung von Kosten, die nach Elementen der Ressourcenhierarchie gefiltert sind, und für die Anzeige der Projektherkunft.

Beispiel 1: Nach Ressourcenname filtern

In diesem Beispiel werden Abfragen demonstriert, die Kosten nach Projektherkunft gruppieren und nur Kosten herausfiltern, die unter einem bestimmten Hierarchieelement entstanden sind, das durch den relativen Ressourcennamen identifiziert wird.

String-Methode

SELECT
    invoice.month AS invoice_month,
    TO_JSON_STRING(project.ancestors) as ancestors,
    SUM(cost)
        + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0))
        AS net_cost
  FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` as bq
  WHERE TO_JSON_STRING(project.ancestors) like "%resource_name\":\"folders/1234"
  GROUP BY invoice_month, ancestors
  ORDER BY invoice_month, ancestors

UNNEST-Methode

SELECT
    invoice.month AS invoice_month,
    TO_JSON_STRING(project.ancestors) as ancestors,
    SUM(cost)
        + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0))
        AS net_cost
  FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` as bq, UNNEST(project.ancestors) as ancestor
  WHERE ancestor.resource_name = "folders/1234"
  GROUP BY invoice_month, ancestors
  ORDER BY invoice_month, ancestors

Beispiel 2: Nach Anzeigenamen filtern

In diesem Beispiel werden Abfragen demonstriert, die Kosten nach Projektherkunft gruppieren und nur nach Kosten filtern, die unter einem bestimmten Hierarchieelement erzeugt wurden, das durch den vom Nutzer angegebenen Anzeigenamen identifiziert wird.

Stringabgleich-Methode

SELECT
    invoice.month AS invoice_month,
    TO_JSON_STRING(project.ancestors) as ancestors,
    SUM(cost)
        + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0))
        AS net_cost
  FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` as bq
  WHERE TO_JSON_STRING(project.ancestors) like "%display_name\":\"MyFolderName%"
  GROUP BY invoice_month, ancestors
  ORDER BY invoice_month, ancestors

UNNEST-Methode

SELECT
    invoice.month AS invoice_month,
    TO_JSON_STRING(project.ancestors) as ancestors,
    SUM(cost)
        + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0))
        AS net_cost
  FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` as bq, UNNEST(project.ancestors) as ancestor
  WHERE ancestor.display_name = "MyFolderName"
  GROUP BY invoice_month, ancestors
  ORDER BY invoice_month, ancestors

Abfragebeispiele mit Tags

Die folgenden Beispiele zeigen Möglichkeiten zum Abfragen von Daten mit Tags.

Kosten nach Rechnungsmonat mit Tags berechnen

In der folgenden Abfrage wird gezeigt, wie Sie Rücksendekosten nach Rechnungsmonat für das cost_center-Tag verwenden können.

SELECT
  invoice.month AS invoice_month,
  tag.value AS cost_center,
  ROUND((SUM(CAST(cost AS NUMERIC))
    + SUM(IFNULL((SELECT SUM (CAST(c.amount AS NUMERIC))
                  FROM UNNEST(credits) AS c), 0))), 2)
    AS net_cost
FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`, UNNEST(tags) AS tag
WHERE tag.key = "cost_center" AND tag.namespace = "821092389413"
GROUP BY invoice.month, tag.value
ORDER BY invoice.month, tag.value;

Das Ergebnis der vorherigen Abfrage kann beispielsweise so aussehen:

Zeile invoice_month cost_center net_cost
1 202208 android_mobile_apps 9,93
2 202208 ios_mobile_apps 9,93
3 202209 android_mobile_apps 25,42
4 202209 ios_mobile_apps 25,4
5 202209 Personalisierung 16,08

Kosten nicht getaggter Ressourcen ansehen

Diese Abfrage zeigt die Rechnungssumme für nicht getaggte Ressourcen, gruppiert nach Rechnungsmonat.

SELECT
 invoice.month AS invoice_month,
 ROUND((SUM(CAST(cost AS NUMERIC))
   + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC))
                 FROM UNNEST(credits) AS c), 0))), 2)
   AS net_cost
FROM
 `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
WHERE "color" NOT IN (SELECT key FROM UNNEST(tags))
GROUP BY invoice_month
ORDER BY invoice_month;

Das Ergebnis der vorherigen Abfrage kann beispielsweise so aussehen:

Zeile invoice_month net_cost
1 202202 0
2 202203 16,81
3 202204 54,09
4 202205 55,82
5 202206 54,09
6 202207 55,83
7 202208 31,49

Weitere Abfragebeispiele

Abfragekosten und Gutschriften nach Projekt für einen bestimmten Rechnungsmonat

Durch die Angabe eines bestimmten Rechnungsmonats, z. B. Juni 2020 (im Format JJJJMM), gibt diese Abfrage eine Ansicht der nach Projekt gruppierten Kosten und Gutschriften zurück und zeigt Projektlabels an.

Standard-SQL

SELECT
  project.name,
  TO_JSON_STRING(project.labels) as project_labels,
  sum(cost) as total_cost,
  SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0)) as total_credits
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
WHERE invoice.month = "202006"
GROUP BY 1, 2
ORDER BY 1;
Zeile name 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 – Storage [{"key":"ctg_p_env","value":"prod"},{"key":"ctg_team","value":"data"}] 7.645793 -0.003761

Kosten abfragen, um Korrekturen oder die spät monetarisierte Nutzung für einen bestimmten Rechnungsmonat aufzurufen

Durch die Angabe eines bestimmten Rechnungsmonats und das Filtern nach dem Datum, an dem das Nutzungsdatum vor dem Rechnungsmonat aufgetreten ist, gibt diese vereinfachte Abfrage Kostensummen für Korrekturen oder verspätet monetarisierte Nutzung (Gebühren, die auf einer früheren Rechnung hätten stehen müssen) zurück.

Standard-SQL

SELECT
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
      FROM   UNNEST(credits) c), 0))
    AS total
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
WHERE
  invoice.month = '202403' AND
    DATE(TIMESTAMP_TRUNC(usage_start_time, Day, 'US/Pacific')) < '2024-03-01';

Das Ergebnis der vorherigen Abfrage kann beispielsweise so aussehen:

Zeile Gesamt
1 3.531752

Kostendetails abfragen, um Korrekturen oder spät monetarisierte Nutzung nach Dienst für einen bestimmten Rechnungsmonat aufzurufen

Dieses Beispiel zeigt eine Abfrage, die eine Kostenaufschlüsselung nach Dienst für Rechnungsgebühren zurückgibt, wobei das Nutzungsdatum vor dem Rechnungsmonat liegt. Diese Abfrage gibt Kosten- und Gutschriftsummen nach Dienst für Korrekturen oder verspätet monetarisierte Nutzung (Gebühren, die auf einer früheren Rechnung hätten stehen müssen) zurück.

In diesem Abfragebeispiel filtert die Klausel WHERE nach allen Gebühren mit einem Rechnungsmonat im März 2024 (im Format JJJJMM) und verfeinert die Ergebnisse dann weiter, um nur diejenigen Gebühren für den Rechnungsmonat zurückzugeben, die ein Nutzungsdatum vor dem 1. März 2024 haben.

SELECT
  DATE(TIMESTAMP_TRUNC(usage_start_time, Day, 'US/Pacific')) AS `Day`,
  service.description AS `Service Description`,
  SUM(CAST(cost_at_list AS NUMERIC)) AS `List cost`,
  SUM(CAST(cost AS NUMERIC)) - SUM(CAST(cost_at_list AS NUMERIC)) AS `Negotiated savings`,
  SUM(IFNULL((SELECT SUM(CAST(c.amount AS numeric)) FROM UNNEST(credits) c WHERE c.type IN ('SUSTAINED_USAGE_DISCOUNT', 'DISCOUNT', 'SPENDING_BASED_DISCOUNT', 'COMMITTED_USAGE_DISCOUNT', 'FREE_TIER', 'COMMITTED_USAGE_DISCOUNT_DOLLAR_BASE', 'SUBSCRIPTION_BENEFIT', 'RESELLER_MARGIN')), 0)) AS `Discounts`,
  SUM(IFNULL((SELECT SUM(CAST(c.amount AS numeric)) FROM UNNEST(credits) c WHERE c.type IN ('CREDIT_TYPE_UNSPECIFIED', 'PROMOTION')), 0)) AS `Promotions and others`,
  SUM(CAST(cost_at_list AS NUMERIC)) + SUM(IFNULL((SELECT SUM(CAST(c.amount AS numeric)) FROM UNNEST(credits) c WHERE c.type IN ('SUSTAINED_USAGE_DISCOUNT', 'DISCOUNT', 'SPENDING_BASED_DISCOUNT', 'COMMITTED_USAGE_DISCOUNT', 'FREE_TIER', 'COMMITTED_USAGE_DISCOUNT_DOLLAR_BASE', 'SUBSCRIPTION_BENEFIT', 'RESELLER_MARGIN')), 0)) + SUM(CAST(cost AS NUMERIC)) - SUM(CAST(cost_at_list AS NUMERIC))+ SUM(IFNULL((SELECT SUM(CAST(c.amount AS numeric)) FROM UNNEST(credits) c WHERE c.type IN ('CREDIT_TYPE_UNSPECIFIED', 'PROMOTION')), 0)) AS `Subtotal`
FROM
  `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
WHERE
  invoice.month = '202403' AND
  DATE(TIMESTAMP_TRUNC(usage_start_time, Day, 'US/Pacific')) < '2024-03-01'
GROUP BY
  Day,
  service.description
ORDER BY
  Day DESC,
  Subtotal DESC;

Das Ergebnis der vorherigen Abfrage kann beispielsweise so aussehen:

Zeile Tag Dienstbeschreibung Listenpreiskosten Ausgehandelte Einsparungen Rabatte Startguthaben und andere Gutschriften Zwischensumme
1 2024-02-29 Compute Engine 4,39916 0 -1,00916 0 3,39000
2 2024-02-29 Support 0,131969 0 0 0 0,131969
3 2024-02-29 BigQuery 0,005502 0 0 0 0,005502
4 2024-02-29 Netzwerk 0,010972 0 -0,006691 0 0,004281

Abfragebeispiele zu detaillierten Nutzungskosten

Dieser Abschnitt enthält Beispiele für die Abfrage von detaillierten Cloud Billing-Nutzungskosten, die nach BigQuery exportiert werden.

Da das Schema der detaillierten Nutzungskosten alle Felder aus dem Schema der Standardnutzungskosten umfasst, funktionieren die nach BigQuery exportierten Standarddaten auch mit den exportierten detaillierten Daten. Die Abfragebeispiele für Standardnutzungskosten sind nicht zum Abrufen von Informationen auf Ressourcenebene geschrieben, die mit der Exportoption für detaillierte Nutzungskosten bereitgestellt werden. Beim Erstellen von Abfragen für die detaillierten Daten können Sie ein Standardabfragebeispiel als Vorlage verwenden, den Tabellennamen aktualisieren und alle Felder hinzufügen, die im Schema der detaillierten Nutzungskosten verfügbar sind.

Weitere Anforderungen und Einschränkungen für die exportierten detaillierten Daten finden Sie im Schema der detaillierten Nutzungskosten.

Allgemeine Werte, die in den Abfragebeispielen zu detaillierten Nutzungskosten verwendet werden

In den Abfragebeispielen in diesem Abschnitt wird als Tabellenname der folgende Wert verwendet: project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX

Kosten auf Ressourcenebene einer Rechnung zurückgeben

Die folgenden Abfragen zeigen zwei Möglichkeiten, wie Sie sich Kosten und Gutschriften auf Ressourcenebene in einer Rechnung mithilfe von exportierten Abrechnungsdaten anzeigen lassen können.

  • Im Feld total werden die Gleitkommawerte für Kosten und Gutschriften direkt summiert. Dadurch kann es zu Rundungsfehlern kommen.
  • Das Feld total_exact wandelt die Kosten- und Gutschriftswerte vor dem Summieren in "Micros" um. Nach dem Summieren werden diese wieder in Dollar umgewandelt und so Rundungsfehler mit Gleitkommazahlen vermieden.

Summe der Kosten für jede Ressource pro Rechnung

Diese Abfrage zeigt die Rechnungssumme für jeden resource.name pro Monat als Summe der regelmäßigen Kosten, Steuern, Korrekturen und Rundungsfehler. Alle Kosten, die keinem Element auf Ressourcenebene zugeordnet sind, werden unter dem Namen null für den Monat zusammengefasst.

Standard-SQL

SELECT
  invoice.month,
  resource.name,
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
                  FROM UNNEST(credits) c), 0))
    AS total,
  (SUM(CAST(cost AS NUMERIC))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC))
                  FROM UNNEST(credits) AS c), 0)))
    AS total_exact
FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
GROUP BY 1, 2
ORDER BY 1 ASC, 2 ASC
;

Das Ergebnis der vorherigen Abfrage kann beispielsweise so aussehen:

Zeile Monat Name Gesamt Summe (genau)
1 201901 Null 1005,004832999999984 $ 1005,00 $
2 201901 backend1 781,8499760000028 $ 781,85 $
3 201902 Null $953.0034923645475983 $953.03
4 201902 backend1 992,3101739999999717 $ 992,31 $
5 201902 bitnami-launchpad-wordpress-1-wordpress 1,2817819999999998 $ 1,28 $

Details zu den zurückgegebenen Daten nach Kostenart für jede Ressource und pro Rechnungsmonat

Diese Abfrage ergibt die Gesamtsummen für jeden cost_type für jeden resource.name pro Monat. Kostenarten umfassen regelmäßige Kosten, Steuern, Korrekturen und Rundungsfehler. Alle Kosten, die keinem Element auf Ressourcenebene zugeordnet sind, werden unter dem Namen null für den Monat zusammengefasst.

Standard-SQL

SELECT
  invoice.month,
  cost_type,
  resource.name,
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
                  FROM   UNNEST(credits) c), 0))
    AS total,
  (SUM(CAST(cost AS NUMERIC))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC))
                  FROM UNNEST(credits) AS c), 0)))
    AS total_exact
FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
GROUP BY 1, 2, 3
ORDER BY 1 ASC, 2 ASC, 3 ASC
;

Das Ergebnis der vorherigen Abfrage kann beispielsweise so aussehen:

Zeile Monat Kostenart Name Gesamt Summe (genau)
1 201901 regulär Null 1000,501209987994782 $ 1000,50 $
2 201901 Rundungsfehler Null -0,500489920049387 $ -0,50 $
3 201901 Steuer Null 10,000329958477891 $ 10,00 $
4 201901 Korrektur Null -5,002572999387045 $ -5,00 $
5 201901 regulär backend1 410.998795012082947 $ 411.00 $
2 201901 Rundungsfehler backend1 –0,2404900489920378 $ –0,24 $
3 201901 Steuer backend1 4,105840329977189 $ 4,11 $

Aufschlüsselung der GKE-Clusterkosten (Google Kubernetes Engine) abrufen

Dieser Abschnitt enthält Beispiele zum Filtern von GKE-Clusterkosten in Ihren BigQuery-Exportberichten. Weitere Informationen zu den GKE-Clusterkosten finden Sie unter Aufschlüsselung der Clusterkosten ansehen.

GKE-Kosten filtern

Die folgenden Beispielabfragen zeigen, wie Sie Ihre GKE-Kosten für unterstützte Ressourcentypen nach Clustername, Namespace und Label filtern und gruppieren können.

Kosten für GKE-Cluster vor Gutschriften

SELECT
  SUM(cost) AS cost_before_credits,
  labels.value AS cluster_name
FROM  `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
LEFT JOIN UNNEST(labels) as labels
  ON labels.key = "goog-k8s-cluster-name"
GROUP BY labels.value
;

GKE-Kosten nach Gutschriften nach Namespace

SELECT
  labels.value as namespace,
  SUM(cost) + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0)) AS cost_after_credits,
FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
LEFT JOIN UNNEST(labels) as labels
  ON labels.key = "k8s-namespace"
GROUP BY namespace
;

GKE-Kosten nach SKU

SELECT
  project.id AS project_id,
  labels.value AS cluster_name,
  sku.id AS sku_id,
  sku.description AS sku_description,
  SUM(cost) AS cost
FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
JOIN UNNEST(labels) AS labels
  ON labels.key = "goog-k8s-cluster-name"
GROUP BY
  cluster_name, project_id, sku_description, sku_id
;

Beispiele für Preisdatenabfragen

Dieser Abschnitt enthält verschiedene Beispiele zur Abfrage der BigQuery-Preisdaten, die nach BigQuery exportiert wurden.

Gängige Werte in den Beispielpreisabfragen

In den Abfragebeispielen in diesem Abschnitt werden die folgenden Werte verwendet:

  • Tabellenname: project-ID.dataset.cloud_pricing_export
  • SKU ID: 2DA5-55D3-E679 (Cloud Run – Abfragen)

Preise für eine bestimmte Artikelnummer abrufen

Dieses Beispiel zeigt eine einfache Abfrage, die den list_price für jede Preisstufe für eine bestimmte SKU zurückgibt.

Standard-SQL

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

_PARTITIONTIME ist ein Feld, das von BigQuery automatisch generiert wird. Es stellt das Datum dar, zu dem die Daten gehören. Statt _PARTITIONTIME können Sie ein Feld verwenden, das vom Cloud Billing-Export explizit generiert wird, wie z. B. pricing_as_of_time.

Nachfolgend sehen Sie dieselbe Abfrage, die für die Verwendung des Feldes pricing_as_of_time konfiguriert ist:

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

Abfrageergebnisse

Zeile id Beschreibung 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 Anfragen COUNT KONTO MONATLICH 1000000 0 0 0
          1000000 2000000 0,4 0,4

Listenpreise für eine bestimmte Artikelnummer einschließlich Dienstbeschreibung

Die beiden Beispiele in diesem Abschnitt zeigen Abfragen, die den list_price für jede Preisstufe für eine bestimmte Artikelnummer zurückgeben und die Artikelnummerbeschreibung und die Dienstbeschreibung umfassen.

  • Beispiel 1 gibt eine Artikelnummer pro Zeile zurück, wobei die Preisstufen als verschachtelte Daten dargestellt werden.
  • Beispiel 2 zeigt das Aufheben der Verschachtelung der Daten. Es wird eine Zeile pro Artikelnummer pro Preisstufe zurückgegeben.

Beispiel 1: Verschachtelte Daten

In diesem Beispiel wird eine einzelne Artikelnummer abgefragt, um list_price zurückzugeben. Diese Artikelnummer hat mehrere Preisstufen. Die Werte des Listenpreisfelds werden in einzelnen Zeilen angezeigt, die unter der Zeile mit der Artikelnummer-ID verschachtelt sind.

Standard-SQL

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

Abfrageergebnisse:

Zeile 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 Anfragen 152E-C115-5142 Cloud Run KONTO MONATLICH 1000000 0 0 0
            1000000 2000000 0,4 0,4

Beispiel 2: Unverschachtelte Daten, die mit derselben Tabelle verknüpft sind

In diesem Beispiel wird eine einzelne Artikelnummer abgefragt, um list price zurückzugeben. Die Artikelnummer hat mehrere Preisstufen. Die Abfrage zeigt die Verwendung des Operators UNNEST zum Vereinfachen des tiered_rates-Arrays und Verbinden der Felder mit derselben Tabelle, sodass eine Zeile pro Preisstufe entsteht.

Standard-SQL

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

Abfrageergebnisse:

Zeile sku_id sku_description service_id service_description pricing_unit_quantity start_usage_amount usd_amount account_currency_amount
1 2DA5-55D3-E679 Anfragen 152E-C115-5142 Cloud Run 1000000.0 0,0 0,0 0,0
2 2DA5-55D3-E679 Anfragen 152E-C115-5142 Cloud Run 1000000.0 2000000.0 0,4 0,4

Produkt-Taxonomie und Geo-Taxonomie zur Abfrage von Artikelnummern verwenden

  • Die Produkt-Taxonomie ist eine Liste von Produktkategorien, die für die Artikelnummer gelten, z. B. Serverlos, Cloud Run oder VMs on Demand.
  • Geo-Taxonomie sind die geografischen Metadaten, die für eine Artikelnummer gelten und aus Typ- und Regionswerten bestehen.

Produkt-Taxonomie einer Artikelnummer abrufen

Dieses Beispiel zeigt eine Abfrage, bei der die Liste product_taxonomy für eine bestimmte Artikelnummer zurückgegeben wird, wobei die Artikelnummer-ID = 2DA5-55D3-E679 (Cloud Run – Abfragen) lautet.

Standard-SQL

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-ID.dataset.cloud_pricing_export`
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

Abfrageergebnisse:

Zeile sku_id sku_description service_id service_description product_taxonomy
1 2DA5-55D3-E679 Anfragen 152E-C115-5142 Cloud Run GCP
        Serverlos
        Cloud Run
        Andere

Alle Artikelnummern für eine bestimmte Produkt-Taxonomie abrufen

In diesem Beispiel wird eine Abfrage gezeigt, die alle Artikelnummern zurückgibt, die einem angegebenen product_taxonomy entsprechen. In dieser Abfrage ist Serverlos als Wert product taxonomy angegeben.

Standard-SQL

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-ID.dataset.cloud_pricing_export`
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
     AND "Serverless" in UNNEST(product_taxonomy)
LIMIT 10
;

Abfrageergebnisse:

Zeile sku_id sku_description service_id service_description product_taxonomy
1 0160-BD7B-4C40 Cloud Tasks-Netzwerk für intraregional ausgehenden Traffic F3A6-D7B7-9BDA Cloud Tasks GCP
        Serverlos
        Cloud Tasks
        Andere
2 FE08-0A74-7AFD Ausgehender Cloud Tasks GOOGLE-API-Traffic F3A6-D7B7-9BDA Cloud Tasks GCP
        Serverlos
        Cloud Tasks
        Andere
3 A81A-32A2-B46D Speicher-Aufgabenwarteschlange Salt Lake City F17B-412E-CB64 App Engine GCP
        Serverlos
        GAE
        Andere
        TaskQueue

Alle Artikelnummern für eine bestimmte geografische Taxonomie und Produkt-Taxonomie abrufen

In diesem Beispiel wird eine Abfrage gezeigt, die alle Artikelnummern zurückgibt, die mit einer bestimmten geo_taxonomy-Region und einem bestimmten product_taxonomy übereinstimmen, wobei region = us-east4 und product_taxonomy = VMs auf Abruf ist.

Standard-SQL

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-ID.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)
;

Abfrageergebnisse:

Zeile sku_id sku_description service_id service_description geo_taxonomy.type geo_taxonomy.regions product_taxonomy
1 9174-81EE-425B Premium für einzelne Mandanten für Instanz-RAM für einzelnen Mandanten in Virginia 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            Compute
            GCE
            VMs on demand
            Arbeitsspeicher: pro GB
2 C3B9-E891-85ED Instanz-RAM für einzelne Mandanten in Virginia 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            Compute
            GCE
            VMs on demand
            Arbeitsspeicher: pro GB
3 6E2A-DCD9-87ED Vordefinierter N1-Instanz-RAM in Virginia 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            Compute
            GCE
            VMs on demand
            Arbeitsspeicher: pro GB

Preisdaten mit detaillierten Nutzungskosten verknüpfen

In dieser Abfrage wird gezeigt, wie Sie Preis- und Kostendatenexporte zusammenführen, um detaillierte Preisinformationen im Einklang mit Ihren Kosten zu sehen. Sie können diese Abfrage so konfigurieren, dass sie exportierte Daten aus Ihren detaillierten Nutzungskostendaten (als Exports) abruft und Ihre Nutzungskostendaten mit den exportierten Preisdaten (als Prices) zusammenführt.

Verwenden Sie den Namen der Tabelle mit detaillierten Nutzungskosten, um die Daten Exports abzurufen: gcp_billing_export_resource_v1_<BILLING_ACCOUNT_ID>

Verwenden Sie Ihren Preistabellennamen für die Prices-Daten: project-ID.dataset.cloud_pricing_export

WITH
  Exports AS (
    SELECT *
    FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
  ),
  Prices AS (
    SELECT *
    FROM `project-ID.dataset.cloud_pricing_export`
  )
SELECT
  Exports.sku.description AS sku_description,
  Exports.cost,
  Exports.usage,
  FlattenedPrices.pricing_unit_description,
  FlattenedPrices.account_currency_amount,
  FlattenedPrices.account_currency_code,
FROM Exports
JOIN (SELECT * FROM Prices CROSS JOIN UNNEST(Prices.list_price.tiered_rates)) AS FlattenedPrices
  ON
    Exports.sku.id = FlattenedPrices.sku.id
    AND Exports.price.tier_start_amount = FlattenedPrices.start_usage_amount
WHERE
  DATE(Exports.export_time) = '2023-06-30'
  AND DATE(FlattenedPrices.export_time) = '2023-06-30'
  AND cost > 0
LIMIT 1000

Das Ergebnis der vorherigen Abfrage kann beispielsweise so aussehen:

sku_description Kosten Nutzung pricing_unit_description account_currency_amount account_currency_code
Ausgeglichene PD-Kapazität 0,001345 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } Gibibyte-Monat 0,1 USD
Ausgeglichene PD-Kapazität 0,001344 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } Gibibyte-Monat 0,1 USD
Ausgeglichene PD-Kapazität 0,001346 { "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } } Gibibyte-Monat 0,1 USD