【发布时间】:2021-05-20 12:59:17
【问题描述】:
有人可以告诉我在 oracle DB 中存储 csv 文件的最佳方法吗(注意:我不知道 csv 文件中的列数,我不想为每个 csv 文件创建一个等效的表上传)
我的要求如下:
- 首次上传时,只需将整个 csv 文件保存在表格的某个列中即可。
- 在第二次上传时,我想将新内容与旧内容合并。
示例:第一次上传包含 2020 年 1 月至 2020 年 12 月期间的数据(约 2000 行),第二次上传包含 2021 年 1 月至 2021 年 12 月期间的数据(约 1000 行)。现在通过合并,我的意思是,我想合并(2020 年 1 月至 2020 年 12 月)和(2021 年 1 月至 2021 年 12 月)的数据,并将结果(3000 行)存储回如下所示的 CSV_DATA 列中。
第一次上传
ID MODIFIED_DATE CSV_DATA
1 2/2/2021 ...
2 3/2/2021 ...
ID = 1 的第二次上传
ID MODIFIED_DATE CSV_DATA
1 20/2/2021 ...
2 3/2/2021 ...
提前非常感谢!!!
【问题讨论】:
-
“加载”后,您对数据库中的这些 CSV“转储”做什么?
-
“合并”是什么意思?您只想追加新数据吗?或者您是否尝试从以前的文件中更新数据?如果是这样,你怎么知道做合并的关键是什么?
-
您将如何对您不知道其结构的 CSV 文件进行计算?从技术上讲,您当然可以创建一个
clob列,并在每次加载新文件时将新数据附加到clob列。但这将是一个非常不寻常的设计,并且对数据进行任何类型的计算都会比最初将数据加载到关系表中要慢得多。由于读取通常比加载更频繁,这通常是一个糟糕的权衡。 -
但是如果每个 CSV 具有不同的结构,您最终可能会使用数百个不同的代码来解析不同的文件,以便执行您计划执行的任何计算。我宁愿拥有数百个不同的表,也不愿拥有数百个代码,每个代码都从一个表中解析一行数据。
-
我们的建议,不要做你正在做的事情。请改用外部表。或者我应该说,我的建议。