通过 JDBC 在 CSV 文件上执行 SQL

2022-09-04 02:44:32

我需要将SQL查询应用于CSV文件(逗号分隔的文本文件)。我的 SQL 是从其他工具预定义的,不符合更改的条件。它可能在 FROM 部分中包含嵌入的选择和表别名。

对于我的任务,我发现了两个提供JDBC驱动程序的开源(这是项目要求)库:

  1. CsvJdbc
  2. XlSQL
  3. JBoss Teiid
  4. 创建一个 Apache Derby 数据库,将所有 CSV 作为表加载并执行查询。

这些是我遇到的问题:

  1. 它不接受SQL的语法(它使用内部选择和表别名)。此外,自2004年以来一直没有维持。
  2. 我无法让它工作,因为它具有一个SAX解析器,在解析其他文档时会导致异常。同样,自2004年以来没有变化。
  3. 尚未检查它是否支持语法,但似乎有开销。它需要多个实体定义(虚拟数据库、绑定)。从邮件列表中,他们告诉我,上一个版本支持创建所需对象的运行时。有没有人用它来执行如此简单的任务(通常它可以连接到几种类型的数据,如CSV,XML或其他DBS,并创建一个虚拟的,统一的)?
  4. 这甚至可以很容易地完成吗?

从我考虑/尝试过的4件事来看,只有3和4在我看来是可行的。关于这些或查询CSV文件的任何其他方式的任何建议?

干杯


答案 1

我会将数据加载到HSQL(HypersonicSQL)中。纯Java,正确的SQL,经过充分验证。几乎其他任何东西都有更大的足迹。


答案 2

如果您的 SQL 是预定义的,并且无法更改,则最佳选择是将 CSV 加载到数据库中并对其运行查询。

Apache Derby是一个可行的选择,MySQL也是如此,它甚至有一个CSV存储引擎PostgreSQL

您的 SQL 是否使用任何专有函数/扩展?如果是这样,这可能会限制您的选择。