Gestion des entrepôts virtuels Snowflake avec Python¶
Vous pouvez utiliser Python pour gérer les entrepôts virtuels Snowflake, qui sont des clusters de ressources de calcul dans Snowflake. Pour une vue d’ensemble des entrepôts, voir Entrepôts virtuels.
Les Snowflake Python APIs représentent des entrepôts avec deux types distincts :
Warehouse
: Expose les propriétés d’un entrepôt telles que son nom, sa taille, son type et ses paramètres de reprise et de suspension automatiques.WarehouseResource
: expose des méthodes que vous pouvez utiliser pour récupérer un objetWarehouse
correspondant, suspendre et reprendre l’entrepôt et supprimer l’entrepôt.
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.
Création d’un entrepôt¶
Pour créer un entrepôt, il faut d’abord créer un objet Warehouse
, puis créer un objet WarehouseCollection
à partir de l’objet Root
de l’API. Via WarehouseCollection.create
, ajoutez le nouvel entrepôt à Snowflake.
Le code de l’exemple suivant crée un objet Warehouse
représentant un entrepôt nommé my_wh
:
from snowflake.core.warehouse import Warehouse
my_wh = Warehouse(
name="my_wh",
warehouse_size="SMALL",
auto_suspend=600,
)
warehouses = root.warehouses
warehouses.create(my_wh)
Ce code crée une variable WarehouseCollection
warehouses
et utilise WarehouseCollection.create
pour créer un nouvel entrepôt dans Snowflake.
Obtention de détails sur l’entrepôt¶
Vous pouvez obtenir des informations sur un entrepôt en appelant la méthode WarehouseResource.fetch
, qui renvoie un objet Warehouse
.
Le code de l’exemple suivant permet d’obtenir des informations sur un entrepôt nommé my_wh
:
my_wh = root.warehouses["my_wh"].fetch()
print(my_wh.to_dict())
Création ou modification d’un entrepôt¶
Vous pouvez définir les propriétés d’un objet Warehouse
et le transmettre à la méthode WarehouseResource.create_or_alter
pour créer un entrepôt s’il n’existe pas, ou le modifier selon la définition de l’entrepôt s’il existe. Le comportement de create_or_alter
est censé être idempotent, ce qui signifie que l’objet d’entrepôt résultant sera le même, que l’entrepôt existe ou non avant l’exécution de la méthode.
Note
La méthode create_or_alter
utilise des valeurs par défaut pour toute propriété d”entrepôt que vous ne définissez pas explicitement. Par exemple, si vous ne définissez pas auto_suspend
, sa valeur par défaut est None
même si l’entrepôt existait auparavant avec une valeur différente.
Le code de l’exemple suivant met à jour la taille et le paramètre de suspension automatique de l’entrepôt my_wh
, puis modifie l’entrepôt sur Snowflake.
from snowflake.core.warehouse import Warehouse
my_wh = root.warehouses["my_wh"].fetch()
my_wh.warehouse_size = "LARGE"
my_wh.auto_suspend = 1800
my_wh_res = root.warehouses["my_wh"]
my_wh_res.create_or_alter(my_wh)
Dans ce cas, la taille de l’entrepôt my_wh
est remplacée par LARGE
et son paramètre de suspension automatique par 1800
si vous l’avez précédemment créé avec des propriétés différentes.
Répertorier des entrepôts¶
Vous pouvez répertorier des entrepôts à l’aide de la méthode WarehouseCollection.iter
qui renvoie un itérateur PagedIter
d’objets Warehouse
.
Le code de l’exemple suivant répertorie les entrepôts dont le nom comprend le texte my et affiche le nom de chacun :
from snowflake.core.warehouse import WarehouseCollection
warehouses: WarehouseCollection = root.warehouses
wh_iter = warehouses.iter(like="my%") # returns a PagedIter[Warehouse]
for wh_obj in wh_iter:
print(wh_obj.name)
Réalisation d’opérations d’entrepôt¶
Vous pouvez effectuer des opérations d’entrepôt courantes—comme suspendre et reprendre des entrepôts, et abandonner toutes les requêtes sur les entrepôts—avec un objet WarehouseResource
.
Le code de l’exemple suivant suspend et reprend l’entrepôt my_wh
, abandonne toutes les requêtes en cours ou en file d’attente sur l’entrepôt, puis supprime l’entrepôt :
my_wh_res = root.warehouses["my_wh"]
my_wh_res.suspend()
my_wh_res.resume()
my_wh_res.abort_all_queries()
my_wh_res.drop()