混合表不支持的功能和限制

以下关于不支持的功能和限制的指南适用于混合表,可能会有更改。建议同时阅读这两部分内容。

不支持的功能

混合表不支持以下功能:

限制

克隆

虽然混合表不支持克隆功能,但您可以使用 CREATE <object> ...CLONE 语句中的 IGNORE HYBRID TABLES 参数克隆包含混合表的数据库和架构。

云和区域

所有商业 Amazon Web Services (AWS) 区域 均提供混合表。

请注意以下限制:

  • Azure 或 Google Cloud Platform (GCP) 不提供混合表。

  • 美国 SnowGov 区域 不提供混合表。

  • 试用账户不支持混合表。

  • 如果您是 Virtual Private Snowflake (VPS) 客户,请联系 Snowflake 支持部门,咨询为您的账户启用混合表的事宜。

群集密钥

混合表不支持群集密钥。有关更多信息,请参阅 群集密钥和聚类表。混合表中的数据按主键排序。

一致性

默认情况下,混合表使用基于会话的一致性模型,即会话中的读操作会返回同一会话中写操作的最新数据。在会话外进行的更改可能会有些过时(少于 100ms)。为避免过时,可在语句或会话级别设置 READ_LATEST_WRITES = true。请注意,这可能会产生几毫秒的延迟开销。

约束

虽然混合表中强制执行主键、唯一键和外键约束,但也有以下限制:

  • 约束只能在创建表时定义。

  • 约束在行级别强制执行。

  • 约束不在语句或事务级别强制执行(即延迟约束)。

  • 不能更改列的唯一性。

以下额外限制适用于外键:

  • 仅在属于同一数据库的混合表之间支持外键约束。

  • 只要外键关系存在,就不能截断外键约束的引用表。

  • 外键约束不支持部分匹配。

  • 外键约束不支持可递延行为。

  • 对于 DELETE 和 UPDATE 操作,外键约束仅支持 RESTRICT 和 NO ACTION 行为。

COPY

使用 COPY INTO 命令加载混合表时,ABORT_STATEMENTON_ERROR 唯一支持的选项。设置 ON_ERROR=SKIP_FILE 会返回错误信息。有关更多信息,请参阅 加载数据

数据大小

您只能在每个 Snowflake 数据库的混合表中存储 2 TB 数据。更多信息,请参阅 配额和节流

索引不支持的数据类型

不支持具有 地理空间数据类型 (VECTOR) 的列作为 PRIMARY KEY 列(自动建立索引的列)或显式建立索引的列。(只要列未建立索引,混合表列就支持这些数据类型。)

使用 UNIQUE、PRIMARY KEY 和 FOREIGN KEY 约束建立索引的列不支持 TIMESTAMP_TZ 数据类型(或解析为 TIMESTAMP_TZ 的 TIMESTAMP 数据类型)。但是,二级索引支持 TIMESTAMP_TZ。

另请参阅 二级索引

DML 命令

使用 DML 命令更改少量行时,可使用 INSERT、UPDATE 或 DELETE 语句而不是 MERGE 来优化性能。

高阶函数

在对混合表进行查询时,不支持 FILTERREDUCETRANSFORM 高阶函数。

原生应用程序

您可以在 Snowflake 原生应用程序中包含混合表。不过,混合表不能从提供商共享给使用者。原生应用程序可以在使用者账户中创建混合表,并且可以读取和写入这些混合表。还可以将混合表暴露给应用程序角色,这样使用者用户就可以直接查询这些表。

不能在提供商账户中创建混合表,也不能在通过原生应用程序共享的视图中包含该混合表。

优化的批量加载

当混合表为空时,CTAS、COPY 和 INSERT INTO...SELECT 都使用优化的批量加载。当混合表不为空时,不会使用优化的批量加载。有关更多信息,请参阅 加载数据

定期密钥更新

如果 Snowflake 账户已启用使用 定期密钥更新,则不能使用 混合表。如果在账户中启用了定期密钥更新,并且希望使用混合表,则必须使用 ALTER ACCOUNT 命令将 PERIODIC_DATA_REKEYING 参数设置为 FALSE

持久化查询结果

根据 USE_CACHED_RESULT 参数 的定义,针对混合表的查询不使用结果缓存。请参阅 使用持久化查询结果

配额和节流

您对混合表的使用受配额限制,以确保共享资源的公平可用性,保证服务质量的一致性,并减少使用高峰。默认情况下,这些配额在 Snowflake 账户上的账户级别执行,账户中的所有数据库共享此类配额。

配额

默认值

备注

混合存储

每个 Snowflake 数据库 2 TB

此配额可控制混合表中可存储的数据量。此限制仅适用于行存储中的活动混合表数据,不适用于对象存储。如果超过存储配额,向任何混合表添加数据的写入操作都会被暂时阻止,直到通过删除数据将混合存储使用量恢复到配额以下。

混合表请求

每个 Snowflake 数据库每秒大约执行 8,000 次操作

此配额可控制读取和写入混合表的速度。在由 80% 的点读取和 20% 的点写入组成的平衡工作负载中,针对混合表的操作应该可以达到每秒 8,000 次。要监控节流,请参阅 AGGREGATE_QUERY_HISTORY 视图 中的示例。

包含混合表的数据库

每个 Snowflake 账户总共可添加 100 个数据库,一小时内最多可添加 10 个数据库

此配额控制 Snowflake 账户中可能包含混合表的数据库数量。如果超出此配额,则将无法在新数据库中创建混合表,除非从现有数据库中删除所有混合表。如有需要,可以向 Snowflake 支持部门 请求帮助以增加配额。

节流可能是由多种因素共同造成的,这些因素会导致向混合表存储提供商发送过多的读写请求:

  • 过多的读取请求可能是由于查询优化不佳或由于工作负载过大且查询并发性很高而导致的。

  • 过多的写入请求可能是由于在加载表时未选择批量加载路径,或者由于工作负载包含太多并发写入操作而导致的。

如果收到错误或因配额限制而发生节流,请联系系统管理员或 DBA 来查看整体 Unistore 工作负载;可能对其进行修改以避免超出配额。DBAs 可以联系 Snowflake 支持部门 来评估查询性能和配额使用量。对于某些工作负载,您可能需要通过请求支持团队的帮助来增加配额。

复制

目前不支持混合表的 复制

二级索引

支持以下二级索引功能:

  • 将列添加到索引中。

  • 修改现有混合表上的索引。

要在混合表上使用二级索引,必须使用已获授表 SELECT 权限的角色。如果只能访问混合表本身以外的对象,就无法使用二级索引。

支持 TIMESTAMP 列。但是,目前不支持针对 TIMESTAMP 列的比较(例如 WHERE 谓词),这些列是基础表或索引中复合键的一部分,会导致错误。

有关二级索引的更多信息,请参阅 为混合表添加索引

吞吐量

在 80%/20% 均衡读/写工作负载的情况下,每秒最多可对账户中的混合表执行约 8,000 次操作。如果超过此限制,Snowflake 可能会降低吞吐量。更多信息,请参阅 配额和节流

Time Travel

Time Travel 支持针对混合表的查询,但有以下限制:

  • TIMESTAMP 子句仅支持 AT 参数。不支持 OFFSET、STATEMENT 和 STREAM 参数。

    • 对于属于同一数据库的所有表,TIMESTAMP 参数的值必须相同。如果表属于不同的数据库,则可以使用不同的 TIMESTAMP 值。

    • 混合表通常不支持克隆,因此您无法指定 AT 子句(该子句位于 CREATE TABLE ... CLONE)。

  • 不支持 BEFORE 子句。

  • 不支持依赖于 Time Travel 的 UNDROP TABLE 命令。

事务

对于混合表,事务范围是混合表所在的数据库。事务中引用的所有混合表必须位于同一数据库中;同一事务中引用的标准 Snowflake 表可以位于不同的数据库中。

临时架构和数据库

您无法创建 临时或瞬态 的混合表。反之,您无法在瞬态架构或数据库中创建混合表。

Tri-Secret Secure

如果您的 Snowflake 账户已启用使用 Tri-Secret Secure,则不能使用 混合表。在使用混合表之前,请联系 Snowflake 支持部门,验证您的 Snowflake 账户是否已启用 Tri-Secret Secure。

UNDROP

混合表不支持 UNDROP。此外:

  • UNDROP SCHEMAUNDROP DATABASE 命令可成功处理包含混合表的实体,但不能恢复这些混合表及其相关约束和索引。

  • TABLES 视图 中的 DELETED 列显示的删除时间是父实体的 UNDROP 时间。

  • ACCESS_HISTORY 视图 包含父实体 DROP/UNDROP 的条目,但没有混合表的条目。

语言: 中文