假设我有一个数据库(比方说,在Snowflake
中),并且我需要对结果执行一些操作(一些在Snowflake
中不能完成的操作,比如使用结果作为输入来访问一个api )。
所以我用Python
编写了一个连接器。但是,连接器在两者之间出现故障。如何返回到读取数据的时间点,并从该时间点恢复?
如果连接没有中断,我会有一个cursor
来解决这个问题。我的问题是,如何保留cursor
信息,并在连接中断后使用它?
一种可能的方法是继续将读取的行数写入本地文件,当建立新连接时,绕过已读取的行数,然后从那里恢复。有没有别的办法?
发布于 2020-09-26 14:31:30
断开连接后将无法恢复光标,因为再次连接时需要打开一个新会话。
您可以组合使用limit
和offset
,但您需要确保将偏移量状态存储在本地某处,并确保结果具有确定性排序。这样,您就可以重新连接,重新运行相同的查询,并使用本地偏移量读取下一块记录。这将允许您分批执行,而不是为每个记录执行此操作,因为即使您已断开连接,在您必须进行下一次提取之前,内存中仍会有一批游标结果。
查看文档here
不需要order BY子句;但是,如果没有ORDER BY子句,结果将是不确定的,因为结果集中的结果不一定是特定顺序的。要控制返回的结果,请使用ORDER BY子句
实际上,您应该使用一个以确定性方式返回结果的order by
子句(就像对每行的主键/唯一标识符进行排序一样)。
https://stackoverflow.com/questions/64063876
复制相似问题