コードで依存関係を利用できるようにする方法¶
ユーザー定義関数(UDF)またはストアドプロシージャが、 UDF またはプロシージャの外部にあるコードまたはファイルに依存している場合は、UDF またはプロシージャをステージにアップロードし、その場所で参照することで、依存関係を使用できるようにすることができます。
たとえば、 UDF またはプロシージャにより次にアクセスすることが必要になる場合があります。
モジュール内のPythonハンドラーコード。
JAR にコンパイルおよびパッケージ化されたJavaまたはScalaハンドラーコード。
Java、Python、またはScalaで記述された依存コード。
ハンドラーコードにより読み取られ、その名前と場所が UDF を作成した時点で判明しているファイル。これは、たとえば、構成ファイルなどで役に立つ場合があります。
注釈
CREATE FUNCTION または CREATE PROCEDURE の PACKAGES 句を使用して、Snowflakeに含まれるライブラリをインポートすることもできます。
このトピックの内容:
高レベルのステップ¶
次のステップに従って、依存関係を関数またはプロシージャで使用できるようにします。
ハンドラーが使用できる ステージを選択または作成します。
ステージに 依存関係をアップロードします。
関数またはプロシージャを作成するときに、 IMPORTS で 依存関係を参照します。
依存ファイルのステージの選択または作成¶
依存関係ファイルを関数またはプロシージャで使用できるようにするには、実行時に到達できるステージに依存関係ファイルをコピーする必要があります。関数またはプロシージャの所有者は、ステージに対する READ 権限 を持っている必要があります。
通常、 PUT コマンドを使用して、名前付き内部ステージに依存関係をアップロードします。ステージの作成の詳細については、 CREATE STAGE をご参照ください。
注釈
Snowflake GUI を介して PUT
コマンドを実行することはできません。 PUT
を実行するには SnowSQL を使用します。.jarファイルをステージにコピーするための PUT
コマンドの例については、このトピック内の 依存関係のステージへのアップロード をご参照ください。
依存関係に対して、次に挙げる種類のステージのいずれかを選択または作成します。
ユーザーまたは名前付き内部ステージ。
PUT
コマンドを使用してファイルをアップロードする場合は、名前付きの内部ステージを使用します。内部ステージ型の選択の詳細については、 ローカルファイルに対する内部ステージの選択 をご参照ください。外部ステージ。
外部ステージは、 CREATE STAGE で説明されているように、外部ストレージサービスに関連付けられた場所です。(
PUT
コマンドは、外部ステージへのファイルのアップロードをサポートしていません。)
既存のステージを使用するか、 CREATE STAGE を実行して新しいステージを作成することができます。たとえば、次のコマンドは mystage
という名前の新しい内部ステージを作成します。
CREATE STAGE mystage;
注釈
Snowflakeは現在、テーブルステージを使用してハンドラーコードを格納することはサポートしていません。
依存関係のステージへのアップロード¶
ストアドプロシージャに必要なファイルをステージにアップロードします。
外部ステージを使用している場合は、そのストレージサービスの手段を使用してファイルをアップロードします。内部ステージを使用している場合は、 PUT
コマンドを使用して、ファイルをローカルドライブからステージにコピーできます。コマンドリファレンスについては、 PUT をご参照ください。PUT を使用したファイルのステージングについては、 ローカルファイルシステムからのデータファイルのステージング をご参照ください。
PUT
コマンドを使用して、ファイルをステージにアップロードします。
次の例のコードは、 myjar.jar
を mystage
というステージにアップロードし、同じ名前の既存のファイルが存在する場合は上書きします。
PUT file:///Users/MyUserName/MyCompiledJavaCode.jar
@mystage
AUTO_COMPRESS = FALSE
OVERWRITE = TRUE
;
注釈
AUTO_COMPRESS = FALSE
を省略すると、 PUT コマンドはファイルを自動的に圧縮します。ステージ上の圧縮ファイルの名前は myjar.jar.gz
になります。後で CREATE PROCEDURE などのコマンドを実行するときに、コマンドの IMPORTS 句でこの .gz
拡張子を使用してファイル名を指定する必要があります。
注釈
(PUTコマンドは、外部ステージへのファイルのアップロードをサポートしていません。)ファイルを外部ステージにアップロードするには、クラウドサービスが提供するユーティリティを使用します。
依存関係の参照¶
作成している関数またはプロシージャに依存関係の場所を認識させるには、関数またはプロシージャの作成に使用する SQL の IMPORTS 句で依存関係の場所を指定します。
ハンドラーが依存するサードパーティライブラリがある場合など、複数の依存ファイルがある場合は、依存ファイルすべてのステージの場所とファイルパスと名前を IMPORTS 句の値として指定できます。
次の例のコードは、 MYPROC
という名前のプロシージャを作成し、ファイル MyCompiledJavaCode.jar
(mystage
ステージ上)をプロシージャの実行環境に含める必要があることを指定します。この場合、 MyCompiledJavaCode.jar
にはプロシージャのハンドラー(MyJavaClass.run
のコンパイル済みコード)が含まれています。
CREATE OR REPLACE PROCEDURE MYPROC(value INT, fromTable STRING, toTable STRING, count INT)
RETURNS INT
LANGUAGE JAVA
RUNTIME_VERSION = '11'
PACKAGES = ('com.snowflake:snowpark:latest')
IMPORTS = ('@mystage/MyCompiledJavaCode.jar')
HANDLER = 'MyJavaClass.run';