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.
L’API Python Snowflake représente les entrepôts de 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.
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 l’API Python Snowflake. Pour plus d’informations, voir Connexion à Snowflake avec l’API Python Snowflake.
Le code de l’exemple suivant utilise les paramètres de connexion définis dans un fichier de configuration pour créer une connexion à Snowflake. En utilisant l’objet Session
obtenu, le code crée un objet Root
pour utiliser les types et les méthodes de l’API.
from snowflake.core import Root
from snowflake.snowpark import Session
session = Session.builder.config("connection_name", "myconnection").create()
root = Root(session)
Créer un entrepôt¶
Pour créer un entrepôt, commencez par créer un objet Warehouse
. Créez ensuite un objet WarehouseCollection
à partir de l’objet API Root
. 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 appelé my_wh
. Il crée une variable WarehouseCollection
warehouses
et utilise WarehouseCollection.create
pour créer un nouvel entrepôt dans Snowflake.
from snowflake.core import Root
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)
Obtenir les détails de 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 appelé my_wh
.
from snowflake.core import Root
from snowflake.core.warehouse import Warehouse
my_wh = root.warehouses["my_wh"].fetch()
print(my_wh.to_dict())
Créer ou mettre à jour un entrepôt¶
Vous pouvez mettre à jour les caractéristiques d’un entrepôt existant en définissant les propriétés d’un objet Warehouse
qui représente l’entrepôt, puis en transmettant l’objet à Snowflake via la méthode WarehouseResource.create_or_update
.
Vous pouvez également transmettre un objet Warehouse
décrivant un nouvel entrepôt lorsque vous souhaitez créer l’entrepôt.
Le code de l’exemple suivant définit le nom, la taille et le paramètre de suspension automatique d’un entrepôt, puis met à jour l’entrepôt sur Snowflake, en créant l’entrepôt, s’il n’existe pas encore. 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.
from snowflake.core import Root
from snowflake.core.warehouse import Warehouse
my_wh = Warehouse(
name="my_wh",
warehouse_size="LARGE",
auto_suspend=1800,
)
my_wh_res = root.warehouses["my_wh"]
my_wh_res.create_or_update(my_wh)
Répertorier les entrepôts¶
Vous pouvez répertorier les entrepôts via la méthode WarehouseCollection.iter
. La méthode 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 », en imprimant le nom de chacun.
from snowflake.core import Root
from snowflake.core.warehouse import Warehouse, 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)
Effectuer des 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.
from snowflake.core import Root
from snowflake.core.warehouse import Warehouse
my_wh_res = root.warehouses["my_wh"]
my_wh_res.suspend()
my_wh_res.resume()
my_wh_res.abort_all_queries()
my_wh_res.delete()