当在Snowflake集群上执行“单个”查询时,它是使用与并行节点一样多的节点(如果可用)来执行查询,还是只使用集群中的一个节点来执行查询?
我正在寻找关于如何提高以下查询速度的缩放策略
INSERT INTO x SELECT FROM y
发布于 2020-04-29 09:24:22
大多数时候,Snowflake会尝试并行运行查询并使用集群中的所有节点,但在极少数情况下,它可能只在节点的分区上运行。例如,如果数据源如此之小,如果有一个文件需要使用COPY命令摄取,或者您正在调用一个JavaScript存储过程来处理数据。
下面是一个简单的演示。无论群集有多少个节点,以下查询都将仅在1个节点上运行:
create or replace table dummy_test (id varchar) as
select randstr(2000, random()) from table(generator(rowcount=>500000));
因为数据源是一个生成器(不能并行读取)。您可以尝试在不同规模的仓库上运行它,您将看到它将完成大约55秒(以防仓库中没有其他工作负载)。
正如Simeon和Mike提到的,查询可以在多集群仓库的一个集群中执行。多集群仓库用于提高并发性。
发布于 2020-04-28 22:54:25
在multi-cluster warehouse的上下文中,只有一个节点。
因此,较大的问题更适合在较大的节点上运行,并且大量的查询针对大小正确的节点的集群运行得最好(从平均等待时间),但当然这需要更多的成本。但是如果你有一个固定的查询池,那么在更大的集群上运行它们的总成本应该是相同的,只是减少了时钟时间。
这也是一本关于scaling主题的好读物
https://stackoverflow.com/questions/61491209
复制