雪花变种性能
Posted
技术标签:
【中文标题】雪花变种性能【英文标题】:Snowflake variant performance 【发布时间】:2021-10-04 14:49:27 【问题描述】:我有一张几 TB 大小的 Snowflake 桌子。我现在要决定是在变量列中包含字段还是将其作为独立列。字段的数据类型是简单的字符串。
我通过从变量列中查询此字段(在 where 子句中)与直接作为单独列进行查询来评估和比较性能。统计数据显示,从变量内部查询比从常规列查询慢 40%-60%。
在 Snowflake 文档中找不到任何说明查询 varchar 变体较慢的内容。对此的任何想法都非常感谢。我需要在此基础上做出一些重要的决定,并对桌子的最终用户进行教育
提前致谢
【问题讨论】:
我建议查看两个查询的查询配置文件,看看有什么不同。 docs.snowflake.com/en/user-guide/ui-query-profile.html 我正在与一个客户合作,该客户拥有带有变体的大型表,他们将一些列式数据存储在标准列中,并将“不太常用”的数据存储在变体中,效果很好并且性能很好。 感谢 Rich 的投入。我确实认为这也是要走的路。经常查询的数据最好放在标准列中 【参考方案1】:这取决于这些数据的结构以及您以后将如何使用它。 如果您计划存储复杂的半结构化数据并查询单个节点,最好的选择是将数据存储在 VARIANT 类型中。 你可以在这里阅读更多:Semi-structured Data Considerations
如您所写,如果您存储一个简单的字符串,最好使用 STRING 类型。 多亏了这一点,您将避免转换类型, 您还可以使用Search Optimization Service 或Clustering。
您是否在此表上启用了搜索优化的任何基准测试?
【讨论】:
感谢迈克尔的投入。这真的是一个简单的字符串。变体结构也非常简单,只有一层键值对,没有嵌套结构。虽然没有尝试过搜索优化,但可以检查一下。【参考方案2】:预计当作为 VARCHAR 的一部分加载时,对字符串数据的查询会比加载到 VARIANT 时更快。有关案例研究,请参见此处:Performance of Semi-Structured Data Types in Snowflake
【讨论】:
谢谢罗伯特。是的,我也确实通过了相同的链接,这很有趣,特别是考虑到 Snowflake 文档说“对于大多数常规且仅使用本机类型(字符串和整数)的数据,对关系数据和数据的操作的存储要求和查询性能VARIANT 列非常相似”以上是关于雪花变种性能的主要内容,如果未能解决你的问题,请参考以下文章