Snowflakeでdbtプロジェクトを監視する

dbt Projects on Snowflake のモニタリング機能を使用して、dbtプロジェクト実行を手動で実行するか、タスクを使用してスケジュール上でdbtプロジェクトオブジェクトを実行するかを検査できます。

Snowsight 左側のナビゲーションメニューで Monitoring » dbt projects を選択し、dbtプロジェクトオブジェクトの実行履歴、タスクグラフ、クエリ詳細を表示します。ワークスペースがタスクスケジュールに従って実行されるdbtプロジェクトオブジェクトに接続されると、ワークスペース内からタスク実行履歴とタスクグラフを開くことができます。

プログラムでdbtアーティファクトやログにアクセスすることもできます。

dbtプロジェクトのモニタリング機能を有効にする

dbtプロジェクトオブジェクトのモニタリング機能を有効にするには、以下の SQL 例で示すように、dbtプロジェクトオブジェクトが作成されたデータベースとスキーマ上で LOG_LEVEL、TRACE_LEVEL および METRIC_LEVEL を設定します。

ALTER SCHEMA my_db.my_dbt_project_schema SET LOG_LEVEL = 'INFO';
ALTER SCHEMA my_db.my_dbt_project_schema SET TRACE_LEVEL = 'ALWAYS';
ALTER SCHEMA my_db.my_dbt_project_schema SET METRIC_LEVEL = 'ALL';
Copy

dbtプロジェクトオブジェクトのスケジュールされた実行を監視する

タスクを使用してスケジュール上でdbtプロジェクトを実行し、dbtプロジェクトオブジェクトにワークスペースが接続されている場合は、dbt Projects on Snowflake のワークスペースを使用して、タスク実行履歴およびタスクグラフのモニタリング情報にすばやくアクセスできます(該当する場合)。

注釈

この機能はdbtプロジェクトオブジェクトに接続されたワークスペースでのみ利用できます。

ワークスペースからdbtプロジェクトオブジェクトのスケジュールされた実行を監視するには

  1. ワークスペースエディターの右上にあるdbtプロジェクトメニューから、Scheduled runs の下にある View schedules を選択します。

  2. リストから検査するスケジュール(タスク)を選択し、View details を選択します。

    タスクの情報ペインが開き、Task details、タスク Graph (該当する場合)、およびこのタスクの Run history を表示できます。詳細については、 Snowsight でタスクとタスクグラフを表示する をご参照ください。

  3. Run history から、リスト内のスケジュールされたdbtプロジェクト実行の場合は、右端のクエリ履歴を開く ボタンを選択すると、クエリ詳細、クエリプロファイル、実行のクエリテレメトリが表示されます。詳細については、 特定のクエリの詳細とプロファイルを確認する をご参照ください。

Snowsight でdbtプロジェクトを監視する

Snowsight の Monitoring を使用して、dbtプロジェクトの実行(実行)に関する詳細なモニタリング情報を表示できます。dbtプロジェクトオブジェクトのモニタリング情報を表示するには、権限が必要です。

  1. ナビゲーションペインで、Monitoring » dbt projects を選択します。ヒストグラムには、dbtプロジェクトの実行頻度と、実行されたプロジェクトのリストが表示されます。

    dbtプロジェクトのリストには、次の情報を含む列が含まれています。日付範囲、コマンド、実行ステータスでリストのフィルタリングが可能です。

    • PROJECT - dbtプロジェクトオブジェクトの名前と、選択した期間における実行(実行)数。

    • LAST COMMAND - 最後の実行時に実行されたdbtコマンド。

    • LAST RUN STATUS - 実行の結果。SucceededExecuting または Failed

    • LAST RUN - 最後の実行からの経過時間。ソート順を逆にするには、列ヘッダーを選択します。デフォルトでは、最新の実行が最初に表示されます。

    • PREVIOUS RUNS - ステータスによる、選択した期間における実行の数。

    • DATABASE および SCHEMA - dbtプロジェクトオブジェクトが保存されるデータベースとスキーマ。

    • LAST RUN PARAMETERS - 最後のdbtプロジェクト実行の EXECUTE DBT PROJECT コマンドで指定されるdbtコマンドライン引数(ARGS)。

  2. 個々のプロジェクトの実行を検査するには、リストからdbtプロジェクトオブジェクトを選択します。

    そのdbtプロジェクトオブジェクトに対する、データベースオブジェクトエクスプローラーのdbtプロジェクト詳細ページが開きます。

    デフォルトでは Run history タブが選択され、選択された期間に実行された各ジョブについて、以下の情報が表示されます。

    • COMMAND - 最後の実行時に実行されたdbtコマンド。

    • STATUS - 実行の結果。SucceededExecuting または Failed

    • RUN TIME - 最後の実行からの経過時間。ソート順を逆にするには、列ヘッダーを選択します。デフォルトでは、最新の実行が最初に表示されます。

    • PARAMETERS 最後のdbtプロジェクト実行の EXECUTE DBT PROJECT コマンドで指定されるdbtコマンドライン引数(ARGS)。

  3. 実行のジョブの詳細を見るには、リストから選択します。

    次のタブが含まれる、dbt実行詳細ペインが開きます。

    • デフォルトでは Job details タブが選択され、次の情報が表示されます。

      • Status - 実行の結果。SucceededExecuting または Failed

      • Start timeEnd time および Duration - 実行開始時間、終了時間、実行にかかった時間。

      • Warehouse size - 実行の実行に使用されたウェアハウスのサイズ。

      • Query ID - dbtプロジェクトコマンドを実行したクエリの一意の識別子。クエリ履歴でクエリの詳細を表示するには、クエリ ID を選択します。

      • SQL text - 実行した EXECUTE DBT PROJECT コマンド。

      • dbt <command> - 実行された dbt コマンドの場合(例: run または build)、dbt model、実行を実行するための time taken、およびそのモデル実行の status が表示されます。

    • Output タブには、実行中にdbtプロジェクトによって生成された標準出力が表示されます。

    • Trace タブには、実行中にdbtプロジェクトによって生成されたトレース情報が表示されます。トレースの詳細については、トレースデータの表示 をご参照ください。

  4. より詳細なクエリ情報を表示するには、Job details タブから Query ID を選択します。

    ジョブ実行クエリのクエリ履歴ページが開き、選択したdbt実行に対する Query DetailsQuery Profile、および Query Telemetry が表示されます。

    詳細については、 特定のクエリの詳細とプロファイルを確認する をご参照ください。

プログラムでdbtのアーティファクトとログにアクセスする

デフォルトでは、dbtプロジェクトオブジェクトが実行されると、dbtが /target ディレクトリに書き込むログファイルとアーティファクトは dbt_results.zip ファイルに保存されます。EXECUTE DBT PROJECT の出力と、クエリ履歴の Query details タブで利用可能な OUTPUT_ARCHIVE_URL の値によって、このファイルへの参照が提供されます。この OUTPUT_ARCHIVE_URL ディレクトリを直接使用することはできません。代わりに URL を使用して、名前付き内部ステージにファイルをコピーする必要があります。その後、名前付きステージからファイルにアクセスできます。

次の例は、my_dbt_stage という名前の内部ステージを作成し、その名前のステージに利用可能な dbt_results.zip ファイルをコピーしてから、ファイルにアクセスするための署名付き URL を出力する SQL コマンドを示しています。output_archive_url を EXECUTE DBT PROJECT を返す実際の値と置き換えます。

-- Create a named internal stage using encryption

CREATE OR REPLACE STAGE my_dbt_stage
  ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');

-- Copy the dbt results zip file into the named stage

COPY FILES INTO @my_dbt_stage/results/
  FROM (
     SELECT '{output_archive_url}', 'dbt_results.zip');

-- Get a presigned URL from which to access the file directly

SELECT get_presigned_url(@my_dbt_stage, 'results/dbt_results.zip');
Copy

前の例は、タスクから実行する EXECUTE DBT PROJECT コマンドに対して機能しません。タスクはシステムユーザーとして実行されるため、結果にアクセスするにはシステムユーザーが必要です。

タスクを使用して結果にアクセスするには、タスクから呼び出すことができるストアドプロシージャを作成してdbtプロジェクトを実行し、結果をコピーします。

次の例では、my_dbt_project というdbtプロジェクトを実行し、既に存在する my_dbt_stage という名前の内部ステージに結果をコピーする run_dbt_and_copy_results_file という名前のストアドプロシージャを作成します。ストアドプロシージャは、タイムスタンプを使用して、名前付きステージにコピーする各結果ファイルに名前を付けます。

CREATE OR REPLACE PROCEDURE my_db.public.run_dbt_and_copy_results_file()
RETURNS varchar
LANGUAGE SQL
COMMENT = 'Execute dbt and copy the files in the same sproc call.'
EXECUTE AS CALLER
AS
DECLARE
    output_archive_url varchar;
BEGIN
    EXECUTE DBT PROJECT my_db.my_schema.my_dbt_project args='run';
    output_archive_url := (SELECT output_archive_url FROM TABLE(RESULT_SCAN(last_query_id())));
    COPY FILES INTO @my_dbt_stage/results/ FROM (SELECT :output_archive_url, (to_char(current_timestamp(), 'YYYYMMDD_HH24_MI') || '.zip'));
END;
Copy

次の例では、実行コマンドとコピーコマンドを使用して、6時間ごとにストアドプロシージャを実行する run_my_dbt_project という名前のタスクを作成します。

CREATE OR REPLACE TASK my_db.my_schema.run_my_dbt_project
  WAREHOUSE = my_dbt_warehouse
  SCHEDULE = '6 hours'
AS
  CALL my_db.public.run_dbt_and_copy_results_file();
Copy