Snowflake 스테이지 관리하기¶
snow stage
명령을 사용하면 스테이지별 추가 작업을 수행할 수 있습니다.
명명된 스테이지 만들기¶
snow stage create
명령은 명명된 스테이지가 없는 경우 해당 스테이지를 생성합니다.
snow stage create <stage_name>
예를 들어, 이름이 new_stage
인 스테이지를 생성하려면 다음 명령을 입력합니다.
snow stage create new_stage
+-----------------------------------------------------+
| key | value |
|--------+--------------------------------------------|
| status | Stage area NEW_STAGE successfully created. |
+-----------------------------------------------------+
다음 예제는 이미 있는 스테이지인 packages
의 생성을 시도할 때 어떤 일이 발생하는지 보여줍니다.
# stage that already exists
snow stage create packages
+--------------------------------------------------------+
| key | value |
|--------+-----------------------------------------------|
| status | PACKAGES already exists, statement succeeded. |
+--------------------------------------------------------+
스테이지에서 파일을 복사하고 스테이지로 파일을 복사하기¶
snow stage copy
명령은 로컬 머신에서 스테이지로 또는 스테이지에서 로컬 머신으로 파일을 복사합니다.
snow stage copy <source_path> <destination_path>
<source_path>
또는 <destination_path>
중 하나는 로컬 경로여야 하고, 다른 하나는 Snowflake 스테이지로 가는 경로여야 합니다. 다음 사항을 참고하십시오.
스테이지 경로는 다음 예제에서와 같이
@
로 시작해야 합니다.단일 파일을 복사할 때
<destination_path>
는 파일이 아닌 디렉터리를 식별해야 합니다. 지정된 디렉터리가 존재하지 않으면 명령은 해당 디렉터리를 생성합니다.로컬 디렉터리를 스테이지로 복사할 때 로컬 디렉터리에는 파일만 포함되어야 하며 하위 디렉터리가 포함된 디렉터리는 지원되지 않습니다.
디렉터리를 스테이지에서 로컬 파일시스템으로 복사할 때 이 명령은 현재 내부 트리 구조를 평면화합니다. 예를 들어, 로컬 디렉터리에 다음 내용이 들어 있다고 가정해 보겠습니다.
test_case.py tests/abc.py tests/test1/x1.txt tests/test1/x2.txt
스테이지에서 디렉터리를 복사한 후 로컬 파일 시스템 디렉터리에는 다음이 포함됩니다.
test_case.py abc.py x1.txt x2.txt
참고
소스 디렉터리의 파일 구조를 유지하려면
--recursive
옵션을 포함할 수 있습니다.
파일을 스테이지에 복사합니다.¶
로컬 머신에서 스테이지로 파일을 복사하려면 다음과 유사한 명령을 입력합니다.
snow stage copy local_example_app @example_app_stage/app
put file:///.../local_example_app/* @example_app_stage/app4 auto_compress=false parallel=4 overwrite=False
+--------------------------------------------------------------------------------------
| source | target | source_size | target_size | source_compression...
|------------------+------------------+-------------+-------------+--------------------
| environment.yml | environment.yml | 62 | 0 | NONE ...
| snowflake.yml | snowflake.yml | 252 | 0 | NONE ...
| streamlit_app.py | streamlit_app.py | 109 | 0 | NONE ...
+--------------------------------------------------------------------------------------
명령이 파일을 성공적으로 복사했는지 확인하려면 snow stage list-files
명령을 사용할 수 있습니다.
snow stage list-files example_app_stage
ls @example_app_stage
+------------------------------------------------------------------------------------
| name | size | md5 | ...
|----------------------------------------+------+----------------------------------+-
| example_app_stage/app/environment.yml | 64 | 45409c8da098125440bfb7ffbcd900f5 | ...
| example_app_stage/app/snowflake.yml | 256 | a510b1d59fa04f451b679d43c703b6d4 | ...
| example_app_stage/app/streamlit_app.py | 112 | e6c2a89c5a164e34a0faf60b086bbdfc | ...
+------------------------------------------------------------------------------------
스테이지에서 파일 복사¶
다음 예제에서는 스테이지의 파일을 로컬 머신의 디렉터리로 복사합니다.
mkdir local_app_backup
snow stage copy @example_app_stage/app local_app_backup
get @example_app_stage/app file:///.../local_app_backup/ parallel=4
+------------------------------------------------+
| file | size | status | message |
|------------------+------+------------+---------|
| environment.yml | 62 | DOWNLOADED | |
| snowflake.yml | 252 | DOWNLOADED | |
| streamlit_app.py | 109 | DOWNLOADED | |
+------------------------------------------------+
명령이 파일을 올바르게 복사했는지 확인하려면 디렉터리 내용을 나열합니다.
ls local_app_backup
environment.yml snowflake.yml streamlit_app.py
로컬 디렉터리가 있어야 합니다.
사용자 스테이지(@~
)에서 복사할 수 있습니다.
snow stage copy "@~" . --recursive+------------------------------------------------+ | file | size | status | message | |------------------+------+------------+---------| | environment.yml | 62 | DOWNLOADED | | | snowflake.yml | 252 | DOWNLOADED | | | streamlit_app.py | 109 | DOWNLOADED | | +------------------------------------------------+
glob 패턴을 사용한 파일 지정¶
source_path
인자에 GLOB 패턴을 사용하여 정규식과 일치하는 여러 파일을 지정할 수 있습니다. glob 패턴은 작은따옴표나 큰따옴표로 묶어야 합니다.
다음 예는 디렉터리에 있는 모든 .txt
파일을 스테이지로 복사하는 예제입니다.
snow stage copy "testdir/*.txt" @TEST_STAGE_3
put file:///.../testdir/*.txt @TEST_STAGE_3 auto_compress=false parallel=4 overwrite=False
+------------------------------------------------------------------------------------------------------------+
| source | target | source_size | target_size | source_compression | target_compression | status | message |
|--------+--------+-------------+-------------+--------------------+--------------------+----------+---------|
| b1.txt | b1.txt | 3 | 16 | NONE | NONE | UPLOADED | |
| b2.txt | b2.txt | 3 | 16 | NONE | NONE | UPLOADED | |
+------------------------------------------------------------------------------------------------------------+
스테이지의 내용 나열¶
snow stage list-files
명령은 스테이지 내용을 나열합니다.
snow stage list-files <stage_path>
예를 들어, 스테이지에 있는 패키지를 나열하려면 다음 명령을 입력합니다.
snow stage list-files packages
ls @packages
+-------------------------------------------------------------------------------------
| name | size | md5 | last_modified
|----------------------+----------+----------------------------------+----------------
| packages/plp.Ada.zip | 824736 | 90639175a0ac7735e67525118b81047c | Tue, 16 Jan ...
| packages/samrand.zip | 13721024 | 648f0bae2f65fd4c9f178b17c23de7e5 | Tue, 16 Jan ...
+-------------------------------------------------------------------------------------
스테이지에서 파일 실행¶
snow stage execute
명령은 스테이지에서 SQL 또는 Python 파일을 실행합니다.
snow stage execute <stage_path>
.sql
파일의 경우 스테이지에서.sql
파일에 대해 EXECUTE IMMEDIATE FROM 명령을 수행합니다..py
파일의 경우 세션 범위가 지정된 Snowpark Python 프로시저 를 실행합니다.Snowflake CLI 는 일관적인 실행 환경을 보장하기 위해 Snowflake에서 프로시저를 실행합니다. Python 스크립트에 추가 요구 사항이 필요한 경우 스테이지의 파일과 동일한 디렉터리에 있는
requirements.txt
파일에 이를 지정해야 합니다.snow stage execute
명령은 Snowflake Anaconda 채널의 패키지만 지원합니다.기본적으로 이 명령은 다음과 같은 우선순위로
requirements.txt
파일을 찾습니다.명령의
stage_path
매개 변수에 지정된 스테이지 경로.지정된 스테이지 경로 계층 구조의 상위 디렉터리(스테이지에 도달할 때까지)입니다.
requirements.txt
파일을 지정하지 않으면 명령은 추가 패키지가 필요하지 않다고 가정합니다.
예를 들어,
snow stage execute @my_stage/ml/app1/scripts
를 실행하면 명령은 다음과 같이 파일을 찾습니다.my_stage/ml/app1/scripts/requirements.txt
my_stage/ml/app1/requirements.txt
my_stage/ml/requirements.txt
my_stage/ml/requirements.txt
다음 예제는 한 스테이지에서 다양한 .sql
파일 세트를 실행하는 방법을 설명합니다.
스테이지의 모든
.sql
파일을 실행하려면 스테이지 이름만 지정합니다.snow stage execute "@scripts"
SUCCESS - scripts/script1.sql SUCCESS - scripts/script2.sql SUCCESS - scripts/dir/script.sql +------------------------------------------+ | File | Status | Error | |------------------------+---------+-------| | scripts/script1.sql | SUCCESS | None | | scripts/script2.sql | SUCCESS | None | | scripts/dir/script.sql | SUCCESS | None | +------------------------------------------+
사용자 스테이지에서
script.sql
파일을 실행할 사용자 스테이지(@~
)를 지정합니다.snow stage execute "@~/script1.sql"
SUCCESS - scripts/script1.sql +------------------------------------------+ | File | Status | Error | |------------------------+---------+-------| | @~/script.sql | SUCCESS | None | +------------------------------------------+
glob 패턴을 사용하여 파일의 하위 집합을 선택합니다.¶
dir
디렉터리에 있는 모든.sql
파일을 실행하도록 GLOB와 같은 패턴을 지정합니다.snow stage execute "@scripts/dir/*"
SUCCESS - scripts/dir/script.sql +------------------------------------------+ | File | Status | Error | |------------------------+---------+-------| | scripts/dir/script.sql | SUCCESS | None | +------------------------------------------+
“script”로 시작하고 그 뒤에 한 문자가 오는
dir
디렉터리 내의.sql
파일만 실행하도록 GLOB과 같은 패턴을 지정합니다.snow stage execute "@scripts/script?.sql"
SUCCESS - scripts/script1.sql SUCCESS - scripts/script2.sql +---------------------------------------+ | File | Status | Error | |---------------------+---------+-------| | scripts/script1.sql | SUCCESS | None | | scripts/script2.sql | SUCCESS | None | +---------------------------------------+
--silent
옵션을 사용하여 직접 파일 경로를 지정합니다.snow stage execute "@scripts/script1.sql" --silent
+---------------------------------------+ | File | Status | Error | |---------------------+---------+-------| | scripts/script1.sql | SUCCESS | None | +---------------------------------------+
스테이지에서 파일 제거¶
snow stage remove
명령은 스테이지에서 파일을 제거합니다.
snow stage remove <stage_name> <file_name>
예를 들어, 스테이지에서 파일을 제거하려면 다음과 유사한 명령을 입력합니다.
snow stage remove example_app_stage app/pages/my_page.py
+-------------------------------------------------+
| key | value |
|--------+----------------------------------------|
| name | example_app_stage/app/pages/my_page.py |
| result | removed |
+-------------------------------------------------+