雪绒花LIMITOFFSET性能问题

问题描述 投票:0回答:1

我正在通过Python中的一个模型分块处理一个260M行,约1500列的表。使用连接器,我每次都抓取100,000条记录的块。我使用LIMIT和OFFSET来搅动表。在每一节之后,我按chunksize增加OFFSET。随着OFFSET的增加,查询运行的时间也在增加,以至于每个chunk需要我花超过45分钟的时间来抓取走向最后。下面是我的查询模拟。

SELECT ~50_fields
FROM mytable
WHERE a_couple_conditions
ORDER BY my_primary_key
LIMIT 100000 OFFSET #########

考虑到性能问题,这是一个特别糟糕的运行方式。我读到我也许可以使用result_scan来加快它的速度,但文档中说我仍然需要使用order by来对付它,在我看来这可能会违背目的。其实我并不关心记录进入我的处理过程的顺序,只是希望每一行都能准确地处理一次。

有什么方法可以让这些查询在相当长的时间内运行,我是否应该考虑做一些事情,比如大幅增加每个块的LIMIT,然后在我的程序中进一步分解它?有什么想法或最佳实践可以让Snowflake发挥作用?

snowflake-cloud-data-platform
1个回答
0
投票

如果你试着做这样的事情呢?

SELECT ~50_fields, row_number() OVER (ORDER BY my_primary_key) as row_cnt
FROM mytable
WHERE a_couple_conditions;

然后循环执行。

SELECT ~50_fields
FROM table(result_scan(query_id))
WHERE row_cnt BETWEEN x and xx;

其中query_id是第一条语句的query_id。 最初的选择可能需要很长时间来排序整个表,但是剩下的分块应该是非常快的,不会随着时间的推移越来越长。

© www.soinside.com 2019 - 2024. All rights reserved.