etl - 在 ETL 脚本中使用 DDL 语句是否正确?
问题描述
我正在重新设计以前基于 Teradata 的 DWH 解决方案,其中有许多 BTEQ 脚本对从源数据库加载的镜像表执行转换。新的解决方案将基于 Snowflake,并且正在准备作为转换工具集的 SQL (Snowflake) 脚本。
这是在 ETL 脚本中使用的正确方法 DDL 语句创建例如临时表,而不是脚本的结尾被删除?
在我看来,应该在运行此脚本之前创建这样的表,而不是在脚本中即时创建它。一个论点选择雪花上的 DDL 语句提交事务,这就是为什么我想避免在转换脚本中使用 DDL 语句。请帮助我找出在 ETL 过程中使用 DDL 语句的利弊,并支持我说我是对的或说服我错了。
解决方案
如果您希望事务覆盖 ELT 转换步骤的所有 SELECT/INSERT/MERGE 步骤,则无需创建/删除任何表,因为这些表将提交您的打开事务。
我们通过在我们的 ELT 流程的事务部分之前创建/截断每个任务/部署的预先存在的工作表来解决这个问题。而且我们的工具不允许同时运行一个任务。
因此我们加载到一个登陆表,我们转换成临时表,然后我们多表合并到最终表。只有最后一步需要在交易中。
推荐阅读
- reactjs - 如何将 GridList 子组件添加为组件
- bash - 将 exec /bin/bash 添加到脚本以使其行为与 /bin/bash 完全一样?
- r - R函数来确定另一个应用程序是否正在运行
- python - 当我尝试在 pyqt5 中运行语音识别时,程序崩溃了
- javascript - 如何从输入值中查询包含文本字符串的所有文档?
- android - 删除字符时过滤器不更新列表
- java - java.util.stream.Collectors.toMap() 的值函数返回常量值
- java - 如何使用 Date today = new Date() 将日期时间从 java 设置为 sql;
- javascript - 尝试通过 paypal api 创建付款时如何解决响应:{type: "cors"}
- java - 按对象属性分组