コードで依存関係を利用できるようにする方法

ユーザー定義関数(UDF)またはストアドプロシージャが、 UDF またはプロシージャの外部にあるコードまたはファイルに依存している場合は、UDF またはプロシージャをステージにアップロードし、その場所で参照することで、依存関係を使用できるようにすることができます。

たとえば、 UDF またはプロシージャにより次にアクセスすることが必要になる場合があります。

  • モジュール内のPythonハンドラーコード。

  • JAR にコンパイルおよびパッケージ化されたJavaまたはScalaハンドラーコード。

  • Java、Python、またはScalaで記述された依存コード。

  • ハンドラーコードにより読み取られ、その名前と場所が UDF を作成した時点で判明しているファイル。これは、たとえば、構成ファイルなどで役に立つ場合があります。

注釈

CREATE FUNCTION または CREATE PROCEDURE の PACKAGES 句を使用して、Snowflakeに含まれるライブラリをインポートすることもできます。

このトピックの内容:

高レベルのステップ

次のステップに従って、依存関係を関数またはプロシージャで使用できるようにします。

  1. ハンドラーが使用できる ステージを選択または作成します

  2. ステージに 依存関係をアップロードします

  3. 関数またはプロシージャを作成するときに、 IMPORTS で 依存関係を参照します

依存ファイルのステージの選択または作成

依存関係ファイルを関数またはプロシージャで使用できるようにするには、実行時に到達できるステージに依存関係ファイルをコピーする必要があります。関数またはプロシージャの所有者は、ステージに対する READ 権限 を持っている必要があります。

通常、 PUT コマンドを使用して、名前付き内部ステージに依存関係をアップロードします。ステージの作成の詳細については、 CREATE STAGE をご参照ください。

注釈

Snowflake GUI を介して PUT コマンドを実行することはできません。 PUT を実行するには SnowSQL を使用します。.jarファイルをステージにコピーするための PUT コマンドの例については、このトピック内の 依存関係のステージへのアップロード をご参照ください。

依存関係に対して、次に挙げる種類のステージのいずれかを選択または作成します。

  • ユーザーまたは名前付き内部ステージ。

    PUT コマンドを使用してファイルをアップロードする場合は、名前付きの内部ステージを使用します。内部ステージ型の選択の詳細については、 ローカルファイルに対する内部ステージの選択 をご参照ください。

  • 外部ステージ。

    外部ステージは、 CREATE STAGE で説明されているように、外部ストレージサービスに関連付けられた場所です。(PUT コマンドは、外部ステージへのファイルのアップロードをサポートしていません。)

既存のステージを使用するか、 CREATE STAGE を実行して新しいステージを作成することができます。たとえば、次のコマンドは mystage という名前の新しい内部ステージを作成します。

CREATE STAGE mystage;
Copy

注釈

Snowflakeは現在、テーブルステージを使用してハンドラーコードを格納することはサポートしていません。

依存関係のステージへのアップロード

ストアドプロシージャに必要なファイルをステージにアップロードします。

外部ステージを使用している場合は、そのストレージサービスの手段を使用してファイルをアップロードします。内部ステージを使用している場合は、 PUT コマンドを使用して、ファイルをローカルドライブからステージにコピーできます。コマンドリファレンスについては、 PUT をご参照ください。PUT を使用したファイルのステージングについては、 ローカルファイルシステムからのデータファイルのステージング をご参照ください。

PUT コマンドを使用して、ファイルをステージにアップロードします。

次の例のコードは、 myjar.jarmystage というステージにアップロードし、同じ名前の既存のファイルが存在する場合は上書きします。

PUT file:///Users/MyUserName/MyCompiledJavaCode.jar
  @mystage
  AUTO_COMPRESS = FALSE
  OVERWRITE = TRUE
  ;
Copy

注釈

AUTO_COMPRESS = FALSE を省略すると、 PUT コマンドはファイルを自動的に圧縮します。ステージ上の圧縮ファイルの名前は myjar.jar.gz になります。後で CREATE PROCEDURE などのコマンドを実行するときに、コマンドの IMPORTS 句でこの .gz 拡張子を使用してファイル名を指定する必要があります。

注釈

(PUTコマンドは、外部ステージへのファイルのアップロードをサポートしていません。)ファイルを外部ステージにアップロードするには、クラウドサービスが提供するユーティリティを使用します。

依存関係の参照

作成している関数またはプロシージャに依存関係の場所を認識させるには、関数またはプロシージャの作成に使用する SQL の IMPORTS 句で依存関係の場所を指定します。

ハンドラーが依存するサードパーティライブラリがある場合など、複数の依存ファイルがある場合は、依存ファイルすべてのステージの場所とファイルパスと名前を IMPORTS 句の値として指定できます。

次の例のコードは、 MYPROC という名前のプロシージャを作成し、ファイル MyCompiledJavaCode.jarmystage ステージ上)をプロシージャの実行環境に含める必要があることを指定します。この場合、 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';
Copy