SYSTEM$DBT_GET_LAST_RUN_TARGET

SYSTEM$DBT_GET_LAST_RUN_TARGET

지난 7일 이내의 dbt 프로젝트 객체에 대한 가장 최근의 완료된 실행(성공 여부와 관계없이)에서 dbt 아티팩트(artifact)의 위치를 반환해요. 이 아티팩트를 다른 dbt 프로젝트 실행으로 가져와서 --state와 함께 사용할 수 있어요.

참고: 이 페이지에 설명된 일부 기능은 변경 가능한 live 버전을 사용하는 dbt 프로젝트 객체가 필요해요. live 버전 객체를 얻으려면 2026_06 동작 변경 번들에 옵트인하거나 Snowflake 계정 담당자에게 별도의 단일 live 버전 기능을 활성화해 달라고 요청하세요. 그런 다음 객체를 만들거나 교체하거나, SYSTEM$MIGRATE_DBT_PROJECT로 기존 버전 객체를 마이그레이션하세요. 자세한 내용은 Snowflake의 dbt 프로젝트: dbt 프로젝트 객체가 단일 변경 가능한 live 버전으로 마이그레이션을 참고하세요.

출처: Snowflake SYSTEM$DBT_GET_LAST_RUN_TARGET 함수 문서

본문

구문 (Syntax)

SYSTEM$DBT_GET_LAST_RUN_TARGET (
  '<object_name>'
  [ , '<commands>' [ , '<target_path>' ] ]
)

인자 (Arguments)

  • object_name — dbt 아티팩트를 가져올 dbt 프로젝트 객체의 정규화된 이름을 지정하는 문자열이에요.
  • commands — 선택 사항. 실행 기록을 검색할 때 포함할 dbt 명령의 쉼표로 구분된 목록이에요. 기본 목록은 compile, build, run, docs generate예요. 복합 명령의 경우 docs generate나 source freshness처럼 명령과 하위 명령을 지정해요. 소스 freshness 결과를 가져오려면 source freshness를 명시적으로 전달해요. 예제는 소스 freshness 결과 가져오기를 참고하세요.
  • target_path — 선택 사항. 일치시킬 대상 경로예요. 지정하면 이 함수는 해당 대상 경로를 사용한 실행만 고려해요.

반환 값 (Returns)

객체의 가장 최근에 완료된 적격 실행이 만든 dbt 아티팩트의 위치를 반환해요. EXECUTE DBT PROJECT의 IMPORTS 매개 변수나 Snowflake CLI --import 옵션과 함께 이 위치를 사용해요.

조회 창 내에서 대상 디렉터리가 채워진 적격 완료 실행이 없으면 NULL을 반환해요.

위치는 존재하는 경우 manifest.json, run_results.json, sources.json 같은 독립 대상 아티팩트를 포함해요. 이 함수는 누락된 파일을 생성하지 않으며 dbt_artifacts.zip도 반환하지 않아요. 위치를 AS 'state'로 가져오면 Snowflake가 대상 아티팩트를 ./imports/state에 마운트해요. 알려진 쿼리에서 전체 아카이브를 얻으려면 SYSTEM$LOCATE_DBT_ARCHIVE를 사용하세요.

접근 제어 요구 사항 (Access Control Requirements)

이 함수를 호출하는 데 사용하는 역할은 dbt 프로젝트 객체에 대한 MONITOR 권한이 있어야 해요. 스키마의 객체에서 작업하려면 상위 데이터베이스에 대한 권한이 하나 이상, 상위 스키마에 대한 권한이 하나 이상 필요해요. 지정된 권한 집합을 가진 사용자 지정 역할을 만드는 방법은 사용자 지정 역할 만들기를 참고하세요. 보호 객체에 대한 SQL 작업으로 역할과 권한 부여에 대한 일반 정보는 액세스 제어 개요를 참고하세요.

사용 참고 (Usage Notes)

  • dbt 프로젝트 객체는 지난 7일 이내에 대상 디렉터리가 채워진 완료 실행이 있어야 해요.
  • 배포 시 자동 컴파일은 이 함수에 대한 dbt 아티팩트를 만들지 않아요. 배포 후 적격 실행을 완료하세요.
  • 이 함수는 성공한 실행이나 실패한 실행의 dbt 아티팩트를 모두 반환할 수 있어요. 실행 상태가 중요하다면 SYSTEM$DBT_GET_LAST_SUCCESSFUL_RUN_TARGET 또는 SYSTEM$DBT_GET_LAST_FAILED_RUN_TARGET을 사용해요.
  • --import 또는 IMPORTS는 반환된 dbt 아티팩트를 실행에서 사용할 수 있게 해요. 또한 --state로 마운트된 디렉터리를 dbt에 가리켜야 해요.
  • 특정 쿼리 ID의 dbt 아티팩트를 가져오려면 대신 SYSTEM$LOCATE_DBT_ARTIFACTS 또는 SYSTEM$LOCATE_DBT_ARCHIVE를 사용해요.

예제 (Examples)

최근 실행에서 아티팩트 가져오기

가장 최근에 완료된 실행의 dbt 아티팩트 위치를 반환해요:

SELECT SYSTEM$DBT_GET_LAST_RUN_TARGET(
  'prod_database.dbt_projects.production_project'
);

가장 최근에 완료된 run 또는 build 실행에서 dbt 아티팩트를 가져와 Slim CI 실행에 사용해요:

EXECUTE DBT PROJECT ci_database.dbt_projects.pr_test_project
  ARGS = 'run --state ./imports/state --defer --select state:modified+'
  IMPORTS = (
    SYSTEM$DBT_GET_LAST_RUN_TARGET(
      'prod_database.dbt_projects.production_project',
      'run,build'
    ) AS 'state'
  );

--target-path my_target을 사용한 가장 최근에 완료된 실행에서 dbt 아티팩트를 가져와 Slim CI 실행에 사용해요. 대상 경로를 지정할 때 기본 명령 필터를 유지하려면 두 번째 인자로 기본 명령 목록을 전달해요:

EXECUTE DBT PROJECT ci_database.dbt_projects.pr_test_project
  ARGS = 'run --state ./imports/state --defer --select state:modified+'
  IMPORTS = (
    SYSTEM$DBT_GET_LAST_RUN_TARGET(
      'prod_database.dbt_projects.production_project',
      'compile,build,run,docs generate',
      'my_target'
    ) AS 'state'
  );

소스 freshness 결과 가져오기

source_status:fresher+ 선택기는 현재 및 이전 sources.json 파일을 비교해요. 더 새로운 데이터가 있는 소스와 그 하위 리소스를 선택해요. 다음 CI/CD 예제에서는 테스터 객체에서 소스 freshness를 실행해 현재 파일을 만든 다음, 프로덕션 객체의 소스 freshness 결과를 이전 상태로 가져와요. 두 객체 모두 비교할 소스에 대해 freshness를 구성해야 하며, 실행 역할이 해당 소스를 조회할 수 있어야 해요. 비교 동작에 대해서는 소스 상태 선택을, 구성에 대해서는 소스 freshness를 참고하세요.

먼저 프로덕션 객체에서 소스 freshness를 실행해 이전 결과를 만들어요:

EXECUTE DBT PROJECT my_db.my_schema.production_dbt_project
  ARGS = 'source freshness';

Snowflake는 생성된 sources.json을 프로덕션 실행의 결과 디렉터리에 저장해요.

소스 데이터가 변경된 후 테스터 객체에서 소스 freshness를 실행하고 현재 sources.json 파일을 live 버전에 작성해요:

EXECUTE DBT PROJECT my_db.my_schema.tester_dbt_project
  ARGS = 'source freshness'
  WRITEBACK = TRUE;

WRITEBACK = TRUE는 현재 sources.json을 테스터 객체의 live target 디렉터리에 저장해서 다음 실행에서 사용할 수 있게 해요. Snowflake는 또한 이 파일을 테스터 실행의 결과 디렉터리에 저장해요.

프로덕션 객체의 이전 freshness 결과를 AS 'state'로 가져와요. Snowflake는 프로덕션 대상을 ./imports/state에 마운트해요. 빌드는 비교를 위해 테스터 객체의 현재 target/sources.json 파일과 이전 ./imports/state/sources.json 파일을 사용해요. 이 파일들은 소스 freshness 결과를 기록하며, 소스 테이블의 내용은 기록하지 않아요:

EXECUTE DBT PROJECT my_db.my_schema.tester_dbt_project
  ARGS = 'build --state ./imports/state --select source_status:fresher+'
  IMPORTS = (
    SYSTEM$DBT_GET_LAST_RUN_TARGET(
      'my_db.my_schema.production_dbt_project',
      'source freshness'
    ) AS 'state'
  );

이 함수는 실패한 freshness 실행뿐 아니라 성공한 실행도 포함하므로, freshness 임계값을 초과했을 때 결과를 찾을 수 있어요. 성공한 freshness 실행만 선택하려면 SYSTEM$DBT_GET_LAST_SUCCESSFUL_RUN_TARGET을 호출해요: SYSTEM$DBT_GET_LAST_SUCCESSFUL_RUN_TARGET('my_db.my_schema.production_dbt_project', 'source freshness'). 객체에 적격 실행이 여러 개 있고 정확히 한 번의 실행에서 아티팩트가 필요하다면 해당 실행의 쿼리 ID를 SYSTEM$LOCATE_DBT_ARTIFACTS에 전달해요.

더 알아보기