Understanding costs for dynamic tables¶
Cette rubrique donne un aperçu des coûts de calcul et de stockage associés aux tables dynamiques. Pour obtenir des informations générales sur les coûts de calcul de Snowflake, consultez Comprendre le coût général.
Compute costs¶
Deux coûts de calcul sont associés aux tables dynamiques : les entrepôts virtuels et le calcul des services cloud.
Les tables dynamiques nécessitent au moins un entrepôt virtuel pour effectuer les actualisations. Vous pouvez éventuellement attribuer un deuxième entrepôt si vous souhaitez séparer les coûts de calcul pour différentes opérations. Pour plus d’informations, voir Comprendre l’utilisation de l’entrepôt pour les tables dynamiques.
Dynamic table refreshes consume compute credits, and their frequency is determined by the configured target lag: lower target lag values trigger more frequent refreshes and therefore higher compute costs.
Dynamic tables also require Cloud Services compute to identify changes in underlying base objects and determine whether a virtual warehouse must run. If Cloud Services compute finds no changes, no warehouse compute credits are consumed because there’s no new data to refresh. If changes do exist, even if the dynamic table query filters them, the virtual warehouse consumes credits because the dynamic table refreshes to evaluate whether those changes apply.
Si les entrepôts virtuels associés sont suspendus et que le calcul des services Cloud ne détecte aucune modification dans les tables de base, les entrepôts restent suspendus et les tables dynamiques ne consomment aucun crédit. Lorsque le calcul des services Cloud identifie des modifications dans les tables de base, l’entrepôt approprié reprend automatiquement. Si les modifications prennent en charge l’actualisation incrémentielle, la table dynamique s’actualise à l’aide du paramètre WAREHOUSE. Si une réinitialisation est nécessaire (par exemple, en raison d’une modification du schéma de la table de base), la table dynamique utilise la fonction INITIALIZATION_WAREHOUSE pour effectuer une réinitialisation complète. Pour plus d’informations sur la suspension automatique des tables dynamiques, consultez Suspension automatique de tables dynamiques.
Vérifier votre consommation de crédits d’entrepôts virtuels¶
Pour vérifier si les actualisations de vos tables dynamiques ont consommé des crédits d’entrepôts virtuels, utilisez l’onglet Refresh History dans l’Snowsight :
Dans le menu de navigation, sélectionnez Transformation » Dynamic tables.
Sélectionnez votre table dynamique, puis sélectionnez l’onglet Refresh History.
Pour voir les actualisations qui ont utilisé l’entrepôt pour se mettre à jour, cochez la case Warehouse used only.
Astuce
To better understand costs related to your dynamic table pipelines, Snowflake recommends that you test dynamic tables by using dedicated warehouses. This way, you can isolate the virtual warehouse consumption that is attributed to dynamic tables. You can move your dynamic tables to a shared warehouse after you establish a cost baseline.
Pour plus d’informations, voir Comprendre l’utilisation de l’entrepôt pour les tables dynamiques.
Coût de calcul des contraintes d’immuabilité¶
If you use the IMMUTABLE WHERE constraint, Snowflake recomputes only the rows that don’t match the immutability condition, which helps reduce reinitialization costs. This is useful in situations where reinitialization can occur, such as the following scenarios:
Recréation de tableaux ou de vues en amont.
Modifications des politiques de gouvernance des données en amont.
Basculement vers une région secondaire dans un groupe de basculement.
Using the IMMUTABLE WHERE constraint can help you reduce the cost of incremental and full refresh because the constraint ignores changes and data that match its predicate.
Adding immutability constraints to a dynamic table doesn’t trigger extra computation, but removing them does because it causes reinitialization on the next refresh. Modifying the predicate in an IMMUTABLE WHERE constraint might trigger reinitialization depending on whether Snowflake can determine the rows that are returned with the original condition are still returned with the new condition.
Par exemple, les modifications suivantes ne déclenchent pas de réinitialisation :
De
(ts < CURRENT_TIMESTAMP() - INTERVAL '2 jours')dans(ts < CURRENT_TIMESTAMP() - INTERVAL '1 jours')De
(année < = 2023)dans(année < = 2024)
Les modifications suivantes déclenchent la réinitialisation :
De
(ts < '2025-01-02')dans(ts < '2025-01-01')De
(année < 2024)dans(mois < 10)
Coût de stockage¶
Dynamic tables require storage to store the materialized results. Similar to regular tables, you might incur additional storage cost for Time Travel, fail-safe storage, and cloning features.
Dynamic Apache Iceberg™ tables don’t incur Snowflake storage costs. For more information, see Facturation.
Cette section aborde les considérations suivantes en matière de stockage pour les tables dynamiques :
Pour des informations détaillées sur la manière dont ce stockage engendre des coûts, voir Comprendre le coût de stockage et Remarques relatives au stockage de données.
Stockage de Time Travel et de Fail-safe¶
With Snowflake Time Travel, you can access and query historical versions of dynamic tables at specific points in time, which can help provide insights into historical trends, changes, and anomalies in your data.
Des actualisations fréquentes peuvent augmenter l’accumulation des données Time Travel, ce qui accroît l’utilisation de votre stockage global. Pour plus d’informations, voir Compréhension et utilisation de la fonction Time Travel.
Les fonctions Fail-safe protègent vos tables dynamiques contre la perte ou la corruption de données. En fonction de la période Fail-safe configurée, des frais de stockage supplémentaires peuvent être appliqués.
Réplication des tables dynamiques¶
Dynamic tables support cross-account, cross-region replication, which lets you copy data from a primary database to a secondary database for either disaster recovery or data sharing. It can serve as either a failover preparation strategy for disaster recovery or as a means of sharing data across deployments for read-only purposes. Using replication with dynamic tables is subject to replication costs. For more information, see Réplication et tables dynamiques.
Suspension de tables dynamiques¶
Suspended dynamic tables don’t incur additional costs beyond standard storage fees and don’t consume compute resources. If you have ongoing maintenance tasks or scheduled jobs that interact with the suspended table, your dynamic tables might consume compute resources.
Tables dynamiques transitoires¶
Snowflake supports transient dynamic tables, similar to regular tables, that persist until explicitly dropped, and are available to all users with the appropriate privileges without a fail-safe period. Transient dynamic tables are best used for transitory data that doesn’t need the same level of data protection and recovery that permanent tables provide. Using them helps you save on storage charges for fail-safe storage.
Stockage supplémentaire pour les opérations d’actualisation incrémentielle¶
For incremental refresh operations, dynamic tables maintain an additional internal metadata column for identifying each row within the table. Internal row identifiers consume a constant amount of storage per row and increase storage cost linearly to the number of rows in the table, independent of the number of columns.
Pour les tables comportant très peu de colonnes, l’augmentation du stockage par rapport à une table CTAS équivalente peut être significative, voire dominante. Dans les tables dynamiques plus volumineuses, cet effet est moins prononcé.
Coût de l’actualisation de la planification¶
The schedule at which a dynamic table refreshes, whether full or incremental, has an effect on its overall cost. This section discusses the factors that you should consider when you decide on a refresh schedule, with the assumption that every refresh is non-empty:
Note
Les actualisations sont relativement peu coûteuses si les sources n’ont pas changé. Pour plus d’informations, voir Compute costs (dans ce chapitre).
Planification d’actualisation complète¶
The cost of a full refresh typically depends on how much data your dynamic table scans and how often it refreshes. To save on costs, you can refresh your dynamic tables only when you need to; for example, you can suspend your dynamic tables outside of business hours. For precise timing control, set the downstream target lag for your dynamic tables and use manual refresh from a task to automate your custom schedules.
Planification d’actualisation incrémentielle¶
The cost of an incremental refresh is typically proportional to the volume of changes in the source objects, plus some fixed overhead.
If the overhead is low, you can set a high refresh frequency without much downside. This means that you can refresh often for best results.
For instance, a simple SELECT ... FROM ... WHERE dynamic table only processes changed rows between refreshes, which has minimal
overhead and the dynamic table can run frequently at low added cost.
If the overhead is high, you must balance the credit consumption of high refresh frequency with the business benefits of freshness. For example, in a dynamic table with a join, you must join the changes in one table with the other table. No matter how small the set of changes, this join usually involves a minimum cost for you to execute. If this overhead is significant, it can accumulate as the refresh frequency increases.