卸载到 Snowflake 暂存区¶
这组主题介绍如何使用 COPY 命令将数据从表卸载到内部(即 Snowflake)暂存区。然后,您可以将卸载的数据文件下载到本地文件系统。
如下图所示,将数据卸载到本地文件系统分两个单独的步骤执行:
- 第 1 步:
使用 COPY INTO <location> 命令将数据从 Snowflake 数据库表复制到 Snowflake 暂存区中的一个或多个文件。在 SQL 语句中,指定写入文件的暂存区(命名暂存区或表/用户暂存区)。
无论使用哪个暂存区,如果手动或在脚本中执行命令,此步骤都需要运行会话的当前虚拟仓库。仓库提供计算资源来从表中写入行。
- 第 2 步:
使用 GET 命令将数据文件下载到本地文件系统。
本主题内容:
卸载数据¶
本部分说明如何将表数据卸载到命名的内部暂存区、表暂存区或用户暂存区。
将数据卸载到命名的内部暂存区¶
内部暂存区是命名的数据库对象,为数据卸载提供最大程度的灵活性。因为它们是数据库对象,所以可以将指定暂存区的权限授予任何角色。
可以使用 Web 界面或 SQL 来创建内部暂存区:
- Classic Console:
- SQL:
创建命名暂存区¶
以下示例创建一个内部暂存区,该暂存区引用在 准备卸载数据 时创建的名为 my_csv_unload_format
的命名文件格式对象:
CREATE OR REPLACE STAGE my_unload_stage FILE_FORMAT = my_csv_unload_format;
将数据卸载到命名暂存区¶
使用 COPY INTO <location> 命令,将表中的所有行卸载到
my_csv_unload_format
暂存区中的一个或多个文件。该语句以unload/
作为卸载文件的前缀,以整理暂存区中的文件:例如:
COPY INTO @mystage/unload/ from mytable;
请注意,
@
字符本身标识一个命名暂存区。备注
由于为暂存区定义了文件格式选项,因此无需在 COPY 命令中指定相同的文件格式选项。
使用 LIST 命令查看已卸载到暂存区的文件的列表:
LIST @mystage; +----------------------------------+------+----------------------------------+-------------------------------+ | name | size | md5 | last_modified | |----------------------------------+------+----------------------------------+-------------------------------| | mystage/unload/data_0_0_0.csv.gz | 112 | 6f77daba007a643bdff4eae10de5bed3 | Mon, 11 Sep 2017 18:13:07 GMT | +----------------------------------+------+----------------------------------+-------------------------------+
使用 GET 命令将生成的文件从表暂存区下载到本地计算机。以下示例将文件下载到
data/unload
目录:例如:
Linux 或 macOS:
GET @mystage/unload/data_0_0_0.csv.gz file:///data/unload;
Windows:
GET @mystage/unload/data_0_0_0.csv.gz file://C:\data\unload;
将数据卸载到表暂存区¶
使用 COPY INTO <location> 命令,将表中的所有行卸载到表暂存区中的一个或多个文件。以下示例使用在 准备卸载数据 时创建的
my_csv_unload_format
命名文件格式,将数据文件卸载到暂存区。该语句以unload/
作为卸载文件的前缀,以整理暂存区中的文件:例如:
COPY INTO @%mytable/unload/ from mytable FILE_FORMAT = (FORMAT_NAME = 'my_csv_unload_format' COMPRESSION = NONE);
请注意,
@%
字符组合标识一个表暂存区。使用 LIST 命令查看已卸载到暂存区的文件的列表:
LIST @%mytable; +-----------------------+------+----------------------------------+-------------------------------+ | name | size | md5 | last_modified | |-----------------------+------+----------------------------------+-------------------------------| | unload/data_0_0_0.csv | 96 | 29918f18bcb35e7b6b628ca41024236c | Mon, 11 Sep 2017 17:45:20 GMT | +-----------------------+------+----------------------------------+-------------------------------+
使用 GET 命令将生成的文件从表暂存区下载到本地计算机。以下示例将文件下载到
data/unload
目录:例如:
Linux 或 macOS:
GET @%mytable/unload/data_0_0_0.csv file:///data/unload;
Windows:
GET @%mytable/unload/data_0_0_0.csv file://C:\data\unload;
将数据卸载到用户暂存区¶
使用 COPY INTO <location> 命令,将表中的所有行卸载到您的暂存区中的一个或多个文件。以下示例使用在 准备卸载数据 时创建的
my_csv_unload_format
命名文件格式,将数据文件卸载到您的用户暂存区。该语句以unload/
作为卸载文件的前缀,以整理暂存区中的文件:例如:
COPY INTO @~/unload/ from mytable FILE_FORMAT = (FORMAT_NAME = 'my_csv_unload_format' COMPRESSION = NONE);
请注意,
@~
字符组合标识一个用户暂存区。使用 LIST 命令查看已卸载到暂存区的文件的列表:
LIST @~; +-----------------------+------+----------------------------------+-------------------------------+ | name | size | md5 | last_modified | |-----------------------+------+----------------------------------+-------------------------------| | unload/data_0_0_0.csv | 96 | 94a306c55733b95a0887511ff355936b | Mon, 11 Sep 2017 17:25:07 GMT | +-----------------------+------+----------------------------------+-------------------------------+
使用 GET 命令将生成的文件从您的暂存区下载到本地计算机。以下示例将文件下载到
data/unload
目录:例如:
Linux 或 macOS:
GET @~/unload/data_0_0_0.csv file:///data/unload;
Windows:
GET @~/unload/data_0_0_0.csv file://C:\data\unload;
管理卸载的数据文件¶
在使用完暂存区中的文件后,可以使用 REMOVE 命令移除这些文件,以便从 Snowflake 暂存区中删除暂存文件。
移除文件可提高加载数据时的性能,因为这可减少 COPY INTO <table> 命令为验证暂存区中的现有文件是否已加载而必须扫描的文件数量。