嗨,我正在通过Python运行ETL。 我有一个从Python运行的简单sql文件,例如
truncate table foo_stg;
insert into foo_stg
(
select blah,blah .... from tables
);
truncate table foo;
insert into foo
(
select * from foo_stg
);
此查询有时会锁定未释放的表。 由于其他进程会排队。
现在,我检查哪个表具有锁,并杀死导致该锁的进程。
我想知道我可以对代码进行哪些更改以减轻此类问题?
预先感谢!
答案 0 :(得分:2)
TRUNCATE
可能破坏了您的交易逻辑。建议先将所有内容截断。我还建议添加一些处理逻辑,以确保ETL流程的每个实例之一:A)对登台表或具有独占访问权B)使用单独的登台表集。
TRUNCATE
执行隐式COMMIT
。
…be aware that TRUNCATE commits the transaction in which it is run.
Redshift尝试通过返回以下INFO消息以确认成功来弄清楚这一点:TRUNCATE TABLE and COMMIT TRANSACTION
。但是,SQL客户端工具可能不会显示此INFO消息。在psql
中运行SQL以查看它。