Snowflake에서 dbt 프로젝트 모니터링¶
dbt 프로젝트 오브젝트를 수동으로 실행하거나 작업을 사용하여 일정에 따라 dbt 프로젝트 오브젝트를 실행하는 경우, |sf-dbt|에 대한 모니터링 기능을 사용하여 dbt 프로젝트 실행을 검사할 수 있습니다.
Snowsight 왼쪽 탐색 메뉴에서 Monitoring » :ui:`dbt projects`를 선택하여 dbt 프로젝트 오브젝트에 대한 실행 기록, 작업 그래프, 쿼리 세부 정보를 볼 수 있습니다. 작업 일정에 따라 실행되는 dbt 프로젝트 오브젝트에 작업 공간이 연결되면 작업 공간 내에서 작업 실행 기록 및 작업 그래프를 열 수 있습니다.
dbt 아티팩트와 로그에 프로그래밍 방식으로 액세스할 수도 있습니다.
dbt 프로젝트에 대한 모니터링 기능 활성화¶
dbt 프로젝트 오브젝트에 대한 모니터링 기능을 활성화하려면, dbt 프로젝트 오브젝트가 생성되는 데이터베이스 및 스키마에 LOG_LEVEL, TRACE_LEVEL, METRIC_LEVEL을 설정하세요. 다음 SQL 예제와 같습니다.
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';
dbt 프로젝트 오브젝트의 예약된 실행 모니터링¶
작업을 사용하여 일정에 따라 dbt 프로젝트를 실행하고 작업 공간을 dbt 프로젝트 오브젝트에 연결한 경우, |sf-dbt|용 작업 공간을 사용하여 작업 실행 기록 및 작업 그래프에 대한 모니터링 정보에 빠르게 액세스할 수 있습니다(해당되는 경우).
참고
이 기능은 dbt 프로젝트 오브젝트에 연결된 작업 공간에만 사용할 수 있습니다.
작업 공간에서 dbt 프로젝트 오브젝트의 예약된 실행을 모니터링하려면:
작업 공간 편집기의 오른쪽 상단에 있는 dbt 프로젝트 메뉴의 :ui:`Scheduled runs`에서 :ui:`View schedules`를 선택합니다.
목록에서 검사할 일정(작업)을 선택한 다음, :ui:`View details`를 선택합니다.
작업에 대한 정보 창이 열리고, 여기서 Task details, 작업 Graph`(해당되는 경우), 이 작업의 :ui:`Run history`를 볼 수 있습니다. 자세한 내용은 :doc:/user-guide/ui-snowsight-tasks` 섹션을 참조하십시오.
목록에서 예약된 dbt 프로젝트 실행에 대한 Run history`에서 맨 오른쪽에 있는 쿼리 기록 열기 버튼을 선택하여 쿼리 세부 정보, 쿼리 프로필, 실행에 대한 쿼리 원격 분석을 확인합니다. 자세한 내용은 :ref:`label-snowsight_specific_query_details 섹션을 참조하십시오.
|sf-web-interface|에서 dbt 프로젝트 모니터링¶
|sf-web-interface|의 :ui:`Monitoring`을 사용하여 dbt 프로젝트 실행에 대한 자세한 모니터링 정보를 볼 수 있습니다. dbt 프로젝트 오브젝트에 대한 모니터링 정보를 보려면 권한이 있어야 합니다.
탐색 창에서 Monitoring » :ui:`dbt projects`를 선택합니다. 히스토그램은 dbt 프로젝트 실행 빈도와 실행된 프로젝트 목록을 보여줍니다.
dbt 프로젝트 목록에는 다음 정보가 있는 열이 포함됩니다. 날짜 범위, 명령, 실행 상태를 기준으로 목록을 필터링할 수 있습니다.
PROJECT - 선택한 기간 동안 dbt 프로젝트 오브젝트의 이름과 실행 횟수입니다.
LAST COMMAND - 마지막 실행 중에 실행된 dbt 명령입니다.
LAST RUN STATUS - 실행 결과: Succeeded, Executing 또는 :ui:`Failed`입니다.
LAST RUN - 마지막 실행 이후 경과된 시간입니다. 정렬 순서를 반대로 하려면 열 헤더를 선택하세요. 기본적으로 가장 최근 실행이 먼저 표시됩니다.
PREVIOUS RUNS - 선택한 기간의 상태별 실행 횟수입니다.
DATABASE 및 SCHEMA - dbt 프로젝트 오브젝트가 저장되는 데이터베이스 및 스키마입니다.
LAST RUN PARAMETERS - 마지막 dbt 프로젝트 실행에 대한 EXECUTE DBT PROJECT 명령에 지정된 dbt 명령줄 인자(ARGS)입니다.
개별 프로젝트 실행을 검사하려면 목록에서 dbt 프로젝트 오브젝트를 선택하세요.
데이터베이스 오브젝트 탐색기의 dbt 프로젝트 세부 정보 페이지가 해당 dbt 프로젝트 오브젝트에 대해 열립니다.
Run history 탭은 기본적으로 선택되며, 선택한 기간에 실행된 각 작업에 대해 다음 정보가 제공됩니다.
COMMAND - 마지막 실행 중에 실행된 dbt 명령입니다.
STATUS - 실행 결과: Succeeded, Executing 또는 :ui:`Failed`입니다.
RUN TIME - 마지막 실행 이후 경과된 시간입니다. 정렬 순서를 반대로 하려면 열 헤더를 선택하세요. 기본적으로 가장 최근 실행이 먼저 표시됩니다.
PARAMETERS 마지막 dbt 프로젝트 실행에 대한 EXECUTE DBT PROJECT 명령에 지정된 dbt 명령줄 인자(ARGS)입니다.
실행에 대한 작업 세부 정보를 보려면 목록에서 선택하세요.
다음 탭이 포함된 dbt 실행 세부 정보 창이 열립니다.
Job details 탭은 기본적으로 선택되며 다음 정보를 표시합니다.
Status - 실행 결과: Succeeded, Executing 또는 :ui:`Failed`입니다.
Start time, End time, Duration - 실행이 시작된 시간, 실행이 종료된 시간, 실행에 소요된 시간입니다.
Warehouse size - 실행하는 데 사용된 웨어하우스의 크기입니다.
Query ID - dbt 프로젝트 명령을 실행한 쿼리의 고유 식별자입니다. 쿼리 기록에서 쿼리 세부 정보를 보려면 쿼리 ID를 선택하세요.
SQL text - 실행된 EXECUTE DBT PROJECT 명령입니다.
dbt <command> - 실행된 dbt 명령의 경우(예:
run``또는 ``build
), dbt model, 실행에 대한 time taken, 해당 모델 실행의 :ui:`status`를 보여줍니다.
Output 탭에는 실행 중에 dbt 프로젝트에서 생성된 표준 출력이 표시됩니다.
Trace 탭에는 실행 중에 dbt 프로젝트에서 생성된 추적 정보가 표시됩니다. 추적에 대한 자세한 내용은 추적 데이터 보기 섹션을 참조하세요.
더 자세한 쿼리 정보를 보려면 Job details 탭에서 :ui:`Query ID`를 선택하세요.
작업 실행 쿼리에 대한 쿼리 기록 페이지가 열리며, 선택한 dbt 실행에 대한 Query Details, Query Profile, :ui:`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 명령을 보여줍니다. :samp:`{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');
이전 예제는 작업에서 실행되는 EXECUTE DBT PROJECT 명령에 대해 작동하지 않습니다. 작업은 시스템 사용자로 실행되므로, 결과에 액세스하려면 시스템 사용자가 필요합니다.
작업을 사용할 때 결과에 액세스하려면 작업에서 호출하여 dbt 프로젝트를 실행하고 결과를 복사할 수 있는 저장 프로시저를 만들 수 있습니다.
다음 예제에서는 이름이 ``run_dbt_and_copy_results_file``인 저장 프로시저를 만듭니다. 이 프로시저는 ``my_dbt_project``라는 dbt 프로젝트를 실행하고 결과를 이미 존재하는 ``my_dbt_stage``라는 내부 스테이지에 복사합니다. 저장 프로시저는 타임스탬프를 사용하여, 명명된 스테이지에 복사하는 각 결과 파일의 이름을 지정합니다.
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;
다음 예에서는 이름이 ``run_my_dbt_project``인 작업을 생성합니다. 이 작업은 6시간마다 실행 및 복사 명령으로 저장 프로시저를 실행합니다.
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();