我试图使用boto3 Redshift -data客户端执行事务性SQL的外部表(红移光谱)与以下语句,
ALTER TABLE schema.table ADD IF NOT EXISTS
PARTITION(key=value)
LOCATION 's3://bucket/prefix';
使用execute_statement
提交后,我收到错误"ALTER EXTERNAL TABLE不能在事务块内运行">.
我尝试在语句之前使用VACUUM
和COMMIT
命令,但它只会提到VACUUM
或COMMIT
不能在事务块中运行。
我怎样才能成功执行这样的语句?
这与您的工作台设置有关。在运行的每条语句的开始处都有一个开放的事务。只需在需要在事务外部运行的语句之前添加"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