管理 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>
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
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 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 ...
+-------------------------------------------------------------------------------------
从暂存区执行 SQL 文件¶
snow stage execute
命令对暂存区的 .sql
文件执行 EXECUTE IMMEDIATE 命令。
snow stage execute <stage_path>
下面的示例说明了从暂存区执行不同 .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 | +------------------------------------------+
指定一个类 glob 模式,以执行
dir
目录中的所有.sql
文件:snow stage execute "@scripts/dir/*"
SUCCESS - scripts/dir/script.sql +------------------------------------------+ | File | Status | Error | |------------------------+---------+-------| | scripts/dir/script.sql | SUCCESS | None | +------------------------------------------+
指定类 glob 的模式,只执行
dir
目录中以“script”开头、后跟一个字符的.sql
文件: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 |
+-------------------------------------------------+