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.

Voraussetzungen

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.

Beispielsweise verwendet der folgende Code Verbindungsparameter, die in einer Konfigurationsdatei definiert sind, um eine Verbindung zu Snowflake zu erstellen:

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

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

Unter Verwendung des resultierenden Session-Objekts erstellt der Code ein Root-Objekt, das die Typen und Methoden der API verwendet. Weitere Informationen dazu finden Sie unter Verbindung zu Snowflake über Snowflake-Python-API herstellen.

Erstellen von Warehouses

Um ein Warehouse zu erstellen, erstellen Sie zunächst ein Warehouse-Objekt und erstellen dann ein WarehouseCollection-Objekt aus dem API-Root-Objekt. 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:

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

Der Code erstellt eine WarehouseCollection-Variable namens warehouses und verwendet WarehouseCollection.create, um ein neues Warehouse in Snowflake zu erstellen.

Abrufen von Warehouse-Details

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

Erstellen oder Aktualisieren eines Warehouses

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:

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

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.

Auflisten von Warehouses

Sie können Warehouses mit der Methode WarehouseCollection.iter auflisten, die einen PagedIter-Iterator für Warehouse-Objekte zurückgibt.

Der Code im folgenden Beispiel listet Warehouses auf, deren Namen den Text my enthalten, 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

Ausführen von Warehouse-Operationen

Mit einem WarehouseResource-Objekt können Sie allgemeine Warehouse-Operationen, wie 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