Transactions 设置';自动提交=假';带气流雪花器

Transactions 设置';自动提交=假';带气流雪花器,transactions,airflow,snowflake-cloud-data-platform,Transactions,Airflow,Snowflake Cloud Data Platform,我有一个简单的DAG,它被设计为作为一个事务提交。我在这个用例中使用Airflove,因为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 SE

我有一个简单的DAG,它被设计为作为一个事务提交。我在这个用例中使用Airflove,因为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,这可能吗


注意,在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]

深入研究包代码

注意,在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]

很高兴听到你找到了选择。或者,我相信您也可以将雪花操作符与SQL
BEGIN
COMMIT
语句一起使用,以确保在一个事务中执行所有操作。嗨,Simon,谢谢您的建议。我注意到一些例子使用了这种技术。我认为您可以给Snowflake操作符一个SQL语句字典,如果您以BEGIN开始,以COMMIT结束,所有语句都作为一个事务执行,对吗。您可以传递字符串列表,而不是字典,也可以只传递要运行的单个字符串。如果查看DBAPI运算符(Snowflake运算符继承该运算符),您可以看到所有SQL语句都在一个循环中执行,然后在最后执行一次提交(如果将
autocommit
设置为
false
)。如果将
autocommit
设置为
true
,但是(默认设置),您仍然可以在单个事务中执行所有操作,并将
BEGIN
作为第一条语句传递。很高兴听到您找到了该选项。或者,我相信您也可以将雪花操作符与SQL
BEGIN
COMMIT
语句一起使用,以确保在一个事务中执行所有操作。嗨,Simon,谢谢您的建议。我注意到一些例子使用了这种技术。我认为您可以给Snowflake操作符一个SQL语句字典,如果您以BEGIN开始,以COMMIT结束,所有语句都作为一个事务执行,对吗。您可以传递字符串列表,而不是字典,也可以只传递要运行的单个字符串。如果查看DBAPI运算符(Snowflake运算符继承该运算符),您可以看到所有SQL语句都在一个循环中执行,然后在最后执行一次提交(如果将
autocommit
设置为
false
)。如果将
autocommit
设置为
true
,但是(默认设置),您仍然可以在单个事务中执行所有操作,并将
BEGIN
作为第一条语句传递。