EXECUTE CODE BUNDLE

EXECUTE CODE BUNDLE

지정한 진입점(entrypoint)에서 코드 번들(Code Bundle)을 실행하는 명령이에요. 코드를 비대화형(headless) 모드로 실행하며, CI/CD 파이프라인이나 매개변수를 전달하거나 재현 가능한 실행을 위해 의존성 버전을 고정하고 싶은 오케스트레이션 워크플로에 유용해요.

출처: 문서

본문

참고: Notebook Project 객체는 Code Bundle로 이름이 바뀌었어요. NOTEBOOK PROJECT 문법은 여전히 지원되며, 해당 구문은 EXECUTE NOTEBOOK PROJECT를 참조해요.

이 명령은 다음에서 실행할 수 있어요:

  • SQL 파일
  • 다른 Snowflake 실행 가능 객체(태스크)
  • SQL을 발행하는 외부 오케스트레이터(예: Airflow, Prefect, Dagster, CI/CD 시스템)

컴퓨팅 유형, 런타임, 의존성, 외부 액세스 통합, 시크릿은 Code Bundle의 code_bundle.yml 명세에 정의돼요. WITH SPECIFICATION 절로 실행 시점에 저장된 명세를 재정의할 수 있어요.

중요: 노트북의 비대화형 실행을 트리거하기 전에 노트북이 실행 컨텍스트(데이터베이스와 스키마)를 설정하거나 정규화된 객체 이름을 사용하는지 확인해요.

구문 (Syntax)

EXECUTE CODE BUNDLE <name>
  ENTRYPOINT = '<path>'
  [ ARGUMENTS = ( '<arg>' [ , '<arg>' ... ] ) ]
  [ WITH SPECIFICATION $$ <yaml_spec> $$ ];

필수 파라미터 (Required parameters)

  • name — 실행할 Code Bundle의 식별자예요. CREATE CODE BUNDLE로 생성한 기존 Code Bundle을 참조해야 해요. 현재 DATABASE와 SCHEMA에 없는 한 정규화되어야 해요.
  • ENTRYPOINT = 'path' — Snowflake가 실행하는 번들 내의 파일을 지정해요(예: main.py 또는 notebooks/train.ipynb). 경로는 번들 루트에 상대적이에요. .ipynb 노트북 파일은 컴퓨팅 풀(Container Runtime)에서만 실행돼요.

선택 파라미터 (Optional parameters)

  • ARGUMENTS = ( 'arg' [ , 'arg' ... ] ) — 실행 시점에 진입점에 하나 이상의 문자열 인자를 선택적으로 전달해요. 이 인자는 sys.argv 목록의 명령줄 인자로 나타나요. 인자는 로직을 동적으로 만드는 데 유용해요(예: --env prod 같은 환경 선택). 각 인자를 목록에서 별도의 따옴표 문자열로 지정해요. Python 진입점에서 인자에 접근하려면 sys.argv[0](진입점 이름), sys.argv[1](첫 번째 인자) 등을 사용해요. 문자열만 지원되며, 다른 데이터 유형(정수, 부울 등)은 NULL로 해석돼요.
ARGUMENTS = ('--env', 'prod');
import sys
print(sys.argv)
  • WITH SPECIFICATION $$ yaml_spec $$ — Code Bundle에 저장된 명세를 대체하는 인라인 code_bundle.yml 명세를 선택적으로 제공해요. 다른 컴퓨팅 유형이나 런타임 버전 같은 구성을 번들을 수정하지 않고 테스트하는 데 유용해요.
EXECUTE CODE BUNDLE my_bundle
  ENTRYPOINT = 'main.py'
  WITH SPECIFICATION
  $$
  bundle:
    type: custom
    compute_type: compute_pool
    language: python
    compute_options:
      compute_pool: system_compute_pool_cpu
      query_warehouse: my_db.my_schema.my_wh
      runtime_version: 'V2.9-CPU-PY3.12'
  $$;

접근 제어 요구사항 (Access control requirements)

EXECUTE CODE BUNDLE를 실행하는 역할은 Code Bundle에 대해 OWNERSHIP 또는 USAGE 권한이 있어야 해요.

Code Bundle이 컴퓨팅 풀에서 실행되도록 구성된 경우(compute_type: compute_pool), 실행 역할은 다음도 가져야 해요:

  • 쿼리 웨어하우스에 대한 USAGE와 MONITOR
  • 컴퓨팅 풀과 Code Bundle을 포함하는 데이터베이스 및 스키마에 대한 USAGE 또는 OWNERSHIP
  • 명세에서 참조하는 시크릿에 대한 READ 또는 OWNERSHIP. 시크릿에 대한 USAGE만으로는 충분하지 않아요.
  • 명세에서 참조하는 외부 액세스 통합, 아티팩트 리포지토리 및 기타 객체에 대한 USAGE 또는 OWNERSHIP

사용 메모 (Usage notes)

  • 노트북 셀에서 EXECUTE CODE BUNDLE 명령을 실행할 수 없어요.
  • 태스크에서 EXECUTE CODE BUNDLE를 호출하여 더 큰 워크플로의 일부로 실행할 수 있어요.
  • 이 명령으로 트리거된 실행의 실행 기록 및 실행 결과 가시성은 조회 역할의 Code Bundle 권한과 시작 사용자에 대한 IMPERSONATE 권한에 따라 달라져요.

예시 (Examples)

Code Bundle을 실행해요:

EXECUTE CODE BUNDLE my_bundle
  ENTRYPOINT = 'main.py';

인자와 함께 Code Bundle을 실행해요:

EXECUTE CODE BUNDLE my_bundle
  ENTRYPOINT = 'jobs/main.py'
  ARGUMENTS = ('--source-table', 'RAW_SALES', '--output-table', 'SALES_AGG');

Code Bundle에 패키징된 노트북을 실행해요(컴퓨팅 풀에서 실행):

EXECUTE CODE BUNDLE "sales_detection_db"."schema"."nightly_training"
  ENTRYPOINT = 'notebook_file.ipynb'
  ARGUMENTS = ('--env', 'prod');

더 알아보기 (Learn more)