Gestion des tables dynamiques Snowflake avec Python¶

Vous pouvez utiliser Python pour gĂ©rer les tables dynamiques Snowflake, qui sont un nouveau type de table pour les pipelines de traitement continu. Les tables dynamiques matĂ©rialisent les rĂ©sultats d’une requĂȘte spĂ©cifique. Pour un aperçu de cette fonctionnalitĂ©, voir Tables dynamiques.

Les Snowflake Python APIs reprĂ©sentent des tables dynamiques avec deux types distincts :

  • DynamicTable : expose les propriĂ©tĂ©s d’une table dynamique telles que son nom, sa latence cible, son entrepĂŽt et son instruction de requĂȘte.

  • DynamicTableResource : expose les mĂ©thodes que vous pouvez utiliser pour extraire un objet DynamicTable correspondant, suspendre et reprendre la table dynamique, et supprimer la table dynamique.

Conditions préalables¶

Les exemples de cette rubrique supposent que vous ayez ajouté le code nécessaire pour vous connecter à Snowflake et créer un objet Root à partir duquel utiliser les Snowflake Python APIs.

Par exemple, le code suivant utilise les paramÚtres de connexion définis dans un fichier de configuration pour créer une connexion à Snowflake.

from snowflake.core import Root
from snowflake.snowpark import Session

session = Session.builder.config("connection_name", "myconnection").create()
root = Root(session)
Copy

En utilisant l’objet Session obtenu, le code crĂ©e un objet Root pour utiliser les types et les mĂ©thodes de l’API. Pour plus d’informations, voir Connexion Ă  Snowflake avec Snowflake Python APIs.

CrĂ©ation d’une table dynamique¶

Pour crĂ©er une table dynamique, il faut d’abord crĂ©er un objet DynamicTable, puis crĂ©er un objet DynamicTableCollection Ă  partir de l’objet Root de l’API. En utilisant DynamicTableCollection.create, ajoutez la nouvelle table dynamique Ă  Snowflake.

Le code dans l’exemple suivant crĂ©e un objet DynamicTable qui reprĂ©sente une table dynamique nommĂ©e my_dynamic_table dans la base de donnĂ©es my_db et le schĂ©ma my_schema, avec les options minimales requises spĂ©cifiĂ©es :

from snowflake.core.dynamic_table import DynamicTable, DownstreamLag

my_dt = DynamicTable(
  name='my_dynamic_table',
  target_lag=DownstreamLag(),
  warehouse='my_wh',
  query='SELECT * FROM t',
)
dynamic_tables = root.databases['my_db'].schemas['my_schema'].dynamic_tables
dynamic_tables.create(my_dt)
Copy

Ce code crée une variable DynamicTableCollection dynamic_tables et utilise DynamicTableCollection.create pour créer une nouvelle table dynamique dans Snowflake.

Le code de l’exemple suivant crĂ©e un objet DynamicTable qui reprĂ©sente une table dynamique nommĂ©e my_dynamic_table2 dans la base de donnĂ©es my_db et le schĂ©ma my_schema avec toutes les options actuellement possibles spĂ©cifiĂ©es :

from snowflake.core.dynamic_table import DynamicTable, UserDefinedLag

root.databases['my_db'].schemas['my_schema'].dynamic_tables.create(
  DynamicTable(
      name='my_dynamic_table2',
      kind='PERMANENT',
      target_lag=UserDefinedLag(seconds=60),
      warehouse='my_wh',
      query='SELECT * FROM t',
      refresh_mode='FULL',
      initialize='ON_SCHEDULE',
      cluster_by=['id > 1'],
      comment='test table',
      data_retention_time_in_days=7,
      max_data_extension_time_in_days=7,
  )
)
Copy

Clonage d’une table dynamique¶

Le code de l’exemple suivant crĂ©e une nouvelle table dynamique nommĂ©e my_dynamic_table2 avec les mĂȘmes dĂ©finitions de colonnes et toutes les donnĂ©es existantes de la table dynamique source my_dynamic_table dans la base de donnĂ©es my_db et le schĂ©ma my_schema :

Note

Cette opĂ©ration de clonage utilise l’objet DynamicTableClone, qui inclut l’optionnel target_lag et les paramĂštres warehouse et ne prend actuellement pas en charge d’autres paramĂštres.

from snowflake.core.dynamic_table import DynamicTableClone

root.databases['my_db'].schemas['my_schema'].dynamic_tables.create(
  DynamicTableClone(
      name='my_dynamic_table2',
      warehouse='my_wh2',
  ),
  clone_table='my_dynamic_table',
)
Copy

Pour plus d’informations sur cette fonctionnalitĂ©, voir CREATE DYNAMIC TABLE 
 CLONE.

Obtenir les dĂ©tails d’une table dynamique¶

Vous pouvez obtenir des informations sur une table dynamique en appelant la méthode DynamicTableResource.fetch, qui renvoie un objet DynamicTable.

Le code de l’exemple suivant obtient des informations sur une table dynamique nommĂ©e my_dynamic_table dans la base de donnĂ©es my_db et le schĂ©ma my_schema :

dynamic_table = root.databases['my_db'].schemas['my_schema'].dynamic_tables['my_dynamic_table']
dt_details = dynamic_table.fetch()
print(dt_details.to_dict())
Copy

Affichage de tables dynamiques¶

Vous pouvez rĂ©pertorier des tables dynamiques Ă  l’aide de la mĂ©thode DynamicTableCollection.iter qui renvoie un itĂ©rateur PagedIter d’objets DynamicTable.

Le code de l’exemple suivant rĂ©pertorie les tables dynamiques dont le nom commence par le texte my dans la base de donnĂ©es my_db et le schĂ©ma my_schema, puis imprime le nom de chacun :

from snowflake.core.dynamic_table import DynamicTableCollection

dt_list = root.databases['my_db'].schemas['my_schema'].dynamic_tables.iter(like='my%')
for dt_obj in dt_list:
  print(dt_obj.name)
Copy

Échanges des noms de tables dynamiques¶

Vous pouvez Ă©changer le nom d’une table dynamique avec celui d’une autre table dynamique en une seule transaction Ă  l’aide de la mĂ©thode DynamicTableResource.swap_with. Pour plus d’informations, voir la description du paramĂštre SWAP WITH dans ALTERDYNAMICTABLE.

Le code de l’exemple suivant Ă©change my_dynamic_table avec other_dynamic_table dans la mĂȘme base de donnĂ©es et le mĂȘme schĂ©ma :

my_table_res = root.databases['my_db'].schemas['my_schema'].tables['my_dynamic_table']
my_table_res.swap_with('other_dynamic_table')
Copy

ExĂ©cution d’opĂ©rations de table dynamiques¶

Vous pouvez effectuer des opĂ©rations de table dynamiques courantes, telles que l’actualisation, la suspension et la reprise d’une table dynamique, avec un objet DynamicTableResource.

Pour plus d’informations sur ces opĂ©rations de tables dynamiques, voir Commandes de tables, de vues et de sĂ©quences dans la rĂ©fĂ©rence de la commande SQL.

Pour illustrer certaines opĂ©rations que vous pouvez effectuer avec une ressource de table dynamique, le code de l’exemple suivant effectue les opĂ©rations suivantes :

  1. Obtient l’objet ressource de la table dynamique my_dynamic_table dans la base de donnĂ©es my_db et le schĂ©ma my_schema.

  2. Actualise la table dynamique.

  3. Suspend la table dynamique.

  4. Reprend la table dynamique.

  5. Supprime la table dynamique.

  6. Restaure la version la plus récente de la table dynamique supprimée.

my_dynamic_table_res = root.databases["my_db"].schemas["my_schema"].dynamic_tables["my_dynamic_table"]

my_dynamic_table_res.refresh()
my_dynamic_table_res.suspend()
my_dynamic_table_res.resume()
my_dynamic_table_res.drop()
my_dynamic_table_res.undrop()
Copy