暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

用于ETL过程的Oracle数据库中的替换技术

ASKTOM 2021-01-28
340

问题描述

嗨,

我们目前使用第三方工具将文件输入Oracle数据库表。这个软件非常昂贵,我正在研究直接在Oracle technologies中复制其功能的一小部分的可能性。我很欣赏这个问题含糊不清,因此我将保留需要复制的高级功能。如果您需要更多信息,我很乐意进一步讨论。

* ETL工具具有自己的脚本语言,该脚本语言为ETL进程的每次调用动态生成。脚本的大多数动态部分是由Oracle数据库中的数据值驱动的。一旦生成,脚本就会被执行以执行工作。

* 能够读取文本和二进制文件,包括单个输入文件中的多种文件格式。
动态文件格式是前面要求的一个例子。

* 能够通过查找键值来执行可选的充实。

* 将转换后的数据直接批量加载到Oracle表分区中。

* 同一ETL进程的多个执行可能同时在一组不同的文件上进行。

我已经尝试了明显的诸如外部表,全局临时表,SQL,内存和PL/SQL流水线函数。虽然我可以为一个简单的用例获得正确的输出,但我无法与使用Oracle技术的ETL工具的速度竞争。我不赞成使用SQL联接,因为某些丰富查找是有条件的,有时基于正在处理的数据行中的另一个值。每行可能有多个查找,单个文件中有数千万行。我不赞成在PL/SQL中使用SQL,因为这将导致上下文切换的数量。

我现在对想法感到困惑,非常感谢您对是否有另一种直接在SQL或PL/SQL中实现这种类型的ETL过程的技术的投入。

在此,非常感谢您提供的任何帮助和建议。
马克。

专家解答

我敢肯定,您可以复制数据库中的所有逻辑,但听起来您必须构建一个完整的处理文件框架。这是很多工作!

最大的挑战在这里:

* The ability to read text and binary files including multiple file formats within a single input file.
Dynamic file formats are an example of the previous requirement.


当你知道输入文件结构时,外部表是很棒的。如果您正在使用相对较少数量的已知记录结构,则编写例程来处理每种记录类型可能是可行的。

I discounted the use of SQL in PL/SQL because of the number of context switches this will incur.

您在19.6上,这意味着您可以访问 (表) SQL宏!我不确定这些是否会有所帮助,但值得研究:

https://blogs.oracle.com/datawarehousing/sql-macros-have-arrived-in-autonomous-database

您还可以签出多态表函数。这些允许您创建诸如动态CSV到列转换器之类的例程:

https://livesql.oracle.com/apex/livesql/file/content_F99JG73Z169WENDTTQFDQ0J09.html

但正如我所说,这 (可能) 将是值得的,如果你处理的记录类型很少。如果你正在处理大量的记录类型和/或你必须处理新的记录类型很少 (不!) 警告你会想要建立一个完整的动态框架。

记住,你的时间也花费了公司的钱!根据我的经验,许多公司避免购买软件,因为它 “太贵” 而自己构建...只是为了让开发人员、测试人员等在工资上花费更多,才能得到同样的结果。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论