Python Worksheetsで開発した処理をそのままStored Procedureにしてみた #SnowflakeDB

2023.04.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

さがらです。

先日パブリックプレビューとなったPython Worksheetsですが、開発した処理をそのままStored Procedureにできることを知ったので、本記事で試してみます。

やること

こちらのQuickstartの内容を用いて、Stored ProcedureをPython Worksheetsから作ってみます。

環境構築

今回使用するQuickstartでは、2. Get Startedにある、Setup Lab Environmentというボタンを押すと、このQuickstartに必要なウェアハウスなどをすぐに作成してくれます!

※事前にトライアルアカウントの作成が必要です。こちらから申請ください。

まず、2. Get Startedにある、Setup Lab Environmentというボタンを押します。

サインインするアカウントを選択し、ログインします。

下図の画面になったら、右側のSetup Labボタンを押します。

ポップアップが表示されるので、Start Setupを押します。

すると、10秒前後で環境構築が終わり、新しいワークシートが作られます。この作られたワークシートを用いて、Stored Procedureの作成を行ってみます。

ワークシートの内容を確認してみる

作成されたワークシートを開くと、下図のようにコメントががっつりと書かれたPythonの処理が表示されると思います。

ざっくりPythonの処理の内容としては、campaign_spendという広告クリックデータをまとめたテーブルとmonthly_revenueという10年間の収益データをまとめたテーブルをDataFrameとしてロードし、集計や結合などの加工を行い、spend_and_revenue_per_monthというテーブルとして出力する、ということを行っております。

ワークシート上で右上のRunを押すと、結果欄に加工後のデータであるspend_and_revenue_per_monthの内容が表示されます。

これらの処理の内容は、Quickstartの3. Load Data from Snowflake Tables into Snowpark DataFrames6. View and Return Transformed Dataで解説されていますので、ぜひこちらも併せてご覧ください!

Stored ProcedureとしてDeployしてみる

ということで、本題のPython Worksheetsで開発した処理をStored Procedureとしてデプロイすることを行ってみます。

画面右上のDeployを押します。

すると、下図のようなポップアップが表示されるため、Procedure nameを入れて、右下のDeployを押します。

無事に作られると、下図のように表示されます!このGo to procedure detailsを押すと、実際に作られたStored Procedureの詳細画面に移動します。

タスクとして呼び出してみる

あとはおまけですが、Stored Procedureなのでタスクとして呼び出すことも可能です!

下記のようにcreate task文を記述して実行することで、作成したStored Procedureを呼び出すタスクが作成可能です。

create task python_stored_test_task
    schedule = 'using cron 0 8 1 * * UTC' -- 毎月1日8:00(UTC)で実行と仮定
    warehouse = 'snowpark_demo_wh' -- PythonのStored Procedureはサーバーレスタスクを使用できないため注意
    as
    call CAMPAIGN_SPEND_MONTHLY_REVENUE_DATA_PIPELINE();

alter task python_stored_test_task resume; -- タスクの実行にはresumeが必要
show tasks;

このタスクを、下記のコマンドで手動実行します。これで、無事にPython Worksheetsで開発した処理が実行されて、テーブルが作られました!

execute task python_stored_test_task;

最後に

Python Worksheetsで開発した処理をそのままStored Procedureにすることを試してみました。

今回は簡単なデータ処理の例ですが、こちらの記事のSnowparkを用いた機械学習の例のように、モデルの学習を行うタスク、学習したモデルを用いた予測を行うタスク、のようにSnowpark for Pythonの処理は分けた上で繰り返して行うことが多いと思います。

こういったときに、Python Worksheetsで各処理を開発してStored Procedureにし、タスクとして定期実行していくということは非常に有用だと思います!