Как мне сохранить курсор в соединении с базой данных после разрыва соединения?

#database #snowflake-cloud-data-platform #connector

#База данных #платформа облачных данных snowflake #соединитель

Вопрос:

Предположим, у меня есть база данных (скажем, в Snowflake ), и мне нужно выполнить некоторые действия с результатами (что-то, что невозможно сделать Snowflake , например, использовать API с результатом в качестве входных данных).

Итак, я записываю соединитель Python . Однако между ними происходит сбой соединителя. Как мне вернуться к тому, до какого момента данные были прочитаны, и возобновить с этого момента?

Если бы соединение не было разорвано, у меня был бы cursor именно для этого. Мой вопрос в том, как мне сохранить cursor информацию и использовать ее после разрыва соединения?

Один из возможных способов — продолжать записывать количество прочитанных строк в локальный файл, а когда устанавливается новое соединение, обходить количество уже прочитанных строк и затем возобновлять оттуда. Есть ли альтернативный способ?

Комментарии:

1. У меня нет прямого ответа на ваш вопрос, но изучали ли вы внешние функции Snowflake? Это фактически позволило бы вам запускать внешний API непосредственно из Snowflake с результатами SQL-запроса в качестве входных данных для API.

2. Изучит их. Прикрепляю ссылку для будущих читателей: docs.snowflake.com/en/sql-reference /…

Ответ №1:

Вы не можете вернуть курсор после отключения, поскольку вам нужно открыть новый сеанс при повторном подключении.

Вы могли бы использовать комбинацию limit и offset , но вам нужно убедиться, что вы сохраняете свое состояние смещения где-то локально и обеспечиваете детерминированный порядок результатов. Таким образом, вы можете повторно подключиться, повторно выполнить тот же запрос и использовать локальное смещение для чтения следующего фрагмента записей. Это позволит вам делать это пакетами, а не для каждой записи, поскольку, даже если вы отключились, у вас все равно будет пакет результатов курсора в памяти, пока вам не нужно будет выполнить следующую выборку.

Ознакомьтесь с документацией здесь

Предложение ORDER BY не требуется; однако без предложения ORDER BY результаты не являются детерминированными, поскольку результаты в результирующем наборе не обязательно расположены в каком-либо определенном порядке. Для управления возвращаемыми результатами используйте предложение ORDER BY

На самом деле, вы должны использовать order by предложение, которое возвращает результаты детерминированным способом (например, упорядочение по первичному ключу / уникальному идентификатору для каждой строки)