首页 > 解决方案 > 雪花仓库选择

问题描述

我们的 ETL 作业有时会在雪花中运行。我们有两个仓库中型和 2xl。我们遵循的规则之一是,如果查询运行时间少于 10 分钟,我们将转移到中型仓库,超过 2XL 的任何内容。但这是正确的隔离方式吗?

我知道 Snowflake 根据核心可用性使查询并行化。例如

2XL 集群有 32 个节点,每个节点 8 个核心。Snowflake 尝试将每个查询拆分为 256 个部分。例如,如果我们运行一个查询:

select sum(a) from mytable;

然后 256 个核中的每一个扫描表的 1/256。

但是我怎么知道一个表是否可以拆分为 256 个核心,它可能没有足够的数据进行拆分。在这种情况下,在 2XL 上运行查询没有意义。

谢谢

标签: query-optimizationsnowflake-cloud-data-platform

解决方案


这都是一个相当主观的问题。

如果您同时运行 medium 和 2XL,为什么不在 2XL 上运行所有程序并保存 Medium,就像您在 2XL 的运行时间少于 60 秒的情况下向上/向下旋转您所支付的费用一样60 秒。对于以完全线性方式花费 > 10 分钟的查询,将花费超过 1 分钟。

您如何知道它是否可以拆分部分是理论上的,它是否本质上是平行的

select id, count(*) from table group by id;

你有很多 id,非常并行,即使你只有一个 id,由于计数不冲突,这仍然是可并行化的.. where-as

select id, count(distinct column2) ...

需要为每个 id 构建 column2 的集合,因此 32 个实例不会获得太多。但是 IO 负载转换仍然可能是代价高昂的部分..

所以它取决于查询的约束,正在运行,以及它处理的数据。这意味着您应该在不同大小的服务器上运行查询,以查看您的数据负载是否可以扩展。


推荐阅读