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');