запросы, выполняемые в рамках транзакции

Мы используем коннектор снежинки python для выполнения запросов. Недавно мы внесли изменения в код, чтобы инкапсулировать несколько запросов для выполнения в рамках одной транзакции. В рамках тестирования мы хотим убедиться, что все эти запросы выполняются в рамках одной транзакции. Мы проверили на вкладке истории. Мы просто видим идентификатор запроса, текст sql, идентификатор сеанса и другие детали, не связанные с транзакциями.

Есть ли способ узнать список запросов, выполненных в рамках транзакции? Спасибо!


person Sameer    schedule 18.12.2019    source источник
comment
Это помогает? docs.snowflake.net/manuals/sql-reference/sql/   -  person Nick.McDermaid    schedule 19.12.2019


Ответы (3)


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

Как только вы это сделаете, вы можете запустить select current_transaction(); и распечатать его на экране в начале и в конце вашего скрипта python, чтобы отладить и проверить, совпадают ли идентификаторы транзакций.

В качестве альтернативы вы можете использовать диспетчер контекста Python, как в this example из документации Snowflake для управления транзакцией. Просто убедитесь, что вы установили параметр подключения autocommit = False

person Simon D    schedule 19.12.2019
comment
Просто любопытно, что именно отмечает начало транзакции при использовании диспетчера контекста python. Я прочитал документацию, но для меня это не совсем очевидно. - person Sameer; 20.12.2019
comment
Когда вы используете диспетчер контекста, открывается соединение со Snowflake. Первый запускаемый вами оператор начинает транзакцию - я только что проверил это, и он отлично работает с autcommit = False. - person Simon D; 20.12.2019

Если вы используете соединитель python, вы можете использовать query_tag, чтобы «пометить» транзакцию внутри сеанса. Вам просто нужно установить значение в начале и в конце транзакции. Это позволит вам запрашивать конкретный query_tag в query_history или, возможно, группировать операторы для отчета о продолжительности или других свойствах.

https://docs.snowflake.net/manuals/user-guide/python-connector-example.html#setting-session-parameters.

person Mike Walton    schedule 19.12.2019
comment
Но query_tag - это параметр уровня сеанса, и в сеансе может быть несколько транзакций. Не так ли? - person Sameer; 19.12.2019
comment
Да, но не одновременно. Сеанс может запускать только 1 запрос за раз, поэтому, если вы установите параметр сеанса в начале каждой транзакции, он будет помечен только для операторов этого сеанса. - person Mike Walton; 19.12.2019

Нет ничего, что предоставляло бы информацию о транзакции. На этом этапе лучше всего записывать информацию самостоятельно.

person Chris    schedule 18.12.2019