PythonによるSnowflake仮想ウェアハウスの管理

Pythonを使用して、SnowflakeのコンピューティングリソースのクラスタであるSnowflake仮想ウェアハウスを管理できます。ウェアハウスの概要については、 仮想ウェアハウス をご参照ください。

Snowflake Python API は、2つの別々のタイプでウェアハウスを表します。

  • Warehouse: ウェアハウスの名前、サイズ、タイプ、自動再開と自動中断の設定などのプロパティを公開します。

  • WarehouseResource: 対応する Warehouse オブジェクトのフェッチ、ウェアハウスの中断と再開、ウェアハウスの削除に使用できるメソッドを公開します。

前提条件

このトピックの例では、Snowflakeと接続するコードを追加して Root オブジェクトを作成し、そこからSnowflake Python API を使用することを想定しています。

たとえば、以下のコードでは、構成ファイルで定義された接続パラメーターを使用してSnowflakeへの接続を作成します。

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

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

出来上がった Session オブジェクトを使って、コードは API のタイプとメソッドを使う Root オブジェクトを作成します。詳細については、 Snowflake Python API を使用してSnowflakeに接続する をご参照ください。

ウェアハウスの作成

ウェアハウスを作成するには、まず Warehouse オブジェクトを作成して、 API Root オブジェクトから WarehouseCollection オブジェクトを作成します。 WarehouseCollection.create を使用して、新しいウェアハウスをSnowflakeに追加します。

次の例のコードは、 my_wh というウェアハウスを表す Warehouse オブジェクトを作成します。

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

コードは、 WarehouseCollection 変数 warehouses を作成し、 WarehouseCollection.create を使用してSnowflakeに新しいウェアハウスを作成します。

ウェアハウスの詳細の取得

Warehouse オブジェクトを返す WarehouseResource.fetch メソッドを呼び出すことで、ウェアハウスに関する情報を取得できます。

次の例のコードは、 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())
Copy

ウェアハウスの作成または更新

ウェアハウスを表す Warehouse オブジェクトのプロパティを設定してから、 WarehouseResource.create_or_update メソッドを使用してオブジェクトをSnowflakeに渡すと、既存のウェアハウスの特性を更新できます。

ウェアハウスを作成するときに、新しいウェアハウスを説明する Warehouse オブジェクトを渡すこともできます。

次の例のコードは、ウェアハウスの名前、サイズ、自動中断設定を設定してから、Snowflakeでウェアハウスを更新し、まだ存在しない場合はウェアハウスを作成します。

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

このケースでは、 my_wh ウェアハウスのサイズを LARGE に、自動中断の設定を 1800 に変更します。

ウェアハウスのリスト

Warehouse オブジェクトの PagedIter 反復子を返す WarehouseCollection.iter メソッドを使用して、ウェアハウスをリストすることができます。

次の例のコードは、名前に my というテキストを含むウェアハウスをリストし、以下のそれぞれの名前を印刷します。

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

ウェアハウス操作の実行

ウェアハウスの中断や再開、ウェアハウスにあるすべてのクエリの中止など、一般的なウェアハウス操作を WarehouseResource オブジェクトを使用して実行できます。

次の例のコードは、 my_wh ウェアハウスを中断および再開し、ウェアハウス上で実行中またはキューに入っているすべてのクエリを中止し、ウェアハウスを削除します。

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