适用于 Apache Iceberg™ 表的 Snowflake Storage¶
Snowflake 支持适用于 Apache Iceberg™ 表的 Snowflake Storage。
与标准 Snowflake 表类似,此功能允许您在 Snowflake 中创建 Snowflake 管理的 Iceberg 表。通过此选项,Snowflake 会使用 Snowflake(内部)存储为您存储和管理 Iceberg 表文件,因此您无需配置外部云存储的访问权限。
此功能适用于 Snowflake Horizon Catalog,因此您可以使用外部查询引擎连接到使用 Snowflake Storage 的 Iceberg 表。有关更多信息,请参阅 通过 Snowflake Horizon 目录使用外部引擎访问 Apache Iceberg™ 表。此外,您还可以在 Snowflake 中查询这些相同的表。
备注
此功能目前仅适用于托管在 Amazon Web Services (AWS) 或 Azure 上的账户。此功能在政府区域或中华人民共和国境内不可用。
Snowflake Storage 的工作原理¶
当您使用 Snowflake Storage 创建 Iceberg 表时,Snowflake 会在内部管理所有数据文件和元数据文件。您无需配置外部卷,也无需授予 Snowflake 对云存储的访问权限。
使用 Snowflake Storage 创建 Iceberg 表¶
显式指定包含 Snowflake 管理的存储 TRANSIENT 表:
对于此存储模型,
CATALOG必须为SNOWFLAKE。如果您的账户默认目录为 Snowflake,则可以省略CATALOG。使用 Snowflake Storage 时,
EXTERNAL_VOLUME必须为SNOWFLAKE_MANAGED。如果您的默认外部卷为SNOWFLAKE_MANAGED,则可以省略EXTERNAL_VOLUME。
SNOWFLAKE_MANAGED 外部卷¶
EXTERNAL_VOLUME = 'SNOWFLAKE_MANAGED' 为该表选择 Snowflake 提供的存储。SNOWFLAKE_MANAGED 是一个保留值,而不是用户创建的 外部卷 对象。您无需为此路径运行 CREATE EXTERNAL VOLUME。
相反,对于将文件存储在 您的 云存储中的 Iceberg 表,您需要创建一个外部卷,授予 USAGE 权限,并将 EXTERNAL_VOLUME 设置为该卷的名称。有关说明,请参阅 配置外部卷。
永久表和瞬态表¶
使用 Snowflake Storage 的 Iceberg 表可以是永久的,也可以是瞬态的:
瞬态:表数据不受故障安全保护。存储和 Time Travel 行为遵循 Snowflake 中的 瞬态表 规范。瞬态表不会产生故障安全存储成本。
在 CREATE ICEBERG TABLE 语句中使用 TRANSIENT 关键字可创建瞬态 Iceberg 表。
备注
瞬态 Iceberg 表仅支持使用 Snowflake Storage。您无法创建使用客户管理外部卷的瞬态 Iceberg 表。
小技巧
要检查现有 Iceberg 表是永久的还是瞬态的,请运行 SHOW TABLES 并查看 kind 列。瞬态表的值为 TRANSIENT,永久表的值为 TABLE。
默认目录和外部卷¶
如果您在语句中省略了 CATALOG 和 EXTERNAL_VOLUME,Snowflake 会从架构、数据库和账户默认值中解析它们(优先级为:架构替换数据库,数据库替换账户)。当有效目录为 Snowflake (CATALOG = 'SNOWFLAKE') 时,除非在较低级别设置了不同的默认值,否则默认外部卷为 SNOWFLAKE_MANAGED。有关更多信息,请参阅 在账户、数据库或架构级别设置默认目录 和 。
当您显式设置 CATALOG = 'SNOWFLAKE' 时,默认外部卷为 SNOWFLAKE_MANAGED,除非您使用 EXTERNAL_VOLUME 或指定了另一个卷的架构、数据库或账户默认值将其替换。
复制¶
您可以使用故障转移组或复制组来复制使用 Snowflake Storage 的 Iceberg 表。要为这些表启用复制,您必须首先按照 为 Snowflake 管理的 Apache Iceberg™ 表配置复制 中的步骤为 Snowflake 管理的 Iceberg 表启用复制。
与标准的 Snowflake 管理的 Iceberg 表不同,您不需要在故障转移或复制组的 OBJECT_TYPES 列表中包含 EXTERNAL VOLUMES。Snowflake 会自动管理使用 SNOWFLAKE_MANAGED 外部卷的复制表的存储。
例如,创建一个故障转移组,用于复制包含使用 Snowflake Storage 的 Iceberg 表的数据库:
复制注意事项¶
不支持复制到在 Google Cloud Platform (GCP) 上托管的账户。当目标账户托管在 GCP 上时,Snowflake 会在刷新操作期间跳过使用 Snowflake Storage 的 Iceberg 表。
如果您在私密预览版期间使用了
SNOWFLAKE_MANAGED以外的外部卷创建 Iceberg 表,Snowflake 会自动迁移辅助账户上的复制表以使用SNOWFLAKE_MANAGED卷。关于此迁移,请注意以下事项:如果您在故障转移或复制组的
OBJECT_TYPES列表中包含EXTERNAL VOLUMES,则私密预览版的外部卷将复制到辅助账户,但不会附加到表中。辅助账户上对私密预览版外部卷的所有使用都将被阻止。Snowflake 建议您在启用复制之前,先删除任何使用私密预览版外部卷的 Iceberg 表,并使用
EXTERNAL_VOLUME = SNOWFLAKE_MANAGED重新创建它们。
计费¶
Snowflake 会根据以下使用情况向您的账户收取费用:
存储成本¶
Snowflake 对存储在 Snowflake 中的每个字节收取费用。
Snowflake 会在 STORAGE_USAGE 视图 的
STORAGE_BYTES列中汇总使用 Snowflake Storage 的 Iceberg 表的存储使用情况,以及非 Iceberg 表的存储使用情况。仅提交到目录的文件会包含在STORAGE_BYTES中。Snowflake 不会对放弃的提交收取费用。此存储使用量的成本在 Snowflake 网站上 Snowflake 服务消耗表 的表 3(a) 中予以说明。
请求成本¶
备注
每当您通过 Horizon Catalog 使用查询引擎访问存储在 Snowflake 中的 Iceberg 表时,该查询引擎都被视为外部查询引擎。当您使用外部查询引擎访问这些表时,Snowflake 会针对此类访问向您的账户收取费用。
以下列表说明了外部查询引擎访问存储在 Snowflake 中的 Iceberg 表的一些情况:
从另一个 Snowflake 账户通过 Horizon Catalog 访问表的 Snowflake 引擎。例如,如果一个表由 Snowflake 账户 A 管理,但您通过 Horizon Catalog 从账户 B 中的 Snowflake 引擎访问该表,则需要为此访问付费。您需要为此访问付费,因为账户 B 中的 Snowflake 引擎被视为外部查询引擎。
您使用 Snowflake Container Services 在 Snowflake 网络内部署的第三方查询引擎。当您通过 Horizon Catalog 使用这些引擎访问表时,这些引擎属于外部引擎,其请求的计费方式与其他第三方查询引擎相同。
您在 Snowflake 外部部署、并用于通过 Horizon Catalog 连接到表的第三方查询引擎。
当您使用 Snowflake 查询引擎 直接 访问 Iceberg 表时(即不通过 Horizon Catalog 访问),Snowflake 不会向您的账户计费。例如,如果一个表由账户 A 管理,并且您使用账户 A 中的 Snowflake 引擎访问该表,则无需为此访问付费。
当您通过 Snowflake Horizon Catalog 使用外部查询引擎访问使用 Snowflake Storage 的 Iceberg 表时,Snowflake 会针对发送到底层存储系统的每个 HTTP 请求向您的账户收取按次计费的请求费。费率取决于请求类型:
PUT、COPY、POST、PATCH 和 LIST 操作,被计费为“第 1 类”。
GET 和 SELECT 操作,被计费为“第 2 类”。
要查看这些操作类型的请求计数,请使用 STORAGE_REQUEST_HISTORY Account Usage 视图。此使用情况在计费报告中的
STORAGE_REQUEST-1和STORAGE_REQUEST-2SKUs 项下计费。此费率在 Snowflake 服务使用量表 的表 3(g) 中有所描述。
数据传输成本¶
当您通过 Horizon Catalog 使用外部查询引擎跨区域或跨云平台访问表时,将按字节收取标准数据传输费用。
此数据传输费用在 Snowflake 服务使用量表 的表 4(a)、4(b) 和 4(c) 中有所描述。
有关更多信息,请参阅 了解数据传输成本。
专用连接¶
当您使用外部查询引擎访问使用 Snowflake Storage 的 Iceberg 表时,可以配置专用连接,确保流量不经过公共互联网。
有关设置说明,请参阅 连接到 Snowflake 托管存储卷。
注意事项和限制¶
当您使用利用 Snowflake Storage 的 Iceberg 表时,请考虑以下事项:
备注
当您使用外部查询引擎访问使用 Snowflake 存储的 Iceberg Tables 时,需要考虑一些额外的注意事项。有关更多信息,请参阅 使用外部查询引擎访问 Iceberg 表的注意事项。
云提供商支持¶
此功能目前仅适用于托管在 Amazon Web Services (AWS) 或 Microsoft Azure 上的账户。此功能在政府区域或中华人民共和国境内不可用。
加密¶
使用 Snowflake Storage 的 Iceberg 表仅支持服务器端加密 (SSE)。即使您的账户启用了 Tri-Secret Secure,也不支持客户管理的密钥 (CMK)。
克隆行为¶
警告
您创建的 Iceberg 表使用目录分发的凭据。当您克隆使用目录分发的凭据的 Iceberg 表时,克隆表与源表共享相同的基础位置。由于可以使用相同的凭据访问共享的基础位置,因此克隆表对源表具有写访问权限。
对于使用 Snowflake 管理的存储的表 (EXTERNAL_VOLUME = 'SNOWFLAKE_MANAGED'),仅当源表和新表都是瞬态表或都是永久表时,CREATE ICEBERG TABLE ... CLONE 才会成功。如果一个是瞬态的,而另一个是永久的,则该语句将执行失败。
源表 |
克隆表 |
结果 |
|---|---|---|
瞬态 |
瞬态 |
支持 |
永久 |
永久 |
支持 |
瞬态 |
永久 |
不支持 |
永久 |
瞬态 |
不支持 |
有关命令语法和更多克隆行为,请参阅 CREATE ICEBERG TABLE(使用 Snowflake 作为 Iceberg 目录) 和 克隆和 Apache Iceberg™ 表 中的 CREATE ICEBERG TABLE ... CLONE。
引入数据¶
您可以使用以下方法将数据引入使用 Snowflake Storage 的 Iceberg 表中:
Snowpipe:使用 Snowpipe 并通过 COPY INTO 从云存储中的文件加载数据。Snowpipe 同时适用于永久和瞬态 Iceberg 表。
Snowpipe Streaming:使用 Snowpipe Streaming 高性能 功能引入流式数据。Snowpipe Streaming 同时适用于永久和瞬态 Iceberg 表。