Gestion des bases de données, schémas, tables et vues Snowflake avec Python¶

Vous pouvez utiliser Python pour gĂ©rer les bases de donnĂ©es, schĂ©mas, tables et vues Snowflake. Pour plus d’informations sur la gestion et l’utilisation des donnĂ©es dans Snowflake, voir Bases de donnĂ©es, tables et vues - Vue d’ensemble.

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.

Gestion des bases de données¶

Vous pouvez gĂ©rer des bases de donnĂ©es dans Snowflake. Les Snowflake Python APIs reprĂ©sentent des bases de donnĂ©es avec deux types distincts :

  • Database : expose les propriĂ©tĂ©s d’une base de donnĂ©es telles que son nom.

  • DatabaseResource : expose des mĂ©thodes que vous pouvez utiliser pour extraire un objet Database correspondant et pour supprimer la base de donnĂ©es.

Sujets

CrĂ©ation d’une base de donnĂ©es¶

Vous pouvez créer une base de données en appelant la méthode DatabaseCollection.create et en lui transmettant un objet Database représentant la base de données que vous souhaitez créer. Pour créer une base de données, commencez par créer un objet Database qui spécifie le nom de la base de données.

Le code de l’exemple suivant crĂ©e un objet Database reprĂ©sentant une base de donnĂ©es nommĂ©e my_db puis crĂ©e la base de donnĂ©es en transmettant l’objet Database Ă  la mĂ©thode DatabaseCollection.create :

from snowflake.core.database import Database

my_db = Database(name="my_db")
root.databases.create(my_db)
Copy

Obtention de détails de la base de données¶

Vous pouvez obtenir des informations sur une base de données en appelant la méthode DatabaseResource.fetch, qui renvoie un objet Database.

Le code de l’exemple suivant permet d’obtenir des informations sur une base de donnĂ©es nommĂ©e my_db :

my_db = root.databases["my_db"].fetch()
print(my_db.to_dict())
Copy

Répertorier des bases de données¶

Vous pouvez répertorier les bases de données en utilisant la méthode iter, qui renvoie un itérateur PagedIter.

Le code de l’exemple suivant rĂ©pertorie les bases de donnĂ©es dont le nom commence par my :

databases = root.databases.iter(like="my%")
for database in databases:
  print(database.name)
Copy

Suppression ou restauration d’une base de donnĂ©es¶

Vous pouvez supprimer une base de donnĂ©es Ă  l’aide de la mĂ©thode DatabaseResource.drop ou restaurer une base de donnĂ©es Ă  l’aide de la mĂ©thode DatabaseResource.undrop.

Pour illustrer ces opĂ©rations, le code de l’exemple suivant supprime puis restaure la version la plus rĂ©cente de la base de donnĂ©es my_db :

my_db_res = root.databases["my_db"]
my_db_res.drop()
my_db_res.undrop()
Copy

Gestion des schémas¶

Vous pouvez gérer les schémas dans Snowflake. Un schéma est un objet au niveau de la base de données. Lorsque vous créez ou référencez un schéma, vous le faites dans le contexte de sa base de données.

Les Snowflake Python APIs reprĂ©sentent des schĂ©mas avec deux types distincts :

  • Schema : expose les propriĂ©tĂ©s d’un schĂ©ma telles que son nom.

  • SchemaResource : expose des mĂ©thodes que vous pouvez utiliser pour extraire un objet Schema correspondant et pour supprimer le schĂ©ma.

Sujets

CrĂ©ation d’un schĂ©ma¶

Pour créer un schéma, commencez par créer un objet Schema qui spécifie le nom du schéma.

Le code de l’exemple suivant crĂ©e un objet Schema reprĂ©sentant un schĂ©ma nommĂ© my_schema :

from snowflake.core.schema import Schema

my_schema = Schema(name="my_schema")
root.databases["my_db"].schemas.create(my_schema)
Copy

Le code crĂ©e ensuite le schĂ©ma dans la base de donnĂ©es my_db en transmettant l’objet Schema Ă  la mĂ©thode SchemaCollection.create.

Obtention de détails sur le schéma¶

Vous pouvez obtenir des informations sur un schéma en appelant la méthode SchemaResource.fetch, qui renvoie un objet Schema.

Le code de l’exemple suivant permet d’obtenir un objet Schema qui reprĂ©sente le schĂ©ma my_schema :

my_schema = root.databases["my_db"].schemas["my_schema"].fetch()
print(my_schema.to_dict())
Copy

Répertorier les schémas¶

Vous pouvez rĂ©pertorier les schĂ©mas d’une base de donnĂ©es spĂ©cifiĂ©e via la mĂ©thode iter. La mĂ©thode renvoie un itĂ©rateur PagedIter d’objets Schema.

Le code de l’exemple suivant rĂ©pertorie les noms des schĂ©mas de la base de donnĂ©es my_db :

schema_list = root.databases["my_db"].schemas.iter()
for schema_obj in schema_list:
  print(schema_obj.name)
Copy

Suppression ou restauration d’un schĂ©ma¶

Vous pouvez supprimer un schĂ©ma Ă  l’aide de la mĂ©thode SchemaResource.drop ou restaurer un schĂ©ma Ă  l’aide de la mĂ©thode SchemaResource.undrop.

Pour illustrer ces opĂ©rations, le code de l’exemple suivant supprime puis restaure la version la plus rĂ©cente du schĂ©ma my_schema :

my_schema_res = root.databases["my_db"].schemas["my_schema"]
my_schema_res.drop()
my_schema_res.undrop()
Copy

Gestion des tables standards¶

Vous pouvez gérer des tables standards dans Snowflake. Une table est un objet au niveau du schéma. Lorsque vous créez ou référencez une table, vous le faites dans le contexte de son schéma.

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

  • Table : expose les propriĂ©tĂ©s d’une table telles que son nom et ses colonnes.

  • TableResource : expose des mĂ©thodes que vous pouvez utiliser pour extraire un objet Table correspondant, mettre Ă  jour les propriĂ©tĂ©s de la table et supprimer la table.

Sujets

CrĂ©ation d’une table¶

Pour créer une table, commencez par créer un objet Table qui spécifie le nom de la table, les noms de colonne et les types de données des colonnes.

Le code de l’exemple suivant crĂ©e un objet Table reprĂ©sentant une table nommĂ©e my_table avec les colonnes spĂ©cifiĂ©es :

from snowflake.core.table import Table, TableColumn

my_table = Table(
  name="my_table",
  columns=[TableColumn(name="c1", datatype="int", nullable=False),
           TableColumn(name="c2", datatype="string")]
)
root.databases["my_db"].schemas["my_schema"].tables.create(my_table)
Copy

Le code crĂ©e ensuite la table dans la base de donnĂ©es my_db et le schĂ©ma my_schema en transmettant l’objet Table Ă  la mĂ©thode TableCollection.create.

Obtention des dĂ©tails d’une table¶

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

Le code de l’exemple suivant permet d’obtenir des informations sur une table nommĂ©e my_table :

my_table = root.databases["my_db"].schemas["my_schema"].tables["my_table"].fetch()
print(my_table.to_dict())
Copy

CrĂ©ation ou modification d’une table¶

Vous pouvez dĂ©finir les propriĂ©tĂ©s d’un objet Table et le transmettre Ă  la mĂ©thode TableResource.create_or_alter pour crĂ©er une table si elle n’existe pas, ou la modifier selon la dĂ©finition de la table si elle existe. Le comportement de create_or_alter est censĂ© ĂȘtre idempotent, ce qui signifie que l’objet de table rĂ©sultant sera le mĂȘme, que la table existe ou non avant l’appel de la mĂ©thode.

Note

La mĂ©thode create_or_alter utilise des valeurs par dĂ©faut pour toute propriĂ©tĂ© de table que vous ne dĂ©finissez pas explicitement. Par exemple, si vous ne dĂ©finissez pas data_retention_time_in_days, sa valeur par dĂ©faut est None mĂȘme si la table existait auparavant avec une valeur diffĂ©rente.

Le code de l’exemple suivant ajoute une nouvelle colonne nommĂ©e c3 de type de donnĂ©es int Ă  la table my_table, puis modifie la table dans Snowflake :

from snowflake.core.table import PrimaryKey, TableColumn

my_table = root.databases["my_db"].schemas["my_schema"].tables["my_table"].fetch()
my_table.columns.append(TableColumn(name="c3", datatype="int", nullable=False, constraints=[PrimaryKey()]))

my_table_res = root.databases["my_db"].schemas["my_schema"].tables["my_table"]
my_table_res.create_or_alter(my_table)
Copy

Répertorier les tables¶

Vous pouvez rĂ©pertorier les tables d’un schĂ©ma spĂ©cifiĂ© en utilisant la mĂ©thode iter, qui renvoie un itĂ©rateur PagedIter d’objets Table.

Le code de l’exemple suivant rĂ©pertorie les tables dont le nom commence par my :

tables = root.databases["my_db"].schemas["my_schema"].tables.iter(like="my%")
for table_obj in tables:
  print(table_obj.name)
Copy

Échange de noms de tables¶

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

Le code de l’exemple suivant Ă©change my_table avec other_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_table"]
my_table_res.swap_with("other_table")
Copy

Le code de l’exemple suivant Ă©change my_table (dans la base de donnĂ©es my_db et le schĂ©ma my_schema) avec other_table (dans la base de donnĂ©es other_db et le schĂ©ma other_schema) :

my_table_res = root.databases["my_db"].schemas["my_schema"].tables["my_table"]
my_table_res.swap_with(to_swap_table_name="other_table", target_database="other_db", target_schema="other_schema")
Copy

Effectuer des opérations sur les tables¶

Vous pouvez effectuer des opĂ©rations courantes sur les tables, telles que la gestion et le reclustering d’une table et la suppression ou la restauration d’une table, Ă  l’aide d’un objet TableResource.

Pour plus d’informations sur ces opĂ©rations de table, 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, le code de l’exemple suivant effectue les opĂ©rations suivantes :

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

  2. Suspend le reclustering pour la table.

  3. Reprend le reclustering pour la table.

  4. Supprime la table.

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

my_table_res = root.databases["my_db"].schemas["my_schema"].tables["my_table"]

my_table_res.suspend_recluster()
my_table_res.resume_recluster()
my_table_res.drop()
my_table_res.undrop()
Copy

Gestion des tables d’évĂ©nements¶

Vous pouvez gĂ©rer les tables d’évĂ©nements Snowflake, qui sont un type spĂ©cial de table de base de donnĂ©es avec un ensemble prĂ©dĂ©fini de colonnes oĂč Snowflake peut collecter des donnĂ©es de tĂ©lĂ©mĂ©trie. Pour plus d’informations, voir Aperçu de la table d’évĂ©nements.

Les Snowflake Python APIs reprĂ©sentent des tables d’évĂ©nements avec deux types distincts :

  • EventTable : expose les propriĂ©tĂ©s d’une table d’évĂ©nements telles que son nom, la durĂ©e de conservation des donnĂ©es, la durĂ©e maximale d’extension des donnĂ©es et l’option de suivi des modifications.

  • EventTableResource : expose les mĂ©thodes que vous pouvez utiliser pour rĂ©cupĂ©rer un objet EventTable correspondant, renommer la table des Ă©vĂ©nements et supprimer la table des Ă©vĂ©nements.

Sujets

CrĂ©ation d’une table d’évĂ©nements¶

Pour crĂ©er une table d’évĂ©nements, il faut d’abord crĂ©er un objet EventTable, puis crĂ©er un objet EventTableCollection Ă  partir de l’objet Root de l’API. En utilisant EventTableCollection.create, ajoutez la nouvelle table d’évĂ©nements Ă  Snowflake.

Le code de l’exemple suivant crĂ©e un objet EventTable qui reprĂ©sente une table d’évĂ©nements nommĂ©e my_event_table avec les paramĂštres spĂ©cifiĂ©s :

from snowflake.core.event_table import EventTable

event_table = EventTable(
  name="my_event_table",
  data_retention_time_in_days = 3,
  max_data_extension_time_in_days = 5,
  change_tracking = True,
  default_ddl_collation = 'EN-CI',
  comment = 'CREATE EVENT TABLE'
)

event_tables = root.databases["my_db"].schemas["my_schema"].event_tables
event_tables.create(my_event_table)
Copy

Ce code crĂ©e une variable EventTableCollection event_tables et utilise EventTableCollection.create pour crĂ©er une nouvelle table d’évĂ©nements dans Snowflake.

Obtenir les détails de la table des événements¶

Vous pouvez obtenir des informations sur une table d’évĂ©nements en appelant la mĂ©thode EventTableResource.fetch, qui renvoie un objet EventTable.

Le code de l’exemple suivant obtient des informations sur une table d’évĂ©nements nommĂ©e my_event_table :

my_event_table = root.databases["my_db"].schemas["my_schema"].event_tables["my_event_table"].fetch()
print(my_event_table.to_dict())
Copy

Affichage des tables d’évĂ©nements¶

Vous pouvez rĂ©pertorier des tables d’évĂ©nements Ă  l’aide de la mĂ©thode EventTableCollection.iter qui renvoie un itĂ©rateur PagedIter d’objets EventTable.

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

from snowflake.core.event_table import EventTableCollection

event_tables: EventTableCollection = root.databases["my_db"].schemas["my_schema"].event_tables
event_table_iter = event_tables.iter(like="my%")  # returns a PagedIter[EventTable]
for event_table_obj in event_table_iter:
  print(event_table_obj.name)
Copy

Le code de l’exemple suivant rĂ©pertorie Ă©galement les tables d’évĂ©nements dont le nom commence par my, mais il utilise le paramĂštre starts_with au lieu de like. Cet exemple dĂ©finit Ă©galement le paramĂštre facultatif show_limit=10 pour limiter le nombre de rĂ©sultats Ă  10 :

event_tables: EventTableCollection = root.databases["my_db"].schemas["my_schema"].event_tables
event_table_iter = event_tables.iter(starts_with="my", show_limit=10)
for event_table_obj in event_table_iter:
  print(event_table_obj.name)
Copy

ExĂ©cution d’opĂ©rations sur la table d’évĂ©nements¶

Vous pouvez effectuer des opĂ©rations courantes sur les tables d’évĂ©nements, telles que renommer une table d’évĂ©nements et supprimer une table d’évĂ©nements, avec un objet EventTableResource.

Note

Seule la fonctionnalitĂ© RENAME de ALTER TABLE (tables d’évĂ©nements) est actuellement prise en charge.

RENAME n’est pas pris en charge sur la table d’évĂ©nements par dĂ©faut, SNOWFLAKE.TELEMETRY.EVENTS.

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

  1. Obtient l’objet ressource de la table des Ă©vĂ©nements my_event_table dans la base de donnĂ©es my_db et le schĂ©ma my_schema.

  2. Renomme la table d’évĂ©nements.

  3. Supprime la table d’évĂ©nements.

my_event_table_res = root.databases["my_db"].schemas["my_schema"].event_tables["my_event_table"]

my_event_table_res.rename("my_other_event_table")
my_event_table_res.drop()
Copy

Gestion des vues¶

Vous pouvez gĂ©rer les vues dans Snowflake. Une vue est un objet de niveau schĂ©ma et permet d’accĂ©der au rĂ©sultat d’une requĂȘte comme s’il s’agissait d’une table. Lorsque vous crĂ©ez ou faites rĂ©fĂ©rence Ă  une vue, vous le faites dans le contexte de son schĂ©ma.

Note

ALTER VIEW n’est actuellement pas pris en charge.

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

  • View : expose les propriĂ©tĂ©s d’une vue, telles que son nom, ses colonnes et une instruction de requĂȘte SQL.

  • ViewResource : expose des mĂ©thodes que vous pouvez utiliser pour extraire un objet View correspondant et pour supprimer le schĂ©ma.

Sujets

CrĂ©ation d’une vue¶

Pour crĂ©er une vue, crĂ©ez d’abord un objet View qui spĂ©cifie le nom de la vue, les colonnes et l’instruction de requĂȘte SQL.

Le code de l’exemple suivant crĂ©e un objet View reprĂ©sentant une vue nommĂ©e my_view avec les colonnes et la requĂȘte SQL spĂ©cifiĂ©es :

from snowflake.core.view import View, ViewColumn

my_view = View(
  name="my_view",
  columns=[
      ViewColumn(name="c1"), ViewColumn(name="c2"), ViewColumn(name="c3"),
  ],
  query="SELECT * FROM my_table",
)

root.databases["my_db"].schemas["my_schema"].views.create(my_view)
Copy

Le code crĂ©e ensuite la vue dans la base de donnĂ©es my_db et le schĂ©ma my_schema en transmettant l’objet View Ă  la mĂ©thode ViewCollection.create.

Obtenir les détails de la vue¶

Vous pouvez obtenir des informations sur une vue en appelant la méthode ViewResource.fetch, qui renvoie un objet View.

Le code de l’exemple suivant permet d’obtenir un objet View qui reprĂ©sente la vue my_view :

my_view = root.databases["my_db"].schemas["my_schema"].views["my_view"].fetch()
print(my_view.to_dict())
Copy

Affichage des vues¶

Vous pouvez rĂ©pertorier les vues d’une base de donnĂ©es spĂ©cifiĂ©e via la mĂ©thode iter. La mĂ©thode renvoie un itĂ©rateur PagedIter d’objets View.

Le code de l’exemple suivant rĂ©pertorie les vues dont le nom commence par my dans la base de donnĂ©es my_db et le schĂ©ma my_schema :

view_list = root.databases["my_db"].schemas["my_schema"].views.iter(like="my%")
for view_obj in view_list:
  print(view_obj.name)
Copy

Le code de l’exemple suivant rĂ©pertorie Ă©galement les vues dont le nom commence par my, mais il utilise le paramĂštre starts_with au lieu de like. Cet exemple dĂ©finit Ă©galement le paramĂštre facultatif show_limit=10 pour limiter le nombre de rĂ©sultats Ă  10 :

view_list = root.databases["my_db"].schemas["my_schema"].views.iter(starts_with="my", show_limit=10)
for view_obj in view_list:
  print(view_obj.name)
Copy

Suppression d’une vue¶

Vous pouvez supprimer une vue en utilisant la méthode ViewResource.drop.

Le code dans l’exemple suivant supprime la vue my_view :

my_view_res = root.databases["my_db"].schemas["my_schema"].views["my_view"]
my_view_res.drop()
Copy