Подтвердить что ты не робот

Выполнение SQL на CSV файлах через JDBC

Мне нужно применить SQL-запрос к файлам CSV (текстовые файлы, разделенные запятыми). Мой SQL предопределен из другого инструмента и не может быть изменен. Он может содержать встроенные элементы выбора и псевдонимы таблицы в части FROM.

Для моей задачи я нашел две библиотеки с открытым исходным кодом (это требование к проекту), которые предоставляют драйверы JDBC:

  • CsvJdbc
  • XlSQL
  • JBoss Teiid
  • Создайте DB Apache Derby, загрузите все CSV в виде таблиц и выполните запрос.

Это проблемы, с которыми я столкнулся:

  • он не принимает синтаксис SQL (он использует внутренние selects и псевдонимы таблицы). Кроме того, он не поддерживается с 2004 года.
  • Я не мог заставить его работать, поскольку он имеет зависимость от SAX Parser, который вызывает исключение при анализе других документов. Аналогично, никаких изменений с 2004 года.
  • Не проверял, поддерживает ли он синтаксис, но выглядит как накладные расходы. Для этого требуется несколько сущностей (Виртуальные базы данных, привязки). Из списка рассылки мне сказали, что последний выпуск поддерживает создание необходимых объектов. Кто-нибудь использовал его для такой простой задачи (обычно он может подключаться к нескольким типам данных, таким как CSV, XML или другие DBS и создавать виртуальные, унифицированные)?
  • Можно ли это сделать легко?

Из 4 вещей, которые я рассматривал/пытался, только 3 и 4 кажутся мне жизнеспособными. Любые советы по этим или любым другим способом, с помощью которых я могу запросить мои CSV файлы?

Приветствия

4b9b3361

Ответ 1

Если ваш SQL предопределен и не может быть изменен, лучшим вариантом является загрузка CSV в базу данных и выполнение запросов против него.

Apache Derby - жизнеспособный вариант, так что MySQL, который даже имеет механизм хранения CSV или PostgreSQL.

Использует ли ваш SQL какие-либо проприетарные функции/расширения? Если это так, это может ограничить ваш выбор.

Ответ 2

Я бы загрузил данные в HSQL (HypersonicSQL). Чистая Java, правильный SQL, хорошо зарекомендовавший себя. Практически все остальное имеет больший след.

Ответ 3

Я бы сказал, встроенный db. Я бы предложил либо Javadb (Derby, встроенный в Java API), либо H2, если вам не нужно тянуть дополнительную зависимость.

Ответ 4

Если вы хотите обрабатывать файлы csv как базы данных из Java-программы, вы должны посмотреть h2 engine database. Он имеет действительно хорошую поддержку для чтения/записи CSV файлов и работы с базами данных в памяти. Это преемник hsql, быстрее и с добавленными функциями. Вы можете прочитать о поддержке csv в учебнике h2.

Ответ 5

возможно, немного поздно, извините за это.

Я уже более года разрабатываю csvjdbc и с тех пор как несколько недель у меня есть права администратора на этом проекте, поэтому я смог опубликовать самую последнюю версию, которую я выпустил. он требует все "мы" (мы: мои и мои нынешние мои коллеги), и я добавляю вещи в качестве ошибок.

взгляните на это сейчас и решите снова. (веб-документация по-прежнему нуждается в пересмотре, для лучшего понимания, проверьте тестовые примеры, которые очень обширны).

Ответ 6

Существует Groovy script, gcsvsql, который позволяет обрабатывать файлы csv в виде таблиц базы данных, включая объединения. С помощью gcsvsql вы можете делать такие вещи, как:

gcsvsql "выберите * from people.csv где возраст > 40"

gcsvsql "выберите people.name, children.child from people.csv, children.csv где people.name = children.name"

gcsvsql "выберите avg (оценка) из people.csv, где age < 40"

Вы можете найти этот script, который основан на движке базы данных h2, в коде Google здесь:

http://code.google.com/p/gcsvsql/

Ответ 7

Я знаю, это очень старый случай, но...

CsvJdbc - классная библиотека, но есть некоторые проблемы, использующие DbUtils при отображении результатов в PoJos. Вторая плохая вещь, которая не имеет хорошей поддержки для разных типов данных.

После проигрывания с CsvJdbc Я буду использовать глупый CsvParser для чтения файлов, которые будут накачивать их в HsqlDB или что-то в этом роде.