我正在重新设计以前基于Teradata的DWH解决方案,其中有很多BTEQ脚本,在从源DB加载的镜像表上执行转换。新的解决方案将基于Snowflake,作为一个SQL(Snowflake)脚本的转换工具集正在准备中。
在ETL脚本中使用DDL语句来创建例如临时表,而不是等脚本结束后再丢弃,这种方法是否正确?
在我看来,这样的表应该在运行这个脚本之前创建,而不是在脚本中飞快地创建。有一种观点认为,在Snowflake上的DDL语句会提交事务,这就是为什么我想避免在转换脚本中使用DDL语句。请帮助我找到在ETL过程中使用DDL语句的利弊,并支持我说我是对的或说服我是错的。
如果你想让事务覆盖所有的SELECTINSERTMERGE步骤,你的ELT的转换步骤,你需要不创建任何表,因为这些将提交你的开放事务。
我们通过在ELT流程的事务部分之前,在每个任务部署中预先存在的工人表来解决这个问题。而我们的工具不允许一个任务同时运行。
因此,我们加载到登陆表,我们转化为临时表,然后我们多表合并到最终表。只有最后一步需要在事务中进行。