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 procedure を実行します。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 | +------------------------------------------+
グロブ・パターンを使用してファイルのサブセットを選択する¶
dir
ディレクトリ内のすべての.sql
ファイルを実行するには、globのようなパターンを指定します。snow stage execute "@scripts/dir/*"
SUCCESS - scripts/dir/script.sql +------------------------------------------+ | File | Status | Error | |------------------------+---------+-------| | scripts/dir/script.sql | SUCCESS | None | +------------------------------------------+
dir
ディレクトリ内の「script」で始まり、その後に1文字が続く.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 |
+-------------------------------------------------+