【问题标题】:Upload/Store big CSV files in Oracle DB and update the files on subsequent uploads在 Oracle DB 中上传/存储大 CSV 文件并在后续上传时更新文件
【发布时间】:2021-05-20 12:59:17
【问题描述】:

有人可以告诉我在 oracle DB 中存储 csv 文件的最佳方法吗(注意:我不知道 csv 文件中的列数,我不想为每个 csv 文件创建一个等效的表上传)

我的要求如下:

  1. 首次上传时,只需将整个 csv 文件保存在表格的某个列中即可。
  2. 在第二次上传时,我想将新内容与旧内容合并。

示例:第一次上传包含 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 具有不同的结构,您最终可能会使用数百个不同的代码来解析不同的文件,以便执行您计划执行的任何计算。我宁愿拥有数百个不同的表,也不愿拥有数百个代码,每个代码都从一个表中解析一行数据。
  • 我们的建议,不要做你正在做的事情。请改用外部表。或者我应该说,我的建议。

标签: sql oracle csv


【解决方案1】:

添加带有时间戳的列,并在更新表格后仅保留新数据

【讨论】:

  • 这不是我要找的,我已经更新了我的问题.. 请再读一遍.. 感谢您的回答
猜你喜欢
  • 1970-01-01
  • 2018-10-13
  • 2020-09-02
  • 2015-06-02
  • 1970-01-01
  • 2017-09-17
  • 1970-01-01
  • 2020-02-13
  • 2010-11-14
相关资源
最近更新 更多