使用兼容 Amazon S3 的存储

本主题提供的信息可帮助您从 Snowflake 访问与 Amazon S3 兼容的存储。

如果存储应用程序或设备提供的应用程序编程接口 (API) 符合行业标准的 Amazon Simple Storage Service (S3) REST API (https://docs.aws.amazon.com/AmazonS3/latest/API/Welcome.html),则该应用程序或设备与 Amazon S3 兼容。Amazon S3 REST API 支持对桶和对象执行 CRUD 操作和管理操作。

借助 Snowflake,您可以使用外部暂存区连接到越来越多的与 S3 兼容的存储解决方案,包括本地存储和存在于公有云之外的设备。外部暂存区存储符合 S3 标准的 API 端点、桶名称和路径以及凭证。要允许用户从存储位置加载和卸载数据,可以向角色授予暂存区的权限。

可以使用 Snowflake 对兼容 Amazon S3 的存储的支持来执行以下任务:

  • 从外部暂存区查询数据,而无需将数据加载到 Snowflake 中。有关更多信息,请参阅 使用外部表扩展数据湖

  • 读取和处理非结构化数据。要了解更多信息,请参阅 处理非结构化数据

  • 使用 COPY FILES 命令将 S3 兼容存储中的文件从一个位置复制到另一个位置。

云平台支持

此功能适用于托管在以下受支持的 云平台 上的 Snowflake 账户:

  • Amazon Web Services

  • Google Cloud

  • Microsoft Azure

与 S3 兼容的存储的要求

与 S3 兼容的 API 端点用于 Snowflake,必须满足以下要求:

  • 与 S3 API 高度兼容,并且能够通过 公共测试套件 (https://github.com/snowflakedb/snowflake-s3compat-api-test-suite) (在 GitHub 中)。如果端点的行为与 S3 不同,则无法与 Snowflake 结合使用。

  • 作为与 Snowflake S3 兼容的、经过测试且合规的服务,由第三方存储提供商提供支持。有关至少测试了部分产品并发现它们可与 Snowflake 配合使用的供应商列表,请参阅 供应商支持与 S3 兼容的存储

  • 可从托管 Snowflake 账户的公有云进行访问。

  • 高可用性和高性能,可满足分析需求。

  • 配置为使用虚拟托管样式的请求。有关更多信息,请参阅 Amazon S3 文档中的 桶的虚拟托管 (https://docs.aws.amazon.com/AmazonS3/latest/userguide/VirtualHosting.html)。

  • 使用具有有效 TLS 证书的 HTTPS 通信。

  • 配置为使用直接凭证。

  • 不包含端口号。例如,不支持端点 mystorage.com:3000。

重要

不会为所有账户自动启用与 Amazon S3 兼容的端点。要提出请求,请联系 Snowflake 账户团队或 Snowflake 支持部门 (https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge)。在发送请求之前,请确保已使用 公共测试套件 (https://github.com/snowflakedb/snowflake-s3compat-api-test-suite) (在 GitHub 中)验证了端点。

在请求中提供以下信息:

  • Snowflake 账户名称和云区域部署。

  • 端点 URL(即 my-s3-endpoint.company.com)。

  • 提供端点的软件或硬件供应商。

为兼容 S3 的存储创建外部暂存区

要为兼容 S3 的存储创建外部暂存区,请使用 CREATE STAGE 命令创建命名 外部暂存区。命名的暂存区对象可用于列出文件、加载数据和卸载文件等 SQL 操作。

(可选)在外部暂存区添加 目录表。可以查询目录表以检索文件 URLs,以访问引用存储中的文件以及其他元数据。

备注

添加目录表时,必须将 AUTO_REFRESH 参数设置为 FALSE。无法自动刷新与 S3 兼容的外部暂存区的元数据。

以下示例创建一个名为 my_s3_compat_stage 的外部暂存区,该暂存区指向端点 mystorage.com 处命名的 my_bucket/files/ 的桶和路径。本示例中使用的 AWS_KEY_ID 和 AWS_SECRET_KEY 的值仅用于说明目的。

CREATE STAGE my_s3compat_stage
  URL = 's3compat://my_bucket/files/'
  ENDPOINT = 'mystorage.com'
  CREDENTIALS = (AWS_KEY_ID = '1a2b3c...' AWS_SECRET_KEY = '4x5y6z...')
Copy

加载和卸载数据

您可以使用为兼容 S3 的存储所配置的外部暂存区加载和卸载数据。以下功能适用于与 S3 兼容的存储:

使用外部表扩展数据湖

您可以使用具有与 S3 兼容的存储的外部表来查询数据,而无需先将其加载到 Snowflake 中。本节简要介绍如何创建和查询外部表,该表引用为兼容 S3 的存储所配置的外部暂存区上的位置。

首先,使用 CREATE EXTERNAL TABLE 创建一个外部表,该表引用与 S3 兼容的外部暂存区。

备注

无法自动刷新这些外部表的元数据。不支持 AUTO_REFRESH = TRUE 参数设置。您必须通过执行 ALTER EXTERNAL TABLE ...REFRESH 命令才能注册任何添加或移除的文件。

以下示例创建一个名为 et 的外部表,该表引用名为 my_s3compat_stage 的暂存区中的 path1 子路径。path1 子路径中的文件采用 Apache Parquet 格式。

CREATE EXTERNAL TABLE et
 LOCATION=@my_s3compat_stage/path1/
 AUTO_REFRESH = FALSE
 REFRESH_ON_CREATE = TRUE
 FILE_FORMAT = (TYPE = PARQUET);
Copy

为兼容 S3 的存储创建外部表后,可以对其进行查询。例如,查询之前创建的外部表中的 value 列:

SELECT value FROM et;
Copy

查询性能因网络和应用程序或设备性能而异。如果性能至关重要,建议在外部表上创建 物化视图

供应商支持与 S3 兼容的存储

您可以将设备或应用程序(具有与 S3 兼容的 API )与 Snowflake 搭配使用。但是,存储服务提供商负责确保合规性。

以下供应商已向 Snowflake 表示,他们至少测试了部分产品,并发现它们可以与 Snowflake 结合使用:

  • Backblaze

  • Cloudflare

  • Cloudian

  • Cohesity

  • Dell

  • Hitachi Content Platform

  • IBM Storage Ceph

  • IDrive e2

  • MinIO

  • NetApp (StorageGRID)

  • Nutanix

  • PureStorage

  • Scality

  • Wasabi

此列表仅为方便起见而提供。Snowflake 不会测试外部产品以验证兼容性,也无法修复第三方供应商销售的产品中的问题。如果您对装有 S3 API 的硬件或软件是否或如何与 Snowflake 搭配使用有疑问,建议您直接联系供应商。

测试与 S3 兼容的 API

如果您是创建了与 S3 兼容的 API 的硬件或软件开发人员,可以使用 公共测试套件 (https://github.com/snowflakedb/snowflake-s3compat-api-test-suite) (在 GitHub 中)来测试 S3 API 是否适用于 Snowflake。该测试套件会查找您的实现与 Snowflake 对 S3 的期望之间明显不匹配的情况。但是,在某些情况下,测试可能无法识别不兼容性。

如果您是客户,并且想要测试自己的设备,建议联系供应商以运行这些测试。您还可以在设备上运行这些公共测试来评估兼容性。

语言: 中文