混合表的限制与不支持的功能¶
以下关于 限制 与 不支持的功能 的指南适用于混合表,且可能随时变更。
请务必阅读以下两个章节的内容。
备注
如有疑问,请联系客户经理团队。
限制¶
- 云和区域
Hybrid tables are generally available in all commercial Amazon Web Services (AWS) and Microsoft Azure regions.
请注意以下限制:
Google Cloud 不提供混合表。
美国 SnowGov 区域 不提供混合表。
试用账户不支持混合表。
如果您是 Virtual Private Snowflake (VPS) 客户,请联系 Snowflake 支持部门,咨询为您的账户启用混合表的事宜。
- 排序规则
混合表仅支持对未建立索引的字符列使用排序规则。PRIMARY KEY 及其他已索引列不接受 COLLATE 子句。若在账户、数据库或架构中为混合表设置了 DEFAULT_DDL_COLLATION 参数,则对于已索引列,将忽略该参数。
有关更多信息,请参阅 混合表列上的排序规则 和 排序规则控制。
- 一致性
默认情况下,混合表使用基于会话的一致性模型,即会话中的读操作会返回同一会话中写操作的最新数据。在会话外进行的更改可能会有些过时(少于 100ms)。为避免过时,可在语句或会话级别设置
READ_LATEST_WRITES = true。请注意,这可能会产生几毫秒的延迟开销。
- 约束
混合表支持执行 PRIMARY KEY、UNIQUE 和 FOREIGN KEY 约束,但存在一些限制。有关更多信息,请参阅 混合表的约束。
- COPY
使用 COPY INTO 命令加载混合表时,
ABORT_STATEMENT是ON_ERROR唯一支持的选项。设置ON_ERROR=SKIP_FILE会返回错误信息。有关更多信息,请参阅 加载数据。
- 数据大小
您只能在每个 Snowflake 数据库的混合表中存储 2 TB 数据。有关更多信息,请参阅 配额和节流。
- 索引不支持的数据类型
不支持具有 地理空间数据类型 (VECTOR) 的列作为 PRIMARY KEY 列(自动建立索引的列)或显式建立索引的列。(只要列未建立索引,混合表列就支持这些数据类型。)
The UUID data type isn't supported for any column in a hybrid table.
使用 UNIQUE、PRIMARY KEY 和 FOREIGN KEY 约束建立索引的列不支持 TIMESTAMP_TZ 数据类型(或解析为 TIMESTAMP_TZ 的 TIMESTAMP 数据类型)。但是,二级索引支持 TIMESTAMP_TZ。
另请参阅 二级索引。
- DML 命令
使用 DML 命令更改少量行时,可使用 INSERT、UPDATE 或 DELETE 语句而不是 MERGE 来优化性能。
- 原生应用程序
您可以在 Snowflake 原生应用程序中包含混合表。不过,混合表不能从提供商共享给使用者。原生应用程序可以在使用者账户中创建混合表,并且可以读取和写入这些混合表。还可以将混合表暴露给应用程序角色,这样使用者用户就可以直接查询这些表。
不能在提供商账户中创建混合表,也不能在通过原生应用程序共享的视图中包含该混合表。
- 优化的批量加载
当混合表为空时,CTAS、COPY 和 INSERT INTO...SELECT 都使用优化的批量加载。当混合表不为空时,不会使用优化的批量加载。有关更多信息,请参阅 加载数据。
- 持久化查询结果
根据 USE_CACHED_RESULT 参数 的定义,针对混合表的查询不使用结果缓存。请参阅 使用持久化查询结果。
- 配额和节流
您对混合表的使用受配额限制,以确保共享资源的公平可用性,保证服务质量的一致性,并减少使用高峰。默认情况下,这些配额在 Snowflake 账户上的账户级别执行,账户中的所有数据库共享此类配额。
配额
默认值
备注
混合存储
每个 Snowflake 数据库 2 TB
此配额可控制混合表中可存储的数据量。此限制仅适用于行存储中的活动混合表数据,不适用于对象存储。如果超过存储配额,向任何混合表添加数据的写入操作都会被暂时阻止,直到通过移除表或数据将混合存储使用量恢复到配额以下。
通过 删除 或 截断 不需要的混合表,您可以在几秒钟内回收空间。但是,当您从表中 删除 数据时,恢复空间需要几个小时(因为需要进行后台压缩)。
混合表请求
Approximately 16,000 operations per second, per Snowflake database
This quota controls the rate at which you can read from and write to hybrid tables. You should be able to achieve up to 16,000 operations per second against hybrid tables for a balanced workload consisting of 80% point reads and 20% point writes. To monitor throttling, see the example in AGGREGATE_QUERY_HISTORY 视图.
包含混合表的数据库
200 total per Snowflake account, and no more than 100 databases added within a one-hour window
此配额控制 Snowflake 账户中可能包含混合表的数据库数量。如果超出此配额,则将无法在新数据库中创建混合表,除非从现有数据库中删除所有混合表。如有需要,可以向 Snowflake 支持部门 请求帮助以增加配额。
节流可能是由多种因素共同造成的,这些因素会导致向混合表存储提供商发送过多的读写请求:
过多的读取请求可能是由于查询优化不佳或由于工作负载过大且查询并发性很高而导致的。
过多的写入请求可能是由于在加载表时未选择批量加载路径,或者由于工作负载包含太多并发写入操作而导致的。
如果收到错误或因配额限制而发生节流,请联系系统管理员或 DBA 来查看整体 Unistore 工作负载;可能对其进行修改以避免超出配额。DBAs 可以联系 Snowflake 支持部门 来评估查询性能和配额使用量。对于某些工作负载,您可能需要通过请求支持团队的帮助来增加配额。
- 二级索引
不 支持以下二级索引功能:
向现有索引添加列。
修改现有混合表上的索引。
如需变更,需通过删除并重新创建索引来实现。
要在混合表上使用二级索引,必须使用已获授表 SELECT 权限的角色。如果只能访问混合表本身以外的对象,就无法使用二级索引。
TIMESTAMP_NTZ is a supported column type for secondary indexes; however, TIMESTAMP_TZ is not supported. DATETIME is an alias for TIMESTAMP_NTZ and is therefore supported. TIMESTAMP is supported when configured as an alias for TIMESTAMP_NTZ.
有关二级索引的更多信息,请参阅 添加二级索引。
- 吞吐量
You can execute up to approximately 16,000 operations per second against hybrid tables in each database in your account for a balanced 80%/20% read/write workload. If you exceed this limit, Snowflake might reduce your throughput. See 配额和节流 for more information.
- Time Travel 和克隆
从混合表中选择的 Time Travel 查询也受支持,但存在以下限制:
TIMESTAMP 子句仅支持 AT 参数。
对于属于同一数据库的所有表,TIMESTAMP 参数的值必须相同。
如果表属于不同的数据库,则可以使用不同的 TIMESTAMP 值。
不支持 OFFSET、STATEMENT 和 STREAM 参数。
不支持 BEFORE 子句。
不支持依赖于 Time Travel 的 UNDROP TABLE 命令。
有关混合表克隆支持的信息,请参阅 克隆包含混合表的数据库。
- 事务
对于混合表,事务范围是混合表所在的数据库。事务中引用的所有混合表必须位于同一数据库中;同一事务中引用的标准 Snowflake 表可以位于不同的数据库中。
- 临时架构和数据库
您无法创建 临时或瞬态 的混合表。反之,您无法在瞬态架构或数据库中创建混合表。
- Tri-Secret Secure
You can use hybrid tables in a TSS-enabled account by enabling Dedicated Storage Mode. For information, see TSS 的混合表专用存储模式.
不支持的功能¶
目前,混合表不支持:
-
混合表中的数据按主键排序。
-
UNDROP SCHEMA 和 UNDROP DATABASE 命令可成功处理包含混合表的实体,但不能恢复这些混合表及其相关约束和索引。
TABLES 视图 中的 DELETED 列显示的删除时间是父实体的 UNDROP 时间。
ACCESS_HISTORY 视图 包含父实体 DROP/UNDROP 的条目,但没有混合表的条目。