假设我有某种离散变量,比如说一个字符串,我想知道该字符串的每个值出现的比例。Snowflake 有推荐的方法吗?
我在一些地方读到 Snowflake 中有 3 个级别的缓存:
元数据缓存。在全局服务层中维护。这包括与微分区相关的元数据,例如列中的最小值和最大值、列中不同值的数量。这使得查询SELECT MIN(col) FROM table能够在不需要虚拟仓库的情况下返回,因为元数据已被缓存。
查询结果缓存。这也由全局服务层维护,并将查询的结果集保存 24 小时(如果在此期间运行相同的查询,则会延长 24 小时)。
仓库数据缓存。它由本地附加存储(通常是 SSD)中的查询处理层维护,并包含从存储层提取的微分区。
https://www.linkedin.com/pulse/caching-snowflake-one-minute-arangaperumal-govindsamy/
然后我还在 Snowflake 文档中读到这些缓存存在:
结果缓存:保存过去 24 小时内执行的每个查询的结果。这些可跨虚拟仓库使用,因此返回给一个用户的查询结果可供系统上执行相同查询的任何其他用户使用,前提是基础数据未更改。
本地磁盘缓存。这用于缓存 SQL 查询使用的数据。每当给定查询需要数据时,都会从远程磁盘存储中检索数据,并将其缓存在 SSD 和内存中。
远程磁盘缓存。这可以进行长期存储。此级别负责数据弹性,对于 Amazon Web Services,意味着 99.999999999% 的持久性。即使整个数据中心发生故障。
https://community.snowflake.com/s/article/Caching-in-Snowflake-Data-Warehouse
这之间的对应关系是什么?两者都有查询结果缓存,但为什么雪花文档中没有提到元数据缓存?雪花文档中提到的远程磁盘缓存是否包含在仓库数据缓存中(我认为不应该是。
那么Snowflake中真的有4种类型的缓存吗?:
如何从 Snowflake 中的表返回 10% 的行。例如,如何在对表进行排序后返回第 10、20、30 行。