Google BigQuery事务回滚后未删临时表:是Bug还是预期行为?
Google BigQuery事务回滚后临时表未被删除:预期行为而非Bug
这是Google BigQuery的预期行为,并非Bug。
BigQuery中的临时表(TEMPORARY TABLE)是绑定到当前会话的,而非单个事务。临时表的生命周期由会话控制,和事务的提交、回滚无关。事务回滚仅会撤销数据层面的修改操作(比如INSERT、UPDATE、DELETE),不会影响元数据层面的临时表创建——哪怕临时表是在事务内创建的,回滚后它依然会保留在当前会话中。
结合你提供的测试代码来看:
BEGIN TRANSACTION; CREATE TEMPORARY TABLE `t4` (`i` INT64 ); ROLLBACK TRANSACTION; -- 事务中止,但临时表t4已在会话中创建 BEGIN TRANSACTION; CREATE TEMPORARY TABLE `t4` (`i` INT64 ); -- 会话中t4已存在,因此报错 COMMIT TRANSACTION;
第一次事务回滚后,临时表t4并未被清理,所以第二次创建同名临时表时会触发“表已存在”的报错。
如果需要在事务回滚后清理临时表,可以手动执行DROP TABLE IF EXISTS t4``语句来删除。
内容的提问来源于stack exchange,提问作者Niko
相关产品推荐
相关产品推荐

