Snowflake cloud data platform 雪花限制/偏移性能问题

Snowflake cloud data platform 雪花限制/偏移性能问题,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我正在通过Python中的一个模型处理一个260M行、约1500列的表。使用连接器,我每次抓取100000条记录。我用“限制”和“偏移”在表格中翻腾。在每个部分之后,我将偏移量增加chunksize。随着偏移量的增加,查询运行的时间会增加到每一个块都要花费我超过45分钟的时间才能抓取到最后。以下是我的查询的模型: SELECT ~50_fields FROM mytable WHERE a_couple_conditions ORDER BY my_primary_key LIMIT 10000

我正在通过Python中的一个模型处理一个260M行、约1500列的表。使用连接器,我每次抓取100000条记录。我用“限制”和“偏移”在表格中翻腾。在每个部分之后,我将偏移量增加chunksize。随着偏移量的增加,查询运行的时间会增加到每一个块都要花费我超过45分钟的时间才能抓取到最后。以下是我的查询的模型:

SELECT ~50_fields
FROM mytable
WHERE a_couple_conditions
ORDER BY my_primary_key
LIMIT 100000 OFFSET #########
考虑到性能,这是一种特别糟糕的运行方式。我读到我可能可以使用RESULT_SCAN来加速它,但是医生说我仍然需要使用ORDER BY来对抗它,这在我看来可能无法达到目的。实际上,我并不关心记录进入我的进程的顺序,只关心我只处理每一行一次


有没有办法让这些查询在相当长的时间内运行?当然,我是否应该考虑做一些事情,比如大幅提高每个块的限制,然后在我的程序中进一步分解它?关于让雪花玩球有什么想法或最佳实践吗?

如果你尝试这样的方法怎么办

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\u id是来自第一条语句的query\u id。初始选择可能需要很长时间才能对整个表进行排序,但是剩余的块应该非常快,并且不会随着时间的推移而越来越长。

我想知道行对主键是否是多余的,他是否可以在Python端跟踪主键并在where中使用它。我假设他的过程在每个批中都需要精确数量的记录,但也许不是这样,他可以按照你的建议去做。我的解决方案每次都会给出相同大小的批,直到最后一批。而且,如果主键没有聚集,那么他每次都会扫描大量记录,以尝试获取数字。这种方法可能会执行得更好,因为它使用的是结果缓存。似乎跟踪偏移量的代码相同,可以读取最后一条记录的主键,然后在WHERE中使用该主键,并限制其大小以获得固定大小,但我只是猜测。另外,对于这种
select*from blah
类型,与导出到磁盘相比,您认为雪花的性能如何usecase@NatTaylor但是,您需要返回并从该记录集中找到主键的最大值,以确定从何处开始下一个记录。我敢肯定那不会有那么高的效率。在结果缓存中拥有完整的记录集将非常有效。通常,我更喜欢将数据导出到S3,但S3不是本地磁盘,OP也没有真正指定python运行的位置。将其加载到他正在运行的python模块中可能效率不高。