SnowflakeでGitを使う例¶
このトピックの例では、Snowflake アプリケーションの開発時にリモートの Git リポジトリのファイルを使用する方法と、Git リポジトリのクローンで SQL スクリプトを実行する方法について説明します。
Git リポジトリのクローンを操作するその他の方法については、以下を参照ください。
Gitリポジトリファイルをストアドプロシージャのハンドラーとして使用します。¶
Snowflake とリモートの Git リポジトリとの統合をセットアップ した後は、リポジトリにあるファイルをストアドプロシージャや UDFs のハンドラーコードとして使用することができます。 ステージング・ハンドラー と同様に、ハンドラー関数名には、それを含むクラス名またはモジュール名を指定しなければならないことに注意してください。
この例では、リポジトリのPythonハンドラーコードをストアドプロシージャで使用する方法を説明します。
この例で必要なコード¶
この例のハンドラーは、次のような SQL コードで作成されたデータベースに依存しています。
CREATE DATABASE example_db;
USE DATABASE example_db;
CREATE SCHEMA example_schema;
USE SCHEMA example_schema;
CREATE OR REPLACE TABLE employees(id NUMBER, name VARCHAR, role VARCHAR);
INSERT INTO employees (id, name, role) VALUES (1, 'Alice', 'op'), (2, 'Bob', 'dev'), (3, 'Cindy', 'dev');
この例では、 filter.py
に含まれる次のPythonハンドラーコードを使用しています。
from snowflake.snowpark.functions import col
def filter_by_role(session, table_name, role):
df = session.table(table_name)
return df.filter(col("role") == role)
ファイルをコミットし、Gitリポジトリのクローンを更新します。¶
Git クライアントから、リモートリポジトリにコードを追加します。
次の例のコードでは、git コマンドラインツールを使用してハンドラーファイルをローカルリポジトリに追加してコミットし、Snowflake の Git リポジトリクローンによってリファレンスされるリモートリポジトリにプッシュします。
$ git add python-handlers/filter.py $ git commit -m "Adding code to filter by role" $ git push
Snowflakeで、Gitリポジトリのクローンをリフレッシュします。
Snowflake とリモートの Git リポジトリとの統合をセットアップ した結果、Snowflake に Git リポジトリのクローンができたとすると、リモートリポジトリからフェッチして Git リポジトリのクローンをリフレッシュすることができます。
Snowflake を使ってリモートリポジトリからリフレッシュする方法は、他の Git クライアントツールでの作業と似ており、作業を開始する前にリモートリポジトリからフェッチして、最新の変更点を確保します。
次の例のコードは ALTER GIT REPOSITORY コマンドを実行し、リモートリポジトリから最新の変更点を取得します。コードは、ブランチ、タグ、コミットを含む完全なクローンを生成します。
ALTER GIT REPOSITORY snowflake_extensions FETCH;
Git リポジトリのクローンにあるファイルを使用するプロシージャを作成し、実行します。¶
Snowflakeでプロシージャを記述します。
プロシージャを書いたら、そのハンドラーコードをSnowflakeのGitリポジトリクローンのコードファイルの場所でリファレンスできます。たとえば、
snowflake_extensions
という Git リポジトリのクローンと同期しているリモートリポジトリのメインブランチにあるファイルpython-handlers/filter.py
をリファレンスするには、次のような構文を使います。@snowflake_extensions/branches/main/python-handlers/filter.py
次の例のコードでは、
filter_by_role
というプロシージャを作成し、Git リポジトリのクローンに保存されているハンドラーコードを指定します。CREATE OR REPLACE PROCEDURE filter_by_role(tableName VARCHAR, role VARCHAR) RETURNS TABLE(id NUMBER, name VARCHAR, role VARCHAR) LANGUAGE PYTHON RUNTIME_VERSION = '3.9' PACKAGES = ('snowflake-snowpark-python') IMPORTS = ('@example_db.example_schema.snowflake_extensions/branches/main/python-handlers/filter.py') HANDLER = 'filter.filter_by_role';
プロシージャを実行します。
次のコードはプロシージャを実行します。
CALL filter_by_role('employees', 'dev');
次は、プロシージャからの出力の例です。
--------------------- | ID | NAME | ROLE | --------------------- | 2 | Bob | dev | --------------------- | 3 | Cindy | dev | ---------------------
新しいアカウントを構成するには、Gitリポジトリのクローンファイルを使用します。¶
この例では、Gitリポジトリクローンに含まれる SQL スクリプトをSnowflakeで実行する方法を説明します。例のスクリプトでは、ユーザーとロールを作成します。
この例では、 EXECUTE IMMEDIATE FROM コマンドを使って、Git リポジトリ・クローンのファイルに含まれる SQL ステートメントを実行します。
EXECUTE IMMEDIATE FROM を使用すると、リモート Git リポジトリで管理するスクリプトを (どの Snowflake セッションからでも) 実行できます。たとえば、組織内のすべての新しいSnowflakeアカウントを設定するスクリプトがあるとします。スクリプトには、ユーザー、ロール、オブジェクトを作成し、アカウントとオブジェクトに権限を付与するステートメントが含まれている場合があります。
次の内容で、ファイル
setup.sql
を作成します。CREATE ROLE analyst; CREATE USER gladys; GRANT ROLE analyst TO USER gladys; SHOW GRANTS TO USER gladys;
SQL ファイルをリモートの Git リポジトリにコミットします。
git コマンドラインツールを使って、リモート Git リポジトリにファイルをコミットします。
git add scripts/setup.sql git commit -m "Adding code to set up new accounts" git push
詳細な手順については、 ファイルをコミットし、Gitリポジトリのクローンを更新します。 をご参照ください。
Git リポジトリのクローンをリフレッシュします。
Git リポジトリのクローンをリフレッシュ
configuration_repo
:ALTER GIT REPOSITORY configuration_repo FETCH;
詳細な手順については、 ファイルをコミットし、Gitリポジトリのクローンを更新します。 をご参照ください。
Snowflakeで、Gitリポジトリクローンのファイルを実行します。
注釈
次のステートメントを実行するユーザーは、ファイル内のすべてのステートメントを実行するために必要な権限を持つロールを使用する必要があります。詳細については、 アクセス制御の要件 をご参照ください。
EXECUTE IMMEDIATE FROM @configuration_repo/branches/main/scripts/setup.sql;
EXECUTE IMMEDIATE FROM コマンドは、ファイル内の最後の SQL ステートメントの結果を 返します。
+-------------------------------+---------+------------+--------------+--------------+ | created_on | role | granted_to | grantee_name | granted_by | |-------------------------------+---------+------------+--------------+--------------| | 2023-07-24 22:07:04.354 -0700 | ANALYST | USER | GLADYS | ACCOUNTADMIN | +-------------------------------+---------+------------+--------------+--------------+