管理 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> or <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 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 ...
+-------------------------------------------------------------------------------------

从暂存区执行 SQL 文件

snow stage execute 命令对暂存区的 .sql 文件执行 EXECUTE IMMEDIATE 命令。

snow stage execute <stage_path>
Copy

下面的示例说明了从暂存区执行不同 .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  |
    +------------------------------------------+
    
  • 指定一个类 glob 模式,以执行 dir 目录中的所有 .sql 文件:

    snow stage execute "@scripts/dir/*"
    
    Copy
    SUCCESS - scripts/dir/script.sql
    +------------------------------------------+
    | File                   | Status  | Error |
    |------------------------+---------+-------|
    | scripts/dir/script.sql | SUCCESS | None  |
    +------------------------------------------+
    
  • 指定类 glob 的模式,只执行 dir 目录中以“script”开头、后跟一个字符的 .sql 文件:

    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                                |
+-------------------------------------------------+
语言: 中文