Exécutez SQL sur les fichiers CSV via JDBC
- Je besoin pour faire une requête SQL pour les fichiers CSV (comma-separated les fichiers texte). Mon SQL est prédéfini à partir d'un autre outil, et n'est pas admissible à changer. Il peut contenir intégré sélectionne et des alias de table dans les DE la partie.
Pour ma tâche, j'ai trouvé deux open-source (c'est un projet de l'exigence) les bibliothèques qui fournissent des pilotes JDBC:
- CsvJdbc
- XlSQL
- JBoss Teiid
- Créer un Apache Derby DB, chargez tous ces volumes que des tables et de l'exécution de la requête.
Ce sont ces problèmes que j'ai rencontré:
- il n'accepte pas la syntaxe du SQL (il utilise en interne le sélectionne et des alias de table). En outre, il n'a pas été entretenu depuis 2004.
- Je ne pouvais pas le faire fonctionner, qu'il a en tant que dépendance d'un Analyseur SAX qui provoque une exception lors de l'analyse d'autres documents. De même, aucun changement depuis 2004.
- N'ai pas vérifié si elle prend en charge la syntaxe, mais semble comme une surcharge. Il a besoin de plusieurs entités définit Virtuel (Bases de données, Liaisons). À partir de la liste de diffusion, ils m'ont dit que la dernière version prend en charge runtime création d'objets. Quelqu'un a utilisé pour cette tâche simple (normalement, il peut se connecter à plusieurs types de données, CSV, XML ou autres DBS et créer un virtuel, unifiée)?
- Cela peut même être fait facilement?
À partir de la 4 choses que j'ai considéré/essayé, à seulement 3 et 4 me semble viable. Tous les conseils sur ces, ou de toute autre manière dans laquelle je peux interroger mes fichiers CSV?
Acclamations
source d'informationauteur Markos Fragkakis
Vous devez vous connecter pour publier un commentaire.
Si votre SQL est prédéfinie et ne peut pas être changé votre meilleure option est de charger un fichier CSV dans une base de données et d'exécuter des requêtes.
Apache Derby est une option viable, de sorte que MySQLqui a même un CSV moteur de stockage ou PostgreSQL.
Est-ce que votre utilisation de SQL à tout titre de propriété fonctions /extensions? Si oui, cela peut limiter votre choix.
Je voudrais charger les données dans HSQL (HypersonicSQL). Pure Java, SQL correcte, bien éprouvée. N'importe quoi d'autre a une plus grande empreinte.
Je dirais intégré db. Je vous suggère soit Javadb (Derby construit dans l'API Java) ou H2 si vous ne se soucient pas de tirer la supplémentaires de dépendance.
Si vous êtes désireux de traiter les fichiers csv sous forme de bases de données depuis un programme Java, vous devriez regarder la h2 moteur de base de données. Il a vraiment gentil de soutien pour la lecture/écriture des fichiers CSV et le travail avec les bases de données en mémoire. C'est un successeur de hsql, plus rapide et avec des fonctionnalités supplémentaires. Vous pouvez lire à ce sujet le csv de soutien dans le h2 tutoriel.
peut-être un peu en retard, désolé.
J'ai été le développement de la csvjdbc depuis plus d'un an maintenant, et depuis quelques semaines, j'ai des droits "administrateur" sur ce projet, j'ai donc été en mesure de libérer la version la plus récente que j'avais produit. il ne tous les "nous avons" besoin (nous: moi et mon actuel de mes collègues) ont besoin, et je vais ajouter des choses comme des bugs sont déposées.
un coup d'œil à l'instant et décide de nouveau. (le site web de la documentation doit encore examiner, pour mieux comprendre, vérifier les cas de test, qui sont très importantes).
Il y a un script Groovy, gcsvsql qui vous permet de traiter les fichiers csv sous forme de tables de base de données, y compris des jointures. Avec gcsvsql vous pouvez faire des choses comme:
Vous pouvez trouver ce script, qui est basé sur le h2 moteur de base de données, Google code ici:
http://code.google.com/p/gcsvsql/
Je sais, c'est une très vieille affaire, mais...
CsvJdbc est une bibliothèque intéressante, mais il y a quelques problèmes à l'aide DbUtils tandis que la cartographie ResultsSets de Pojo.
Une deuxième mauvaise chose, c'est que dosn pas un bon support pour les différents Types de données.
Après avoir joué avec CSVJdbcje vais utiliser un stupide CsvParser pour lire les Fichiers d'une pompe dans un HsqlDB ou quelque chose comme ça.