如何使用boto3在Redshift上运行事务性SQL



我试图使用boto3 Redshift -data客户端执行事务性SQL的外部表(红移光谱)与以下语句,

ALTER TABLE schema.table ADD IF NOT EXISTS
PARTITION(key=value)
LOCATION 's3://bucket/prefix';

使用execute_statement提交后,我收到错误"ALTER EXTERNAL TABLE不能在事务块内运行">.

我尝试在语句之前使用VACUUMCOMMIT命令,但它只会提到VACUUMCOMMIT不能在事务块中运行。

我怎样才能成功执行这样的语句?

这与您的工作台设置有关。在运行的每条语句的开始处都有一个开放的事务。只需在需要在事务外部运行的语句之前添加"END;",事情就应该工作了。只要确保在工作台上同时启动这两个命令即可。

:

END; VACUUM;

通过boto3运行事务性SQL似乎不太容易。但是,我发现了一个使用redshift_connector库的解决方案。

import redshift_connector
connection = redshift_connector.connect(
host=host, port=port, database=database, user=user, password=password
)
connection.autocommit = True
connection.cursor.execute(transactional_sql)
connection.autocommit = False

参考- https://docs.aws.amazon.com/redshift/latest/mgmt/python-connect-examples.html#python-connect-enable-autocommit

最新更新