更好地控制 table 雪花锁定

Better control over table locking in snowflake

我们需要 运行 在 Snowflake 中的同一个 table 上使用多个合并语句。我们现在面临的挑战之一是每个合并语句(导致更新)似乎会阻止其他合并。 每个合并语句处理属于非重叠键列(又名租户)的数据。数据量在租户之间分布不均。

所以我们想,也许如果我们使用租户作为集群键对 table 进行集群(我读过文档说集群对较小的 table 没有帮助,但我认为无论如何我都会试一试),我们最终将为每个租户提供一个微分区,因此不会再发生更新阻塞。但是我们注意到集群键并不能保证每个租户都有一个唯一的微分区。不幸的是,正如预期的那样,100 个租户只有 23 个分区,并且阻塞仍在继续。

在检查锁时,我们看到它保留在 PARTITIONS 上(我假设它是微分区。)

我想知道 Snowflake 中是否有任何机制可以改善更新阻塞或控制进入微分区的数据的方法。

据我所知,没有一种简单的方法可以改善更新阻塞,也没有一种方法可以 control/guarantee 进入 Snowflake 中的微分区的数据。由于 docs 状态 "UPDATE, DELETE, and MERGE statements hold locks that generally prevent them from running in parallel with other UPDATE, DELETE, and MERGE statements" - 所以一般鼓励在可能的情况下批处理 updates/deletes。

虽然有一个想法:是否可以根据您拥有的租户组拥有多个 "staging tables"(这样每个租户都可以通过合并独立操作而不会阻塞)并将它们组合成一个downstream/final 表格 table 或视图?