我需要申请一个SQL查询到CSV文件(逗号分隔的文本文件)。 我的SQL是从另一个工具已经确定,是没有资格改变。 它可以包含在嵌入的选择和表的别名FROM一部分。
对于我的任务,我已经发现了两个开源 (这是一个项目的要求)提供的JDBC驱动程序库:
- CsvJdbc
- XlSQL
- JBoss的Teiid
- 创建的Apache Derby数据库,加载所有的CSV表和执行查询。
这是我遇到的问题:
- 它不接受的SQL语法(它使用内部选择和表的别名)。 此外,它并没有被自2004年以来保持不变。
- 我无法得到它的工作,因为它是依赖SAX解析器解析等文件时导致异常。 同样,自2004年以来没有变化。
- 如果它支持的语法,但似乎是一个开销还没有检查。 它需要几个实体定义(虚拟数据库,绑定)。 从邮件列表他们告诉我,最后一个版本支持运行时创建所需的对象。 有没有人用它为这种简单的任务(通常它可以连接到多种类型的数据,如CSV,XML或其它DBS,并创建一个虚拟的,统一的一个)?
- 可这甚至可以轻松地完成?
从4件事情,我认为/试过,只有3个和4个在我看来是可行的。 对这些任何意见,或在我可以查询我的CSV文件的任何其他方式?
干杯
如果你的SQL是预定义的,不能改变你的最佳选择是将您的CSV加载到数据库中,并对其运行查询。
Apache Derby是一个可行的选择,所以是MySQL的 ,它甚至有一个CSV存储引擎或PostgreSQL的 。
请问您的SQL中使用任何专有功能/扩展? 如果是这样,可能会限制你的选择。
我将数据加载到HSQL(HypersonicSQL)。 纯Java,正确的SQL,充分证明。 其他几乎任何拥有更大的足迹。
我想说的嵌入式数据库。 我建议要么用于JavaDB(德比建立在Java API)或H2,如果你不关心拉动额外的依赖。
如果你想从一个Java程序中处理的CSV文件的数据库,你应该看看H2数据库引擎。 它具有读取/写入CSV文件,并在内存数据库的工作真的很好的支持。 这是到HSQL继任者,速度更快,具有增值功能。 你可以阅读有关在H2教程中的CSV支持。
也许有点晚了,对不起了点。
我一直在开发的csvjdbc现在一年多了,自几周之后,我已经有了这个项目,所以我已经能够释放我已经产生了最新版本的“管理员”权限。 它所有的“我们”需要(我们:我和我现在的同事)的需要,并且错误被提起我添加的东西。
现在看看它,并再次决定。 (网络文件仍然需要审查,为更好的洞察力,检查测试的情况下,这是非常广泛的)。
有一个Groovy脚本,gcsvsql,可以让你把CSV文件,数据库表,包括联接。 随着gcsvsql你可以做这样的事情:
gcsvsql “从people.csv选择*,其中年龄> 40”
“从people.csv选择people.name,children.child,children.csv其中people.name = children.name” gcsvsql
gcsvsql “选择从people.csv AVG(分数)其中,年龄<40”
你可以找到这个脚本,它是基于H2数据库引擎,在谷歌代码在这里:
http://code.google.com/p/gcsvsql/
我知道,这是一个非常古老的情况下,但...
CsvJdbc是一个很酷的库,但也有使用一些问题DbUtils而映射到ResultsSets的POJO。 第二件坏事是,不到风度有不同的数据类型很好的支持。
与打后CSVJdbc我会用一个愚蠢的CsvParser读取文件的它们泵入一个HSQLDB或类似的东西。