GitHub から Snowflake へのカスタム Python パッケージのデプロイ

Nov 30 2022
更新: 2022 年 11 月 7 日現在。Snowpark for Python は GA であるため、インストールは PyPi 経由で pip install snowflake-snowpark-python と同じくらい簡単です。

更新: 2022 年 11 月 7 日現在。Snowpark for Python は GA であるため、インストールはPyPipip install snowflake-snowpark-python経由と同じくらい簡単です。

概要

Snowpark は、開発者が Python、Java、Scala、JavaScript などの言語でコードを記述することにより、Snowflake プラットフォームの機能を拡張する方法を提供します。このブログでは、GitHub アクションを使用して GitHub リポジトリからカスタムの純粋な Pythonパッケージを Snowflake にデプロイする方法を確認します。

さらに重要なことは、これらのパッケージを使用してSnowpark Python でユーザー定義関数 (UDF)を作成する場合、このアプローチにより、カスタム コードを複数の UDF にわたって一度に、手動で介入することなく自動的に維持およびデプロイすることが容易になります。このセットアップが強調するもう 1 つの利点は、Snowflake にパッケージをアップロードし、更新されたカスタム パッケージを使用する UDF の名前を表示するスクリプトからカスタム パッケージを切り離すことです。

ユーザー定義関数

フロー全体がどのように組み合わされるかを示すために、Snowpark Python でのこの単純な UDF を考えてみましょう。(このスクリプトはSnowsightで実行されます。)

スクリプトメモ

  • Python パッケージdo_something_cool.pyが依存関係として追加されます —行 6importsステートメントにはパス全体が含まれていることに注意してください。ステージ名とファイル名
  • 次に、そのパッケージがインポートされ ( 9 行目)、メソッドgreetings()が呼び出され ( 11 行目)、この UDF に渡されたパラメーターが渡されます。

SELECT greet_me('Dash');

Hello, Dash! How are you doing today? It's great to see you today!

セットアップ: GitHub リポジトリ 1

あなたとあなたのチーム メンバーが貢献し、共同作業するこの Python パッケージを維持する GitHub リポジトリがあるとします。

ここでは「クールなことをする

このリポジトリは、 GitHub Actionsをセットアップする場所でもあります。

GitHub Actions ワークフロー ファイル (以下のワークフローの 詳細) は次のようになります。

ワークフローの詳細

  • トリガー イベント:コードが更新されたときのメインブランチへのプッシュ時
  • ワークフローの手順:

— 2.更新されたパッケージコードをデプロイするために必要な依存関係要求Snowflake-connector-pythonをインストールします

— 3.更新されたカスタム コードを Snowflake にアップロードするスクリプトをダウンロードします ( Repo 2 から — 以下を参照)。

— 4. GitHub シークレットに保存されている環境変数 (データベース、ウェアハウス、スキーマ、ユーザー、パスワード、およびロール) をセットアップします。これらの変数は、 Snowflakeに接続するためにスクリプト (ステップ 3 でダウンロード) でSnowflake Python コネクタによって使用されます。

— 5. スクリプト (ステップ 3 でダウンロードしたもの) を実行して、更新されたコードをデプロイします。

[GitHub 上のコード:カスタム パッケージのサンプル| GitHub Actions ワークフロー ファイル]

セットアップ: GitHub リポジトリ 2

このリポジトリには Python スクリプト(以下の詳細を参照)が含まれており、リポジトリ 1 のメインブランチでパッケージが更新されたときに、リポジトリ1のGitHub Actionsワークフロー セットアップからダウンロードされて実行されます

スクリプトは次のようになります。

スクリプトの手順

— 1. Snowflake Python Connector とGitHub Secretsを使用して設定された環境変数を使用して Snowflake に接続します

— 2.更新するパッケージのリスト(以下の JSON 形式を参照)をダウンロードします。

— 3. 各パッケージについて、Repo 1からメインブランチから最新バージョンをダウンロードし、Snowflake ステージにアップロードします。

— 4. すべての UDF をループしてインポートを調べ、更新されたパッケージを使用する UDF の名前を出力します。

パッケージ一覧

このリポジトリには、 update_packages.pyスクリプトの実行時に更新されるパッケージ (上記の手順 2 で参照)のリストを含む JSON ファイルも含まれています。

ファイル形式は次のとおりです。

: JSON ファイルのステージは、ファイルがアップロードされる Snowflakeのステージを指します。

テスト

テストするには、レポ 1のdo_something_cool.pyを更新し(たとえば、挨拶メッセージを「ようこそ、今日はどうですか?」に変更します)、変更をメインブランチにプッシュします。その時点で、ビルドのキックオフが表示され、成功した場合 (つまり、コード/構文が正しい、参照されているファイルとパスがすべて存在する、Snowflake に接続するための接続パラメーターが有効であるなど)、ビルド出力が表示されます。これに似ています:

次に、この SQL を再度実行すると…

SELECT greet_me('DASH');

Hello, Dash! Welcome, how is your day going?

それでおしまい!

お時間をいただきありがとうございます。TwitterとLinkedInで私をフォローしてください。特にSnowparkに関するデモ ビデオ、コード スニペット、その他の興味深い成果物を共有しています。