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)
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 objetDatabase
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)
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())
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)
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()
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 objetSchema
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)
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())
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)
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()
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 objetTable
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)
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())
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)
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)
Ă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")
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")
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 :
Obtient lâobjet ressource de la table
my_table
dans la base de donnéesmy_db
et le schémamy_schema
.Suspend le reclustering pour la table.
Reprend le reclustering pour la table.
Supprime la table.
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()
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 objetEventTable
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)
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())
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)
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)
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 :
Obtient lâobjet ressource de la table des Ă©vĂ©nements
my_event_table
dans la base de donnéesmy_db
et le schémamy_schema
.Renomme la table dâĂ©vĂ©nements.
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()
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 objetView
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)
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())
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)
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)
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()