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)
出来上がった 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"
))
コードは、 AlertCollection
変数 alerts
を作成し、 AlertCollection.create
を使用してSnowflakeに新しいアラートを作成します。
アラート詳細の取得¶
Alert
オブジェクトを返す AlertResource.fetch
メソッドを呼び出すことで、アラートに関する情報を取得できます。
次の例のコードは、 my_alert
という名前の管理アカウントに関する情報を取得します。
my_alert = root.alerts["my_alert"].fetch()
print(my_alert.to_dict())
アラートのリスト¶
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)
アラート操作の実行¶
アラートの実行や削除など、一般的なアラート操作は AlertResource
オブジェクトで実行できます。
アラート・リソースでできる操作をいくつか示すために、次の例のコードでは次のような操作を行っています。
my_alert
アラート・リソース・オブジェクトを取得します。クエリを実行します。
アラートをドロップします。
my_alert_res = root.alerts["my_alert"]
my_alert_res.execute()
my_alert_res.drop()