【问题标题】:DB-like interface from exisiting flat files来自现有平面文件的类似 DB 的界面
【发布时间】:2017-04-17 04:52:51
【问题描述】:

我正在寻找做某事的最佳方法,但我不确定现有技术可以帮助我。

我有大量数据存储在平面文件中,比如说主要是标准 csv 文件,有或没有标题,包含 ID 和数字。这些文件分布在不同的文件夹中,但以“有组织的方式”(即我知道如何参数化路径,它们不只是随机分布)。

问题是是否有一种方法可以像使用适当的数据库一样使用这些文件。也就是说,我想要一个可以查询和获得回复的界面。让我举个例子:假设我有包含不同字段的日期文件。每个文件都有一个 ID 列表和许多条目,例如值 A、值 B、值 C 等。 例如,我想知道在日期 x 和日期 y 之间的每个 ID 中以 A 开头的值 B 是多少。如果所有数据都聚合在一个经典的 SQL 表中,我会查询类似

SELECT ValueB FROM MY_TABLE WHERE ID LIKE 'A%' AND Date > x AND Date < y;

是否有任何技术可以让您从平面文件开始这样做? 我只需要从他们那里阅读。这些文件由其他进程自动生成,永远不需要编辑。另一方面,会定期添加新数据,因此我想“动态地”执行此操作。此外,如果这项技术是基于 Python 的,那就太好了(但不是必需的),我对它更加熟悉。 在这个例子中,我想这个想法是通过文件路径列表来定义“MY_TABLE”。该表在硬盘驱动器中的任何位置都不作为单个实体存在,但数据实际上是这样表示的。

我们将非常感谢这方面的任何帮助。

谢谢!

【问题讨论】:

  • 理论上sqlite虚拟表可以做到这一点;一个快速的谷歌说可能需要 ASPW 绑定。在实践中,如果你能把这些数据带入真正的 Sqlite 表中,你会得到很好的服务。
  • 感谢您的评论。我的印象是 SQLite 会将整个数据库存储在一个巨大的平面文件中,因此仅推荐用于小型项目。在这里,我们谈论的是几百 Gb,所以理想情况下,我需要一些可以“即时”选择所需文件并只打开这些文件的东西。这有意义吗?
  • 如果您有备用磁盘空间(双倍或更多)来将数据加载到 Sqlite 中,我会尝试将其作为第一遍。如果您使用的是 Windows,那么使用 MSFT ODBC 文本文件数据库驱动程序也是一种选择;如果您有方便的 Postgres(这很容易做到),那么 File FDW (postgresql.org/docs/current/static/file-fdw.html) 是一个选项。在任何情况下,您都必须决定如何将文件映射到表(这里没有魔法,会有工作要做),但是许多不同的环境能够将文本文件映射为数据库文件(或导入它们)。

标签: python sql database flat-file


【解决方案1】:

看看ODBCDrivers,它声明它可以使用 CSV 文件作为数据源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-19
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多