Verwalten von virtuellen Snowflake-Warehouses mit Python

Sie können Python verwenden, um virtuelle Snowflake-Warehouses zu verwalten, bei denen es sich um Cluster von Computeressourcen in Snowflake handelt. Einen Überblick zu Warehouses finden Sie unter Virtuelle Warehouses.

Die Snowflake-Python-API repräsentiert Warehouses mit zwei verschiedenen Typen:

  • Warehouse: Zeigt die Eigenschaften eines Warehouses an, z. B. seinen Namen, seine Größe, seinen Typ sowie die Einstellungen für automatisches Anhalten und automatisches Fortsetzen.

  • WarehouseResource: Stellt Methoden zur Verfügung, mit denen Sie ein entsprechendes Warehouse-Objekt abrufen, das Warehouse anhalten und fortsetzen sowie das Warehouse löschen können.

Die Beispiele unter diesem Thema gehen davon aus, dass Sie Code hinzugefügt haben, um eine Verbindung zu Snowflake herzustellen und ein Root-Objekt zu erstellen, von dem aus Sie die Snowflake-Python-API verwenden können. Weitere Informationen dazu finden Sie unter Verbinden mit Snowflake über die Snowflake-Python-API.

Der Code im folgenden Beispiel verwendet die in einer Konfigurationsdatei definierten Verbindungsparameter, um eine Verbindung zu Snowflake herzustellen. Unter Verwendung des resultierenden Session-Objekts erstellt der Code ein Root-Objekt, das die Typen und Methoden der API verwendet.

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

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

Warehouse erstellen

Um eine Warehouse zu erstellen, erstellen Sie zunächst ein Warehouse-Objekt. Erstellen Sie dann ein WarehouseCollection-Objekt aus dem Root-Objekt der API. Fügen Sie mit WarehouseCollection.create das neue Warehouse zu Snowflake hinzu.

Der Code im folgenden Beispiel erstellt ein Warehouse-Objekt, das ein Warehouse namens my_wh repräsentiert. Er erstellt eine WarehouseCollection-Variable namens warehouses und verwendet WarehouseCollection.create, um ein neues Warehouse in Snowflake zu erstellen.

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)
Copy

Details zum Warehouse abrufen

Sie können Informationen zu einem Warehouse erhalten, indem Sie die Methode WarehouseResource.fetch aufrufen, die ein Warehouse-Objekt zurückgibt.

Der Code im folgenden Beispiel ruft Informationen zu einem Warehouse namens my_wh ab.

from snowflake.core import Root
from snowflake.core.warehouse import Warehouse

my_wh = root.warehouses["my_wh"].fetch()
print(my_wh.to_dict())
Copy

Warehouse erstellen oder aktualisieren

Sie können die Merkmale eines vorhandenen Warehouses aktualisieren, indem Sie die Eigenschaften eines Warehouse-Objekts festlegen, das das Warehouse repräsentiert, und das Objekt dann mit der Methode WarehouseResource.create_or_update an Snowflake übergeben.

Sie können auch ein Warehouse-Objekt übergeben, das ein neues Warehouse beschreibt, wenn Sie das Warehouse erstellen möchten.

Der Code im folgenden Beispiel legt den Namen, die Größe und die Einstellung für das automatische Anhalten für ein Warehouse fest und aktualisiert dann das Warehouse in Snowflake, wobei das Warehouse erstellt wird, falls es noch nicht vorhanden ist. In diesem Fall wird die Größe des Warehouses my_wh auf LARGE und die Einstellung für das automatische Anhalten auf 1800 geändert, wenn Sie es zuvor mit anderen Eigenschaften erstellt haben.

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)
Copy

Warehouses auflisten

Sie können Warehouses mit der Methode WarehouseCollection.iter auflisten. Die Methode gibt einen PagedIter-Iterator für Warehouse-Objekte zurück.

Der Code im folgenden Beispiel listet Warehouses auf, deren Name den Text „my“ enthält, und gibt den Namen jedes einzelnen aus.

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)
Copy

Warehouse-Operationen ausführen

Mit einem WarehouseResource-Objekt können Sie allgemeine Warehouse-Operationen, wie das Ausführen, Anhalten und Fortsetzen von Warehouses, ausführen.

Der Code im folgenden Beispiel hält das Warehouse my_wh an und setzt es fort, bricht alle aktiven oder in der Warteschlange befindlichen Abfragen für das Warehouse ab und löscht dann das Warehouse.

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()
Copy