Abrechnungsexport in BigQuery – Abfragebeispiele

Die folgenden Beispiele zeigen, wie Sie BigQuery-Abfragen für exportierte Abrechnungsdaten verwenden können.

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.

  • Das Feld total summiert die Gleitkommawerte für Kosten und Guthaben direkt. Hierbei kann es zu Rundungsfehlern kommen.
  • Das Feld total_exact wandelt die Kosten- und Guthabenwerte vor dem Summieren in Mikros um. Nach dem Summieren werden diese wieder in Dollar umgewandelt und so die Rundungsfehler mit Gleitkommazahlen vermieden.

Beispiel 1: Summe aller Kosten pro Rechnungsmonat

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

Das Ergebnis der obigen Abfrage könnte beispielsweise so lauten:

Zeile Monat Summe 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 zeigt die Summen für jede Kostenart (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 * 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
;

Das Ergebnis der obigen Abfrage könnte beispielsweise so lauten:

Zeile Monat Kostenart Summe Summe (genau)
1 201901 Regelmäßige Kosten 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 $

Weitere Abfragebeispiele

Die folgenden Beispiele zeigen weitere Möglichkeiten zur Datenabfrage.

Bei den Beispielen in diesem Abschnitt wird Folgendes angenommen:

  • Sie haben zwei Anwendungen ("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 wie folgt zusammen:

Instanz Labels Gesamtkosten
Kleine Instanz mit einer VCPU in Amerika 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.dataset.table`;

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 schnell und einfach nach Labelkombination aufschlüsseln.

Standard-SQL

SELECT
  TO_JSON_STRING(labels) as labels,
  sum(cost) as cost
FROM `project.dataset.table`
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.dataset.table`
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:dataset.table]
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.dataset.table`
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:dataset.table]
GROUP BY key, value;
Zeile Schlüssel Wert Kosten
1 null null 4 $
2 app chocolate-masher 9 $
3 app grapefruit-squeezer 11 $
4 environment dev 5 $
5 environment prod 15 $
GESAMT 44 $

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

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

Cloud Billing-Dokumentation