雪花变种性能

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 列非常相似”

以上是关于雪花变种性能的主要内容,如果未能解决你的问题,请参考以下文章

01背包问题变种:从给定的N个正数中选取若干个数之和最接近M的JAVA写法

现代信号处理 10 - 自适应应用与LMS变种

HDU3466(01背包变种)

亲历WannaCry变种病毒

ICP算法及其变种

勒索病毒GandCrabV5.0.3最新变种来袭