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 APIs stellt Warehouses mit zwei verschiedenen Typen dar:

  • 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 aussetzen und wieder aufnehmen und das Warehouse löschen können.

Voraussetzungen

Die Beispiele in 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 APIs 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 Verbinden mit Snowflake mit dem Snowflake Python APIs.

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 darstellt:

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 über ein Warehouse namens my_wh ab:

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

Erstellen oder Ändern eines Warehouses

Sie können Eigenschaften eines Warehouse-Objekts einstellen und es an die WarehouseResource.create_or_alter-Methode übergeben, um ein Warehouse zu erstellen, wenn es nicht existiert, oder es entsprechend der Definition des Warehouse zu ändern, wenn es existiert. Die Verhaltensweise von create_or_alter soll idempotent sein, d. h. das resultierende Warehouse-Objekt ist dasselbe, unabhängig davon, ob das Warehouse bereits existiert, bevor Sie die Methode ausführen.

Bemerkung

Die create_or_alter-Methode verwendet Standardwerte für alle Warehouse-Eigenschaften, die Sie nicht ausdrücklich definieren. Wenn Sie z. B. auto_suspend nicht einstellen, wird der Wert auf None voreingestellt, auch wenn das Warehouse zuvor mit einem anderen Wert existierte.

Der Code im folgenden Beispiel aktualisiert die Größe und die Auto-Suspend-Einstellung des my_wh-Warehouses und ändert dann das Warehouse auf 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)
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.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)
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 setzt das my_wh-Warehouse aus und nimmt es wieder auf, bricht alle laufenden oder in der Warteschlange befindlichen Abfragen im Warehouse ab und lösch das Warehouse dann:

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