シナリオ別ワークフローのスケジューリング¶
このトピックでは、2つの一般的なシナリオでノートブックをスケジュールするための詳細なワークフローを説明します。
** シナリオA: ** プライベートワークスペースでの開発 - Snowsight から直接ノートブックをスケジュールする
** シナリオB: ** 実稼働( CI/CD ) - CI/CD パイプラインを使ってGitリポジトリからノートブックをデプロイします。
注釈
ノートブックのスケジューリングは現在、共有ワークスペースではサポートされていません。
シナリオA:プライベートワークスペースでの開発¶
ナビゲーションメニューで Projects » Workspaces を選択します。
+ Add new » Notebook を選択して新しいノートブックを作成するか、スケジュールする既存のノートブックを開きます。
注釈
スケジュールするノートブックで実行コンテキスト(データベースとスキーマ)が指定されていることを確認してください。詳しくは :ref:` 実行コンテキストの設定 <label-nb_in_ws_edit_run_execution_context>` を参照してください。
Create Schedule を選択します。
Schedule a Notebook Task ダイアログで、次の情報を入力します。
基本設定
** タスク名: ** スケジュールされたタスクの一意の名前。デフォルトの名前は
{notebook-name}_task_#ですが、必要に応じて更新できます。** 所有者ロール: ** タスクを実行するSnowflakeロール。スケジュールされたノートブックによって行われるすべての操作を実行するために、必要な権限を持つロールを選択します。このロールには、次の権限が必要です。
ノートブックが使用するデータベースオブジェクトの読み取り/書き込み。
ウェアハウス、コンピューティングプール、統合へのアクセス。
タスクとプロジェクトオブジェクトの作成/更新。
** 場所: ** タスクオブジェクトと関連するノートブックプロジェクトオブジェクトが作成されるデータベースとスキーマ。ロールに CREATE TASK および USAGE 権限があるスキーマを選択します。ロールにスキーマ上の USAGE 権限しかない場合も、 CREATE NOTEBOOK PROJECT 権限が付与されていることを確認してください。
** 頻度: ** ノートブックの実行頻度。次から選択します:毎時、毎日、毎週、毎月、またはカスタム(Cronスケジュール)。すべての実行時間にはローカルタイムゾーンが使用されます。
** 詳細設定(特に指定されていない限り、すべてのフィールドが必須です) **
** ノートブックプロジェクト名: ** Snowflakeがタスク実行用に作成するノートブックのプロジェクトコンテナの一意の名前。編集しない場合、Snowflakeはデフォルト名を提供します。
** パラメーター(オプション): ** 実行時にノートブックに渡され、(
sys.argvで)コマンドライン引数として表示されるキー値パラメーター。パラメーターは、日付、環境フラグ、しきい値、モデルのバージョンを渡すのに便利です。パラメーターは空白区切りの値として Snowsight で渡すか、ARGUMENTS = 'env prod'として EXECUTE NOTEBOOK PROJECT コマンドで渡すことができます。詳細については、 パラメーター付きノートブックの実行 をご参照ください。** ランタイムバリアント: ** ノートブックの実行に使用されるランタイム環境。次から選択します:
**CPU : ** CPU コンテナランタイム環境を使用し、 CPU コンピューティングプール(たとえば、自動的にプロビジョニングされる
SYSTEM_COMPUTE_POOL_CPUなど)で実行されます。**GPU : ** GPU アクセラレーテッドライブラリを含む GPU コンテナランタイム環境を使用し、 GPU コンピューティングプール(
SYSTEM_COMPUTE_POOL_GPUなど)で実行されます。**Pythonバージョン: ** タスクの実行中に使用されるPythonバージョン。
** ランタイムバージョン: ** ベースとなるコンテナランタイムイメージ。正しいランタイムバージョンを選択することで、開発とスケジュールされた実行の間にノートブックが一貫して実行されるようになります。
** コンピューティングプール: ** ノートブックタスクを実行するコンピューティングプール。スケジュールされた実行時に、コンピューティングプールに容量(空きノード)があることを確認します。スケジュールされた実行が失敗しないようにするには、専用のコンピューティングプールを使用し、他の SPCS サービスがフル容量を占めないようにすることをお勧めします。
** クエリウェアハウス: ** ノートブック内ですべての SQL クエリに使用されるSnowflakeウェアハウス。
** 外部アクセス統合(オプション): ** ノートブックが使用する外部アクセス統合( EAIs )を定義します。ノートブックが外部の APIs 、サードパーティサービス、またはSnowflakeの内部ステージ外のクラウドストレージを必要とする場合、 EAIs が必要になります。EAIs がリストにない場合、選択したロールは統合を所有していないか、権限を持っていません。
** 要件ファイル(オプション): **
REQUIREMENTS_FILEパラメーターを使用した反復可能な実行のためのPython依存関係を事前インストールします。詳細については、 パッケージとランタイムの管理 をご参照ください。
スケジュールプレビューを確認し、 Create を選択します。
シナリオB:実稼働( CI/CD )¶
実稼働環境では、Gitベースのワークスペースでノートブックコードを管理する(詳細については ワークスペースとGitリポジトリの統合 を参照してください)、またはお好みの IDE でローカル開発を行うことをお勧めします。CI/CD パイプライン( GitHub アクションなど)を使用して、Snowflakeの内部ステージまたは仮ステージにファイルをデプロイできます。
このパターンの実践的なウォークスルーについては、GitHubの`Snowflake Notebooksを使用したデータエンジニアリング入門<https://www.snowflake.com/en/developers/guides/data-engineering-with-notebooks/>`_クイックスタートと、付属の`コードリポジトリ<https://github.com/Snowflake-Labs/sfguide-data-engineering-with-notebooks>`_を参照してください。
ファイルがステージ上にあると、次の操作を行えます。
そのステージの場所からソースされたノートブックプロジェクトオブジェクト( NPO )を作成します。
自動実行にSnowflakeタスクを使用する NPO をスケジュールします。
** ステージを作成する **
CREATE STAGE を使用して内部ステージまたは仮ステージを作成します。
-- Ensure the landing zone exists CREATE STAGE IF NOT EXISTS <database_name>.<schema_name>.<stage_name>;
** 内部ステージまたは仮ステージにノートブックファイルをロード/デプロイする **
CI/CD パイプラインは
.ipynbファイルをSnowflakeステージにアップロードする必要があります。:doc:`PUT </sql-reference/sql/put>`コマンドを使用して、ノートブックファイルがノートブックプロジェクトで読み取り可能なステージにロードされていることを確認します。PUT file://<absolute_path_to_file>/ @<database_name>.<schema_name>.<stage_name> AUTO_COMPRESS=FALSE OVERWRITE=TRUE;
例:
PUT file://notebooks/ml_model/train.ipynb @<database_name>.<schema_name>.<stage_name> AUTO_COMPRESS=FALSE OVERWRITE=TRUE;
** ノートブックプロジェクトオブジェクト( NPO )を作成または更新する **
NPO を作成(または更新)して、デプロイされたノートブックファイルを含む内部ステージまたは仮ステージを参照します。
CREATE NOTEBOOK PROJECT IF NOT EXISTS <database_name>.<schema_name>.<project_name> FROM '@<database_name>.<schema_name>.<stage_name>';
** ノートブックプロジェクトの詳細を変更する **
その後のコード変更では、パイプラインは ALTER コマンドを実行します。これにより、オブジェクトをドロップして再作成することなく、プロジェクトを最新バージョンのコードに更新することができます。
-- Update the project with the latest code from the stage ALTER NOTEBOOK PROJECT <database_name>.<schema_name>.<project_name> ADD VERSION FROM '@<database_name>.<schema_name>.<stage_name>';
** ノートブックプロジェクトを実行(タスクでオーケストレーション)する **
タスクを作成して NPO をスケジュールして実行します。Snowflakeタスクを使用して、 NPO のスケジュールと実行パラメーターを定義します。
注釈
ノートブック実行コンテキストを指定していることを確認してください(スケジュールしたいノートブックのデータベースとスキーマを使用します)。詳細については、 実行コンテキストを設定する をご参照ください。
-- Create or replace the task to orchestrate the notebook CREATE OR REPLACE TASK <database_name>.<schema_name>.<task_name> WAREHOUSE = '<warehouse_name>' SCHEDULE = 'USING CRON 0 9 * * * America/Los_Angeles' AS EXECUTE NOTEBOOK PROJECT <database_name>.<schema_name>.<project_name> MAIN_FILE = 'snow://workspace/<workspace_hash>/path/to/notebook.ipynb' COMPUTE_POOL = 'SYSTEM_COMPUTE_POOL_CPU' RUNTIME = 'V2.2-CPU-PY3.12' QUERY_WAREHOUSE = '<warehouse_name>' ARGUMENTS = '<db_name> <schema_name> <warehouse_name>';
スケジュールされたノートブックにパラメーターを渡す方法については、 パラメーター付きノートブックの実行 を参照してください。
** ノートブックの実行または実行履歴を表示する **
タスクを実行後、 Snowsight でその成功または失敗を監視し、 CI/CD のデプロイが期待どおりに実行されていることを確認します。実行履歴の表示について、詳しいやり方は :ref:` ノートブック実行スケジュールの表示 <label-nb_in_ws_schedule_view_runs>` を参照してください。
Snowsight はノートブックの非インタラクティブ(ヘッドレス)実行をサポートしています。これにより、 Snowsight を開くことなく、また定期的なスケジュールの必要なく、ノートブックのプログラム実行をトリガーできます。
ヘッドレス実行は、Airflow、Prefect、Dagster、 CI/CD パイプラインなどのツールや、ノートブックをプログラムで実行する必要がある外部システムによってオーケストレーションされたタスク、スケジュールされたタスク、またはワークフローを対象としています。詳細については、 CREATE NOTEBOOK PROJECT をご参照ください。
注釈
このワークフロー( CREATE NOTEBOOK PROJECT や CREATE TASK など)で SQL コマンドを実行するには、ノートブックのセル内からではなく、ワークスペースの SQL ファイルまたは SQL ワークシートから実行する必要があります。
