EXECUTE JOB SERVICE¶
注釈
この操作は現在、 Snowflake’s Support Policy and Service Level Agreement に規定されたService Levelセットの対象外です。
Snowpark Container Servicesサービスをジョブとして実行します。
CREATE SERVICE を使用して作成されたサービスは長時間実行されるため、不要になった場合は明示的に停止する必要があります。一方、 EXECUTE JOB SERVICE を使用して作成されるジョブは、ストアドプロシージャと同様、コードが終了すると終了するサービスです。すべてのコンテナーが終了すると、ジョブは完了です。
デフォルトでジョブは同期的に実行されます。 EXECUTE JOB SERVICE コマンドが終了するのは、すべてのコンテナーが終了した後です。
また、オプションのパラメーター ASYNC を指定することで、ジョブサービスを非同期に実行することもできます。この場合、ジョブを実行している間、コマンドは即座に返されます。DESCRIBE SERVICE コマンドを使用してジョブの完了をポーリングし、 SYSTEM$WAIT_FOR_SERVICES 関数を呼び出してジョブの完了を待つことができます。
ジョブサービスの完了後、Snowflakeはジョブサービスに割り当てられたリソースを自動的にクリーンアップして、コストを削減します。DESCRIBE SERVICE および SHOW SERVICES コマンドを使用することで、最大14日間、引き続きジョブのメタデータにアクセスできます。14日後、Snowflakeはジョブを自動的に削除します。
ジョブが終了したとき、そのコンピュートプールノードで他のジョブやサービスが実行されていなければ、Snowflakeはそのノードをアイドル状態であるとみなし、再利用する可能性があります。その場合、 SYSTEM$GET_SERVICE_LOGS はジョブコンテナーからローカルコンテナーログを返しません。コンテナーログをイベントテーブルに永続化することを検討してください。詳細については、 コンテナログの公開とアクセス をご参照ください。
コマンドパラメーターは特定の順序で指定する必要があることに注意してください。詳細については、 使用上の注意 をご参照ください。
- こちらもご参照ください。
構文¶
EXECUTE JOB SERVICE
IN COMPUTE POOL <compute_pool_name>
{
fromSpecification
| fromSpecificationTemplate
}
[ NAME = [<db>.<schema>.]<name> ]
[ ASYNC = { TRUE | FALSE } ]
[ REPLICAS = = <num> ]
[ QUERY_WAREHOUSE = <warehouse_name> ]
[ COMMENT = '<string_literal>']
[ EXTERNAL_ACCESS_INTEGRATIONS = ( <EAI_name> [ , ... ] ) ]
条件:
fromSpecification ::= { FROM @<stage> SPECIFICATION_FILE = '<yaml_file_stage_path>' | FROM SPECIFICATION <specification_text> }fromSpecificationTemplate ::= { FROM @<stage> SPECIFICATION_TEMPLATE_FILE = '<yaml_file_stage_path>' | FROM SPECIFICATION_TEMPLATE <specification_text> } USING ( <key> => <value> [ , <key> => <value> [ , ... ] ] )
必須パラメーター¶
IN COMPUTE POOL compute_pool_nameサービスを実行するアカウントのコンピュートプール名を指定します。
FROM stage仕様ファイルが保管されているSnowflake内部ステージを指定します。例えば、
@tutorial_stageです。SPECIFICATION_FILE = 'yaml_file_stage_path'ステージ上の サービス仕様 ファイルへのパスを指定します。例えば、
'some-dir/echo_spec.yaml'です。SPECIFICATION_TEMPLATE_FILE = 'yaml_file_stage_path'ステージ上の サービス仕様 テンプレートファイルへのパスを指定します。たとえば、
'some-dir/echo_template_spec.yaml'です。SPECIFICATION_TEMPLATE_FILEを指定する場合は、USINGパラメーターが必要です。FROM SPECIFICATION specification_textFROM SPECIFICATION_TEMPLATE specification_textサービス仕様 を指定します。ドル記号のペア (
$$)を使用して、仕様文字列の最初と最後を区切ることができます。SPECIFICATION_TEMPLATEを指定する場合は、USINGパラメーターが必要です。
オプションのパラメーター¶
NAME = [db.schema.]nameジョブなどを実行するサービスの名前(つまり、識別子)。サービスが作成されるスキーマで一意にする必要があります。
特殊文字や大文字小文字を区別するための引用符付きの名前はサポートされていません。同じ制約は、サービスを作成するデータベース名やスキーマ名にも適用されます。つまり、引用符のないデータベース名とスキーマ名は、サービスを作成する場合に有効です。
デフォルト:指定しない場合、Snowflakeはサービスの名前を
JOB_<query_job_uuid>形式で生成します。ASYNC = { TRUE | FALSE }ジョブを非同期に実行するかどうかを指定します。
デフォルト: FALSE
REPLICAS = num実行するジョブのレプリカの数を指定します。詳細については、 ジョブサービスの複数のレプリカの実行(バッチジョブ) をご参照ください。
デフォルト:1。
QUERY_WAREHOUSE = warehouse_nameサービスコンテナがクエリを実行するためにSnowflakeに接続するけれども、使用するウェアハウスを明示的に指定しない場合に使用するウェアハウス。このパラメーターはNative Appsのオブジェクトリファレンスもサポートします。詳細については、 コンシューマーから参照およびオブジェクトレベル権限をリクエストする をご参照ください。
デフォルト: なし。
EXTERNAL_ACCESS_INTEGRATIONS = ( EAI_name [ , ... ] )ジョブに外部サイトへのアクセスを許可する 外部アクセス統合 の名前を指定します。このリストの名前は大文字と小文字を区別します。デフォルトでは、アプリケーションコンテナーはインターネットにアクセスする権限を持っていません。ジョブが外部サイトにアクセスできるようにするには、外部アクセス統合(EAI)を作成し、その統合を使用するようにジョブを構成します。詳細については、 ネットワークエグレスの構成 をご参照ください。
COMMENT = 'string_literal'サービスのコメントを指定します。
デフォルト: 値なし
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )タグ の名前とタグ文字列の値を指定します。
タグ値は常に文字列であり、タグ値の最大文字数は256です。
ステートメントでのタグの指定に関する情報については、 Tag quotas をご参照ください。
USING ( key => value [ , key => value [ , ... ] ] )仕様テンプレートの展開をパラメーター化する値を提供できるようにします。
USINGは、仕様テンプレート(FROM SPECIFICATION_TEMPLATE_FILEまたはFROM SPECIFICATION_TEMPLATE)を使用する場合に必要です。キーと値のペアはコンマ区切りのリストを形成する必要があります。条件:
keyはテンプレート変数の名前です。テンプレート変数名は、オプションで二重引用符(")で囲むことができます。valueはテンプレートの変数に割り当てる値です。文字列値は'または$$で囲む必要があります。仕様テンプレート引数値は、英数字か有効な JSON にする必要があります。
アクセス制御の要件¶
この操作の実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
注意 |
|---|---|---|
CREATE SERVICE |
スキーマ |
|
USAGE |
コンピューティングプール |
|
READ |
ステージ |
これは仕様が保管されるステージです。 |
READ |
イメージリポジトリ |
仕様によって参照されるイメージのリポジトリ。 |
Operating on an object in a schema requires at least one privilege on the parent database and at least one privilege on the parent schema.
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
EXECUTE JOB SERVICE の呼び出し時には、パラメーターを次の順序で提供する必要があります。コンピューティングプール、次にその他のプロパティ、最後にサービス仕様(ステージ上の仕様ファイル名またはインライン仕様のいずれかを使用)の順に指定します。
メタデータについて:
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
例¶
非同期でジョブを実行する¶
Snowpark Container Servicesジョブサービスを非同期で実行します。
EXECUTE JOB SERVICE
IN COMPUTE POOL tutorial_compute_pool
NAME = tutorial_db.data_schema.example_job
ASYNC = TRUE
FROM @tutorial_stage
FROM SPECIFICATION $$
<job specification>
$$;
ブロックストレージをマウントした状態でジョブを実行する¶
仕様で構成されたブロックストレージでジョブサービスを実行します。
EXECUTE JOB SERVICE
IN COMPUTE POOL tutorial_compute_pool
NAME=tutorial_job_service
FROM SPECIFICATION $$
spec:
container:
- name: main
image: /tutorial_db/data_schema/tutorial_repository/my_job_image:latest
volumeMounts:
- name: block-vol1
mountPath: /opt/block/path
volumes:
- name: block-vol1
source: block
size: 10Gi
blockConfig:
iops: 4000
throughput: 200
$$;
このコマンドでは、オプションのパラメーター(ASYNC)は指定されません。そのため、Snowflakeはコマンドを同期的に実行します。
バッチジョブの実行¶
REPLICAS パラメーターを指定して、ジョブサービスのインスタンスを3つ実行します。
EXECUTE JOB SERVICE
IN COMPUTE POOL my_pool
NAME = tutorial_2_job_service
REPLICAS = 3
FROM SPECIFICATION $$
spec:
containers:
- name: main
image: my_repo/my_job_image:latest
$$;
各ジョブサービスレプリカのステータスを検索する SHOW SERVICE INSTANCES IN SERVICE コマンドを使用します。
SHOW SERVICE INSTANCES IN SERVICE tutorial_2_job_service;
出力例:
+---------------+-------------+------------------------+----------------+-------------+-----------+------------------------------------------------------------------+----------------------+----------------------+--------------+
| database_name | schema_name | service_name | service_status | instance_id | status | spec_digest | creation_time | start_time | ip_address |
|---------------+-------------+------------------------+----------------+-------------+-----------+------------------------------------------------------------------+----------------------+----------------------+--------------|
| TUTORIAL_DB | DATA_SCHEMA | TUTORIAL_2_JOB_SERVICE | DONE | 0 | SUCCEEDED | 80b42d8e1ec39dbaa7e2b9b6591e4b0cc11f74304703f56b50e1dfc10f421ac5 | 2025-08-07T00:44:49Z | 2025-08-07T00:44:49Z | 10.244.0.11 |
| TUTORIAL_DB | DATA_SCHEMA | TUTORIAL_2_JOB_SERVICE | DONE | 1 | SUCCEEDED | 80b42d8e1ec39dbaa7e2b9b6591e4b0cc11f74304703f56b50e1dfc10f421ac5 | 2025-08-07T00:44:49Z | 2025-08-07T00:44:57Z | 10.244.0.12 |
| TUTORIAL_DB | DATA_SCHEMA | TUTORIAL_2_JOB_SERVICE | DONE | 2 | SUCCEEDED | 80b42d8e1ec39dbaa7e2b9b6591e4b0cc11f74304703f56b50e1dfc10f421ac5 | 2025-08-07T00:44:49Z | 2025-08-07T00:44:49Z | 10.244.0.203 |
+---------------+-------------+------------------------+----------------+-------------+-----------+------------------------------------------------------------------+----------------------+----------------------+--------------+
出力では、instance_id 列および status 列にはレプリカ番号とそのステータスが表示されます。