Zuordnen von Kosten¶
Eine Organisation kann die Kosten für die Nutzung von Snowflake auf logische Einheiten innerhalb der Organisation umlegen (zum Beispiel auf verschiedene Abteilungen, Umgebungen oder Projekte). Dieses Chargeback- oder Showback-Modell ist für Buchhaltungszwecke nützlich und zeigt Bereiche der Organisation auf, die von Kontrollen und Optimierungen profitieren könnten, um die Kosten zu senken.
Um Kosten verschiedenen Gruppen wie Abteilungen oder Projekten zuzuordnen, verwenden Sie die folgende empfohlene Vorgehensweise:
Verwenden Sie Objekt-Tags, um Ressourcen und Benutzer mit Abteilungen oder Projekten zu verknüpfen.
Verwenden Sie Abfrage-Tags, um einzelne Abfragen mit Abteilungen oder Projekten zu verknüpfen, wenn die Abfragen von derselben Anwendung im Namen von Benutzern durchgeführt werden, die zu mehreren Abteilungen gehören.
Arten von Kostenzuordnungsszenarien¶
Die folgenden Kostenzuordnungsszenarien sind die am häufigsten anzutreffenden. In diesen Szenarien werden Warehouses als Beispiel für eine Ressource verwendet, die Kosten verursacht.
Ressourcen, die ausschließlich von einer einzigen Kostenstelle oder Abteilung verwendet werden: Ein Beispiel hierfür ist die Verwendung von Objekt-Tags, um Warehouses mit einer Abteilung zu verknüpfen. Sie können diese Objekt-Tags verwenden, um die Kosten, die für diese Warehouses anfallen, ausschließlich dieser Abteilung zuzuordnen.
Ressourcen, die von Benutzern aus mehreren Abteilungen gemeinsam genutzt werden: Ein Beispiel hierfür ist ein Warehouse, das von Benutzern aus verschiedenen Abteilungen gemeinsam genutzt wird. In diesem Fall verwenden Sie Objekt-Tags, um jeden Benutzer mit einer Abteilung zu verknüpfen. Die Kosten für Abfragen werden den Benutzern zugeordnet. Anhand der Objekt-Tags, die den Benutzern zugeordnet sind, können Sie die Kosten nach Abteilungen aufschlüsseln.
Anwendungen oder Arbeitsabläufe, die von Benutzern aus verschiedenen Abteilungen gemeinsam genutzt werden: Ein Beispiel hierfür ist eine Anwendung, die Abfragen im Namen ihrer Benutzer ausführt. In diesem Fall wird jeder Abfrage, die von der Anwendung ausgeführt wird, ein Abfrage-Tag zugewiesen, das das Team oder die Kostenstelle des Benutzers identifiziert, in dessen Namen die Abfrage durchgeführt wird.
In den nächsten Abschnitten erfahren Sie, wie Sie Objekt-Tags in Ihren Konten einrichten und welche Details Sie für jedes dieser Kostenzuordnungsszenarien benötigen.
Kosten nach Tag anzeigen in SQL¶
Sie können Kosten innerhalb eines Kontos oder kontenübergreifend in einer Organisation zuordnen:
Zuordnung von Kosten innerhalb eines Kontos
Sie können Kosten innerhalb eines Kontos zuordnen, indem Sie die folgenden Ansichten im Schema ACCOUNT_USAGE abfragen:
Ansicht TAG_REFERENCES: Bezeichner für Objekte (z. B. Warehouses und Benutzer), die über Tags verfügen.
Ansicht WAREHOUSE_METERING_HISTORY: Bietet Credit-Nutzung für Warehouses.
Ansicht QUERY_ATTRIBUTION_HISTORY: Liefert die Computekosten für Abfragen. Die Kosten entsprechen der Credit-Nutzung des Warehouse für die Ausführung der Abfrage.
Weitere Informationen zur Verwendung dieser Ansicht finden Sie unter Allgemeine Informationen zur Ansicht QUERY_ATTRIBUTION_HISTORY.
Zuordnung von Kosten über Konten in einer Organisation
Innerhalb einer Organisation können Sie auch Kosten für Ressourcen zuordnen, die ausschließlich von einer einzelnen Abteilung verwendet werden, indem Sie Ansichten im Schema ORGANIZATION_USAGE aus dem Organisationskonto abfragen.
Bemerkung
Im Schema ORGANIZATION_USAGE ist die Ansicht TAG_REFERENCES nur im Konto der Organisation verfügbar.
Die Ansicht QUERY_ATTRIBUTION_HISTORY ist nur im Schema ACCOUNT_USAGE für ein Konto verfügbar. Es gibt kein organisationsweites Äquivalent für diese Ansicht.
In den nächsten Abschnitten wird erläutert, wie Sie die Kosten für einige der gängigen Kostenzuordnungsszenarien zuordnen:
Ressourcen, die von Anwendungen verwendet werden, die die Kosten verschiedenen Abteilungen zuordnen müssen¶
Die Beispiele in diesem Abschnitt berechnen die Kosten für eine oder mehrere Anwendungen, die von Snowflake betrieben werden.
Die Beispiele gehen davon aus, dass diese Anwendungen Abfrage-Tags setzen, die die Anwendung für alle ausgeführten Abfragen identifizieren. Um das Abfrage-Tag für Abfragen in einer Sitzung festzulegen, führen Sie den Befehl ALTER SESSION aus. Beispiel:
ALTER SESSION SET QUERY_TAG = 'COST_CENTER=finance';
Dadurch wird das Tag COST_CENTER=finance
mit allen nachfolgenden Abfragen verknüpft, die während der Sitzung ausgeführt werden.
Sie können dann das Abfrage-Tag verwenden, um die durch diese Abfragen entstandenen Kosten auf die entsprechenden Abteilungen zurückzuführen.
In den nächsten Abschnitten finden Sie Beispiele für die Anwendung dieses Ansatzes.
Berechnung der Kosten von Abfragen (ohne Leerlaufzeit) nach Abfrage-Tag
Berechnung der Kosten von Abfragen (einschließlich Leerlaufzeit) nach Abfrage-Tag
Berechnung der Kosten für Abfragen nach Abteilung¶
Das folgende Beispiel berechnet die Compute-Credits und die Credits, die für den Abfrage-Beschleunigungsdienst für die Finanzabteilung verwendet werden. Dies hängt davon ab, dass das Abfrage-Tag COST_CENTER=finance
auf die ursprünglich ausgeführten Abfragen angewendet wird.
Beachten Sie, dass die Kosten die Leerlaufzeit ausschließen.
SELECT
query_tag,
SUM(credits_attributed_compute) AS compute_credits,
SUM(credits_used_query_acceleration) AS qas
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ATTRIBUTION_HISTORY
WHERE query_tag = 'COST_CENTER=finance'
GROUP BY query_tag;
+---------------------+-----------------+------+
| QUERY_TAG | COMPUTE_CREDITS | QAS |
|---------------------+-----------------|------|
| COST_CENTER=finance | 0.00576115 | null |
+---------------------+-----------------+------+
Berechnung der Kosten von Abfragen (ohne Leerlaufzeit) nach Abfrage-Tag¶
Das folgende Beispiel berechnet die Kosten von Abfragen nach Abfrage-Tag und schließt Abfragen ohne Tags (als „untagged“ gekennzeichnet) ein.
SELECT
COALESCE(NULLIF(query_tag, ''), 'untagged') AS tag,
SUM(credits_attributed_compute) AS compute_credits,
SUM(credits_used_query_acceleration) AS qas
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ATTRIBUTION_HISTORY
WHERE start_time >= DATEADD(MONTH, -1, CURRENT_DATE)
GROUP BY tag
ORDER BY compute_credits DESC;
+-------------------------+-----------------+------+
| TAG | COMPUTE_CREDITS | QAS |
|-------------------------+-----------------+------+
| untagged | 3.623173449 | null |
| COST_CENTER=engineering | 0.531431948 | null |
|-------------------------+-----------------+------+
Berechnung der Kosten von Abfragen (einschließlich Leerlaufzeit) nach Abfrage-Tag¶
Im folgenden Beispiel wird die Leerlaufzeit, die nicht in den Kosten pro Abfrage enthalten ist, auf die Abteilungen im Verhältnis zu ihrer Nutzung des Warehouse verteilt.
WITH
wh_bill AS (
SELECT SUM(credits_used_compute) AS compute_credits
FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY
WHERE start_time >= DATE_TRUNC('MONTH', CURRENT_DATE)
AND start_time < CURRENT_DATE
),
tag_credits AS (
SELECT
COALESCE(NULLIF(query_tag, ''), 'untagged') AS tag,
SUM(credits_attributed_compute) AS credits
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ATTRIBUTION_HISTORY
WHERE start_time >= DATEADD(MONTH, -1, CURRENT_DATE)
GROUP BY tag
),
total_credit AS (
SELECT SUM(credits) AS sum_all_credits
FROM tag_credits
)
SELECT
tc.tag,
tc.credits / t.sum_all_credits * w.compute_credits AS attributed_credits
FROM tag_credits tc, total_credit t, wh_bill w
ORDER BY attributed_credits DESC;
+-------------------------+--------------------+
| TAG | ATTRIBUTED_CREDITS |
+-------------------------+--------------------|
| untagged | 9.020031304 |
| COST_CENTER=finance | 1.027742521 |
| COST_CENTER=engineering | 1.018755812 |
| COST_CENTER=marketing | 0.4801370376 |
+-------------------------+--------------------+
Kosten nach Tag anzeigen in Snowsight¶
Sie können Kosten zuordnen, indem Sie Berichte über die Verwendung von Ressourcen erstellen, die das cost_center
-Tag aufweisen. Sie können unter Snowsight auf diese Daten zugreifen.
Wechseln Sie zu einer Rolle, die Zugriff auf das ACCOUNT_USAGE-Schema hat.
Navigieren Sie zu Admin » Cost Management.
Wählen Sie Consumption aus.
Wählen Sie in der Dropdown-Liste Tags das Tag
cost_center
aus.Um sich auf eine bestimmte Kostenstelle zu fokussieren, wählen Sie einen Wert aus der Liste der Werte des Tags aus.
Wählen Sie Apply aus.
Weitere Informationen zum Filtern in Snowsight finden Sie unter Nach Tag filtern.
Allgemeine Informationen zur Ansicht QUERY_ATTRIBUTION_HISTORY¶
Sie können die Ansicht QUERY_ATTRIBUTION_HISTORY verwenden, um die Kosten auf der Grundlage von Abfragen zu zuzuordnen. Die Kosten entsprechen der Credit-Nutzung des Warehouse für die Ausführung der Abfrage. Diese Kosten beinhalten keine andere Credit-Nutzung, die durch die Ausführung der Abfrage entsteht. Zum Beispiel sind die folgenden Kosten nicht in den Abfragekosten enthalten:
Datentransferkosten
Speicherkosten
Kosten für Clouddienst
Kosten für serverlose Features
Kosten für Token, die von AI-Diensten verarbeitet werden
Bei Abfragen, die gleichzeitig ausgeführt werden, werden die Kosten des Warehouse den einzelnen Abfragen auf der Grundlage des gewichteten Durchschnitts ihres Ressourcenverbrauchs während eines bestimmten Zeitintervalls zugewiesen.
Die Kosten pro Abfrage beinhalten nicht die Leerlaufzeit des Warehouses. Die Leerlaufzeit ist ein Zeitraum, in dem keine Abfragen im Warehouse laufen und kann auf Warehouse-Ebene gemessen werden.
Weitere Beispiele für Abfragen¶
In den nächsten Abschnitten finden Sie weitere Abfragen, die Sie für die Kostenzuordnung verwenden können:
Gruppieren ähnlicher Abfragen¶
Für wiederkehrende oder ähnliche Abfragen verwenden Sie query_hash
oder query_parameterized_hash
, um die Kosten nach Abfrage zu gruppieren.
Um die teuersten wiederkehrenden Abfragen für den aktuellen Monat zu finden, führen Sie die folgende Anweisung aus:
SELECT query_parameterized_hash,
COUNT(*) AS query_count,
SUM(credits_attributed_compute) AS total_credits
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ATTRIBUTION_HISTORY
WHERE start_time >= DATE_TRUNC('MONTH', CURRENT_DATE)
AND start_time < CURRENT_DATE
GROUP BY query_parameterized_hash
ORDER BY total_credits DESC
LIMIT 20;
Eine weitere Abfrage, die auf der Abfrage-ID basiert, finden Sie unter Beispiele.
Zuordnung der Kosten von hierarchischen Abfragen¶
Bei gespeicherten Prozeduren, die mehrere hierarchische Abfragen durchführen, können Sie die zugewiesenen Abfragekosten der Prozedur berechnen, indem Sie die Stammabfrage ID für die Prozedur verwenden.
Um die Stammabfrage-ID für eine gespeicherte Prozedur zu finden, verwenden Sie die Ansicht ACCESS_HISTORY. Um zum Beispiel die Stammabfrage-ID für eine gespeicherte Prozedur zu finden, stellen Sie
query_id
ein und führen Sie die folgenden Anweisungen aus:SET query_id = '<query_id>'; SELECT query_id, parent_query_id, root_query_id, direct_objects_accessed FROM SNOWFLAKE.ACCOUNT_USAGE.ACCESS_HISTORY WHERE query_id = $query_id;
Weitere Informationen dazu finden Sie unter Beispiel: Vorgängerabfragen mit gespeicherten Prozeduren.
Um die Summe der Abfragekosten für die gesamte Prozedur zu summieren, ersetzen Sie
<root_query_id>
und führen Sie die folgenden Anweisungen aus:SET query_id = '<root_query_id>'; SELECT SUM(credits_attributed_compute) AS total_attributed_credits FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ATTRIBUTION_HISTORY WHERE (root_query_id = $query_id OR query_id = $query_id);