SYSTEM$LOCATE_DBT_ARTIFACTS

SYSTEM$LOCATE_DBT_ARTIFACTS (dbt 아티팩트 위치 조회)

지정한 dbt 프로젝트 객체 실행의 아티팩트 위치(예: manifest.json)를 반환해요.

dbt 아티팩트와 로그에 프로그래밍 방식으로 접근하려면 DBT_PROJECT_EXECUTION_HISTORY 함수와 함께 이 함수를 사용해요.

출처: Snowflake SQL Reference - SYSTEM$LOCATE_DBT_ARTIFACTS

본문

구문

SYSTEM$LOCATE_DBT_ARTIFACTS ( '<query_id>' )

인자

query_id

파일을 찾으려는 dbt 프로젝트 객체 실행의 쿼리 ID예요.

반환 값

이 함수는 실행의 dbt 프로젝트 객체 아티팩트에 대한 파일 경로를 반환해요(예: snow://dbt/DBTEST.PUBLIC.MY_DBT_PROJECT/results/query_id_01bf3f5a-010b-4d87-0000-53493abb7cce/).

자세한 내용과 예시는 dbt 아티팩트와 로그에 프로그래밍 방식으로 접근을 참고해요.

이는 마지막 실행을 검색하는 것이 아니라 지정한 쿼리의 결과 디렉터리예요. 그 독립형 대상 파일에는, 있을 경우 manifest.json, semantic_manifest.json, run_results.json, sources.json이 포함될 수 있고, logs/dbt.log에는 현재 실행의 로그가 들어 있어요. 전체 디렉터리 구조는 결과 디렉터리 내용을 참고해요.

이 함수는 위치를 반환해요. 반환된 위치를 검사하려면 LIST를, 파일을 다운로드하려면 GET을 사용해요. EXECUTE DBT PROJECT의 IMPORTS 절에서 사용하면 SYSTEM$LOCATE_DBT_ARTIFACTS는 dbt_artifacts.zip을 포함한 결과 디렉터리를 가져오지만 ZIP 파일은 압축을 풀지 않아요. 위치를 AS 'state'로 가져오면 Snowflake는 쿼리의 결과 디렉터리를 ./imports/state에 마운트하며, dbt 아티팩트는 ./imports/state/target에 있어요. 컴파일된 SQL 같은 보관된 대상과 로그가 필요할 때는 SYSTEM$LOCATE_DBT_ARCHIVE를 직접 사용해요. Snowflake가 아카이브를 자동으로 압축 해제해요.

액세스 제어 요구 사항

이 함수는 Workspaces가 아닌 dbt 프로젝트 객체에만 사용할 수 있으며, 다음 권한 중 하나가 있어야 해요:

  • dbt 프로젝트 객체에 대한 OWNERSHIP, USAGE 또는 MONITOR 권한

이 권한에 대한 자세한 내용은 dbt 프로젝트 객체 권한을 참고해요.

스키마 안의 객체를 조작하려면 상위 데이터베이스에 대한 권한이 하나 이상, 상위 스키마에 대한 권한이 하나 이상 필요해요.

지정한 권한 집합을 가진 사용자 지정 역할을 만드는 방법은 사용자 지정 역할 만들기를 참고해요.

보안 객체에 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어 개요를 참고해요.

사용 참고 사항

  • 이 시스템 함수는 dbt 프로젝트 객체에서만 작동하며 Workspaces에는 사용할 수 없어요.
  • CREATE DBT PROJECT 또는 ALTER DBT PROJECT … DEPLOY에서 생성된 쿼리 ID는 이 시스템 함수에서 지원되지 않아요.
  • 파일 내용의 직접 쿼리(예: 쿼리 예시)는 지원되지 않아요.
  • query_id가 NULL이거나 dbt 실행이 아니면 오류가 발생해요.
  • dbt 프로젝트 결과는 최대 14일간 사용 가능해요.
  • 실행이 업로드되기 전에 타임아웃되거나, 취소되거나, 실패하면 파일을 사용할 수 없을 수 있어요. 이런 경우 실행은 dbt 이력에서 UNHANDLED ERROR로 나타나요.
  • 아티팩트는 실행이 완료된 후에만 사용할 수 있으므로 진행 중인 실행의 아티팩트를 찾는 데 이 함수를 사용할 수 없어요.

예시

Snowflake가 dbt 프로젝트 객체 실행 아티팩트를 저장한 스테이지 경로를 보려면 다음 예시와 같이 SYSTEM$LOCATE_DBT_ARTIFACTS 함수를 사용해요. 그런 다음 그 경로를 GET 또는 COPY FILES나 Snowflake CLI와 함께 사용해 manifest.json과 실행 로그 같은 파일을 다운로드할 수 있어요. 컴파일된 SQL 파일은 폴더의 별도 파일이 아니라 dbt_artifacts.zip 아카이브 안에서만 사용할 수 있어요.

팁: 가능하면 DATABASE, SCHEMA, OBJECT_NAME 같은 함수 인자를 사용해 결과를 필터링해요. 이 필터들은 RESULT_LIMIT(기본값: 100행) 전에 적용되므로, 잠재적으로 잘린 결과 집합을 WHERE 절로 필터링하는 대신 가장 관련성 높은 결과를 얻을 수 있어요.

--가장 최근 dbt 프로젝트 객체 실행을 조회
SET latest_query_id = (SELECT query_id
  FROM TABLE(SNOWFLAKE.INFORMATION_SCHEMA.DBT_PROJECT_EXECUTION_HISTORY(
    DATABASE => 'ANALYTICS_DB',
    SCHEMA => 'DBT_PROD',
    OBJECT_NAME => 'FINANCE_ANALYTICS'
  ))
  ORDER BY query_end_time DESC LIMIT 1);

--dbt 프로젝트 객체 아티팩트 폴더의 위치를 가져오기
SELECT SYSTEM$LOCATE_DBT_ARTIFACTS($latest_query_id);
+-------------------------------------------------------------------------------------------------+
| SYSTEM$LOCATE_DBT_ARTIFACTS($LATEST_QUERY_ID)                                                   |
+-------------------------------------------------------------------------------------------------+
| snow://dbt/TESTDBT.PUBLIC.MY_DBT_PROJECT/results/query_id_01c01096-010c-0ccb-0000-a99506bd199e/ |
+-------------------------------------------------------------------------------------------------+
--가져온 dbt 실행의 모든 파일을 나열
ls 'snow://dbt/TESTDBT.PUBLIC.MY_DBT_PROJECT/results/query_id_01bf3f5a-010b-4d87-0000-53493abb7cce/';

내부 스테이지를 만들고 찾은 아티팩트를 그 안에 복사해 가져올 수도 있어요. 전체 예시는 dbt 아티팩트와 로그에 프로그래밍 방식으로 접근을 참고해요.

더 알아보기