Установите «Autocommit = false» с помощью оператора Airflow Snowflake.

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

При просмотре моего журнала задач для конкретной задачи, которая отвечает за начало транзакции, я заметил, что для автоматической фиксации установлено значение true для каждого соединения:

[2020-05-01 09:19:07,460] {{logging_mixin.py:112}} INFO - [2020-05-01 09:19:07,460] {{cursor.py:525}} INFO - query: [ALTER SESSION SET autocommit=True]

Мне нужно установить для этого свойства значение false, возможно ли это?


person Dylan    schedule 01.05.2020    source источник


Ответы (1)


Изучите код пакета по адресу https://github.com/apache/airflow/blob/v1-10-stable/airflow/contrib/operators/snowflake_operator.py

Заметил, что при инициализации оператора Snowflake вы можете установить для свойства автоматической фиксации значение false.

Я могу подтвердить, что после установки значения этого свойства журнал отражает это:

[2020-05-01 11:05:24,817] {{logging_mixin.py:112}} INFO - [2020-05-01 11:05:24,817] {{cursor.py:525}} INFO - query: [ALTER SESSION SET autocommit=False]
person Dylan    schedule 01.05.2020
comment
Приятно слышать, что вы нашли вариант. В качестве альтернативы я считаю, что вы также можете использовать оператор Snowflake с оператором SQL BEGIN и COMMIT, чтобы убедиться, что все выполняется в одной транзакции. - person Simon D; 04.05.2020
comment
Привет Семён, спасибо за совет. Я заметил, что некоторые примеры использовали эту технику. Прав ли я, думая, что вы можете просто дать оператору Snowflake словарь операторов SQL и при условии, что вы начинаете с BEGIN и заканчиваете с COMMIT, все операторы выполняются как одна транзакция? - person Dylan; 05.05.2020
comment
Да. Вы можете передать список, а не словарь, строк или только одну строку для запуска. Если вы посмотрите на оператор DBAPI (который наследует оператор Snowflake), вы увидите, что все операторы SQL выполняются в цикле, а затем в конце выполняется одна фиксация (если вы установили autocommit в false). ). Однако если вы оставите autocommit равным true (по умолчанию), вы все равно сможете делать все в одной транзакции, выполняя BEGIN в качестве первого оператора. - person Simon D; 05.05.2020