卸载到 Snowflake 暂存区

这组主题介绍如何使用 COPY 命令将数据从表卸载到内部(即 Snowflake)暂存区。然后,您可以将卸载的数据文件下载到本地文件系统。

如下图所示,将数据卸载到本地文件系统分两个单独的步骤执行:

第 1 步:

使用 COPY INTO <location> 命令将数据从 Snowflake 数据库表复制到 Snowflake 暂存区中的一个或多个文件。在 SQL 语句中,指定写入文件的暂存区(命名暂存区或表/用户暂存区)。

无论使用哪个暂存区,如果手动或在脚本中执行命令,此步骤都需要运行会话的当前虚拟仓库。仓库提供计算资源来从表中写入行。

第 2 步:

使用 GET 命令将数据文件下载到本地文件系统。

将数据卸载到 Snowflake 暂存区

小技巧

这组主题中的说明假设您已阅读 准备卸载数据,并已按需创建命名的文件格式。

在开始之前,您可能还需要阅读 数据卸载注意事项 获取最佳实践、提示和其他指导。

本主题内容:

卸载数据

本部分说明如何将表数据卸载到命名的内部暂存区、表暂存区或用户暂存区。

将数据卸载到命名的内部暂存区

内部暂存区是命名的数据库对象,为数据卸载提供最大程度的灵活性。因为它们是数据库对象,所以可以将指定暂存区的权限授予任何角色。

可以使用 Web 界面或 SQL 来创建内部暂存区:

Classic Console:

点击 Databases Databases 选项卡 » <db_name> » Stages

SQL:

CREATE STAGE

创建命名暂存区

以下示例创建一个内部暂存区,该暂存区引用在 准备卸载数据 时创建的名为 my_csv_unload_format 的命名文件格式对象:

CREATE OR REPLACE STAGE my_unload_stage
  FILE_FORMAT = my_csv_unload_format;
Copy

将数据卸载到命名暂存区

  1. 使用 COPY INTO <location> 命令,将表中的所有行卸载到 my_csv_unload_format 暂存区中的一个或多个文件。该语句以 unload/ 作为卸载文件的前缀,以整理暂存区中的文件:

    例如:

    COPY INTO @mystage/unload/ from mytable;
    
    Copy

    请注意,@ 字符本身标识一个命名暂存区。

    备注

    由于为暂存区定义了文件格式选项,因此无需在 COPY 命令中指定相同的文件格式选项。

  2. 使用 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 |
    +----------------------------------+------+----------------------------------+-------------------------------+
    
    Copy
  3. 使用 GET 命令将生成的文件从表暂存区下载到本地计算机。以下示例将文件下载到 data/unload 目录:

    例如:

    Linux 或 macOS:

    GET @mystage/unload/data_0_0_0.csv.gz file:///data/unload;
    
    Copy

    Windows:

    GET @mystage/unload/data_0_0_0.csv.gz file://C:\data\unload;
    
    Copy

将数据卸载到表暂存区

  1. 使用 COPY INTO <location> 命令,将表中的所有行卸载到表暂存区中的一个或多个文件。以下示例使用在 准备卸载数据 时创建的 my_csv_unload_format 命名文件格式,将数据文件卸载到暂存区。该语句以 unload/ 作为卸载文件的前缀,以整理暂存区中的文件:

    例如:

    COPY INTO @%mytable/unload/ from mytable FILE_FORMAT = (FORMAT_NAME = 'my_csv_unload_format' COMPRESSION = NONE);
    
    Copy

    请注意,@% 字符组合标识一个表暂存区。

  2. 使用 LIST 命令查看已卸载到暂存区的文件的列表:

    LIST @%mytable;
    
    +-----------------------+------+----------------------------------+-------------------------------+
    | name                  | size | md5                              | last_modified                 |
    |-----------------------+------+----------------------------------+-------------------------------|
    | unload/data_0_0_0.csv |   96 | 29918f18bcb35e7b6b628ca41024236c | Mon, 11 Sep 2017 17:45:20 GMT |
    +-----------------------+------+----------------------------------+-------------------------------+
    
    Copy
  3. 使用 GET 命令将生成的文件从表暂存区下载到本地计算机。以下示例将文件下载到 data/unload 目录:

    例如:

    Linux 或 macOS:

    GET @%mytable/unload/data_0_0_0.csv file:///data/unload;
    
    Copy

    Windows:

    GET @%mytable/unload/data_0_0_0.csv file://C:\data\unload;
    
    Copy

将数据卸载到用户暂存区

  1. 使用 COPY INTO <location> 命令,将表中的所有行卸载到您的暂存区中的一个或多个文件。以下示例使用在 准备卸载数据 时创建的 my_csv_unload_format 命名文件格式,将数据文件卸载到您的用户暂存区。该语句以 unload/ 作为卸载文件的前缀,以整理暂存区中的文件:

    例如:

    COPY INTO @~/unload/ from mytable FILE_FORMAT = (FORMAT_NAME = 'my_csv_unload_format' COMPRESSION = NONE);
    
    Copy

    请注意, @~ 字符组合标识一个用户暂存区。

  2. 使用 LIST 命令查看已卸载到暂存区的文件的列表:

    LIST @~;
    
    +-----------------------+------+----------------------------------+-------------------------------+
    | name                  | size | md5                              | last_modified                 |
    |-----------------------+------+----------------------------------+-------------------------------|
    | unload/data_0_0_0.csv |   96 | 94a306c55733b95a0887511ff355936b | Mon, 11 Sep 2017 17:25:07 GMT |
    +-----------------------+------+----------------------------------+-------------------------------+
    
    Copy
  3. 使用 GET 命令将生成的文件从您的暂存区下载到本地计算机。以下示例将文件下载到 data/unload 目录:

    例如:

    Linux 或 macOS:

    GET @~/unload/data_0_0_0.csv file:///data/unload;
    
    Copy

    Windows:

    GET @~/unload/data_0_0_0.csv file://C:\data\unload;
    
    Copy

管理卸载的数据文件

在使用完暂存区中的文件后,可以使用 REMOVE 命令移除这些文件,以便从 Snowflake 暂存区中删除暂存文件。

移除文件可提高加载数据时的性能,因为这可减少 COPY INTO <table> 命令为验证暂存区中的现有文件是否已加载而必须扫描的文件数量。

语言: 中文