Attribution de coûts¶
Une organisation peut répartir le coût de l’utilisation de Snowflake entre des unités logiques au sein de l’organisation (par exemple, entre différents départements, environnements ou projets). Ce modèle de refacturation est utile à des fins comptables et permet d’identifier les domaines de l’organisation qui pourraient bénéficier de contrôles et d’optimisations susceptibles de réduire les coûts.
Pour attribuer les coûts à différents groupes tels que les départements ou les projets, utilisez l’approche recommandée suivante :
Utilisez les balises d’objet pour associer des ressources et des utilisateurs à des départements ou à des projets.
Utilisez les balises de requête pour associer des requêtes individuelles à des départements ou à des projets lorsque les requêtes sont effectuées par la même application pour le compte d’utilisateurs appartenant à plusieurs départements.
Types de scénarios d’attribution des coûts¶
Les scénarios d’attribution des coûts suivants sont les plus couramment rencontrés. Dans ces scénarios, les entrepôts sont utilisés comme exemple de ressource engendrant des coûts.
Ressources utilisées exclusivement par un seul centre de coûts ou un seul département : L’utilisation de balises d’objet pour associer des entrepôts à un département en est un exemple. Vous pouvez utiliser ces balises d’objet pour attribuer les coûts encourus par ces entrepôts à l’ensemble de ce département.
Ressources partagées par des utilisateurs de plusieurs départements : Un entrepôt partagé par des utilisateurs de différents départements en est un exemple. Dans ce casse-tête, vous utilisez des balises d’objet pour associer chaque utilisateur à un département. Les coûts des requêtes sont attribués aux utilisateurs. À l’aide des balises d’objet attribuées aux utilisateurs, vous pouvez ventiler les coûts par département.
Applications ou flux de travail partagés par des utilisateurs de différents services : Une application qui émet des requêtes pour le compte de ses utilisateurs en est un exemple. Dans ce casse-tête, chaque requête exécutée par l’application se voit attribuer une balise de requête qui identifie l’équipe ou le centre de coûts de l’utilisateur au nom duquel la requête est effectuée.
Les sections suivantes expliquent comment établir des balises d’objet dans vos comptes et fournissent les détails de chacun de ces scénarios d’attribution des coûts.
Vue du coût par balise en SQL¶
Vous pouvez attribuer des coûts au sein d’un compte ou entre les comptes d’une organisation :
Attribuer des coûts au sein d’un compte
Vous pouvez attribuer des coûts à un compte en interrogeant les vues suivantes du schéma ACCOUNT_USAGE:
Vue TAG_REFERENCES: Identifie les objets (par exemple, les entrepôts et les utilisateurs) qui ont des balises.
Vue WAREHOUSE_METERING_HISTORY: Assure l’utilisation du crédit pour les entrepôts.
Vue QUERY_ATTRIBUTION_HISTORY: Fournit les coûts de calcul des requêtes. Le coût par requête correspond à l’utilisation du crédit d’entrepôt pour l’exécution de la requête.
Pour plus d’informations sur l’utilisation de cette vue, voir À propos de la vue QUERY_ATTRIBUTION_HISTORY.
Attribution des coûts entre les comptes d’une organisation
Au sein d’une organisation, vous pouvez également attribuer des coûts à des ressources utilisées exclusivement par un seul département en interrogeant les vues du schéma ORGANIZATION_USAGE à partir du compte de l’organisation.
Note
Dans le schéma ORGANIZATION_USAGE, la vue TAG_REFERENCES n’est disponible que dans le compte de l’organisation.
La vue QUERY_ATTRIBUTION_HISTORY n’est disponible que dans le schéma ACCOUNT_USAGE pour un compte. Il n’existe pas d’équivalent de cette vue à l’échelle de l’organisation.
Les sections suivantes expliquent comment attribuer les coûts pour certains des scénarios d’attribution des coûts les plus courants:
Ressources partagées par des utilisateurs de différents départements
Ressources utilisées par les applications qui doivent attribuer les coûts aux différents services
Ressources utilisées par les applications qui doivent attribuer les coûts aux différents services¶
Les exemples de cette section calculent les coûts d’une ou plusieurs applications alimentées par Snowflake.
Les exemples supposent que ces applications établissent des paramètres de requête qui identifient l’application pour toutes les requêtes exécutées. Pour définir la balise de requête pour les requêtes d’une session, exécutez la commande ALTER SESSION. Par exemple :
ALTER SESSION SET QUERY_TAG = 'COST_CENTER=finance';
La balise COST_CENTER=finance
est ainsi associée à toutes les requêtes ultérieures exécutées au cours de la session.
Vous pouvez ensuite utiliser la balise de requête pour tracer le coût de ces requêtes vers les services concernés.
Les sections suivantes présentent des exemples d’utilisation de cette approche.
Calcul du coût des requêtes (à l’exclusion du temps d’inactivité) par balise de requête
Calcul du coût des requêtes (y compris le temps d’inactivité) par balise de requête
Calcul du coût des requêtes par département¶
L’exemple suivant calcule les crédits de calcul et les crédits utilisés pour la Query Acceleration Service pour le service des finances. Cela dépend de la balise de requête COST_CENTER=finance
appliquée aux requêtes originales qui ont été exécutées.
Notez que les coûts excluent le temps d’inactivité.
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 |
+---------------------+-----------------+------+
Calcul du coût des requêtes (à l’exclusion du temps d’inactivité) par balise de requête¶
L’exemple suivant calcule le coût des requêtes par balise de requête et inclut les requêtes sans balise (identifiées comme untagged).
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 |
|-------------------------+-----------------+------+
Calcul du coût des requêtes (y compris le temps d’inactivité) par balise de requête¶
L’exemple suivant répartit le temps d’inactivité qui n’est pas pris en compte dans le coût par requête entre les départements, proportionnellement à leur utilisation de l’entrepôt.
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 |
+-------------------------+--------------------+
Vue du coût par balise en Snowsight¶
Vous pouvez attribuer des coûts en rendant compte de l’utilisation des ressources qui ont la balise cost_center
. Vous pouvez accéder à ces données sur le site Snowsight.
Passer à un rôle qui a accès au schéma ACCOUNT_USAGE.
Accédez à Admin » Cost Management.
Sélectionnez Consumption.
Dans la liste déroulante Tags, sélectionnez la balise
cost_center
.Pour se concentrer sur un centre de coûts spécifique, sélectionnez une valeur dans la liste des valeurs de la balise.
Sélectionnez Apply.
Pour plus de détails sur le filtrage dans Snowsight, voir Filtrage par balise.
À propos de la vue QUERY_ATTRIBUTION_HISTORY¶
Vous pouvez utiliser Vue QUERY_ATTRIBUTION_HISTORY pour attribuer des coûts en fonction des requêtes. Le coût par requête correspond à l’utilisation du crédit d’entrepôt pour l’exécution de la requête. Ce coût n’inclut pas toute autre utilisation de crédit résultant de l’exécution de la requête. Par exemple, les éléments suivants ne sont pas inclus dans le coût de la requête :
Coûts du transfert des données
Coûts de stockage
Coûts des services Cloud
Coûts des fonctionnalités sans serveur
Coûts des jetons traités par les services AI
Pour les requêtes exécutées simultanément, le coût de l’entrepôt est attribué aux requêtes individuelles en fonction de la moyenne pondérée de leur consommation de ressources au cours d’un intervalle de temps donné.
Le coût par requête n’inclut pas le temps d’inactivité de l’entrepôt. Le temps d’inactivité est une période pendant laquelle aucune requête ne s’exécute dans l’entrepôt et ne peut être mesurée au niveau de l’entrepôt.
Autres exemples de requêtes¶
Les sections suivantes présentent des requêtes supplémentaires que vous pouvez utiliser pour l’attribution des coûts :
Groupement de requêtes similaires¶
Pour les requêtes récurrentes ou similaires, utilisez query_hash
ou query_parameterized_hash
pour regrouper les coûts par requête.
Pour trouver les requêtes récurrentes les plus coûteuses pour le mois en cours, exécutez l’instruction suivante :
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;
Pour une requête supplémentaire basée sur l’ID de requête, voir Exemples.
Attribution des coûts des requêtes hiérarchiques¶
Pour les procédures stockées qui émettent plusieurs requêtes hiérarchiques, vous pouvez calculer les coûts de requête attribués à la procédure en utilisant l’ID de requête racine pour la procédure.
Pour trouver l’ID de requête racine pour une procédure stockée, utilisez Vue ACCESS_HISTORY. Par exemple, pour trouver l’ID de requête racine pour une procédure stockée, définissez
query_id
et exécutez les instructions suivantes :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;
Pour plus d’informations, voir Exemple : requêtes ancêtres à l’aide de procédures stockées.
Pour additionner les coûts de la requête pour l’ensemble de la procédure, remplacez
<root_query_id>
et exécutez les instructions suivantes :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);