卸载到 Microsoft Azure¶
如果您已经拥有 Microsoft Azure 账户并使用 Azure 容器存储和管理文件,则可以在从 Snowflake 表卸载数据时使用现有容器和文件夹路径。本主题介绍如何使用 COPY 命令来将数据从表卸载到 Azure 容器。然后,您可以将卸载的数据文件下载到本地文件系统。
Snowflake 支持以下类型的 Blob 存储账户:
Blob 存储
Data Lake Storage Gen2
常规用途 v1
General-purpose v2
Snowflake 不 支持 Data Lake Storage Gen1。
如下图所示,将数据卸载到 Azure 容器的操作分为两个步骤:
- 第 1 步:
使用 COPY INTO <location> 命令,将 Snowflake 数据库表中的数据复制到 Azure 容器桶中的一个或多个文件。在该命令中,可以指定引用 Azure 容器(推荐)的指定外部暂存区对象,也可通过指定容器的 URI 和安全凭据(如果需要)来选择直接卸载到容器。
无论您使用哪种方法,如果您手动或在脚本中执行命令,此步骤都需要运行一个当前虚拟仓库的会话。仓库提供计算资源来从表中写入行。
- 第 2 步:
使用 Microsoft 提供的接口/工具从 Azure 容器下载文件。
本主题内容:
允许 Azure 虚拟网络子网 IDs¶
如果您组织中的 Azure 管理员尚未明确授予 Snowflake 访问 Azure 存储账户的权限,可以现在执行此操作。请遵循数据加载配置说明 允许 VNet 子网 IDs 中的步骤操作。
配置 Azure 容器以卸载数据¶
要允许 Snowflake 写入 Azure 容器,必须配置对存储账户的访问权限。有关说明,请参阅 配置 Azure 容器以加载数据。请注意,我们提供了一组说明,其中指出了数据加载或卸载操作所需的具体权限。
将数据卸载到外部暂存区¶
外部暂存区是指定的数据库对象,为数据卸载提供最大程度的灵活性。因为它们是数据库对象,所以可以将指定暂存区的权限授予任何角色。
您可以使用 Web 界面或 SQL 来创建指定的外部暂存区:
- Classic Console:
- SQL:
创建命名暂存区¶
以下示例使用名为 mycontainer
的容器来创建名为 my_ext_unload_stage
的外部暂存区,文件夹路径名为 unload
。该暂存区引用名为 my_csv_unload_format
的指定文件格式对象,该对象在 准备卸载数据 步骤中创建:
CREATE OR REPLACE STAGE my_ext_unload_stage URL='azure://myaccount.blob.core.windows.net/mycontainer/unload' CREDENTIALS=(AZURE_SAS_TOKEN='?sv=2016-05-31&ss=b&srt=sco&sp=rwdl&se=2018-06-27T10:05:50Z&st=2017-06-27T02:05:50Z&spr=https,http&sig=bgqQwoXwxzuD2GJfagRg7VOS8hzNr3QLT7rhS8OFRLQ%3D') ENCRYPTION=(TYPE='AZURE_CSE' MASTER_KEY = 'kPxX0jzYfIamtnJEUTHwq80Au6NbSgPH5r4BDDwOaO8=') FILE_FORMAT = my_csv_unload_format;
备注
将 blob.core.windows.net
端点用于所有受支持类型的 Azure Blob 存储账户,包括 Data Lake Storage Gen2。
请注意,本示例中使用的 AZURE_SAS_TOKEN 和 MASTER_KEY 的值仅用于说明目的。
将数据卸载到命名暂存区¶
通过外部暂存区,使用 COPY INTO <location> 命令将表中数据卸载到 Azure 容器。
以下示例使用
my_ext_unload_stage
暂存区将mytable
表中的所有行卸载到 Azure 容器中的一个或多个文件。将d1
文件名前缀应用于文件:COPY INTO @my_ext_unload_stage/d1 from mytable;
使用 Azure 提供的工具从容器中检索对象(即命令生成的文件)。
将数据直接卸载到 Azure 容器¶
使用 COPY INTO <location> 命令将数据从表直接卸载到指定的 Azure 容器。此选项非常适合用于临时卸载,当您未计划使用相同的表和容器参数定期卸载数据时,不妨加以使用。
必须为 Azure 容器指定 URI,并在 COPY 命令中指定用于访问容器的安全凭据。
以下示例将
mytable
表中的所有行卸载到 Azure 容器中一个或多个文件夹路径前缀为unload/
的文件:此示例引用由账户管理员(即具有 ACCOUNTADMIN 角色的用户)或具有全局 CREATE INTEGRATION 权限的角色使用 CREATE STORAGE INTEGRATION 创建的存储集成。通过存储集成,用户不必提供凭据即可访问私有存储位置:
COPY INTO 'azure://myaccount.blob.core.windows.net/mycontainer/unload/' FROM mytable STORAGE_INTEGRATION = myint;
使用 Azure 控制台(或同等客户端应用程序)从容器中检索对象(即命令生成的文件)。