Snowflakeステージの管理

snow stage コマンドを使用すると、追加のステージ指定のタスクを実行できます。

名前付きステージを作成する

snow stage create コマンドは、名前付きステージがまだ存在しない場合にステージを作成します。

snow stage create <stage_name>
Copy

たとえば、 new_stage というステージを作成するには、次のコマンドを入力します。

snow stage create new_stage
Copy
+-----------------------------------------------------+
| key    | value                                      |
|--------+--------------------------------------------|
| status | Stage area NEW_STAGE successfully created. |
+-----------------------------------------------------+

次の例は、すでに存在するステージ(packages)を作成しようとした場合の例です。

# stage that already exists
snow stage create packages
Copy
+--------------------------------------------------------+
| key    | value                                         |
|--------+-----------------------------------------------|
| status | PACKAGES already exists, statement succeeded. |
+--------------------------------------------------------+

ステージ間でファイルをコピーする

snow stage copy コマンドは、ローカルマシンからステージへ、またはステージからローカルマシンへファイルをコピーします。

snow stage copy <source_path> <destination_path>
Copy

<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
Copy
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
Copy
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
Copy
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
Copy
environment.yml  snowflake.yml    streamlit_app.py

ローカルディレクトリが存在する必要があることに注意してください。

ユーザーステージ(@~)からコピーできます。

snow stage copy "@~" . --recursive
Copy
+------------------------------------------------+
| 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
Copy
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>
Copy

たとえば、ステージ内のパッケージを一覧表示するには、次のコマンドを入力します。

snow stage list-files packages
Copy
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>
Copy
  • .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"
    
    Copy
    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"
    
    Copy
    SUCCESS - scripts/script1.sql
    +------------------------------------------+
    | File                   | Status  | Error |
    |------------------------+---------+-------|
    | @~/script.sql          | SUCCESS | None  |
    +------------------------------------------+
    

グロブ・パターンを使用してファイルのサブセットを選択する

  • dir ディレクトリ内のすべての .sql ファイルを実行するには、globのようなパターンを指定します。

    snow stage execute "@scripts/dir/*"
    
    Copy
    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"
    
    Copy
    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
    
    Copy
    +---------------------------------------+
    | File                | Status  | Error |
    |---------------------+---------+-------|
    | scripts/script1.sql | SUCCESS | None  |
    +---------------------------------------+
    

ステージからファイルを削除する

snow stage remove コマンドは、ステージからファイルを削除します。

snow stage remove <stage_name> <file_name>
Copy

たとえば、ステージからファイルを削除するには、次のようなコマンドを入力します。

snow stage remove example_app_stage app/pages/my_page.py
Copy
+-------------------------------------------------+
| key    | value                                  |
|--------+----------------------------------------|
| name   | example_app_stage/app/pages/my_page.py |
| result | removed                                |
+-------------------------------------------------+