PythonでSnowflakeアラートを管理する

Pythonを使用してSnowflakeアラートを使用し、Snowflake内のデータに基づいて、特定の条件下で定期的にアクションを実行するように設定できます。アラートの詳細については、 Snowflakeのデータに基づくアラートの設定 をご参照ください。

注釈

ALTER ALERT は現在サポートされていません。

Snowflake Python APIs は、2つのタイプに分かれたアカウントを表します。

  • Alert: 名前、条件、アクション、スケジュールなどのアラートのプロパティを公開します。

  • AlertResource: 対応する Alert オブジェクトの取得、アラートの実行、アラートの削除に使用できるメソッドを公開します。

前提条件

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

たとえば、以下のコードでは、構成ファイルで定義された接続パラメーターを使用して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 APIs によるSnowflakeへの接続 をご参照ください。

アラートの作成

アラートを作成するには、まず Alert オブジェクトを作成し、次に API Root オブジェクトから AlertCollection オブジェクトを作成します。 AlertCollection.create を使って、新しいアラートをSnowflakeに追加します。

次の例のコードは、アカウント内の my_alert というアラートを表す Alert オブジェクトを作成します。

from snowflake.core.alert import Alert, MinutesSchedule

root.alerts.create(Alert(
    name="my_alert",
    condition="SELECT 1",
    action="SELECT 2",
    schedule=MinutesSchedule(minutes=1),
    comment="test comment"
))
Copy

コードは、 AlertCollection 変数 alerts を作成し、 AlertCollection.create を使用してSnowflakeに新しいアラートを作成します。

アラート詳細の取得

Alert オブジェクトを返す AlertResource.fetch メソッドを呼び出すことで、アラートに関する情報を取得できます。

次の例のコードは、 my_alert という名前の管理アカウントに関する情報を取得します。

my_alert = root.alerts["my_alert"].fetch()
print(my_alert.to_dict())
Copy

アラートのリスト

Alert オブジェクトの PagedIter 反復子を返す AlertCollection.iter メソッドを使用して、アラートを一覧表示することができます。

次の例のコードは、名前が my で始まるアラートを一覧表示し、それぞれの名前を表示します。この例では、結果の数を 5 に制限するために、オプションのパラメーター show_limit=5 も設定しています。

alerts_iter = root.alerts.iter(like="my%", show_limit=5)
for alert_obj in alerts_iter:
  print(alert_obj.name)
Copy

アラート操作の実行

アラートの実行や削除など、一般的なアラート操作は AlertResource オブジェクトで実行できます。

アラート・リソースでできる操作をいくつか示すために、次の例のコードでは次のような操作を行っています。

  1. my_alert アラート・リソース・オブジェクトを取得します。

  2. クエリを実行します。

  3. アラートをドロップします。

my_alert_res = root.alerts["my_alert"]

my_alert_res.execute()
my_alert_res.drop()
Copy