卸载到 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 容器以加载数据。请注意,我们提供了一组说明,其中指出了数据加载或卸载操作所需的具体权限。
将数据卸载到外部暂存区¶
外部暂存区是指定的数据库对象,为数据卸载提供最大程度的灵活性。因为它们是数据库对象,所以可以将指定暂存区的权限授予任何角色。
You can create an external named stage using either Snowsight or SQL:
- Snowsight:
在导航菜单中,选择 Catalog » Database Explorer » <db_name> » Stages » Create
- 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 控制台(或同等客户端应用程序)从容器中检索对象(即命令生成的文件)。