我正在实现从一个数据库到另一个数据库的特定于应用程序的数据导入功能。
我有一个包含 10000 行的 CSV 文件。这些行需要插入/更新到数据库中。
可能存在这样的情况,即数据库中可能存在几行,这意味着需要更新这些行。如果数据库中不存在,则需要插入它们。
一种可能的解决方案是,我可以一行一行地阅读,检查数据库中的条目并相应地构建插入/更新查询。但是这个过程可能需要很多时间来创建更新/插入查询并在数据库中执行它们。有时我的 CSV 文件可能有数百万条记录。
有没有其他更快的方法来实现这个功能?
Oracle 中有一种很好的技术,称为外部表。在您的场景中,您可以使用数据库中的外部表访问外部纯文本数据,并使用您喜欢和习惯的 SQL 语句更新数据库中的现有数据 - 例如INSERT
,MERGE
等。
在大多数情况下,使用 Oracle 提供的实用程序是执行 ETL 的最佳方式。而且因为您的问题听起来更像是行政问题,我建议您查看我之前在 DBA Stack Exchange 上的帖子“从 CSV 更新 Oracle 数据库”。
更新:这种方法非常适合读取数据库中的外部数据。通常,每次需要处理具有新格式的纯文本文件时,您都会定义外部数据格式。创建外部表后,您可以像查询真正的数据库表一样查询它。每当有新数据要导入时,您只需动态替换底层文件,无需重新创建外部表。由于可以像查询任何其他数据库表一样查询外部表,因此您可以编写 SQL 语句来填充其他数据库表。
与您手动实施的其他技术相比,使用外部表的开销通常较低,因为该技术的设计考虑了 Oracle 数据库架构的性能。
归档时间: |
|
查看次数: |
19406 次 |
最近记录: |