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

以下关于 限制不支持的功能 的指南适用于混合表,且可能随时变更。

请务必阅读以下两个章节的内容。

备注

如有疑问,请联系客户经理团队。

限制

云和区域

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

请注意以下限制:

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

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

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

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

一致性

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

约束

混合表支持执行 PRIMARY KEY、UNIQUE 和 FOREIGN KEY 约束,但存在一些限制。有关更多信息,请参阅 混合表的约束

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 都使用优化的批量加载。当混合表不为空时,不会使用优化的批量加载。有关更多信息,请参阅 加载数据

持久化查询结果

根据 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_NTZ 是二级索引支持的列类型,但 TIMESTAMP_TZ 受支持。DATETIME 是 TIMESTAMP_NTZ 的别名,因此同样受支持。当 TIMESTAMP 配置为 TIMESTAMP_NTZ 的别名时,也可获得支持。

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

吞吐量

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

Time Travel 和克隆

从混合表中选择的 Time Travel 查询也受支持,但存在以下限制:

  • TIMESTAMP 子句仅支持 AT 参数。

    • 对于属于同一数据库的所有表,TIMESTAMP 参数的值必须相同。

    • 如果表属于不同的数据库,则可以使用不同的 TIMESTAMP 值。

  • 不支持 OFFSET、STATEMENT 和 STREAM 参数。

  • 不支持 BEFORE 子句。

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

有关混合表克隆支持的信息,请参阅 克隆包含混合表的数据库

事务

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

临时架构和数据库

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

不支持的功能

目前,混合表不支持:

  • Tri-Secret Secure

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

  • UNDROP

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

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

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

语言: 中文